无人机管理后台前端(已迁走)
linwe
2025-04-23 11716d70cedf174055840f39bf2f1664acdfd30c
Merge remote-tracking branch 'origin/master'
6 files modified
2 files added
1 files deleted
97 ■■■■ changed files
index.html 2 ●●● patch | view | raw | blame | history
public/img/bg/index_logo.png patch | view | raw | blame | history
public/img/bg/logo.png patch | view | raw | blame | history
public/img/bg/mainLogo.png patch | view | raw | blame | history
src/page/index/logo.vue 2 ●●● patch | view | raw | blame | history
src/views/base/region.vue 2 ●●● patch | view | raw | blame | history
src/views/system/dept.vue 1 ●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue 6 ●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue 84 ●●●● patch | view | raw | blame | history
index.html
@@ -11,7 +11,7 @@
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <meta name="format-detection" content="telephone=no" />
  <link rel="icon" href="/favicon.png" />
  <link rel="icon" href="/img/bg/index_logo.png" />
  <link rel="stylesheet" href="/iconfont/index.css" />
  <link rel="stylesheet" href="/iconfont/avue/iconfont.css" />
  <link rel="stylesheet" href="/iconfont/saber/iconfont.css" />
public/img/bg/index_logo.png
public/img/bg/logo.png
Binary files differ
public/img/bg/mainLogo.png
src/page/index/logo.vue
@@ -8,7 +8,7 @@
    <transition-group name="fade">
      <template v-if="getScreen(!isCollapse)">
        <div style="display: flex; align-items: left; gap: 5px; margin: 8px 8px 10px 20px;">
    <img class="img" src="/img/logo.png" alt="" width="50%" height="50%" />
    <img class="img" src="/img/bg/mainLogo.png" alt="" width="50%" height="50%" />
    <!-- <span style="font-size: 20px;"  key="1">
        {{ this.parentDeptInfo.sysName }}
    </span> -->
src/views/base/region.vue
@@ -95,7 +95,7 @@
        nodeKey: 'id',
        lazy: true,
        treeLoad: function (node, resolve) {
          const parentCode = node.level === 0 ? '00' : node.data.id;
          const parentCode = node.level === 0 ? '000000000000' : node.data.id;
          getLazyTree(parentCode).then(res => {
            resolve(
              res.data.data.map(item => {
src/views/system/dept.vue
@@ -218,6 +218,7 @@
            {
              label: '行政区划',
              prop: 'areaCode',
              checkStrictly: true,
              type: 'cascader',
              labelWidth: 120,
              props: {
src/views/tickets/orderLog.vue
@@ -197,7 +197,7 @@
        </el-dialog>
        <!-- 工单详情对话框 -->
        <el-dialog v-model="detailVisible" title="工单详情" width="70%" :close-on-click-modal="false" @close="resetForm" >
        <el-dialog v-model="detailVisible" title="编辑工单" width="70%" :close-on-click-modal="false" @close="resetForm" >
            <el-form :model="form" ref="testform" label-width="100px">
                <div class="custom-steps-container">
                    <!-- 标题行 -->
@@ -287,8 +287,8 @@
                        <el-button type="danger"
                            v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
                            @click="submitForm(1)">发布</el-button>
                        <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                            @click="submitForm(0)">保存</el-button>
                        <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                            @click="submitForm(0)">保存</el-button> -->
                        <el-button type="primary" v-if="form.status == 1 && userInfo.user_id != form.create_user"
                            @click="orderLogPass(form.id)">通过</el-button>
src/views/tickets/ticket.vue
@@ -156,6 +156,10 @@
    <el-dialog v-model="detailVisible" title="工单详情" width="80%" append-to-body>
      <div class="detail-container">
        <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div>
        <div v-if="totalTime" class="event-total-time"
          style="text-align:center;color:#666;font-size:15px;margin-bottom:12px;">
          总耗时:{{ totalTime }}
        </div>
        <!-- 工单状态流程 -->
        <div class="custom-steps-container">
          <!-- 标题行 -->
@@ -276,7 +280,7 @@
              style="font-size: 32px; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">+</span>
          </el-upload>
          <div class="el-upload__tip" style="margin-top: 12px;" v-if="hasProcessedAndOverBtnPermission()">
            支持 jpg/png 格式图片,单张不超过 5MB
            (上传照片即可完结工单,只能上传jpg、jpeg、png照片,且不超过5M)
          </div>
        </div>
        <!-- 图片和地图部分 -->
@@ -286,13 +290,9 @@
              <div class="media-box">
                <div class="media-title">事件图片</div>
                <div class="media-content">
                  <el-image
                    v-if="currentDetail.mediaUrl"
                    :src="getThumbUrl(currentDetail.mediaUrl)"
                    :preview-src-list="[currentDetail.mediaUrl]"
                    fit="cover"
                    style="width: 100%; height: 300px; cursor: pointer;"
                  >
                  <el-image v-if="currentDetail.mediaUrl" :src="getThumbUrl(currentDetail.mediaUrl)"
                    :preview-src-list="[currentDetail.mediaUrl]" fit="contain"
                    style="width: 700px; height: 520px; cursor: pointer;">
                    <template #placeholder>
                      <div class="image-placeholder">
                        <i class="el-icon-picture-outline"></i>
@@ -316,13 +316,9 @@
                <template v-if="currentDetail.status === 5">
                  <div class="media-title">工单处理图片</div>
                  <div class="media-content">
                    <el-image
                      v-if="currentDetail.updatePhotoUrl"
                      :src="getThumbUrl(currentDetail.updatePhotoUrl)"
                      :preview-src-list="[currentDetail.updatePhotoUrl]"
                      fit="cover"
                      style="width: 100%; height: 300px; cursor: pointer;"
                    >
                    <el-image v-if="currentDetail.updatePhotoUrl" :src="getThumbUrl(currentDetail.updatePhotoUrl)"
                      :preview-src-list="[currentDetail.updatePhotoUrl]" fit="fill"
                      style="width: 700px; height: 520px; cursor: pointer;">
                      <template #placeholder>
                        <div class="image-placeholder">
                          <i class="el-icon-picture-outline"></i>
@@ -342,7 +338,7 @@
                <template v-else>
                  <div class="media-title">地图标记事件点</div>
                  <div class="media-content">
                    <div id="map-container" style="width: 100%; height: 300px; background: #f5f5f5;">
                    <div id="map-container" style="width: 700px; height: 520px; background: #f5f5f5;">
                      <map-container v-if='detailVisible' ref="MapContainer"></map-container>
                    </div>
                  </div>
@@ -356,23 +352,29 @@
        <div class="dialog-footer">
          <template v-if="currentDetail.status === 2">
            <!-- 待审核 -->
            <el-button v-if="hasReviewBtnPermission()" type="primary" :loading="approveLoading" @click="approveTicket">通过</el-button>
            <el-button v-if="hasReviewBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
            <el-button v-if="hasReviewBtnPermission()" type="primary" :loading="approveLoading"
              @click="approveTicket">通过</el-button>
            <el-button v-if="hasReviewBtnPermission()" type="danger" :loading="rejectLoading"
              @click="rejectTicket">不通过</el-button>
            <el-button @click="detailVisible = false">取消</el-button>
          </template>
          <template v-else-if="currentDetail.status === 0">
            <el-button v-if="hasProcessingBtnPermission()" type="primary" :loading="dispatchLoading" @click="approveAndDispatch">通过并派发</el-button>
            <el-button v-if="hasProcessingBtnPermission()" type="danger" :loading="rejectLoading" @click="rejectTicket">不通过</el-button>
            <el-button v-if="hasProcessingBtnPermission()" type="primary" :loading="dispatchLoading"
              @click="approveAndDispatch">通过并派发</el-button>
            <el-button v-if="hasProcessingBtnPermission()" type="danger" :loading="rejectLoading"
              @click="rejectTicket">不通过</el-button>
            <el-button @click="detailVisible = false">取消</el-button>
          </template>
          <template v-if="currentDetail.status === 3">
            <!-- 处理中 -->
            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="completeLoading" @click="completeTicket">完成工单</el-button>
            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="completeLoading"
              @click="completeTicket">完成工单</el-button>
            <el-button @click="detailVisible = false">取消</el-button>
          </template>
          <template v-else-if="currentDetail.status === 4">
            <!-- 已完成 -->
            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading" @click="finalizeTicket">完结工单</el-button>
            <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading"
              @click="finalizeTicket">完结工单</el-button>
            <el-button @click="detailVisible = false">取消</el-button>
          </template>
          <template v-else-if="currentDetail.status === 5">
@@ -404,7 +406,7 @@
    </el-dialog>
    <!-- 添加在其他 dialog 组件之后 -->
    <el-dialog v-model="reviewDialogVisible" title="批量审核" width="70%" append-to-body custom-class="review-dialog">
    <el-dialog v-model="reviewDialogVisible" title="批量审核" width="70%" append-to-body custom-class="review-dialog"   @close="cancleBatchReject">
      <div class="review-container">
        <div class="review-image-wrapper">
          <!-- 修改左右箭头的显示条件 -->
@@ -413,15 +415,9 @@
          </div>
          <div class="review-image-container">
            <el-image
              v-if="currentReviewImage"
              :src="getThumbUrl(currentReviewImage)"
              fit="cover"
              :preview-src-list="getImageList()"
              :initial-index="currentImageIndex - 1"
              class="preview-image"
              style="cursor: pointer;"
            >
            <el-image v-if="currentReviewImage" :src="getThumbUrl(currentReviewImage)" fit="fill"
              :preview-src-list="getImageList()" :initial-index="currentImageIndex - 1" class="preview-image"
              style="cursor: pointer;">
              <template #error>
                <div class="image-error">
                  <i class="el-icon-picture-outline"></i>
@@ -621,6 +617,7 @@
      reviewDialogVisible: false, // 新增:审核对话框可见性
      currentReviewImage: '', // 新增:当前审核图片
      currentImageIndex: 1, // 新增:当前图片索引
      totalTime: '',
      isShowInfo: false,
    };
  },
@@ -850,7 +847,6 @@
          isPass: 0,
          eventNum: currentItem.orderNumber,
          eventName: currentItem.orderName,
          eventType: currentItem.type,
        };
        const response = await flowEvent(data);
@@ -1300,6 +1296,8 @@
        const steps = Array.isArray(stepResponse.data.data)
          ? stepResponse.data.data
          : stepResponse.data.data?.steps || [];
        const finishedStep = steps.find(s => String(s.status) === '5');
        this.totalTime = finishedStep && finishedStep.total_time ? finishedStep.total_time : '';
        if (this.activeTab !== 'myTickets') {
          this.stepInfos = steps.map(step => ({
            status: String(step.status),
@@ -1534,10 +1532,6 @@
          status: this.currentDetail.status,
          isPass: 0, // 0 表示通过
          eventNum: this.currentDetail.orderNumber,
          eventName: this.currentDetail.orderName, // 工单名称
          eventType: this.currentDetail.type, // 工单类型
          departmentId: this.dispatchForm.department, // 派发部门 ID
          handlerId: this.dispatchForm.handler, // 处理人 ID
        };
        const file = this.currentDetail.file || null; // 如果没有文件,则为 null
@@ -1734,7 +1728,7 @@
      try {
        // 检查是否上传了图片
        if (!this.currentDetail.photos || !this.currentDetail.photos.length) {
          this.$message.warning('请上传处理图片');
          this.$message.warning('请上传事件处理照片,或飞行任务结束核验工单是否完结');
          return;
        }
@@ -1966,8 +1960,6 @@
          status: currentItem.status,
          isPass: 0,
          eventNum: currentItem.orderNumber,
          eventName: currentItem.orderName,
          eventType: currentItem.type,
        };
        console.log('删除前:', this.selections)
        const response = await flowEvent(data);
@@ -2005,7 +1997,10 @@
    },
    cancleBatchReject() {
      reviewDialogVisible = false;
      this.reviewDialogVisible = false;
  this.selections = [];
  this.currentImageIndex = 1;
  this.currentReviewImage = '';
      this.fetchTableData();
    },
    // 批量审核不通过
@@ -2022,7 +2017,7 @@
          return;
        }
        await this.$confirm('确认驳回当前工单?', '提示', {
        await this.$confirm('确认该工单审核不通过?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
@@ -2034,7 +2029,6 @@
          isPass: 1,
          eventNum: currentItem.orderNumber,
          eventName: currentItem.orderName,
          eventType: currentItem.type,
        };
        const response = await flowEvent(data);
@@ -2292,7 +2286,7 @@
}
.dialog-footer {
  text-align: right;
  text-align: center;
  padding-top: 16px;
  border-top: 1px solid #ebeef5;
@@ -2468,7 +2462,7 @@
.media-content {
  position: relative;
  height: 300px;
  // height: 300px;
}
.image-placeholder,