<template> <div> <el-card class="!border-none mb-4" shadow="never"> <el-form class="mb-[-16px]" :model="queryParams" label-width="80px"> <el-row> <el-col :span="6"> <el-form-item label="项目名称" prop="project_name"> <el-input v-model="queryParams.project_name" clearable placeholder="请输入项目名称" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="项目编号" prop="project_code"> <el-input v-model="queryParams.project_code" clearable placeholder="请输入项目编号" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="性质" prop="nature"> <el-select class="flex-1" v-model="queryParams.nature" clearable placeholder="请选择性质"> <el-option v-for="(item, index) in dictData.cost_consultation_industry_nature" :key="index" :label="item.name" :value="parseInt(item.value)" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item> <el-button type="primary" @click="resetPage">查询</el-button> <el-button @click="resetParams">重置</el-button> </el-form-item> </el-col> </el-row> </el-form> </el-card> <el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-button type="primary" @click="handleAdd"> <template #icon> <icon name="el-icon-Plus" /> </template> 新增 </el-button> <el-button :disabled="!selectData.length" @click="handleDelete(selectData)"> 删除 </el-button> <div class="mt-4"> <el-table border :data="pager.lists" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column label="考核人" prop="progress" show-overflow-tooltip /> <el-table-column label="被考核人" prop="build_area_text" show-overflow-tooltip /> <el-table-column label="考核类型" prop="project_level_text" show-overflow-tooltip /> <el-table-column label="考核月份" prop="total_investment" show-overflow-tooltip width="120" /> <el-table-column label="考核总分" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="自评得分" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="上评得分" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="最终得分" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="考核评语" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="创建时间" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="流程状态" prop="engineering_status_text" show-overflow-tooltip /> <el-table-column label="操作" width="170" fixed="right"> <template #default="{ row }"> <el-button v-perms="['manage_basic.manage_project/edit']" type="primary" link @click="handleEdit(row)"> 编辑 </el-button> <el-button v-perms="['manage_basic.manage_project/delete']" type="danger" link @click="handleDelete(row.id)"> 删除 </el-button> </template> </el-table-column> </el-table> </div> <div class="flex mt-4 justify-end"> <pagination v-model="pager" @change="getLists" /> </div> </el-card> <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="success()" @close="showEdit = false" :deptList="deptList" /> </div> </template> <script lang="ts" setup name="manageProjectLists"> import { usePaging } from '@/hooks/usePaging' import { useDictData } from '@/hooks/useDictOptions' import { apiManageProjectLists, apiManageProjectDelete, apiManageProjectDetail } from '@/api/manage_project' import feedback from '@/utils/feedback' import EditPopup from './edit.vue' import { deptLists } from "@/api/org/department"; const route = useRoute() const router = useRouter() const editRef = shallowRef<InstanceType<typeof EditPopup>>() const detailRef = ref('') // 是否显示编辑框 const showEdit = ref(false) const showDetail = ref(false) // 查询条件 const queryParams = reactive({ project_name: '', project_code: '', nature: '', industry: '', build_area: '', project_level: '', engineering_status: '' }) // 选中数据 const selectData = ref<any[]>([]) // 表格选择后回调事件 const handleSelectionChange = (val: any[]) => { selectData.value = val.map(({ id }) => id) } // 获取字典数据 const { dictData } = useDictData('supervision_project_nature,industry,const_area,supervision_project_level,engineering_status') // 分页相关 const { pager, getLists, resetParams, resetPage } = usePaging({ fetchFun: apiManageProjectLists, params: queryParams }) // 添加 const handleAdd = async () => { showEdit.value = true await nextTick() editRef.value?.open('add') } // 编辑 const handleEdit = async (data: any) => { let res = await apiManageProjectDetail({ id: data.id }) showEdit.value = true await nextTick() editRef.value?.open('edit') editRef.value?.setFormData(res) } // 删除 const handleDelete = async (id: number | any[]) => { await feedback.confirm('确定要删除?') await apiManageProjectDelete({ id }) getLists() } getLists() </script>