riku
2025-07-29 056ea576d820729878ffd62cd54cd7598e72d07e
src/views/overlay-clue/report/ClueReport.vue
@@ -2,6 +2,7 @@
  <!-- 清单详情 -->
  <CloseButton v-show="show" @close="closeEdit">
    <el-button
      v-if="!isInternal"
      class="push-btn"
      :type="clueData.cuploaded ? 'success' : 'danger'"
      @click="pushCheck"
@@ -20,6 +21,30 @@
          <div>送</div>
          <div>反</div>
          <div>馈</div>
        </template>
      </div>
    </el-button>
    <el-button
      v-else-if="clueTask"
      class="push-btn"
      :type="clueTask.finished ? 'success' : 'danger'"
      @click="finishTask"
      :disabled="clueTask.finished"
    >
      <div class="flex-col">
        <template v-if="clueTask.finished">
          <el-icon><Check /></el-icon>
          <div>任</div>
          <div>务</div>
          <div>完</div>
          <div>成</div>
        </template>
        <template v-else>
          <el-icon><Upload /></el-icon>
          <div>结</div>
          <div>束</div>
          <div>任</div>
          <div>务</div>
        </template>
      </div>
    </el-button>
@@ -56,20 +81,37 @@
      </el-scrollbar>
    </div>
  </CloseButton>
  <ClueTaskEdit
    v-model="clueTaskDialog"
    :clue-task="clueTask"
    :clue-data="clueData"
    :create="isCreateMode"
    @on-submit="handelClueTaskEdit"
  ></ClueTaskEdit>
</template>
<script>
import ClueReportClue from './components/ClueReportClue.vue';
import ClueReportConclusion from './components/ClueReportConclusion.vue';
import ClueReportQuestion from './components/ClueReportQuestion.vue';
import ClueTaskEdit from '@/views/overlay-clue/task/ClueTaskEdit.vue';
import { useMessageBoxTip } from '@/composables/messageBox';
import clueApi from '@/api/clue/clueApi';
import clueTaskApi from '@/api/clue/clueTaskApi';
export default {
  inject: {
    // 是否是内部线索相关操作
    isInternal: {
      default: false
    }
  },
  components: {
    ClueReportClue,
    ClueReportConclusion,
    ClueReportQuestion
    ClueReportQuestion,
    ClueTaskEdit
  },
  props: {
    clueData: {
@@ -80,11 +122,20 @@
    },
    show: Boolean
  },
  emits: ['update:show', 'pushed'],
  emits: ['update:show', 'pushed', 'onClueTaskChange'],
  data() {
    return {
      clueTask: undefined
      clueTask: undefined,
      clueTaskDialog: false,
      isCreateMode: true
    };
  },
  watch: {
    clueData(nV, oV) {
      if (nV && nV != oV) {
        this.getClueTask();
      }
    }
  },
  methods: {
    closeEdit() {
@@ -101,11 +152,47 @@
    },
    pushClue() {
      return clueApi.pushClue(this.clueData.cid).then((res) => {
        this.finishTask();
        this.$emit('pushed', res);
      });
    },
    publishTask() {
    getClueTask() {
      clueTaskApi
        .fetchClueTask({
          clueId: this.clueData.cid,
          internalTask: this.isInternal
        })
        .then((res) => {
          this.isCreateMode = res.data.length == 0;
          if (res.data.length > 0) {
            this.clueTask = res.data[0];
          } else {
            this.clueTask = undefined;
          }
        });
    },
    publishTask() {
      this.clueTaskDialog = true;
    },
    handelClueTaskEdit() {
      this.getClueTask();
      this.$emit('onClueTaskChange');
    },
    finishTask() {
      useMessageBoxTip({
        confirmMsg: '是否结束线索任务?',
        confirmTitle: '结束线索任务',
        onConfirm: () => {
          return clueTaskApi
            .finishClueTask(this.clueTask.guid)
            .then((res) => {
              if (res.data == 1) {
                this.clueTask.finished = true;
              }
            });
        }
      });
    }
  }
};