| | |
| | | createAward, deleteAward, getAward, getAwardByProject, approveAward, generatePurchaseOrder, |
| | | confirmTenderProject, |
| | | } from '#/api/srm/tender'; |
| | | import { getSupplierSimpleList } from '#/api/srm/supplier'; |
| | | import { getSupplierList } from '#/api/srm/supplier'; |
| | | import { getItemSimpleList } from '#/api/mdm/item'; |
| | | import type { MdmItemApi } from '#/api/mdm/item'; |
| | | import { |
| | |
| | | onMounted(async () => { |
| | | const [items, suppliers] = await Promise.all([ |
| | | getItemSimpleList(), |
| | | getSupplierSimpleList(), |
| | | getSupplierList(), |
| | | ]); |
| | | mdmItemList.value = items; |
| | | supplierList.value = suppliers; |
| | |
| | | const bidColumns = [ |
| | | { title: '投标编号', dataIndex: 'bidNo', width: 140 }, |
| | | { title: '供应商', dataIndex: 'supplierName', width: 200 }, |
| | | { title: '投标金额', dataIndex: 'bidTotalAmount', width: 120 }, |
| | | { title: '投标总金额', dataIndex: 'bidTotalAmount', width: 120 }, |
| | | { title: '投标时间', dataIndex: 'bidTime', width: 160 }, |
| | | { title: '状态', dataIndex: 'bidStatus', width: 100, customRender: ({ text }: any) => BID_STATUS_MAP[text] || text }, |
| | | { title: '操作', key: 'actions', width: 240 }, |
| | |
| | | |
| | | const quoteColumns = [ |
| | | { title: '物料', dataIndex: 'materialName', width: 120 }, |
| | | { title: '报价价格', dataIndex: 'quotePrice', width: 100 }, |
| | | { title: '报价单价', dataIndex: 'quotePrice', width: 100 }, |
| | | { title: '税率(%)', dataIndex: 'taxRate', width: 80 }, |
| | | { title: '交期(天)', dataIndex: 'deliveryCycle', width: 80 }, |
| | | { title: '付款条件', dataIndex: 'paymentTerms', width: 120 }, |
| | |
| | | </div> |
| | | |
| | | <!-- 招标说明 / 资质要求 --> |
| | | <template v-if="project.tenderDesc || project.qualificationRequirements"> |
| | | <template |
| | | v-if="project.tenderDesc || project.qualificationRequirements || (project.attachmentList && project.attachmentList.length)" |
| | | > |
| | | <a-divider class="!my-2" /> |
| | | <a-collapse :bordered="false" ghost expand-icon-position="end"> |
| | | <a-collapse-panel v-if="project.tenderDesc" key="desc" header="招标说明"> |
| | | <p class="text-gray-500 text-xs whitespace-pre-wrap">{{ project.tenderDesc }}</p> |
| | | </a-collapse-panel> |
| | | <a-collapse-panel v-if="project.qualificationRequirements" key="req" header="资质要求"> |
| | | <p class="text-gray-500 text-xs whitespace-pre-wrap">{{ project.qualificationRequirements }}</p> |
| | | <a-collapse-panel |
| | | v-if="project.qualificationRequirements || (project.attachmentList && project.attachmentList.length)" |
| | | key="req" |
| | | header="资质要求" |
| | | > |
| | | <p v-if="project.qualificationRequirements" class="text-gray-500 text-xs whitespace-pre-wrap">{{ project.qualificationRequirements }}</p> |
| | | <div v-if="project.attachmentList && project.attachmentList.length" class="mt-2 flex flex-col gap-1"> |
| | | <a |
| | | v-for="file in project.attachmentList" |
| | | :key="file.id" |
| | | :href="file.url" |
| | | target="_blank" |
| | | rel="noopener noreferrer" |
| | | class="text-blue-500 text-xs hover:underline" |
| | | > |
| | | {{ file.name || '附件-' + file.id }} |
| | | </a> |
| | | </div> |
| | | </a-collapse-panel> |
| | | </a-collapse> |
| | | </template> |
| | |
| | | </a-form-item> |
| | | <a-row :gutter="12"> |
| | | <a-col :span="8"> |
| | | <a-form-item label="报价价格" required><a-input-number v-model:value="quoteForm.quotePrice" :min="0" class="!w-full" placeholder="报价"><template #addonAfter>元</template></a-input-number></a-form-item> |
| | | <a-form-item label="报价单价" required><a-input-number v-model:value="quoteForm.quotePrice" :min="0" class="!w-full" placeholder="报价"><template #addonAfter>元</template></a-input-number></a-form-item> |
| | | </a-col> |
| | | <a-col :span="8"> |
| | | <a-form-item label="税率(%)"><a-input-number v-model:value="quoteForm.taxRate" :min="0" :max="100" class="!w-full" placeholder="如 13" /></a-form-item> |