riku
5 天以前 f19e5267cc23b1c714dc746239864f33ed715dd9
src/views/fysp/task/components/CompSubTaskList.vue
@@ -1,40 +1,179 @@
<template>
  <el-row justify="space-between">
    <el-text>单日计划</el-text>
    <el-button type="success" size="small" @click="add">新增</el-button>
    <el-text>{{ dateStr }}计划</el-text>
    <div v-show="create && data && data.length > 0">
      <el-button
        icon="IconPrinter"
        type="success"
        size="small"
        plain
        @click="handleInspectFileDownload"
        >单据打印</el-button
      >
      <el-button type="success" size="small" @click="add" icon="Switch"
        >任务调整</el-button
      >
      <el-button type="primary" size="small" @click="openMap">
        进入地图<el-icon class="el-icon--right"><Right /></el-icon>
      </el-button>
    </div>
  </el-row>
  <el-divider />
  <div>
    <el-scrollbar :height="height">
      <ItemSubTask v-for="s in data" :key="s.guid" :item="s">
        <template #default="{ item }">
          <el-button type="danger" size="small" @click="remove(item)"
            >移除</el-button
    <el-scrollbar v-loading="loading" :height="height">
      <el-space
        v-if="data && data.length > 0"
        fill
        :fill-ratio="100"
        direction="vertical"
        style="width: 100%"
      >
        <ItemSubTask v-for="s in data" :key="s.guid" :item="s">
          <template #default="{ item }">
            <el-space direction="horizontal">
              <el-button
                :disabled="item.status != '未执行'"
                plain
                type="primary"
                size="small"
                icon="EditPen"
                @click="edit(item)"
                title="修改"
              ></el-button>
              <el-button
                :disabled="item.status != '未执行'"
                type="danger"
                size="small"
                icon="Delete"
                @click="remove(item)"
                title="移除"
              ></el-button>
            </el-space>
          </template>
        </ItemSubTask>
      </el-space>
      <div v-else>
        <el-empty description="无任务记录" />
        <el-row v-if="create" justify="center">
          <el-button
            type="success"
            size="small"
            :loading="createLoading"
            @click="add"
            >添加任务</el-button
          >
        </template>
      </ItemSubTask>
        </el-row>
      </div>
    </el-scrollbar>
  </div>
  <!-- 编辑巡查子任务 -->
  <el-dialog
    v-model="dialogVisible"
    width="600"
    title="巡查任务编辑"
    destroy-on-close
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    :show-close="false"
  >
    <CompSubTaskEdit
      v-model="activeItem"
      @submit="onEditSubmit"
      @cancel="dialogVisible = false"
    ></CompSubTaskEdit>
  </el-dialog>
  <!-- 巡查单下载 -->
  <SceneInspectFile
    v-model="downloadDialog"
    :value="downloadSceneList"
  ></SceneInspectFile>
</template>
<script setup>
import { ref, watch, onMounted } from 'vue';
import { ref, computed, watch, onMounted, onUnmounted } from 'vue';
import { ElMessageBox, ElNotification, ElMessage, dayjs } from 'element-plus';
import CompSubTaskEdit from './CompSubTaskEdit.vue';
import SceneInspectFile from '@/views/fysp/scene/SceneInspectFile.vue';
import subtaskApi from '@/api/fysp/subtaskApi';
const props = defineProps({
  data: Array,
  modelValue: Array,
  date: Date,
  height: {
    type: String,
    default: '70vh'
  }
  },
  // 是否显示添加任务按钮
  create: Boolean,
  loading: Boolean,
  createLoading: Boolean
});
const curSubTaskList = ref([]);
const emit = defineEmits(['add', 'remove']);
const dialogVisible = ref(false);
const activeItem = ref(null);
const data = computed(() => props.modelValue);
const downloadDialog = ref(false);
const downloadSceneList = ref([]);
const emit = defineEmits(['submit', 'add', 'openMap', 'remove', 'update:modelValue']);
const dateStr = computed(() => dayjs(props.date).format('MM月DD日'));
function remove(item) {
  emit('remove', item);
  if (item.status == '未执行') {
    ElMessageBox.confirm('是否移除监管任务', `移除确认`, {
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      return subtaskApi.deleteSubtask(item.stguid).then((res) => {
        if (res == 1) {
          const index = data.value.indexOf(item);
          data.value.splice(index, 1);
          emit('update:modelValue', data.value);
          emit('remove', item);
        } else {
          Promise.reject('删除巡查任务失败');
        }
      });
    });
  }
}
function edit(item) {
  activeItem.value = item;
  dialogVisible.value = true;
}
function onEditSubmit(item) {
  dialogVisible.value = false;
  const index = data.value.findIndex((v) => {
    return item.stguid == v.stguid;
  });
  data.value.splice(index, 1, item);
  emit('update:modelValue', data.value);
  emit('submit');
}
function add() {
  emit('add');
}
/**
 * 打开场景地图
 */
function openMap() {
  emit('openMap');
}
onUnmounted(() => {
  dialogVisible.value = false;
});
function handleInspectFileDownload() {
  downloadSceneList.value = data.value.map((v) => v.scenseid);
  downloadDialog.value = true;
}
</script>