<template>
|
<ContentWrap>
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="88px">
|
<el-form-item label="申请编号" prop="applyNo">
|
<el-input v-model="queryParams.applyNo" placeholder="请输入编号" clearable @keyup.enter="handleQuery" class="!w-200px" />
|
</el-form-item>
|
<el-form-item label="供应商名称" prop="supplierName">
|
<el-input v-model="queryParams.supplierName" placeholder="请输入名称" clearable @keyup.enter="handleQuery" class="!w-200px" />
|
</el-form-item>
|
<el-form-item label="审核状态" prop="applyStatus">
|
<el-select v-model="queryParams.applyStatus" placeholder="请选择" clearable class="!w-160px">
|
<el-option label="待提交" :value="0" />
|
<el-option label="待采购审核" :value="10" />
|
<el-option label="待质量审核" :value="20" />
|
<el-option label="待财务审核" :value="30" />
|
<el-option label="已通过" :value="40" />
|
<el-option label="已拒绝" :value="50" />
|
</el-select>
|
</el-form-item>
|
<el-form-item>
|
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
<el-button type="primary" plain @click="openForm()" v-hasPermi="['srm:supplier-apply:create']">
|
<Icon icon="ep:plus" class="mr-5px" /> 新增申请
|
</el-button>
|
</el-form-item>
|
</el-form>
|
</ContentWrap>
|
|
<ContentWrap>
|
<el-table v-loading="loading" :data="list" stripe>
|
<el-table-column label="申请编号" align="center" prop="applyNo" min-width="160" />
|
<el-table-column label="供应商名称" align="center" prop="supplierName" min-width="180" show-overflow-tooltip />
|
<el-table-column label="供应商类型" align="center" prop="supplierType" min-width="100" />
|
<el-table-column label="联系人" align="center" prop="contactName" min-width="100" />
|
<el-table-column label="联系电话" align="center" prop="contactMobile" min-width="130" />
|
<el-table-column label="申请人" align="center" prop="applyUserName" min-width="100" />
|
<el-table-column label="申请时间" align="center" prop="applyTime" :formatter="dateFormatter" width="160px" />
|
<el-table-column label="审核状态" align="center" prop="applyStatus" min-width="120">
|
<template #default="scope">
|
<el-tag v-if="scope.row.applyStatus === 0" type="info">待提交</el-tag>
|
<el-tag v-else-if="scope.row.applyStatus === 10" type="warning">待采购审核</el-tag>
|
<el-tag v-else-if="scope.row.applyStatus === 20" type="warning">待质量审核</el-tag>
|
<el-tag v-else-if="scope.row.applyStatus === 30" type="warning">待财务审核</el-tag>
|
<el-tag v-else-if="scope.row.applyStatus === 40" type="success">已通过</el-tag>
|
<el-tag v-else-if="scope.row.applyStatus === 50" type="danger">已拒绝</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="160px" />
|
<el-table-column label="操作" align="center" width="260" fixed="right">
|
<template #default="scope">
|
<el-button v-if="scope.row.applyStatus === 0" link type="primary" @click="handleSubmit(scope.row.id)" v-hasPermi="['srm:supplier-apply:update']">提交</el-button>
|
<el-button v-if="scope.row.applyStatus === 10" link type="primary" @click="openReview(scope.row.id, 'purchase')" v-hasPermi="['srm:supplier-apply:update']">采购审核</el-button>
|
<el-button v-if="scope.row.applyStatus === 20" link type="primary" @click="openReview(scope.row.id, 'quality')" v-hasPermi="['srm:supplier-apply:update']">质量审核</el-button>
|
<el-button v-if="scope.row.applyStatus === 30" link type="primary" @click="openReview(scope.row.id, 'finance')" v-hasPermi="['srm:supplier-apply:update']">财务审核</el-button>
|
<el-button v-if="scope.row.applyStatus === 0" link type="primary" @click="openForm(scope.row.id)" v-hasPermi="['srm:supplier-apply:update']">编辑</el-button>
|
<el-button link type="primary" @click="openDetail(scope.row.id)" v-hasPermi="['srm:supplier-apply:query']">详情</el-button>
|
<el-button v-if="scope.row.applyStatus === 0" link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['srm:supplier-apply:delete']">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
</ContentWrap>
|
|
<!-- 新增/编辑对话框 -->
|
<el-dialog :title="'准入申请'" v-model="dialogVisible" width="700px" @close="resetForm">
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="110px">
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="供应商名称" prop="supplierName">
|
<el-input v-model="formData.supplierName" placeholder="请输入名称" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="供应商类型" prop="supplierType">
|
<el-select v-model="formData.supplierType" placeholder="请选择" class="!w-full">
|
<el-option label="生产型" value="1" />
|
<el-option label="贸易型" value="2" />
|
<el-option label="服务型" value="3" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="企业性质" prop="companyNature">
|
<el-select v-model="formData.companyNature" placeholder="请选择" class="!w-full">
|
<el-option label="国企" value="国企" />
|
<el-option label="民营" value="民营" />
|
<el-option label="外资" value="外资" />
|
<el-option label="合资" value="合资" />
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="注册资金(万元)" prop="registeredCapital">
|
<el-input-number v-model="formData.registeredCapital" :min="0" :precision="2" controls-position="right" class="!w-full" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="营业执照编号" prop="businessLicenseNo">
|
<el-input v-model="formData.businessLicenseNo" placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="税号" prop="taxNo">
|
<el-input v-model="formData.taxNo" placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="联系人" prop="contactName">
|
<el-input v-model="formData.contactName" placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="联系电话" prop="contactMobile">
|
<el-input v-model="formData.contactMobile" placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="邮箱" prop="contactEmail">
|
<el-input v-model="formData.contactEmail" placeholder="请输入" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item label="公司地址" prop="address">
|
<el-input v-model="formData.address" placeholder="请输入地址" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<template #footer>
|
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button type="primary" @click="submitForm" :loading="formLoading">确定</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 审核对话框 -->
|
<el-dialog :title="'审核'" v-model="reviewVisible" width="500px">
|
<el-form :model="reviewData" label-width="100px">
|
<el-form-item label="审核意见">
|
<el-input v-model="reviewData.opinion" type="textarea" :rows="3" placeholder="请输入审核意见" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="reviewVisible = false">取消</el-button>
|
<el-button type="danger" @click="handleReject" v-if="reviewData.type !== 'finance'">拒绝</el-button>
|
<el-button type="primary" @click="handleApprove">通过</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 详情对话框 -->
|
<el-dialog :title="'申请详情'" v-model="detailVisible" width="750px">
|
<el-descriptions :column="2" border>
|
<el-descriptions-item label="申请编号">{{ detailData.applyNo }}</el-descriptions-item>
|
<el-descriptions-item label="供应商名称">{{ detailData.supplierName }}</el-descriptions-item>
|
<el-descriptions-item label="供应商类型">{{ detailData.supplierType }}</el-descriptions-item>
|
<el-descriptions-item label="企业性质">{{ detailData.companyNature }}</el-descriptions-item>
|
<el-descriptions-item label="营业执照编号">{{ detailData.businessLicenseNo }}</el-descriptions-item>
|
<el-descriptions-item label="税号">{{ detailData.taxNo }}</el-descriptions-item>
|
<el-descriptions-item label="联系人">{{ detailData.contactName }}</el-descriptions-item>
|
<el-descriptions-item label="联系电话">{{ detailData.contactMobile }}</el-descriptions-item>
|
<el-descriptions-item label="采购审核人">{{ detailData.purchaseReviewerId }}</el-descriptions-item>
|
<el-descriptions-item label="采购审核意见">{{ detailData.purchaseReviewOpinion || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="质量审核意见">{{ detailData.qualityReviewOpinion || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="财务审核意见">{{ detailData.financeReviewOpinion || '-' }}</el-descriptions-item>
|
</el-descriptions>
|
</el-dialog>
|
</template>
|
|
<script setup lang="ts">
|
import { dateFormatter } from '@/utils/formatTime'
|
import { SrmSupplierApplyApi, SrmSupplierApplyVO } from '@/api/srm/supplierApply'
|
|
defineOptions({ name: 'SrmSupplierApply' })
|
|
const message = useMessage()
|
|
const loading = ref(true)
|
const list = ref<SrmSupplierApplyVO[]>([])
|
const total = ref(0)
|
const queryParams = reactive({
|
pageNo: 1,
|
pageSize: 10,
|
applyNo: undefined,
|
supplierName: undefined,
|
applyStatus: undefined
|
})
|
const queryFormRef = ref()
|
|
const getList = async () => {
|
loading.value = true
|
try {
|
const data = await SrmSupplierApplyApi.getApplyPage(queryParams)
|
list.value = data.list
|
total.value = data.total
|
} finally {
|
loading.value = false
|
}
|
}
|
|
const handleQuery = () => { queryParams.pageNo = 1; getList() }
|
const resetQuery = () => { queryFormRef.value.resetFields(); handleQuery() }
|
|
// 新增/编辑
|
const dialogVisible = ref(false)
|
const formLoading = ref(false)
|
const formData = ref<any>({})
|
const formRules = reactive({ supplierName: [{ required: true, message: '供应商名称不能为空', trigger: 'blur' }] })
|
const formRef = ref()
|
|
const openForm = async (id?: number) => {
|
if (id) {
|
formData.value = await SrmSupplierApplyApi.getApply(id)
|
} else {
|
formData.value = {}
|
}
|
dialogVisible.value = true
|
}
|
|
const resetForm = () => { formData.value = {}; formRef.value?.resetFields() }
|
|
const submitForm = async () => {
|
await formRef.value.validate()
|
formLoading.value = true
|
try {
|
if (formData.value.id) {
|
await SrmSupplierApplyApi.updateApply(formData.value)
|
} else {
|
await SrmSupplierApplyApi.createApply(formData.value)
|
}
|
message.success('操作成功')
|
dialogVisible.value = false
|
await getList()
|
} finally {
|
formLoading.value = false
|
}
|
}
|
|
const handleDelete = async (id: number) => {
|
try {
|
await message.delConfirm()
|
await SrmSupplierApplyApi.deleteApply(id)
|
message.success('删除成功')
|
await getList()
|
} catch {}
|
}
|
|
// 提交
|
const handleSubmit = async (id: number) => {
|
try {
|
await message.confirm('确认提交该申请?')
|
await SrmSupplierApplyApi.submitApply(id)
|
message.success('提交成功')
|
await getList()
|
} catch {}
|
}
|
|
// 审核
|
const reviewVisible = ref(false)
|
const reviewData = ref({ id: 0, opinion: '', type: '' })
|
|
const openReview = (id: number, type: string) => {
|
reviewData.value = { id, opinion: '', type }
|
reviewVisible.value = true
|
}
|
|
const handleApprove = async () => {
|
const apiMap: any = {
|
purchase: SrmSupplierApplyApi.reviewPurchase,
|
quality: SrmSupplierApplyApi.reviewQuality,
|
finance: SrmSupplierApplyApi.reviewFinance
|
}
|
await apiMap[reviewData.value.type]({ id: reviewData.value.id, opinion: reviewData.value.opinion || '审核通过' })
|
message.success('审核通过')
|
reviewVisible.value = false
|
await getList()
|
}
|
|
const handleReject = async () => {
|
await SrmSupplierApplyApi.reviewFinance({ id: reviewData.value.id, opinion: reviewData.value.opinion || '审核拒绝' })
|
message.success('已拒绝')
|
reviewVisible.value = false
|
await getList()
|
}
|
|
// 详情
|
const detailVisible = ref(false)
|
const detailData = ref<any>({})
|
|
const openDetail = async (id: number) => {
|
detailData.value = await SrmSupplierApplyApi.getApply(id)
|
detailVisible.value = true
|
}
|
|
onMounted(() => { getList() })
|
</script>
|