Newer
Older
KaiFengPC / src / views / preassess / evaluation / operate.vue
@zhangdeliang zhangdeliang on 23 May 7 KB 初始化项目
<template>
  <el-dialog
    class="dialog"
    v-model="visible"
    :title="`${opts.text}项目工程预评估`"
    :close-on-click-modal="false"
    width="70%"
    :before-close="close"
  >
    <el-card class="box-card">
      <template #header>
        <div class="card-header">
          <span>项目目标</span>
        </div>
      </template>
      <el-form class="form" ref="targetForm" :model="form">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="建设工程:" prop="projectNo">
              <el-select v-model="form.projectNo" placeholder="建设工程" v-if="opts.type === 'add'">
                <el-option
                  v-for="item in list"
                  :label="item.projectName"
                  :value="item.projectNo"
                  :key="item.projectNo"
                  @click="selectChange(item)"
                />
              </el-select>
              <span v-else>{{ form.projectName }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="工程类型:" prop="engineeringType">
              <span>{{ findText('sponge_engineering_type', form.engineeringType) }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="建设分区:" prop="drainagePartition">
              <span>{{ findText('drainage_partition', form.drainagePartition) }}</span>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="建设类型:" prop="buildCategory">
              <span>{{ findText('build_category', form.buildCategory) }}</span>
            </el-form-item></el-col
          >
          <el-col :span="8">
            <el-form-item label="年径流总量控制率%,≥:" prop="targetAnnualRunoffTotalControlRate">
              <span>{{ form.targetAnnualRunoffTotalControlRate }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="年径流污染控制率%,≥:" prop="targetAnnualRunoffPollutionControlRate">
              <span>{{ form.targetAnnualRunoffPollutionControlRate }}</span>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="调蓄量是否达标:" prop="storageCapacityStandards">
              <el-tag
                v-if="standardMap.get(form.storageCapacityStandards)?.text"
                :type="standardMap.get(form.storageCapacityStandards)?.type"
                >{{ standardMap.get(form.storageCapacityStandards)?.text }}</el-tag
              >
              <span v-else></span>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="污染去除率是否达标:" prop="pollutionRemovalStandards">
              <el-tag
                v-if="standardMap.get(form.pollutionRemovalStandards)?.text"
                :type="standardMap.get(form.pollutionRemovalStandards)?.type"
                >{{ standardMap.get(form.pollutionRemovalStandards)?.text }}</el-tag
              >
              <span v-else></span>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </el-card>
    <!-- 详情显示 -->
    <div class="tabs" v-if="isSelect">
      <el-tabs v-model="active">
        <el-tab-pane label="控制项" :name="0">
          <Control ref="controlRef" :key="form.projectNo" :project-info="form" :id="id" :opts="opts" />
        </el-tab-pane>
        <el-tab-pane label="评分项" :name="1">
          <Mark ref="markRef" :key="form.projectNo" :project-info="form" :id="id" :opts="opts" />
        </el-tab-pane>
      </el-tabs>
    </div>
    <template #footer v-if="isSelect && opts.type !== 'view'">
      <div class="dialog-footer">
        <div class="btns">
          <el-button type="primary" @click="submit">保存</el-button>
          <el-button type="primary" v-show="form.rowId" @click="handleOk">提交</el-button>
          <el-button @click="close">取消</el-button>
        </div>
      </div>
    </template>
  </el-dialog>
</template>

<script setup>
import { ref, reactive, onMounted, toRef, computed, nextTick } from 'vue';
import Control from './control.vue';
import Mark from './mark.vue';
import {
  getFacilitiesStandardCalcList,
  projectPreEvaluateAdd,
  projectPreEvaluateDetails,
  projectPreEvaluateSubmit,
} from '@/api/preassess/evaluation';
import { inheritAttr } from '@/utils/v3';
const { proxy } = getCurrentInstance();
const emit = defineEmits(['update:modelValue', 'close']);
const props = defineProps({
  id: {
    type: [String, Number],
    default: '',
  },
  opts: {
    type: Object,
    default: () => {},
  },
  modelValue: {
    type: Boolean,
    default: false,
  },
});
const { id, opts } = props;

const { build_category } = proxy.useDict('build_category');
const { drainage_partition } = proxy.useDict('drainage_partition');
const { sponge_engineering_type } = proxy.useDict('sponge_engineering_type');
const dicts = {
  build_category,
  drainage_partition,
  sponge_engineering_type,
};
const findText = (prop, type) => {
  const item = dicts[prop].value.find(it => it.value === type);
  return item?.label || '';
};
const isShowDialog = toRef(props, 'modelValue');
const visible = computed({
  get() {
    return isShowDialog.value;
  },
  set(value) {
    emit('update:modelValue', value);
  },
});

const form = reactive({
  id: '',
  rowId: id,
  projectNo: '',
  projectName: '',
  buildCategory: '',
  engineeringType: '',
  drainagePartition: '',
  targetAnnualRunoffTotalControlRate: '',
  targetAnnualRunoffPollutionControlRate: '',
  storageCapacityStandards: '',
  pollutionRemovalStandards: '',
});
const active = ref(0);
const list = ref([]);

const standardMap = new Map([
  [0, { text: '否', type: 'danger' }],
  [1, { text: '是', type: 'success' }],
]);

const isSelect = ref(false);
const isSubmit = ref(false);

const close = () => {
  visible.value = false;
  emit('close', {
    type: opts.type,
    isSubmit: isSubmit.value,
  });
};

const submit = async () => {
  console.log('submit!!!');
  const params = {
    id: form.rowId,
    calcId: form.id,
    projectNo: form.projectNo,
    evaluateAssessControllerItemSaveRequestList: proxy.$refs.controlRef.treeData,
    evaluateAssessGradeItemSaveRequestList: proxy.$refs.markRef.treeData,
  };
  const res = await projectPreEvaluateAdd(params);
  if (res?.code !== 200) return;
  if (!form.rowId) form.rowId = res.data;
  isSubmit.value = true;
  proxy.$modal.msgSuccess('操作成功');
};

const handleOk = async () => {
  const formData = new FormData();
  formData.append('id', form.rowId);
  const res = await projectPreEvaluateSubmit(formData);
  if (res?.code !== 200) return;
  isSubmit.value = true;
  proxy.$modal.msgSuccess('操作成功');
  close();
};

const selectChange = item => {
  isSelect.value = true;
  inheritAttr(item, form);
  active.value = 0;
};

const getList = async () => {
  const res = await getFacilitiesStandardCalcList({ status: '2' });
  if (res?.code !== 200) return;
  list.value = res.data;
};

const getDetail = async () => {
  const res = await projectPreEvaluateDetails(id);
  if (res?.code !== 200) return;
  console.log(res);
  const projectInfo = list.value.find(item => item.projectNo === res.data.projectNo);
  selectChange(projectInfo);
  nextTick(() => {
    proxy.$refs.controlRef.getDetail(res.data.evaluateAssessControllerItemSaveRequestList);
    proxy.$refs.markRef.getDetail(res.data.evaluateAssessGradeItemSaveRequestList);
  });
};

onMounted(async () => {
  await getList();
  if (id) getDetail();
});
</script>

<style lang="scss" scoped>
.box-card {
  .card-header {
    font-weight: 700;
    font-size: 18px;
  }

  :deep(.form) {
    .el-form-item {
      margin-bottom: 5px;
    }
  }
}
</style>