Newer
Older
Nanping_sponge_GCGL / src / views / project / projectConfiguration / xmlxwh / todoDon.vue
@liyingjing liyingjing on 25 Oct 2023 11 KB 海绵工程管理
<template>
  <div class="water-analysis-page1">
    <el-table
      :key="isFlag"
      :data="tableData"
      v-loading="tableLoading"
      stripe
      max-height="500"

    >
      <el-table-column type="index" width="55" label="序号" align="center" />
      <el-table-column
        label="项目类型编码"
        align="center"
        prop="projectTypeCode"
        show-overflow-tooltip
      />
      <el-table-column
        label="项目类型名称"
        align="center"
        prop="projectTypeName"
        show-overflow-tooltip
      />
      <el-table-column
        label="所属类型"
        align="center"
        prop="ownership"
        width="160"
        show-overflow-tooltip
      >
        <template #default="{ row }">
          <dict-tag :options="ownership" :value="row.ownership" />
        </template>
      </el-table-column>
      <el-table-column
        label="描述"
        align="center"
        prop="remark"
        show-overflow-tooltip
      />
      <el-table-column label="是否启用" align="center" prop="status">
        <template #default="{ row }">
          {{ row.status == 0 ? "是" : "否" }}
        </template>
      </el-table-column>
      <el-table-column fixed="right" label="操作" width="280" align="center">
        <template #default="{ row }">
          <el-button icon="Connection" link type="primary" @click="onCheck(row, 0,'配置')"
            >配置</el-button
          >
          <el-button icon="View" link type="primary" @click="onCheck(row, 1,'详情')"
            >详情</el-button
          >
          <el-button icon="Edit" link type="warning" @click="onCheck(row, 2,'修改')"
            >修改</el-button
          >
          <el-button icon="Delete" link type="danger" @click="onCheck(row, 3)"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="FormList.totals > 0"
      :total="FormList.totals"
      v-model:page="FormList.pageNum"
      v-model:limit="FormList.pageSize"
      @pagination="getInfoList(FormList)"
    />
    <el-dialog
      v-model="visible"
      :title="'项目类型维护'+title"
      :modal-append-to-body="false"
      :close-on-click-modal="false"
      width="50%"
    >
      <tableDalgo
        ref="tableDalgoRef"
        v-if="visible"
        @onModalClose="onModalClose"
        :typeList="typeList"
      ></tableDalgo>
      <template #footer>
        <div class="dialog-footer">
          <el-button v-if="typeList?.type != 1" type="primary" @click="submit"
            >保存</el-button
          >
          <el-button @click="visible = false">关闭</el-button>
        </div>
      </template>
    </el-dialog>
    <el-dialog
      v-model="visible1"
      title="配置"
      :modal-append-to-body="false"
      :close-on-click-modal="false"
      width="50%"
      class="noHidden"
    >
      <template v-if="visible1">
        <div class="btns">
          <el-button type="primary" plain icon="Plus" @click="openDialog({}, 'add')">新增</el-button>
        </div>
        <el-table
          class="table"
          :data="list"
          v-loading="loading"
          stripe
          element-loading-text="数据加载中..."
        >
        <el-table-column label="项目内容类型" align="center" prop="projectContentType" show-overflow-tooltip>
          <template #default="{ row }">
            <span>{{ findText('project_content_type', row.projectContentType) }}</span>
          </template>
        </el-table-column>
        <el-table-column label="项目内容(key)" align="center" prop="propertyKey" show-overflow-tooltip />
        <el-table-column label="项目内容名称" align="center" prop="propertyName" show-overflow-tooltip />
        <el-table-column label="排序" align="center" prop="sort" show-overflow-tooltip />
        <el-table-column label="操作" align="center" width="150" fixed="right">
          <template #default="{ row, $index }">
            <el-button type="primary" link size="small" @click="openDialog(row, 'view')">查看</el-button>
            <el-button type="primary" link size="small" @click="openDialog(row, 'edit')">修改</el-button>
            <el-button type="danger" link size="small" @click="del(row, $index)">删除</el-button>
          </template>
        </el-table-column>
        </el-table>
      </template>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submit1"
            >保存</el-button
          >
          <el-button @click="closeDialog">关闭</el-button>
        </div>
      </template>
    </el-dialog>
    <el-dialog
    v-model="visible2"
    :title="`${configOpts.text}配置`"
    :close-on-click-modal="false"
    width="50%"
    :before-close="closeDialog2"
    class="dialog"
  >
    <el-form
      ref="ruleForm"
      :model="form"
      :rules="rules"
      class="dialogForm"
      :disabled="configOpts.type === 'view'"
    >
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="项目内容类型:" prop="projectContentType" class="formItem">
            <el-select
              v-model="form.projectContentType"
              placeholder="请选择项目内容类型"
              style="width: 100%"
            >
              <el-option
                v-for="dict in project_content_type"
                :key="dict.value"
                :label="dict.label"
                :value="dict.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="项目内容key:" prop="propertyKey" class="formItem">
            <el-input v-model="form.propertyKey" placeholder="请输入项目内容key" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="项目内容名称:" prop="propertyName" class="formItem">
            <el-input v-model="form.propertyName" placeholder="请输入项目内容名称" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="排序:" prop="sort" class="formItem">
            <el-input v-model="form.sort" placeholder="请输入排序" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer v-if="configOpts.type !== 'view'">
      <div class="dialog-footer">
        <el-button type="primary" @click="submit2">保存</el-button>
        <el-button @click="closeDialog2">取消</el-button>
      </div>
    </template>
  </el-dialog>
  </div>
</template>
<script setup>
import { defineExpose,ref, reactive, shallowRef } from "vue";
import { required } from '@/utils/validate-helper'
import {
  getInfo,
  projectInfoDelete,
  projectInfoGet,
  projectItemDescriptionConfigAddBatch,
  getProjectItemDescriptionConfigList
} from "@/api/xmlxwh";
import tableDalgo from "./tableDalgo.vue";
import { downloadBlob, formatDate, formatMonths } from "@/utils/projectTable";
import emgBox1 from "@/utils/ElMessageBox1";
import { ElMessageBox, ElMessage } from "element-plus";
import { FileSystemList } from "@/api/project/tenderReview";
import { optTextMap } from '@/utils/map'
import { inheritAttr } from '@/utils/v3'
import { useDicts } from '@/hooks'
const { proxy } = getCurrentInstance();
const { ownership } = proxy.useDict("ownership");
const { project_content_type, findText } = useDicts(proxy)

const tableDalgoRef = ref();
let visible = ref(false);
let isFlag = ref(1);
const title=ref('')
const FormList = ref({
  pageNum: 1,
  pageSize: 10,
});
let dataForm = reactive({
  date: formatMonths(new Date()),
  tableData: "",
  tableDateTwo: "",
  tableLoading: true,
});
let { date, tableData, tableDateTwo, tableLoading } = toRefs(dataForm);
const visible1 = ref(false)
const list = ref([])
const loading = ref(false)
const configOpts = reactive({
  type: '',
  text: ''
})
const form = reactive({
  projectTypeId: '',
  projectContentType: '',
  propertyKey: '',
  propertyName: '',
  sort: ''
})
const rules = reactive({
  projectContentType: required('项目内容类型'),
  propertyKey: required('项目内容'),
  propertyName: required('项目内容名称'),
  sort: required('排序')
})
let row = {}
const visible2 = ref(false)
const outRow = shallowRef({})
//获取列表数据
const getInfoList = async (prams) => {
  tableLoading.value = true;
  let { data, total } = await getInfo(prams);
  tableData.value = data;
  FormList.value.totals = total;
  setTimeout(() => {
    tableLoading.value = false;
  }, 1000);
};
//搜索
const search = (p) => {
  getInfoList(p);
};
defineExpose({ search });
// 查看上报数据
let typeList = ref({});
const onCheck = (row, ty,t) => {
  title.value=t
  if (ty == 1 || ty == 2) {
    projectInfoGet(row.id).then(({ code, data }) => {
      if (code == 200) {
        typeList.value = { ...data, type: ty };
        FileSystemList({
          refId: row.id,
          refType: "proProjectType",
        }).then(({ data }) => {
          typeList.value.fileList1 = data;
          visible.value = true;
        });
      }
    });
  } else if (ty == 3) {
    emgBox1(row.id, projectInfoDeleteM, "您确定删除吗?");
  } else if(ty === 0) {
    visible1.value = true
    outRow.value = row
    form.projectTypeId = row.id
    getList(row.id)
  }
};
//删除
const projectInfoDeleteM = async (id) => {
  let { code } = await projectInfoDelete(id);
  if(code==200){
    ElMessage({
          type: "success",
          message: '操作成功',
        });
     getInfoList(FormList.value);
  }
};
//撤回操作
const Returncnfiorm = async (id) => {
  let { code } = await projectInfoDelete(id);
};
function onModalClose() {
  visible.value = false;
  console.log("object", 3444)

  getInfoList(FormList.value);
}
function submit() {
  tableDalgoRef.value.submit();
}

const submit1 = async () => {
  const params = {
    projectTypeId: outRow.value.id,
    saveRequestList: list.value
  }
  const res = await projectItemDescriptionConfigAddBatch(params)
  if(res?.code !== 200) return
  proxy.$modal.msgSuccess('操作成功!')
  closeDialog()
}
const openDialog = (data, opt) => {
  row = data
  configOpts.type = opt
  configOpts.text = optTextMap.get(opt)
  visible2.value = true
  nextTick(() => {
    inheritAttr(data, form)
    console.log(form)
  })
}

const closeDialog = () => {
  visible1.value = false
}

const submit2 = () => {
  proxy.$refs.ruleForm.validate(async (valid, fields) => {
    if (valid) {
      if(configOpts.type === 'add') {
        list.value.push({ ...form })
      } else {
        inheritAttr(form, row)
      }
      // proxy.$modal.msgSuccess('操作成功!')
      closeDialog2()
    } else {
      console.log('error submit!', fields)
    }
  })
}

const del = (row, index) => {
  proxy.$modal
  .confirm("是否确认删除?")
  .then(async () => {
    list.value.splice(index, 1)
  })
  .catch(() => {});
}

const closeDialog2 = () => {
  proxy.$refs.ruleForm.resetFields()
  visible2.value = false
  row = {}
}

const getList = async (id) => {
  const res = await getProjectItemDescriptionConfigList({ projectTypeId: id })
  if(res?.code !== 200) return
  list.value = res?.data || []
}

onMounted(() => {
  getInfoList(FormList.value);
});
</script>
<style lang="scss" scoped>
.water-analysis-page1 {
  height: 90vh;
  ::v-deep .el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
    font-size: 18px;
    color: rgb(255, 255, 255);
    background-color: rgb(22, 132, 252);
    border-left: 1px solid rgb(22, 132, 252);
  }
  ::v-deep(.formItem) {
    .el-form-item__label {
      width: 110px;
      word-break: keep-all;
    }
  }
}
:deep(.el-dialog__body) {
  background-color: #eef1fb;
  height: 450px;
  overflow: hidden;
}

:deep(.noHidden) {
  .el-dialog__body {
    overflow: visible;
    height: auto;
  }
}

.btns {
  display: flex;
  justify-content: flex-end;
  margin-bottom: 15px;
}
</style>