无人机管理后台前端(已迁走)
rjg
2025-04-27 9b539ca20ac47a3f50303165cb126b1e346138f8
任务修改
1 files modified
186 ■■■■■ changed files
src/views/tickets/orderLog.vue 186 ●●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue
@@ -73,7 +73,7 @@
                        <template #menu="{ row }">
                            <div v-if="row.status == 1">
                                <el-button v-if="hasPaddingBtnPermission()" type="text" icon="el-icon-view" @click="handleViewDetail(row)">审核</el-button>
                                <el-button v-if="hasPaddingBtnPermission()" type="text" icon="el-icon-view" @click="handleCheckDetail(row)">审核</el-button>
                             
                            </div>
@@ -117,7 +117,7 @@
            </el-tab-pane>
        </el-tabs>
        <!-- 新建工单对话框 -->
        <!-- 新建工单 -->
        <el-dialog  v-model="dialogVisible" title="新建工单" width="70%" :close-on-click-modal="false" @close="resetForm">
           
       
@@ -342,6 +342,158 @@
                </el-row>
            </el-form>
        </el-dialog>
        <!-- 工单详情 -->
        <el-dialog v-model="detailVisibleCopy" title="工单详情" width="70%" :close-on-click-modal="false" @close="resetForm">
  <div class="event-title-center">{{ form.name }}</div>
  <el-form :model="form" ref="testform" label-width="100px">
    <div class="custom-steps-container">
      <!-- 标题行 -->
      <div class="steps-titles">
        <div v-for="(record, index) in form.record_list" :class="{ active: record.user_id >= 0 }"
          :key="index" class="step-title">
          {{ record.status_str }}
        </div>
      </div>
      <!-- Element Steps 组件 -->
      <el-steps :active="form.active" align-center class="custom-steps">
        <el-step v-for="(record, index) in form.record_list" :key="index">
          <template #description>
            <span class="step-description" style="position: relative; display: inline-block;">
              {{ record.user_name }}
            </span>
            <span style="
              position: absolute;
              left: 80%;
              top: 50%;
              transform: translateY(-50%);
              width: 100px;
              margin-left: 4px;
              color: #666;
              font-size: 12px;
            ">
              {{ record.interval_time_str }}
            </span>
            <div class="step-description">
              {{ record.create_time_str }}
            </div>
          </template>
        </el-step>
      </el-steps>
    </div>
    <el-row :gutter="20">
      <el-col :span="12">
        <el-form-item label="工单名称" prop="name">
          <el-input v-model="form.name" placeholder="请输入工单名称" :disabled="true"></el-input>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="关联航线" prop="file_id">
          <el-select v-model="form.file_id" placeholder="请选择航线" :disabled="true">
            <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-row>
    <el-row :gutter="20">
      <el-col :span="12">
        <el-form-item label="关联机巢" prop="device_sns">
          <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple :disabled="true">
            <el-option
              v-for="item in device_sns"
              :key="item.device_sn"
              :label="item.nickname"
              :value="item.device_sn"
            />
          </el-select>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="关联算法" prop="ai_types">
          <el-select v-model="form.ai_types" placeholder="请选择关联算法" multiple :disabled="true">
            <el-option v-for="item in ai_types" :key="item.dictKey" :label="item.dictValue"
              :value="item.dictKey" />
          </el-select>
        </el-form-item>
      </el-col>
    </el-row>
    <el-row :gutter="20">
         <el-col :span="12"  prop="statusStr">
            <el-form-item label="当前状态">
                      {{statusStr}}
            </el-form-item>
      </el-col>
                 <el-col :span="6">
                        <el-form-item label="周期频次" prop="date_range">
                            <el-date-picker v-model="form.date_range" type="daterange" range-separator="至"
                                start-placeholder="开始日期" end-placeholder="结束日期" class="date-picker" :disabled="true"/>
                        </el-form-item>
                        </el-col>
                    <el-col :span="3">
                        <el-select v-model="form.rep_fre_type" placeholder="请选择频次" :disabled="true">
                            <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
                        </el-select>
                    </el-col>
                    <el-col :span="3">
                        <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true"
                            value-format="HH:mm" :picker-options="{
                                selectableRange: '00:00 - 23:59',
                            }" />
                    </el-col>
   </el-row>
      <el-row :gutter="20">
         <el-col :span="12">
        <el-form-item label="工单内容" prop="content">
          <el-input
            type="textarea"
            v-model="form.content"
            rows="2"
            placeholder="请输入工单内容"
            maxlength="255"
            show-word-limit
            :readonly="true"
            :disabled="true"
          ></el-input>
        </el-form-item>
      </el-col>
       <el-col :span="12">
                        <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 == 1 && this.permission.orderLogpass"
                            @click="orderLogPass(form.id)">通过</el-button>
                        <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()"
                            @click="orderLogReject(form.id)">驳回</el-button>
       </el-col>
      </el-row>
    <el-row :gutter="20" style="height: 400px">
      <el-col :span="24">
        <map-container v-if='detailVisible' ref="MapContainer"></map-container>
      </el-col>
    </el-row>
  </el-form>
</el-dialog>
    </basic-container>
</template>
@@ -398,6 +550,7 @@
            ai_types: [],
            wayLineList: [],
            detailTitle:"编辑工单",
            detailVisibleCopy: false,
            statuses: [
                { label: '草稿', value: '0' },
@@ -501,7 +654,6 @@
    computed: {
        ...mapGetters(['userInfo', 'permission']),
        filteredTabs() {
            // rejection_and_draft 权限控制“已驳回”和“草稿”tab
            const canShowRejectAndDraft = this.permission?.rejection_and_draft === true;
            return this.tabs.map(tab => {
                if (tab.name === 'DRAFT') {
@@ -513,6 +665,7 @@
                return { ...tab, isShow: true };
            }).filter(tab => tab.isShow);
        },
    },
    methods: {
@@ -694,7 +847,7 @@
            const statusMap = {
                1: 'warning',
                2: 'info',
                3: 'primary',
                 3: 'primary',
                4: 'success',
                5: 'danger',
            }
@@ -767,6 +920,7 @@
                address: '',
                content: '',
                photos: [],
                status : null,
            }
            if (this.$refs.testform) {
                this.$refs.testform.resetFields()
@@ -780,7 +934,6 @@
            return `${location[0].toFixed(6)}, ${location[1].toFixed(6)}`
        },
        async handleViewDetail(row) {
             console.log("工单名称1111:");
            const response = await orderLogDetails(row.id);
            const data = response.data.data;
@@ -795,6 +948,21 @@
            this.device_sns = data.device_list;
          (this.permission && (this.permission.order_log_review  || this.permission.order_log_recall))&& (data.status==1||data.status==3||data.status==2) ? this.detailTitle="工单详情":this.detailTitle="编辑工单";
          console.log("工单名称:"+this.detailTitle);
        },
           async handleCheckDetail(row) {
            const response = await orderLogDetails(row.id);
            const data = response.data.data;
            this.form = {
                ...data,
            };
            this.detailVisibleCopy = true;
            this.statusStr = this.mapStatus(data.status);
            // 更新机巢列表
            this.device_sns = data.device_list;
        },
        //导出
        async exportData() {
@@ -945,7 +1113,7 @@
            let response = await orderLogPass(id)
            let data = response.data.data
            this.$message.success('审核通过')
            this.detailVisible = false
            this.detailVisibleCopy = false
        },
        /**
         * 驳回
@@ -957,8 +1125,8 @@
            }).then(async ({ value }) => {
                let response = await orderLogReject(id, value)
                let data = response.data.data
                this.$message.success('驳回成果')
                this.detailVisible = false
                this.$message.success('驳回成功')
                this.detailVisibleCopy = false
            })
        },
    },
@@ -1104,5 +1272,5 @@
  color: #333;
}
</style>
`
```