无人机管理后台前端(已迁走)
chenyao
2025-09-28 22e5a6b2be5fc91dfa9db53753f79b2c93440073
feat:搜索内容向左
33 files modified
1270 ■■■■■ changed files
src/option/job/jobinfo.js 7 ●●●● patch | view | raw | blame | history
src/option/job/jobserver.js 8 ●●●●● patch | view | raw | blame | history
src/option/system/dict.js 6 ●●●● patch | view | raw | blame | history
src/option/system/dictbiz.js 8 ●●●● patch | view | raw | blame | history
src/styles/element-ui.scss 16 ●●●●● patch | view | raw | blame | history
src/views/algorithmMange/algorithmMange.vue 18 ●●●●● patch | view | raw | blame | history
src/views/authority/apiscope.vue 8 ●●●● patch | view | raw | blame | history
src/views/authority/datascope.vue 8 ●●●● patch | view | raw | blame | history
src/views/authority/role.vue 6 ●●●● patch | view | raw | blame | history
src/views/dataCenter/components/searchData.vue 35 ●●●● patch | view | raw | blame | history
src/views/device/addDevice.vue 7 ●●●●● patch | view | raw | blame | history
src/views/device/airport.vue 5 ●●●●● patch | view | raw | blame | history
src/views/device/components/firmwareManage.vue 21 ●●●● patch | view | raw | blame | history
src/views/device/devicePerMenu.vue 10 ●●●●● patch | view | raw | blame | history
src/views/monitor/log/api.vue 6 ●●●●● patch | view | raw | blame | history
src/views/monitor/log/error.vue 6 ●●●●● patch | view | raw | blame | history
src/views/monitor/log/flightLog.vue 22 ●●●●● patch | view | raw | blame | history
src/views/odm/task.vue 14 ●●●●● patch | view | raw | blame | history
src/views/resource/attach.vue 8 ●●●● patch | view | raw | blame | history
src/views/resource/media.vue 9 ●●●●● patch | view | raw | blame | history
src/views/resource/oss.vue 20 ●●●●● patch | view | raw | blame | history
src/views/resource/patchManagement.vue 11 ●●●● patch | view | raw | blame | history
src/views/resource/patchTypeManagement.vue 5 ●●●●● patch | view | raw | blame | history
src/views/resource/wayline.vue 10 ●●●●● patch | view | raw | blame | history
src/views/resource/waylineFile.vue 10 ●●●●● patch | view | raw | blame | history
src/views/system/client.vue 6 ●●●● patch | view | raw | blame | history
src/views/system/dept.vue 6 ●●●● patch | view | raw | blame | history
src/views/system/menu.vue 7 ●●●● patch | view | raw | blame | history
src/views/system/param.vue 44 ●●●●● patch | view | raw | blame | history
src/views/system/sysConfig.vue 5 ●●●● patch | view | raw | blame | history
src/views/system/user.vue 6 ●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue 447 ●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue 465 ●●●●● patch | view | raw | blame | history
src/option/job/jobinfo.js
@@ -118,7 +118,9 @@
export default {
  tip: false,
  searchShow: true,
  searchMenuSpan: 6,
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  viewBtn: true,
@@ -144,6 +146,7 @@
        value: 'id',
      },
      search: true,
      searchSpan: 4,
      display: false,
      showOverflowTooltip: true,
      change: (value) => {
@@ -159,6 +162,7 @@
      prop: 'jobId',
      type: 'input',
      search: true,
      searchSpan: 4,
      width: 80,
      display: false,
      showOverflowTooltip: true,
@@ -168,6 +172,7 @@
      prop: 'jobName',
      type: 'input',
      search: true,
      searchSpan: 4,
      width: 200,
      display: false,
      showOverflowTooltip: true,
src/option/job/jobserver.js
@@ -11,9 +11,9 @@
export default {
  tip: false,
  searchShow: true,
  // searchGutter: 10,
  searchMenuPosition: 'right',
  searchMenuSpan: 12,
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  viewBtn: true,
@@ -31,6 +31,7 @@
      prop: 'jobServerName',
      type: 'input',
      span: 24,
      searchSpan: 4,
      search: true,
      rules: [
        {
@@ -58,6 +59,7 @@
      prop: 'jobAppName',
      type: 'input',
      span: 24,
      searchSpan: 4,
      search: true,
      rules: [
        {
src/option/system/dict.js
@@ -1,7 +1,9 @@
export const optionParent = {
  tip: false,
  searchShow: true,
  searchMenuSpan: 10,
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  selection: true,
@@ -18,6 +20,7 @@
      label: '字典编号',
      prop: 'code',
      search: true,
      searchSpan: 4,
      slot: true,
      span: 24,
      rules: [
@@ -32,6 +35,7 @@
      label: '字典名称',
      prop: 'dictValue',
      search: true,
      searchSpan: 4,
      align: 'center',
      rules: [
        {
src/option/system/dictbiz.js
@@ -1,7 +1,9 @@
export const optionParent = {
  tip: false,
  searchShow: true,
  searchMenuSpan: 10,
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  selection: true,
@@ -18,6 +20,7 @@
      label: '字典编号',
      prop: 'code',
      search: true,
      searchSpan: 4,
      slot: true,
      span: 24,
      rules: [
@@ -32,6 +35,7 @@
      label: '字典名称',
      prop: 'dictValue',
      search: true,
      searchSpan: 4,
      align: 'center',
      rules: [
        {
@@ -109,6 +113,7 @@
      addDisabled: true,
      editDisabled: true,
      search: true,
      searchSpan: 4,
      span: 24,
      rules: [
        {
@@ -122,6 +127,7 @@
      label: '字典名称',
      prop: 'dictValue',
      search: true,
      searchSpan: 4,
      align: 'center',
      rules: [
        {
src/styles/element-ui.scss
@@ -177,12 +177,26 @@
.ztzf-form-mange {
  .el-form-item {
    width: 300px;
    :deep(.el-form-item__label) {
    .el-form-item__label {
      width: 120px;
    }
  }
}
.ztzf-form-search {
  .el-form-item {
    width: 100%;
    //border: 1px solid red;
    .el-form-item__label {
      width: 80px;
    }
    .el-form-item__content {
      display: flex;
      flex: 1;
    }
  }
}
.ztzf-table-mange {
  th.el-table__cell  {
    color: rgba(0, 0, 0, .85);
src/views/algorithmMange/algorithmMange.vue
@@ -1,23 +1,25 @@
<template>
  <div class="algorithmMange">
    <div class="ztzf-search-mange">
    <div class="ztzf-form-search">
      <el-form :model="params" inline>
       <div class="search-contain">
        <div>
        <el-row :gutter="24">
          <el-col :span="4">
          <el-form-item label="算法名称:">
            <el-input v-model="params.algName" placeholder="请输入算法名称" clearable />
          </el-form-item>
          </el-col>
          <el-col :span="4">
          <el-form-item label="算法类型:">
            <el-select class="ztzf-select" :teleported="false" v-model="params.algTypeCode" placeholder="请选择算法类型" clearable>
              <el-option v-for="item in sfTypes" :key="item.id" :label="item.dictValue" :value="item.dictKey" ></el-option>
            </el-select>
          </el-form-item>
        </div>
        <div class="btns">
          </el-col>
          <el-col :span="4">
            <el-button type="primary" @click="getList" :icon="Search">搜索</el-button>
            <el-button @click="cancelSearch" :icon="Delete">清空</el-button>
        </div>
       </div>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <div class="mange-table">
@@ -281,7 +283,7 @@
    .mange-table {
      height: 0;
      flex: 1;
      margin-top: 18px;
      //margin-top: 18px;
      overflow: auto;
    }
    :deep(.el-pagination) {
src/views/authority/apiscope.vue
@@ -77,7 +77,9 @@
        tip: false,
        simplePage: true,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        dialogWidth: '60%',
        tree: true,
        border: true,
@@ -99,6 +101,7 @@
            prop: 'name',
            width: 300,
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -154,6 +157,7 @@
            label: '菜单编号',
            prop: 'code',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -286,6 +290,7 @@
            label: '权限名称',
            prop: 'scopeName',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -298,6 +303,7 @@
            label: '权限编号',
            prop: 'resourceCode',
            search: true,
            searchSpan: 4,
            width: 180,
            rules: [
              {
src/views/authority/datascope.vue
@@ -80,7 +80,9 @@
        tip: false,
        simplePage: true,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        dialogWidth: '60%',
        tree: true,
        border: true,
@@ -102,6 +104,7 @@
            prop: 'name',
            width: 300,
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -157,6 +160,7 @@
            label: '菜单编号',
            prop: 'code',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -289,6 +293,7 @@
            label: '权限名称',
            prop: 'scopeName',
            search: true,
            searchSpan: 4,
            value: '',
            rules: [
              {
@@ -302,6 +307,7 @@
            label: '权限编号',
            prop: 'resourceCode',
            search: true,
            searchSpan: 4,
            width: 100,
            rules: [
              {
src/views/authority/role.vue
@@ -94,7 +94,9 @@
        tip: false,
        simplePage: true,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        tree: true,
        border: true,
        index: true,
@@ -111,6 +113,7 @@
            label: '角色名称',
            prop: 'roleName',
            search: true,
            searchSpan: 4,
            span: 24,
            rules: [
              {
@@ -147,6 +150,7 @@
            label: '角色别名',
            prop: 'roleAlias',
            search: true,
            searchSpan: 4,
            span: 24,
            rules: [
              {
src/views/dataCenter/components/searchData.vue
@@ -1,7 +1,8 @@
<template>
  <div class="search-box-test">
    <el-form :model="searchForm" inline>
      <div class="search-first">
      <el-row :gutter="24">
        <el-col :span="4">
        <el-form-item label="行政区划:" >
          <el-tree-select
          :disabled="viewDetailsDisabled"
@@ -15,6 +16,8 @@
            @node-click="handleNodeClick"
          />
        </el-form-item>
        </el-col>
          <el-col :span="4">
        <el-form-item label="所属机巢:">
          <el-select
          :disabled="viewDetailsDisabled"
@@ -32,10 +35,14 @@
            />
          </el-select>
        </el-form-item>
          </el-col>
        <el-col :span="4">
        <el-form-item label="任务名称:">
          <el-input  :disabled="viewDetailsDisabled" v-model="searchForm.jobName" placeholder="请输入" clearable />
        </el-form-item>
        <el-form-item>
        </el-col>
        <el-col :span="8">
        <el-form-item label="选择日期:">
          <el-date-picker
           :disabled="viewDetailsDisabled"
            popper-class="custom-date-picker"
@@ -60,6 +67,8 @@
            }"
          />
        </el-form-item>
        </el-col>
        <el-col :span="4">
        <el-form-item label="文件格式:">
          <el-select
          :disabled="foldersDisabled || viewDetailsDisabled"
@@ -78,6 +87,8 @@
            />
          </el-select>
        </el-form-item>
        </el-col>
        <el-col :span="4">
        <el-form-item label="文件类别:">
          <el-select
@@ -97,16 +108,17 @@
            />
          </el-select>
        </el-form-item>
      </div>
      <div class="search-first">
        </el-col>
        <el-col :span="4">
        <el-form-item label="文件名称:">
          <el-input :disabled="foldersDisabled || viewDetailsDisabled" v-model="searchForm.name" placeholder="请输入" clearable />
        </el-form-item>
        <div class="search-btn">
        </el-col>
        <el-col :span="4">
          <el-button  type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
          <el-button  icon="el-icon-refresh" @click="handleReset">清空</el-button>
        </div>
      </div>
        </el-col>
      </el-row>
      <div class="search-first">
        <div class="search-btn">
<!--          <el-button type="primary" icon="el-icon-download" @click="allDownloadFun"-->
@@ -467,12 +479,17 @@
    }
    .el-form-item {
      margin-bottom: 0;
      width: 233px;
      //margin-bottom: 0;
      width: 100%;
      .el-form-item__label {
        color: #363636;
        line-height: 32px;
        width: 80px;
      }
      .el-form-item__content {
        display: flex;
        flex: 1;
      }
    }
  }
src/views/device/addDevice.vue
@@ -72,10 +72,10 @@
                dialogWidth: 1050,
                searchGutter: 30,
                searchMenuPosition: 'left',
                searchMenuSpan: 4,
                tip: false,
                searchShow: true,
                searchMenuPosition: 'right',
                searchMenuSpan: 10,
                border: true,
                index: true,
                indexLabel: '序号',
@@ -98,8 +98,7 @@
                        editDisplay: false,
                        labelWidth: 130,
                        search: true,
                        // searchSpan: 4,
                        labelWidth: 130,
                        searchSpan: 4,
                        rules: [
                            {
                                required: true,
src/views/device/airport.vue
@@ -311,8 +311,9 @@
        tip: false,
        searchShow: true,
        // searchMenuSpan: 16,
        searchMenuPosition: 'right',
        searchMenuSpan: 8,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        indexLabel: '序号',
src/views/device/components/firmwareManage.vue
@@ -28,7 +28,7 @@
    <el-dialog title="固件上传" class="ztzf-dialog-mange" append-to-body v-model="firmwareUploadBox" width="40%" height="60%">
      <el-form
        ref="form"
        class="ztzf-form-mange"
        class="ztzf-form-search"
        :model="importForm"
        v-loading="loadingForm"
        style="width: 80%; margin-left: 10%"
@@ -39,7 +39,7 @@
        </el-form-item>
        <!-- 上传 -->
        <el-form-item label="固件文件" label-width="80px" prop="file">
        <el-form-item label="固件文件" prop="file">
          <el-upload
            class="upload-demo"
            action="#"
@@ -59,14 +59,14 @@
            <el-option label="否" value="0"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="说明" label-width="80px" prop="release_note">
        <el-form-item label="说明" prop="release_note">
          <el-input type="textarea" v-model="importForm.release_note" clearable></el-input>
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
        <el-button type="primary" @click="onConfirm">确定</el-button>
        <el-button @click="onCancel">取消</el-button>
        <el-button type="primary" @click="onConfirm" icon="el-icon-circle-check">确定</el-button>
        <el-button @click="onCancel" icon="el-icon-circle-close">取消</el-button>
        </div>
      </template>
    </el-dialog>
@@ -106,7 +106,9 @@
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -122,7 +124,6 @@
          {
            label: '设备名称',
            prop: 'device_name',
            editDisabled: true,
            // search: true,
            // searchSpan: 5,
            labelWidth: 130,
@@ -137,12 +138,12 @@
            ],
          },
          {
            label: '固件文件名称',
            label: '文件名称',
            prop: 'file_name',
            labelWidth: 130,
            search: true,
            searchSpan: 8,
            searchLabelWidth: 120,
            searchSpan: 4,
            // searchLabelWidth: 120,
            editDisabled: true,
            rules: [
              {
src/views/device/devicePerMenu.vue
@@ -28,7 +28,9 @@
        dialogWidth: 750,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -43,10 +45,10 @@
        column: [
          {
            label: '名称',
            label: '菜单名称',
            prop: 'name',
            search: true,
            searchSpan: 5,
            searchSpan: 4,
            span: 24,
            row: true,
            rules: [
@@ -61,7 +63,7 @@
            label: '绑定菜单',
            prop: 'menu_name',
            search: true,
            searchSpan: 5,
            searchSpan: 4,
            span: 24,
            row: true,
            display: false,
src/views/monitor/log/api.vue
@@ -29,7 +29,9 @@
        // calcHeight: 32,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -114,7 +116,7 @@
            type: 'daterange',
            search: true,
            searchRange: true,
            searchSpan: 6,
            searchSpan: 8,
            format: 'YYYY-MM-DD',
            valueFormat: 'YYYY-MM-DD',
            startPlaceholder: '开始时间',
src/views/monitor/log/error.vue
@@ -27,7 +27,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -72,7 +74,7 @@
            label: '请求接口',
            prop: 'requestUri',
            search: true,
            searchSpan: 6,
            searchSpan: 4,
          },
          {
            label: '操作人',
src/views/monitor/log/flightLog.vue
@@ -1,17 +1,21 @@
<!-- 飞行日志 -->
<template>
  <div class="flight">
    <div class="ztzf-search-mange">
    <div class="ztzf-form-search">
      <el-form :model="params" inline>
        <div class="search-contain">
          <!--          <div>-->
        <el-row :gutter="24">
          <el-col :span="4">
          <el-form-item label="任务名称:">
            <el-input v-model="params.jobName" placeholder="请输入任务名称" clearable />
          </el-form-item>
          </el-col>
          <el-col :span="4">
          <el-form-item label="任务编号:">
            <el-input v-model="params.jobInfoNum" placeholder="请输入任务编号" clearable />
          </el-form-item>
          <el-form-item label="日期:">
          </el-col>
          <el-col :span="8">
          <el-form-item label="选择日期:">
            <el-date-picker
              v-model="rangTime"
              type="daterange"
@@ -22,12 +26,12 @@
              @change="changeselect"
            />
          </el-form-item>
          <!--          </div>-->
          <!--          <div class="btns">-->
          </el-col>
          <el-col :span="4">
          <el-button type="primary" @click="getList" :icon="Search">搜索</el-button>
          <el-button @click="cancelSearch" :icon="Delete">清空</el-button>
          <!--          </div>-->
        </div>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <div class="mange-table">
@@ -450,7 +454,7 @@
  .mange-table {
    height: 0;
    flex: 1;
    margin-top: 18px;
    //margin-top: 18px;
    overflow: auto;
  }
  :deep(.el-pagination) {
src/views/odm/task.vue
@@ -80,7 +80,9 @@
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -102,7 +104,7 @@
            search: true,
            labelWidth: 130,
            searchSpan: 4,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            //labelWidth: 130,
            searchPlaceholder: '任务名称',
            rules: [
@@ -154,7 +156,7 @@
            type: 'select',
            search: true,
            searchSpan: 4,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            //width: 100,
            labelWidth: 130,
            searchPlaceholder: '任务类型',
@@ -176,7 +178,7 @@
            label: '机场名称',
            prop: 'airportName',
            searchSpan: 4,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            labelWidth: 130,
            //search: true,
          },
@@ -204,7 +206,7 @@
            type: 'select',
            search: true,
            searchSpan: 4,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            searchPlaceholder: '任务状态',
            labelWidth: 130,
            width: 90,
@@ -242,7 +244,7 @@
            labelWidth: 130,
            search: true,
            searchSpan: 4,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            //valueFormat: 'YYYY-MM-DD',
            width: 160,
            change: value => {
src/views/resource/attach.vue
@@ -47,13 +47,17 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
        // grid: true,
        selection: true,
        dialogClickModal: false,
        addBtn: false,
        height: 'auto',
        calcHeight: 20,
@@ -142,7 +146,7 @@
            type: 'daterange',
            search: true,
            searchRange: true,
            searchSpan: 6,
            searchSpan: 8,
            format: 'YYYY-MM-DD',
            valueFormat: 'YYYY-MM-DD',
            startPlaceholder: '开始时间',
src/views/resource/media.vue
@@ -59,21 +59,24 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
        selection: true,
        dialogClickModal: false,
        delBtn: false,
        addBtn: false,
        height: 'auto',
        calcHeight: 20,
        column: [
          { label: '机场选择', prop: 'airportNickname', type: 'select', search: true, searchSpan: 5, dicData: [], props: { label: 'nickname', value: 'nickname' }, hide: true, change: (value) => {
          { label: '机场选择', prop: 'airportNickname', type: 'select', search: true, searchSpan: 4, dicData: [], props: { label: 'nickname', value: 'nickname' }, hide: true, change: (value) => {
               this.searchChange({ ...this.query,airportNickname:value.value}, () => {});
          } },
          { label: '创建日期', prop: 'daterange', type: 'daterange', search: true, searchRange: true, searchSpan: 6, format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', startPlaceholder: '开始时间', endPlaceholder: '结束时间', viewDisplay: false, hide: true, searchValue: [defaultStartDate, defaultEndDate]
          { label: '创建日期', prop: 'daterange', type: 'daterange', search: true, searchRange: true, searchSpan: 8, format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', startPlaceholder: '开始时间', endPlaceholder: '结束时间', viewDisplay: false, hide: true, searchValue: [defaultStartDate, defaultEndDate]
           , change: (value) => {
               this.searchChange({ ...this.query,daterange:value.value}, () => {});
          }
src/views/resource/oss.vue
@@ -53,7 +53,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -68,13 +70,13 @@
        calcHeight: 20,
        column: [
          {
            label: '分类',
            label: '存储分类',
            type: 'radio',
            value: 1,
            span: 24,
            width: 120,
            searchLabelWidth: 50,
            searchSpan: 3,
            // searchLabelWidth: 50,
            searchSpan: 4,
            row: true,
            dicUrl: '/blade-system/dict/dictionary?code=oss',
            props: {
@@ -97,11 +99,11 @@
            }
          },
          {
            label: '名称',
            label: '存储名称',
            prop: 'name',
            span: 24,
            search: true,
            searchSpan: 5,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -115,7 +117,7 @@
            prop: 'ossCode',
            span: 24,
            width: 120,
            searchLabelWidth: 100,
            // searchLabelWidth: 100,
            search: true,
            searchSpan: 4,
            rules: [
@@ -163,8 +165,8 @@
            prop: 'accessKey',
            span: 24,
            search: true,
            searchSpan: 5,
            searchLabelWidth: 100,
            searchSpan: 4,
            // searchLabelWidth: 100,
            overHidden: true,
            rules: [
              {
src/views/resource/patchManagement.vue
@@ -156,8 +156,9 @@
  addBtn: false,
  tip: false,
  searchShow: true,
  searchMenuSpan: 8,
  searchMenuPosition: 'right',
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  indexLabel: '序号',
@@ -192,7 +193,7 @@
      label: '图斑类型',
      prop: 'patches_type_desc',
      span: 24,
      searchLabelWidth: 100,
      // searchLabelWidth: 100,
      search: true,
      searchSpan: 4,
      type: 'select',
@@ -220,7 +221,7 @@
      prop: 'areaName',
      span: 24,
      width: 180,
      searchLabelWidth: 100,
      // searchLabelWidth: 100,
      search: true,
      searchSpan: 4,
      type: 'tree',
@@ -248,7 +249,7 @@
      label: '创建人',
      prop: 'user_name',
      span: 24,
      searchLabelWidth: 100,
      // searchLabelWidth: 100,
      search: true,
      searchSpan: 4,
      type: 'select',
src/views/resource/patchTypeManagement.vue
@@ -78,8 +78,9 @@
  addBtnText: '新增类型',
  tip: false,
  searchShow: true,
  searchMenuSpan: 16,
  searchMenuPosition: 'right',
  searchGutter: 30,
  searchMenuPosition: 'left',
  searchMenuSpan: 4,
  border: true,
  index: true,
  indexLabel: '序号',
src/views/resource/wayline.vue
@@ -42,7 +42,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        selection: true,
@@ -57,7 +59,7 @@
            prop: 'dock_name',
            type: 'select',
            search: true,
            searchSpan: 5,
            searchSpan: 4,
            dicData: [],
            props: {
              label: 'nickname',
@@ -72,7 +74,7 @@
            label: '任务名称',
            prop: 'job_name',
            search: true,
            searchSpan: 6,
            searchSpan: 4,
          },
          {
            label: '时间范围',
@@ -80,7 +82,7 @@
            type: 'daterange',
            search: true,
            searchRange: true,
            searchSpan: 6,
            searchSpan: 8,
            format: 'YYYY-MM-DD', // 显示格式
            valueFormat: 'YYYY-MM-DD', // 值格式
            startPlaceholder: '开始时间',
src/views/resource/waylineFile.vue
@@ -25,7 +25,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        menu: false,
@@ -39,7 +41,7 @@
            prop: 'dock_name',
            type: 'select',
            search: true,
            searchSpan: 5,
            searchSpan: 4,
            dicData: [],
            props: { label: 'nickname', value: 'nickname' },
            hide: true,
@@ -51,7 +53,7 @@
            label: '航线名称',
            prop: 'name',
            search: true,
            searchSpan: 6,
            searchSpan: 4,
          },
          {
            label: '时间范围',
@@ -59,7 +61,7 @@
            type: 'daterange',
            search: true,
            searchRange: true,
            searchSpan: 6,
            searchSpan: 8,
            format: 'YYYY-MM-DD',
            valueFormat: 'YYYY-MM-DD',
            startPlaceholder: '开始时间',
src/views/system/client.vue
@@ -32,7 +32,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        viewBtn: true,
@@ -48,6 +50,7 @@
            label: '应用id',
            prop: 'clientId',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -60,6 +63,7 @@
            label: '应用密钥',
            prop: 'clientSecret',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
src/views/system/dept.vue
@@ -59,7 +59,9 @@
        tip: false,
        simplePage: true,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        tree: true,
        border: true,
        index: true,
@@ -76,6 +78,7 @@
            label: '部门名称',
            prop: 'deptName',
            search: true,
            searchSpan: 4,
            labelWidth: 120,
            rules: [
              {
@@ -89,6 +92,7 @@
            label: '部门全称',
            prop: 'fullName',
            search: true,
            searchSpan: 4,
            labelWidth: 120,
            rules: [
              {
src/views/system/menu.vue
@@ -52,7 +52,9 @@
        tip: false,
        simplePage: true,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        dialogWidth: '60%',
        tree: true,
        border: true,
@@ -71,6 +73,7 @@
            prop: 'name',
            width: 300,
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -127,6 +130,7 @@
            label: '菜单编号',
            prop: 'code',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
@@ -139,6 +143,7 @@
            label: '菜单别名',
            prop: 'alias',
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
src/views/system/param.vue
@@ -1,21 +1,33 @@
<template>
  <basic-container>
    <div class="avue-crud">
      <el-row :hidden="!search" class="rowStyle" >
      <el-row :hidden="!search">
        <!-- 查询模块 -->
        <el-form :inline="true" :model="query">
          <el-form-item label="参数名:">
            <el-input v-model="query.paramName" placeholder="请输入参数名"></el-input>
          </el-form-item>
          <el-form-item label="参数键:">
            <el-input v-model="query.paramKey" placeholder="请输入参数键"></el-input>
          </el-form-item>
          <!-- 查询按钮 -->
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" @click="searchChange">搜 索</el-button>
            <el-button icon="el-icon-delete" @click="searchReset()">清 空</el-button>
          </el-form-item>
        </el-form>
        <div class="ztzf-form-search">
          <el-form inline :model="query">
            <el-row :gutter="24">
              <el-col :span="8">
                <el-form-item label="参数名:">
                  <el-input v-model="query.paramName" placeholder="请输入参数名"></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="参数键:">
                  <el-input v-model="query.paramKey" placeholder="请输入参数键"></el-input>
                </el-form-item>
              </el-col>
              <!-- 查询按钮 -->
              <el-col :span="8">
                <el-form-item>
                  <el-button type="primary" icon="el-icon-search" @click="searchChange"
                    >搜 索</el-button
                  >
                  <el-button icon="el-icon-delete" @click="searchReset()">清 空</el-button>
                </el-form-item>
              </el-col>
            </el-row>
          </el-form>
        </div>
      </el-row>
      <el-row>
        <div class="avue-crud__header">
@@ -373,8 +385,6 @@
<style scoped lang="scss">
.rowStyle {
padding: 6px 18px
  padding: 6px 18px;
}
</style>
src/views/system/sysConfig.vue
@@ -40,7 +40,9 @@
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        // 禁用默认按钮
@@ -63,6 +65,7 @@
            span: 24,
            row: true,
            search: true,
            searchSpan: 4,
            rules: [
              {
                required: true,
src/views/system/user.vue
@@ -227,7 +227,9 @@
      option: {
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        searchGutter: 30,
        searchMenuPosition: 'left',
        searchMenuSpan: 4,
        border: true,
        index: true,
        selection: true,
@@ -243,6 +245,7 @@
            label: '登录账号',
            prop: 'account',
            search: true,
            searchSpan: 5,
            display: false,
          },
          // {
@@ -255,6 +258,7 @@
            label: '用户姓名',
            prop: 'realName',
            search: true,
            searchSpan: 5,
            display: false,
          },
          {
src/views/tickets/orderLog.vue
@@ -9,140 +9,150 @@
      >
        <basic-main-content>
          <!-- 查询条件筛选栏 -->
          <div class="filter-bar">
            <div class="search-bar-box">
              <div class="search-bar-box-item">
                <el-input
                  v-model="filters.key_word"
                  placeholder="输入工单编号/名称/内容/姓名"
                  clearable
                  @keyup.enter="handleSearch"
                />
              </div>
          <div class="ztzf-form-search">
            <el-form :model="filters" inline>
              <el-row :gutter="24">
                <el-col :span="4">
                  <el-form-item label="关键字:">
                    <el-input
                      v-model="filters.key_word"
                      placeholder="编号/名称/内容/姓名"
                      clearable
                      @keyup.enter="handleSearch"
                    />
                  </el-form-item>
              <!--              <div class="search-bar-box-item">-->
              <!--                <el-select placeholder="请选择所属单位" v-model="filters.create_dept" clearable>-->
              <!--                  <el-option v-for="dept in departments" :key="dept.value" :label="dept.label" :value="dept.value" />-->
              <!--                </el-select>-->
              <!--              </div>-->
                  <!--              <div class="search-bar-box-item">-->
                  <!--                <el-select placeholder="请选择所属单位" v-model="filters.create_dept" clearable>-->
                  <!--                  <el-option v-for="dept in departments" :key="dept.value" :label="dept.label" :value="dept.value" />-->
                  <!--                </el-select>-->
                  <!--              </div>-->
              <div class="search-bar-box-item">
                <el-date-picker
                  @change="handleSearch"
                  v-model="filters.dateRange"
                  type="daterange"
                  range-separator="至"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  :default-value="datePickerDefaultVal"
                />
              </div>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="选择日期:">
                    <el-date-picker
                      @change="handleSearch"
                      v-model="filters.dateRange"
                      type="daterange"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期"
                      :default-value="datePickerDefaultVal"
                    />
                  </el-form-item>
                </el-col>
                <el-col :span="4">
                  <el-form-item label="关联航线:">
                    <el-select
                      @change="handleSearch"
                      v-model="filters.file_id"
                      placeholder="请选择关联航线"
                      filterable
                      clearable
                    >
                      <el-option
                        v-for="item in wayLineList"
                        :key="item.wayline_id"
                        :label="item.name"
                        :value="item.wayline_id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="4">
                  <el-form-item label="关联算法:">
                    <el-select
                      @change="handleSearch"
                      v-model="filters.ai_types"
                      placeholder="关联算法"
                      clearable
                    >
                      <el-option
                        v-for="item in ai_types"
                        :key="item.dictKey"
                        :label="item.dictValue"
                        :value="item.dictKey"
                      />
                    </el-select>
                  </el-form-item>
              <div class="search-bar-box-item">
                <el-select
                  @change="handleSearch"
                  v-model="filters.file_id"
                  placeholder="请选择关联航线"
                  filterable
                  clearable
                >
                  <el-option
                    v-for="item in wayLineList"
                    :key="item.wayline_id"
                    :label="item.name"
                    :value="item.wayline_id"
                  />
                </el-select>
              </div>
                  <!-- <div class="search-bar-box-item">
                    <el-select v-model="filters.type" placeholder="请选择工单类型" clearable>
                      <el-option v-for="item in types" :key="item.dictValue" :label="item.dictValue"
                        :value="item.dictKey" />
                    </el-select>
                  </div> -->
              <div class="search-bar-box-item">
                <el-select
                  @change="handleSearch"
                  v-model="filters.ai_types"
                  placeholder="关联算法"
                  clearable
                >
                  <el-option
                    v-for="item in ai_types"
                    :key="item.dictKey"
                    :label="item.dictValue"
                    :value="item.dictKey"
                  />
                </el-select>
              </div>
              <!-- <div class="search-bar-box-item">
                <el-select v-model="filters.type" placeholder="请选择工单类型" clearable>
                  <el-option v-for="item in types" :key="item.dictValue" :label="item.dictValue"
                    :value="item.dictKey" />
                </el-select>
              </div> -->
              <div class="search-bar-box-item">
                <el-select
                  @change="handleSearch"
                  v-model="filters.status"
                  placeholder="请选择工单状态"
                  clearable
                  :disabled="activeTab !== 'all'"
                >
                  <el-option
                    v-for="item in statuses"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  />
                </el-select>
              </div>
            </div>
            <div class="search-bar-box">
              <div class="search-bar-box-item flex-2">
                <el-date-picker
                  @change="handleSearch"
                  v-model="filters.cycleDateRange"
                  type="daterange"
                  range-separator="至"
                  start-placeholder="工单周期开始日期"
                  end-placeholder="工单周期结束日期"
                  :default-value="datePickerDefaultVal"
                />
              </div>
              <div class="search-bar-box-item">
                <el-select
                  @change="handleSearch"
                  v-model="filters.rep_fre_type"
                  placeholder="请选择频次"
                  clearable
                >
                  <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
                </el-select>
              </div>
              <div class="search-bar-box-item">
                <el-time-picker
                  @change="handleSearch"
                  v-model="filters.deal_time"
                  placeholder="请选择执行时间"
                  prop="deal_time"
                  value-format="HH:mm"
                  :picker-options="{
                </el-col>
                <el-col :span="4">
                  <el-form-item label="工单状态:">
                    <el-select
                      @change="handleSearch"
                      v-model="filters.status"
                      placeholder="请选择工单状态"
                      clearable
                      :disabled="activeTab !== 'all'"
                    >
                      <el-option
                        v-for="item in statuses"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                </el-row>
                <el-row :gutter="24">
                  <el-col :span="8">
                    <el-form-item label="工单周期:">
                      <el-date-picker
                        @change="handleSearch"
                        v-model="filters.cycleDateRange"
                        type="daterange"
                        range-separator="至"
                        start-placeholder="工单周期开始日期"
                        end-placeholder="工单周期结束日期"
                        :default-value="datePickerDefaultVal"
                      />
                    </el-form-item>
                  </el-col>
                  <el-col :span="4">
                    <el-form-item label="选择频次:">
                      <el-select
                        @change="handleSearch"
                        v-model="filters.rep_fre_type"
                        placeholder="请选择频次"
                        clearable
                      >
                        <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
                      </el-select>
                    </el-form-item>
                  </el-col>
                  <el-col :span="4">
                    <el-form-item label="执行时间:">
                      <el-time-picker
                        @change="handleSearch"
                        v-model="filters.deal_time"
                        placeholder="请选择执行时间"
                        prop="deal_time"
                        value-format="HH:mm"
                        :picker-options="{
                    selectableRange: '00:00 - 23:59',
                  }"
                />
              </div>
              <div class="search-bar-box-item"></div>
              <div class="search-bar-box-item"></div>
              <div class="search-bar-box-item search-btn">
                <el-button type="primary" icon="el-icon-search" @click="handleSearch"
                >搜索</el-button
                >
                <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
              </div>
            </div>
                      />
                    </el-form-item>
                  </el-col>
                  <el-col :span="4">
                    <el-button type="primary" icon="el-icon-search" @click="handleSearch"
                    >搜索
                    </el-button
                    >
                    <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
                  </el-col>
                </el-row>
            </el-form>
          </div>
          <!-- 表格部分 -->
@@ -178,10 +188,12 @@
                type="primary"
                icon="el-icon-plus"
                @click="handleAdd"
              >新建工单</el-button
              >新建工单
              </el-button
              >
              <el-button type="success" plain icon="el-icon-download" @click="exportData"
              >导出</el-button
              >导出
              </el-button
              >
            </template>
@@ -193,7 +205,8 @@
                    type="text"
                    icon="el-icon-view"
                    @click="handleCheckDetail(row)"
                  >审核</el-button
                  >审核
                  </el-button
                  >
                </template>
                <!-- v-if="
@@ -207,42 +220,50 @@
                    icon="el-icon-warning"
                    v-if="hasRecallPaddingBtnPermission()"
                    @click="orderLogRecall(row.id)"
                  >撤回</el-button
                  >撤回
                  </el-button
                  >
                  <!-- <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情</el-button> -->
                </template>
                <!--已驳回-->
                <template v-if="row.status == 2">
                  <el-button type="text" icon="el-icon-warning" @click="rejectDetail(row.id)"
                  >驳回原因</el-button
                  >驳回原因
                  </el-button
                  >
                  <el-button
                    v-if="userInfo.user_id == row.create_user"
                    type="text"
                    icon="el-icon-view"
                    @click="handleViewDetail(row)"
                  >编辑</el-button
                  >编辑
                  </el-button
                  >
                  <el-button v-else type="text" icon="el-icon-view" @click="handleViewDetail(row)"
                  >详情</el-button
                  >详情
                  </el-button
                  >
                </template>
                <!-- 已通过 -->
                <template v-if="row.status == 3">
                  <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)"
                  >详情</el-button
                  >详情
                  </el-button
                  >
                </template>
                <!--草稿-->
                <template v-if="row.status == 0">
                  <el-button type="text" icon="el-icon-edit" @click="handleViewDetail(row)"
                  >编辑</el-button
                  >编辑
                  </el-button
                  >
                  <el-button type="text" icon="el-icon-position" @click="userPublishPush(row.id)"
                  >发布</el-button
                  >发布
                  </el-button
                  >
                  <el-button type="text" icon="el-icon-delete" @click="deleteOrderLog(row.id)"
                  >删除</el-button
                  >删除
                  </el-button
                  >
                </template>
              </div>
@@ -599,14 +620,16 @@
            v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
            @click="submitForm(1)"
            icon="el-icon-position"
          >发布</el-button
          >发布
          </el-button
          >
          <el-button
            type="primary"
            v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
            @click="submitForm(0)"
            icon="el-icon-plus"
          >保存</el-button
          >保存
          </el-button
          >
          <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                          @click="submitForm(0)">保存</el-button> -->
@@ -615,13 +638,15 @@
            type="primary"
            v-if="form.status == 1 && hasPaddingBtnPermission()"
            @click="orderLogPass(form.id)"
          >通过</el-button
          >通过
          </el-button
          >
          <el-button
            type="danger"
            v-if="form.status == 1 && hasRejectionBtnPermission()"
            @click="orderLogReject(form.id)"
          >驳回</el-button
          >驳回
          </el-button
          >
        </div>
      </template>
@@ -806,7 +831,8 @@
            v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
            @click="submitForm(1)"
            icon="el-icon-position"
          >发布</el-button
          >发布
          </el-button
          >
          <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                          @click="submitForm(0)">保存</el-button> -->
@@ -816,14 +842,16 @@
            v-if="form.status == 1 && hasPaddingBtnPermission()"
            @click="orderLogPass(form.id)"
            icon="el-icon-check"
          >通过</el-button
          >通过
          </el-button
          >
          <el-button
            type="danger"
            v-if="form.status == 1 && hasRejectionBtnPermission()"
            @click="orderLogReject(form.id)"
            icon="el-icon-close"
          >驳回</el-button
          >驳回
          </el-button
          >
          <el-button @click="detailVisibleCopy = false" icon="el-icon-circle-close">取消</el-button>
        </div>
@@ -844,7 +872,7 @@
  orderLogExport,
  jobStatusNum,
  userPublish,
  deleteOrderLog,
  deleteOrderLog
} from '@/api/tickets/orderLog';
import { getTicketInfo } from '@/api/tickets/ticket';
import { getDictionaryByCode } from '@/api/system/dictbiz';
@@ -862,7 +890,7 @@
import elTooltipCopy from '@/components/ElTooltipCopy.vue';
import { CircleClose, Promotion, Select } from '@element-plus/icons-vue';
import { useStore } from 'vuex';
import _ from 'lodash'
import _ from 'lodash';
// const store = useStore()
dayjs.extend(weekday);
dayjs.locale('zh-cn');
@@ -881,7 +909,7 @@
        { 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 },
        { label: '草稿', name: 'DRAFT', value: 0, count: 0 }
      ],
      filters: {
        key_word: '',
@@ -891,7 +919,7 @@
        file_id: '',
        ai_types: [],
        status: '',
        dateRange: [],
        dateRange: []
      },
      departments: [],
      types: [],
@@ -905,7 +933,7 @@
        { label: '草稿', value: '0' },
        { label: '待审核', value: '1' },
        { label: '已驳回', value: '2' },
        { label: '已通过', value: '3' },
        { label: '已通过', value: '3' }
      ],
      //周期
      cycles: ['每天', '周一', '周二', '周三', '周四', '周五', '周六', '周末', '周天', '工作日'],
@@ -942,7 +970,7 @@
          {
            label: '工单编号',
            prop: 'job_info_num',
            width: 150,
            width: 150
          },
          {
            label: '工单名称',
@@ -950,47 +978,47 @@
            width: 100,
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '工单状态',
            prop: 'status',
            width: 88,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '所属单位',
            prop: 'dept_name',
            ellipsis: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '创建时间',
            prop: 'create_time',
            width: 144,
            ellipsis: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '已执行次数',
            prop: 'job_num',
            width: 70,
            ellipsis: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '工单内容',
            prop: 'content',
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '关联航线',
            prop: 'wayline_name',
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '关联算法',
@@ -998,7 +1026,7 @@
            width: 100,
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
            label: '关联机巢',
@@ -1006,7 +1034,7 @@
            width: 100,
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          {
@@ -1015,7 +1043,7 @@
            width: 96,
            ellipsis: true,
            overHidden: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
          },
          // {
          //   label: '关联机巢', prop: 'device_names', width: 112, ellipsis: true, overHidden: true,
@@ -1028,16 +1056,16 @@
            formatter: row => this.formatCycleTime(row),
            html: true,
            ellipsis: true,
            showOverflowTooltip: true,
            showOverflowTooltip: true
            // overHidden: true
          },
        ],
          }
        ]
      },
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0,
        total: 0
      },
      dialogVisible: false,
      detailVisible: false,
@@ -1046,24 +1074,24 @@
      rules: {
        name: [
          { required: true, message: '请输入工单名称', trigger: 'blur' },
          { max: 100, message: '工单名称不能超过100个字', trigger: 'blur' },
          { max: 100, message: '工单名称不能超过100个字', trigger: 'blur' }
        ],
        file_id: [{ required: true, message: '需要选择航线', trigger: 'change' }],
        device_sns: [{ required: true, message: '请选择机巢', trigger: 'change' }],
        content: [
          { required: true, message: '请输入工单内容', trigger: 'blur' },
          { max: 255, message: '工单内容不能超过255个字', trigger: 'blur' },
          { max: 255, message: '工单内容不能超过255个字', trigger: 'blur' }
        ],
        date_range: [{ required: true, message: '请选择时间不能为空', trigger: 'blur' }],
        rep_fre_type: [{ required: true, message: '请选择周期', trigger: 'blur' }],
        deal_time: [{ required: true, message: '请选择执行时间', trigger: 'blur' }],
        deal_time: [{ required: true, message: '请选择执行时间', trigger: 'blur' }]
      },
      loading: false,
      globalCounts: {},
      mapLoaded: false,
      // 配置时间选择器默认配置
      datePickerDefaultVal: calculateDefaultRange(),
      datePickerDefaultVal: calculateDefaultRange()
    };
  },
  async created() {
@@ -1077,7 +1105,7 @@
    const { dept_data, event_type, ai_type } = response2.data.data;
    this.departments = dept_data.map(item => ({
      label: item.dept_name,
      value: item.id,
      value: item.id
    }));
  },
  mounted() {
@@ -1096,7 +1124,7 @@
  },
  computed: {
    CircleClose() {
      return CircleClose
      return CircleClose;
    },
    ...mapGetters(['userInfo', 'permission']),
    lastHeight() {
@@ -1119,7 +1147,7 @@
          return { ...tab, isShow: true };
        })
        .filter(tab => tab.isShow);
    },
    }
  },
  methods: {
@@ -1251,7 +1279,7 @@
        rep_fre_type: this.filters.rep_fre_type || undefined,
        deal_time: this.filters.deal_time || undefined,
        current: this.page.currentPage,
        size: this.page.pageSize,
        size: this.page.pageSize
      };
      return params;
    },
@@ -1280,8 +1308,8 @@
          const maxItem = this.device_sns.reduce((max, item) => {
            return item.drone_height > max.drone_height ? item : max;
          });
          console.log(maxItem, '高度')
          let result = _.round((maxItem.drone_height + this.form.rth_altitude), 2)
          console.log(maxItem, '高度');
          let result = _.round((maxItem.drone_height + this.form.rth_altitude), 2);
          if (this.lastHeight > result) {
            this.$confirm(`安全返航真高${result}米低于航线返航点高度${this.lastHeight}米,为确保返航路径安全,建议您进行调整后再发布`, '提示', {
@@ -1292,7 +1320,7 @@
              const submitData = {
                ...this.form,
                status: status,
                ai_types: this.form.ai_types?.length ? this.form.ai_types : [],
                ai_types: this.form.ai_types?.length ? this.form.ai_types : []
              };
              await saveUpdateOrderLog(submitData);
              let id = this.form.id;
@@ -1311,7 +1339,7 @@
            const submitData = {
              ...this.form,
              status: status,
              ai_types: this.form.ai_types?.length ? this.form.ai_types : [],
              ai_types: this.form.ai_types?.length ? this.form.ai_types : []
            };
            await saveUpdateOrderLog(submitData);
            let id = this.form.id;
@@ -1334,10 +1362,10 @@
      this.$confirm(data.remark, '驳回原因', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        type: 'warning'
      }).then(() => {
        this.form = {
          ...response.data.data,
          ...response.data.data
        };
        // this.detailVisible = true
        this.handleViewDetail(data);
@@ -1356,7 +1384,7 @@
        0: '草稿',
        1: '待审核',
        2: '已驳回',
        3: '已通过',
        3: '已通过'
      };
      return statusTextMap[status] || '未知状态';
    },
@@ -1367,7 +1395,7 @@
        2: 'info',
        3: 'primary',
        4: 'success',
        5: 'danger',
        5: 'danger'
      };
      return statusMap[status] || 'info';
    },
@@ -1399,7 +1427,7 @@
        department: '',
        type: '',
        dateRange: [],
        status: '',
        status: ''
      };
      this.page.currentPage = 1;
      this.fetchTableData();
@@ -1415,7 +1443,7 @@
        DRAFT: 0,
        WAIT_AUDIT: 0,
        REJECTED: 0,
        PASS: 0,
        PASS: 0
      };
      var reponse = await jobStatusNum();
      // console.log('统计' + reponse.data.data)
@@ -1451,7 +1479,7 @@
        location: '',
        address: '',
        content: '',
        photos: [],
        photos: []
      };
      if (this.$refs.testform) {
        this.$refs.testform.resetFields();
@@ -1468,7 +1496,7 @@
      const response = await orderLogDetails(row.id);
      const data = response.data.data;
      this.form = {
        ...data,
        ...data
      };
      // 更新机巢列表
@@ -1504,7 +1532,7 @@
      const response = await orderLogDetails(row.id);
      const data = response.data.data;
      this.form = {
        ...data,
        ...data
      };
      // 更新航线列表,追加 wayline_file_region_vo 数据
      // 更新航线列表,追加 wayline_file_region_vo 数据
@@ -1530,7 +1558,7 @@
      this.$confirm('是否智飞工单数据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        type: 'warning'
      }).then(() => {
        NProgress.start();
        let params = this.getQueryParam();
@@ -1567,7 +1595,7 @@
      this.$confirm('确定发布吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        type: 'warning'
      }).then(() => {
        let response = userPublish(id);
        this.$message.success('发布成功');
@@ -1580,7 +1608,7 @@
      this.$confirm('确定删除吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        type: 'warning'
      }).then(() => {
        let response = deleteOrderLog(id);
        this.$message.success('删除');
@@ -1597,15 +1625,16 @@
        waylineType: undefined,
        current: 1,
        size: 99999999,
        descs: 'update_time',
      }
        descs: 'update_time'
      };
      var wayLineListResponse = await newGetWorkspacesPage(formData);
      this.wayLineList =  wayLineListResponse.data.data.records
      this.wayLineList = wayLineListResponse.data.data.records;
      this.initMapLine();
    },
    initMapLine(infos = {}, cb = () => {}) {
    initMapLine(infos = {}, cb = () => {
    }) {
      let currentLine = this.wayLineList.find(item => item.wayline_id == this.form.file_id);
      if (!currentLine) return;
@@ -1618,7 +1647,7 @@
            }?_t=${new Date().getTime()}`,
            type: currentLine.wayline_type,
            cb,
            infos,
            infos
          });
        }
      });
@@ -1638,7 +1667,7 @@
        const params = {
          type: ['2', '4', '5'].includes(currentLine.wayline_type) ? 2 : 0,
          wayline_id: waylineId,
          polygon,
          polygon
        };
        var wayLineListResponse = await getFlyingNestBy(params);
        // 再赋值
@@ -1651,7 +1680,7 @@
      this.$confirm('确定撤回则到草稿箱。', '是否撤回?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        type: 'warning'
      }).then(async () => {
        let reposne = await orderLogRecall(id);
        this.handleSearch();
@@ -1681,7 +1710,7 @@
    async orderLogReject(id) {
      this.$prompt('', '驳回原因', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        cancelButtonText: '取消'
      }).then(async ({ value }) => {
        let response = await orderLogReject(id, value);
        let data = response.data.data;
@@ -1693,7 +1722,7 @@
        this.page.currentPage = 1;
        this.onLoad(this.page, this.query);
      });
    },
    }
  },
  watch: {
    // lastHeight(newVal, oldVal) {
@@ -1704,19 +1733,21 @@
      handler() {
        // this.updateTabCounts()
      },
      deep: true,
    },
  },
      deep: true
    }
  }
};
</script>
<style lang="scss" scoped>
:deep(.el-input-number) {
  width: 200px;
}
:deep(.el-form-item__label) {
  width: 100px !important;
}
//:deep(.el-input-number) {
//  width: 200px;
//}
//:deep(.el-form-item__label) {
//  width: 100px !important;
//}
::v-deep(.el-tabs) {
  height: 100%;
  display: flex;
src/views/tickets/ticket.vue
@@ -9,133 +9,163 @@
      >
        <basic-main-content>
          <!-- 查询条件筛选栏 -->
          <div class="filter-bar">
            <el-input
              v-model="filters.keyword"
              placeholder="请输入关键字"
              class="filter-item"
              clearable
              @clear="handleKeyWords"
              @keyup.enter="handleSearch"
            />
            <!-- <el-select
              v-model="filters.department"
              placeholder="请选择所属部门"
              class="filter-item"
              clearable
            >
              <el-option
                v-for="item in departments"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select> -->
            <!-- <el-select
              v-model="filters.type"
              placeholder="请选择工单类型"
              class="filter-item"
              clearable
              @change="handleSearch"
            >
              <el-option
                v-for="item in types"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select> -->
            <el-date-picker
              v-model="filters.dateRange"
              type="daterange"
              class="filter-item"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              :default-value="datePickerDefaultVal"
            >
            </el-date-picker>
            <el-select
              v-model="filters.status"
              placeholder="请选择状态"
              class="filter-item"
              clearable
              @change="handleSearch"
            >
              <el-option
                v-for="item in statuses"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
            <!-- <el-select
              v-model="filters.algorithm"
              placeholder="请选择关联算法"
              class="filter-item"
              clearable
              @change="handleSearch"
            >
              <el-option
                v-for="item in algorithms"
                :key="item.dict_key"
                :label="item.dict_value"
                :value="item.dict_key"
              />
            </el-select> -->
            <!-- <el-tree-select
              popper-class="custom-tree-select"
              :style="{ width: pxToRem(186) }"
              placeholder="请选择关联算法"
              v-model="dictKey"
              :data="dataList"
              :default-expanded-keys="[dictKey]"
              check-strictly
              node-key="id"
              :props="treePropsSF"
              @node-click="handleSFNodeClick"
              clearable
              @clear="handleClear"
            /> -->
            <el-tree-select
              style="z-index: 1000"
              :teleported="false"
              class="custom-tree-select"
              :style="{ width: pxToRem(186) }"
              v-model="dictKey"
              :data="dataList"
              :default-expanded-keys="[dictKey]"
              :props="treePropsSF"
              :render-after-expand="false"
              :default-checked-keys="checkedKeys"
              node-key="id"
              multiple
              show-checkbox
              collapse-tags
              collapse-tags-tooltip
              clearable
              @check="handleCheck"
              @node-click="handleSFNodeClick"
              @clear="handleClear"
            />
            <el-select
              v-model="filters.isReview"
              placeholder="请选择复核状态"
              class="filter-item"
              clearable
              @change="handleSearch"
            >
              <el-option
                v-for="item in reviewStatuses"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
            <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
            <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
          </div>
          <!-- 查询条件筛选栏 -->
          <div class="ztzf-form-search">
            <el-form :model="filters" inline>
              <el-row :gutter="24">
                <el-col :span="4">
                  <el-form-item label="关键字:">
                    <el-input
                      v-model="filters.keyword"
                      placeholder="请输入关键字"
                      class="filter-item"
                      clearable
                      @clear="handleKeyWords"
                      @keyup.enter="handleSearch"
                    />
                  </el-form-item>
                </el-col>
                <!-- <el-select
                  v-model="filters.department"
                  placeholder="请选择所属部门"
                  class="filter-item"
                  clearable
                >
                  <el-option
                    v-for="item in departments"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  />
                </el-select> -->
                <!-- <el-select
                  v-model="filters.type"
                  placeholder="请选择工单类型"
                  class="filter-item"
                  clearable
                  @change="handleSearch"
                >
                  <el-option
                    v-for="item in types"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  />
                </el-select> -->
                <el-col :span="5">
                  <el-form-item label="选择日期:">
                  <el-date-picker
                    v-model="filters.dateRange"
                    type="daterange"
                    class="filter-item"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期"
                    :default-value="datePickerDefaultVal"
                  >
                  </el-date-picker>
                  </el-form-item>
                </el-col>
                <el-col :span="4">
                  <el-form-item label="选择状态:">
                  <el-select
                    v-model="filters.status"
                    placeholder="请选择状态"
                    class="filter-item"
                    clearable
                    @change="handleSearch"
                  >
                    <el-option
                      v-for="item in statuses"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    />
                  </el-select>
                  </el-form-item>
                </el-col>
                <!-- <el-select
                  v-model="filters.algorithm"
                  placeholder="请选择关联算法"
                  class="filter-item"
                  clearable
                  @change="handleSearch"
                >
                  <el-option
                    v-for="item in algorithms"
                    :key="item.dict_key"
                    :label="item.dict_value"
                    :value="item.dict_key"
                  />
                </el-select> -->
                <!-- <el-tree-select
                  popper-class="custom-tree-select"
                  :style="{ width: pxToRem(186) }"
                  placeholder="请选择关联算法"
                  v-model="dictKey"
                  :data="dataList"
                  :default-expanded-keys="[dictKey]"
                  check-strictly
                  node-key="id"
                  :props="treePropsSF"
                  @node-click="handleSFNodeClick"
                  clearable
                  @clear="handleClear"
                /> -->
                <el-col :span="4">
                  <el-form-item label="选择算法:">
                  <el-tree-select
                    style="z-index: 1000"
                    :teleported="false"
                    class="custom-tree-select"
                    :style="{ width: pxToRem(186) }"
                    v-model="dictKey"
                    :data="dataList"
                    :default-expanded-keys="[dictKey]"
                    :props="treePropsSF"
                    :render-after-expand="false"
                    :default-checked-keys="checkedKeys"
                    node-key="id"
                    multiple
                    show-checkbox
                    collapse-tags
                    collapse-tags-tooltip
                    clearable
                    @check="handleCheck"
                    @node-click="handleSFNodeClick"
                    @clear="handleClear"
                  />
                  </el-form-item>
                </el-col>
                <el-col :span="4">
                  <el-form-item label="复核状态:">
                  <el-select
                    v-model="filters.isReview"
                    placeholder="请选择复核状态"
                    class="filter-item"
                    clearable
                    @change="handleSearch"
                  >
                    <el-option
                      v-for="item in reviewStatuses"
                      :key="item.value"
                      :label="item.label"
                      :value="item.value"
                    />
                  </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="3">
                  <el-button type="primary" icon="el-icon-search" @click="handleSearch"
                    >搜索</el-button
                  >
                  <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
                </el-col>
              </el-row>
            </el-form>
          </div>
          <!-- 表格部分 -->
          <avue-crud
            class="ztzf-public-general-avue-crud"
@@ -168,23 +198,23 @@
                type="primary"
                icon="el-icon-plus"
                @click="handleAdd"
                >新建工单</el-button
              >
                >新建工单
              </el-button>
              <el-button
                v-if="activeTab === 'pending' && permissionList.reviewBtn"
                type="success"
                icon="el-icon-check"
                @click="openReviewDialog"
                >批量审核</el-button
              >
                >批量审核
              </el-button>
              <el-button
                v-if="permissionList.exportBtn"
                type="success"
                plain
                icon="el-icon-download"
                @click="exportData"
                >导出</el-button
              >
                >导出
              </el-button>
            </template>
            <template #menu="{ row }">
              <template v-if="row.status === -1">
@@ -194,14 +224,14 @@
                  icon="el-icon-delete"
                  class="danger-button"
                  @click="handleDelete(row)"
                  >删除</el-button
                >
                  >删除
                </el-button>
              </template>
              <template v-else>
                <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)"
                  >详情</el-button
                >
                  >详情
                </el-button>
              </template>
              <template v-if="permission.tickets_repeat_review">
@@ -210,8 +240,8 @@
                  type="text"
                  icon="el-icon-check"
                  @click="reCheck(row)"
                  >复核</el-button
                >
                  >复核
                </el-button>
              </template>
            </template>
            <template #status="{ row }">
@@ -415,10 +445,21 @@
      </el-form>
      <template #footer>
        <div class="dialog-footer-new">
          <el-button type="danger" :loading="submitLoading" @click="submitForm" icon="el-icon-position">发布</el-button>
          <el-button type="infoprimary" plain :loading="draftLoading" @click="saveDraft"  icon="el-icon-document-add"
            >存草稿</el-button
          >
          <el-button
            type="danger"
            :loading="submitLoading"
            @click="submitForm"
            icon="el-icon-position"
            >发布
          </el-button>
          <el-button
            type="infoprimary"
            plain
            :loading="draftLoading"
            @click="saveDraft"
            icon="el-icon-document-add"
            >存草稿
          </el-button>
          <el-button @click="handleCancel" icon="el-icon-circle-close">取 消</el-button>
        </div>
@@ -577,7 +618,7 @@
                  <span class="required-star">*</span>事件处理详情
                </span>
              </template>
              <template v-else> 事件处理详情 </template>
              <template v-else> 事件处理详情</template>
            </div>
            <!-- 处理中状态显示输入框 -->
            <template v-if="currentDetail.status === 3 && hasProcessedAndOverBtnPermission()">
@@ -604,7 +645,7 @@
              <template v-if="currentDetail.status === 3">
                <span class="required-label"> <span class="required-star">*</span>上传图片 </span>
              </template>
              <template v-else> 上传图片 </template>
              <template v-else> 上传图片</template>
            </div>
            <el-upload
              v-if="hasProcessedAndOverBtnPermission()"
@@ -695,21 +736,30 @@
                  <template v-else>
                    <div class="media-title">
                      地图标记事件点
                      <el-popover   v-if="currentDetail.status === 3 || currentDetail.status === 0"
                     popper-class="custom-qrcode-popover"
                     :width="120"
                     :visible="currentDetail.showQR && detailVisible"
                     placement="top"
                     title=""
                     trigger="click"
                      <el-popover
                        v-if="currentDetail.status === 3 || currentDetail.status === 0"
                        popper-class="custom-qrcode-popover"
                        :width="120"
                        :visible="currentDetail.showQR && detailVisible"
                        placement="top"
                        title=""
                        trigger="click"
                      >
                        <template #reference>
                          <img @click.stop="handleQRCode(currentDetail)"  class="QRCodeImg" src="@/assets/images/dataCenter/qrCode.svg" alt="" title="事件导航" />
                          <img
                            @click.stop="handleQRCode(currentDetail)"
                            class="QRCodeImg"
                            src="@/assets/images/dataCenter/qrCode.svg"
                            alt=""
                            title="事件导航"
                          />
                        </template>
                        <div class="qrcode-content">
                          <div class="close-btn"  @click.stop="currentDetail.showQR = false">×</div>
                          <CreateQRcode v-if="currentDetail.showQR && detailVisible" :latAndLon="currentDetail.location"></CreateQRcode>
                          <div class="close-btn" @click.stop="currentDetail.showQR = false">×</div>
                          <CreateQRcode
                            v-if="currentDetail.showQR && detailVisible"
                            :latAndLon="currentDetail.location"
                          ></CreateQRcode>
                        </div>
                      </el-popover>
                    </div>
@@ -737,16 +787,16 @@
                :loading="approveLoading"
                @click="approveTicket"
                icon="el-icon-check"
                >通过</el-button
              >
                >通过
              </el-button>
              <el-button
                v-if="hasReviewBtnPermission()"
                type="danger"
                :loading="rejectLoading"
                @click="rejectTicket"
                icon="el-icon-close"
                >不通过</el-button
              >
                >不通过
              </el-button>
              <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button>
            </template>
            <template v-else-if="currentDetail.status === 0">
@@ -756,16 +806,16 @@
                :loading="dispatchLoading"
                @click="approveAndDispatch"
                icon="el-icon-check"
                >受理</el-button
              >
                >受理
              </el-button>
              <el-button
                v-if="hasProcessingBtnPermission()"
                type="danger"
                :loading="rejectLoading"
                @click="rejectTicket"
                icon="el-icon-close"
                >不受理</el-button
              >
                >不受理
              </el-button>
              <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button>
            </template>
            <template v-if="currentDetail.status === 3">
@@ -776,8 +826,8 @@
                :loading="completeLoading"
                @click="completeTicket"
                icon="el-icon-circle-check"
                >完成工单</el-button
              >
                >完成工单
              </el-button>
              <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button>
            </template>
            <template v-else-if="currentDetail.status === 4">
@@ -837,10 +887,12 @@
        </el-form-item>
      </el-form>
      <template #footer>
        <el-button @click="dispatchDialogVisible = false" icon="el-icon-circle-close">取消</el-button>
        <el-button @click="dispatchDialogVisible = false" icon="el-icon-circle-close"
          >取消
        </el-button>
        <el-button type="primary" :loading="dispatchLoading" @click="submitDispatch"
          >确认派发</el-button
        >
          >确认派发
        </el-button>
      </template>
    </el-dialog>
@@ -914,8 +966,12 @@
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="handleBatchApprove" icon="el-icon-check">通过</el-button>
          <el-button type="danger" @click="handleBatchReject" icon="el-icon-close">不通过</el-button>
          <el-button type="primary" @click="handleBatchApprove" icon="el-icon-check"
            >通过
          </el-button>
          <el-button type="danger" @click="handleBatchReject" icon="el-icon-close"
            >不通过
          </el-button>
          <el-button @click="cancleBatchReject" icon="el-icon-circle-close">取消</el-button>
        </div>
      </template>
@@ -940,7 +996,7 @@
</template>
<script>
import { pxToRem, pxToRemNum } from '@/utils/rem'
import { pxToRem, pxToRemNum } from '@/utils/rem';
import { getSmallImg, getShowImg } from '@/utils/util';
import { ElMessageBox, ElLoading } from 'element-plus';
import { calculateDefaultRange } from '@/utils/util';
@@ -965,7 +1021,9 @@
import getBaseConfig from '@/buildConfig/config';
import CreateQRcode from '@/components/CreateQRcode/CreateQRcode.vue';
import { CircleClose } from '@element-plus/icons-vue';
const { envName } = getBaseConfig();
function regExp(label, name) {
  var reg = new RegExp(label + '=([^&]*)(&|$)', 'g');
  return name.match(reg)[0].split('=')[1];
@@ -1068,8 +1126,8 @@
            width: 152,
            overHidden: true,
          },
          { label: '创建人', prop: 'creator', width: 120, overHidden: true, },
          { label: '处理人', prop: 'handler', width: 120, overHidden: true, },
          { label: '创建人', prop: 'creator', width: 120, overHidden: true },
          { label: '处理人', prop: 'handler', width: 120, overHidden: true },
          {
            slot: true,
            hide: envName === 'jiangwu' ? true : false,
@@ -1185,7 +1243,6 @@
    this.loadAMapScripts();
    this.fetchDropdownData();
  },
  mounted() {
@@ -1240,16 +1297,16 @@
          find && (find.query = {});
        });
      }
        if (tab) {
      const isTabValid = this.filteredTabs.some(t => t.name === tab);
      if (isTabValid) {
        this.activeTab = tab;
        this.handleTabChangeAfterJump();
        isTabProcessed = true;
        const find = this.$store.state.tags.bsTagList.find(i => i.path === '/tickets/ticket');
      if (tab) {
        const isTabValid = this.filteredTabs.some(t => t.name === tab);
        if (isTabValid) {
          this.activeTab = tab;
          this.handleTabChangeAfterJump();
          isTabProcessed = true;
          const find = this.$store.state.tags.bsTagList.find(i => i.path === '/tickets/ticket');
          find && (find.query = {});
        }
      }
    }
    }
    this.fetchTabCounts(); // 新增:初始化时获取 tab 数据
@@ -1257,7 +1314,7 @@
  },
  computed: {
    CircleClose() {
      return CircleClose
      return CircleClose;
    },
    firstRowData() {
      return this.tableData.length > 0 ? this.tableData[0] : null;
@@ -1366,7 +1423,7 @@
          // 修改这里:使用 types 数组查找对应的 label
          value:
            this.types.find(t => t.value === this.currentDetail.type)?.label ||
            this.currentDetail.type
            this.currentDetail.type,
        },
        { label: '关联任务', value: this.currentDetail.job_name || '/' },
        { label: '工单创建人', value: this.currentDetail.creator },
@@ -1376,7 +1433,7 @@
          label: '关联算法',
          value:
            this.algorithms.find(t => t.value === this.currentDetail.aiType)?.label ||
            this.currentDetail.aiType
            this.currentDetail.aiType,
        },
        { label: '发起单位', value: this.currentDetail.department },
        { label: '发起任务时间', value: this.currentDetail.startTime },
@@ -2060,14 +2117,14 @@
      this.fetchTabCounts(); // 切换 tab 时重新获取数据
    },
    //新增 跳转后触发的Tab切换
handleTabChangeAfterJump() {
    const isReview = this.findObject(this.option.column, 'isReview');
    isReview.hide = !['all', 'completed', 'myTickets'].includes(this.activeTab);
    this.handleReset();
    this.page.currentPage = 1;
    this.fetchTableData();
    this.fetchTabCounts();
  },
    handleTabChangeAfterJump() {
      const isReview = this.findObject(this.option.column, 'isReview');
      isReview.hide = !['all', 'completed', 'myTickets'].includes(this.activeTab);
      this.handleReset();
      this.page.currentPage = 1;
      this.fetchTableData();
      this.fetchTabCounts();
    },
    handleSearch() {
      this.page.currentPage = 1;
      this.fetchTableData();
@@ -3120,17 +3177,20 @@
<style lang="scss">
.custom-dialog {
  max-height: 96vh;
  .el-dialog__body {
  .el-dialog__body {
    border-top: 0.1rem solid #f0f0f0;
  }
}
.custom-qrcode-popover {
  min-width: 160px !important;
  min-height: 140px !important;
  position: relative;
  .qrcode-content{
margin-top: 8px;
  .qrcode-content {
    margin-top: 8px;
    .close-btn {
      position: absolute;
      top: 2px;
@@ -3143,8 +3203,6 @@
      color: #999;
      font-size: 16px;
      z-index: 10;
    }
  }
}
@@ -3352,9 +3410,11 @@
    width: 100%;
  }
}
:deep(.el-dialog__body) {
  border-top: 0.1rem solid #f0f0f0;
}
.dialog-footer-new {
  text-align: right;
  padding-top: 16px;
@@ -3372,6 +3432,7 @@
    }
  }
}
.dialog-footer1-new {
  position: sticky;
  bottom: 28px;
@@ -3384,12 +3445,15 @@
  display: flex;
  justify-content: space-between;
  align-items: center;
  .el-button + .el-button {
    margin-left: 12px;
  }
  .btngroups {
    margin-left: 12px;
  }
  .el-button {
    padding: 9px 20px;
@@ -3399,6 +3463,7 @@
    }
  }
}
.map-container {
  width: 100%;
  height: 400px;
@@ -3577,11 +3642,13 @@
  pointer-events: none;
  opacity: 0.3 !important;
}
.PopUpTableScrolls {
  max-height: 600px;
  overflow-y: scroll;
  overflow-x: hidden;
}
.media-box {
  width: 100%;
  border: 1px solid #dcdfe6;
@@ -3595,6 +3662,7 @@
    margin-bottom: 5px;
    display: flex;
    align-items: center;
    .QRCodeImg {
      width: 18px;
      height: 18px;
@@ -3674,6 +3742,7 @@
  display: block;
  text-align: left;
  margin-bottom: 5px;
  &:first-child {
    font-weight: bold;
    margin-bottom: 4px;