| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954 |
- <template>
- <ContentWrap>
- <!-- 搜索工作栏 -->
- <el-form
- class="-mb-15px"
- :model="queryParams"
- ref="queryFormRef"
- :inline="true"
- label-width="100px"
- >
- <el-form-item label="产品编号" prop="productNo">
- <el-input
- v-model="queryParams.productNo"
- placeholder="请输入产品编号"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="任务单号" prop="orderNo">
- <el-input
- v-model="queryParams.orderNo"
- placeholder="请输入任务单号"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="检验结论" prop="reportConclusion">
- <el-select
- v-model="queryParams.reportConclusion"
- placeholder="请选择检验结论"
- clearable
- class="!w-240px"
- >
- <el-option label="符合要求" value="符合要求" />
- <el-option label="基本符合要求" value="基本符合要求" />
- <el-option label="不符合要求" value="不符合要求" />
- </el-select>
- </el-form-item>
- <el-form-item label="使用单位" prop="useUnitName">
- <el-input
- v-model="queryParams.useUnitName"
- placeholder="请输入使用单位"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="设备注册代码" prop="equipCode">
- <el-input
- v-model="queryParams.equipCode"
- placeholder="请输入设备注册代码"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="使用登记编号" prop="useRegisterNo">
- <el-input
- v-model="queryParams.useRegisterNo"
- placeholder="请输入使用登记编号"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="报告编号" prop="reportNo">
- <el-input
- v-model="queryParams.reportNo"
- placeholder="请输入报告编号"
- clearable
- @keyup.enter="handleQuery"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="检验性质" prop="checkType">
- <el-select
- v-model="queryParams.checkType"
- placeholder="请选择检验性质"
- clearable
- class="!w-240px"
- >
- <el-option
- v-for="(item, key) in PressurePipeCheckTypeMap"
- :key="key"
- :label="item"
- :value="key"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="检验时间" prop="checkDate">
- <el-date-picker
- v-model="queryParams.checkDate"
- value-format="YYYY-MM-DD"
- type="daterange"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="批准时间" prop="ratifyTime">
- <el-date-picker
- v-model="queryParams.ratifyTime"
- value-format="YYYY-MM-DD HH:mm:ss"
- type="daterange"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item label="缴费情况" prop="paymentStatus">
- <el-select
- v-model="queryParams.paymentStatus"
- placeholder="请选择缴费情况"
- clearable
- class="!w-240px"
- @change="handleQuery"
- >
- <el-option label="待缴费" :value="0" />
- <el-option label="已缴费" :value="1" />
- </el-select>
- </el-form-item>
- <el-form-item label="发放状态" prop="releaseStatus">
- <el-select
- v-model="queryParams.releaseStatus"
- placeholder="请选择发放状态"
- clearable
- class="!w-240px"
- >
- <el-option
- v-for="(item, key) in PrintIssueStatusMap"
- :key="key"
- :label="item"
- :value="key"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="部门" prop="deptName">
- <DeptSelect
- v-model="queryParams.deptId"
- placeholder="请选择部门"
- clearable
- class="!w-240px"
- />
- </el-form-item>
- <el-form-item>
- <el-button @click="handleQuery">
- <Icon icon="ep:search" class="mr-0.05rem" /> 搜索
- </el-button>
- <el-button @click="resetQuery">
- <Icon icon="ep:refresh" class="mr-0.05rem" /> 重置
- </el-button>
- <el-button
- :disabled="selectedRows.length === 0"
- type="primary"
- @click="handlePrintIssuebution"
- >
- <Icon icon="ep:plus" class="mr-0.05rem" /> 打印发放
- </el-button>
- <el-button
- type="primary"
- :disabled="selectedRows.length === 0"
- @click="handleElectronicDistribution"
- >
- <Icon icon="ep:plus" class="mr-0.05rem" /> 电子发放
- </el-button>
- <el-button
- type="primary"
- @click="
- () => {
- handleRoute('PressureIssueReportPipe')
- }
- "
- >
- 按任务单发放
- </el-button>
- </el-form-item>
- </el-form>
- </ContentWrap>
- <!-- 列表 -->
- <ContentWrap>
- <el-table
- ref="tableRef"
- v-loading="loading"
- :data="list"
- :stripe="true"
- @selection-change="handleSelectionChange"
- >
- <el-table-column type="selection" width="40" align="center" fixed="left" />
- <!-- 操作 -->
- <el-table-column label="操作" align="center" min-width="150px" fixed="left">
- <template #default="scope">
- <el-button link type="primary" @click="toPreview(scope.row.orderId)"> 预览 </el-button>
- <el-button link type="primary" @click="handlePrint(scope.row)"> 打印 </el-button>
- <el-button link type="primary" @click="handleDownload2(scope.row)"> 下载 </el-button>
- <el-button
- link
- type="primary"
- v-if="signShowFn(scope.row)"
- @click="handleSign(scope.row.id, scope.row.equipCode)"
- >
- 标志
- </el-button>
- </template>
- </el-table-column>
- <el-table-column label="打印记录" align="center" prop="printRecordNum" min-width="120px">
- <template #default="scope">
- <el-button
- type="primary"
- link
- class="decoration-underline"
- @click="handleViewPrintRecord(scope.row)"
- :disabled="!scope.row.printRecordNum"
- >
- {{ scope.row.printRecordNum || 0 }}
- </el-button>
- </template>
- </el-table-column>
- <el-table-column label="打印状态" align="center" prop="printIssueStatus" min-width="120px">
- <template #default="scope">
- <el-tag v-if="!!scope.row.printRecordNum" type="primary">已打印</el-tag>
- <el-tag v-else type="warning">未打印</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="发放记录" align="center" prop="releaseRecordNum" min-width="120px">
- <template #default="scope">
- <span
- v-if="scope.row.releaseRecordNum"
- class="report-count-link"
- @click="handleViewReportRecord(scope.row.reportId,scope.row.equipId)"
- >
- {{ scope.row.releaseRecordNum }}
- </span>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <el-table-column label="发放状态" align="center" prop="releaseStatus" min-width="120px">
- <template #default="scope">
- <el-tag v-if="scope.row.releaseRecordNum" type="primary">已发放</el-tag>
- <el-tag v-else type="warning">未发放</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="缴费情况" align="center" prop="paymentStatus" min-width="120px">
- <template #default="scope">
- {{ PrintIssuePaymentStatusMap[scope.row.paymentStatus] }}
- </template>
- </el-table-column>
- <el-table-column label="检验结论" align="center" prop="reportConclusion" min-width="120px">
- <template #default="scope">
- <el-tag
- v-if="['符合要求', '基本符合要求'].includes(scope.row.reportConclusion)"
- type="success"
- >{{ scope.row.reportConclusion }}</el-tag
- >
- <el-tag v-else-if="['不符合要求'].includes(scope.row.reportConclusion)" type="danger">{{
- scope.row.reportConclusion
- }}</el-tag>
- <div v-else>{{scope.row.reportConclusion || '-'}}</div>
- </template>
- </el-table-column>
- <el-table-column label="任务单号" align="center" prop="orderNo" min-width="120px" />
- <!-- <el-table-column label="产品编号" align="center" prop="productNo" min-width="120px" />-->
- <el-table-column
- label="使用登记证编号"
- align="center"
- prop="useRegisterNo"
- min-width="120px"
- />
- <el-table-column label="使用单位" align="center" prop="useUnitName" min-width="120px" show-overflow-tooltip>
- <template #default="{row}">
- <div style="color: #015293; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;" @click="handleUnitCodeFn(row.useUnitName)">{{row.useUnitName}}</div>
- </template>
- </el-table-column>
- <el-table-column label="报告编号" align="center" prop="reportNo" min-width="120px" />
- <el-table-column label="批准时间" align="center" prop="ratifyTime" min-width="120px">
- <template #default="scope">
- <div v-if="scope.row.ratifyTime">
- {{ formatDate(scope.row.ratifyTime) }}
- </div>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <el-table-column label="工程号" align="center" prop="equipCode" min-width="120px" />
- <el-table-column label="检验性质" align="center" prop="checkType" min-width="120px">
- <template #default="scope">
- {{ PressurePipeCheckTypeMap[scope.row.checkType] }}
- </template>
- </el-table-column>
- <el-table-column label="委托协议" align="center" prop="templateName" min-width="120px">
- <template #default="scope">
- <div
- v-if="scope.row.templateName"
- style="color: #409eff; cursor: pointer"
- @click="handleConsignmentAgreement(scope.row)"
- >
- {{ scope.row.templateName }}
- </div>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <el-table-column label="检验时间" align="center" prop="checkDate" min-width="120px">
- <template #default="scope">
- {{ formatArrayDate(scope.row.checkDate) }}
- </template>
- </el-table-column>
- <el-table-column label="下次检验日期" align="center" prop="nextCheckDate" min-width="120px">
- <template #default="scope">
- {{ formatDate(scope.row.nextCheckDate,"YYYY-MM-DD") }}
- </template>
- </el-table-column>
- <el-table-column label="部门" align="center" prop="deptName" min-width="120px" />
- <el-table-column label="发放人" align="center" prop="releaseName" min-width="120px">
- <template #default="scope">
- <div v-if="scope.row.releaseName">
- {{ scope.row.releaseName }}
- </div>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <el-table-column label="发放日期" align="center" prop="releaseTime" min-width="120px">
- <template #default="scope">
- <div v-if="scope.row.releaseTime">
- {{ formatDate(scope.row.releaseTime) }}
- </div>
- <span v-else>-</span>
- </template>
- </el-table-column>
- </el-table>
- <!-- 分页 -->
- <Pagination
- :total="total"
- v-model:page="queryParams.pageNo"
- v-model:limit="queryParams.pageSize"
- @pagination="getList"
- />
- </ContentWrap>
- <!-- 报告出具记录对话框 -->
- <PrintIssueRecordDialog
- v-model:visible="reportRecordDialogVisible"
- :report-id="currentReportId"
- :equip-id="currentEquipId"
- />
- <!-- 发放报告对话框 -->
- <IssuePrintReportDialog
- v-model:visible="issueReportDialogVisible"
- :task-order-id="currentTaskOrderId"
- :report-type="currentReportType"
- :list="selectedRows"
- @confirm="handleIssueReportConfirm"
- />
- <!-- 文件预览组件 -->
- <FilePreview
- v-model="previewVisible"
- width="45%"
- :url="currentPreviewUrl"
- :filename="currentFilename"
- :filesize="currentFilesize"
- :title="'打印发证-预览'"
- :isPdfPage="false"
- :is-footer="false"
- :is-header="false"
- @close="handlePreviewClose"
- />
- <!-- 服务单/受理单 编辑模板内容 -->
- <!-- @update:visible="handleUpdateServiceRecordListVisible" -->
- <ServiceRecordList
- v-if="serviceRecordListVisible"
- v-model:visible="serviceRecordListVisible"
- :serverForm="serviceOrderDialogFormData"
- :businessType="businessType"
- :orderItemId="mainOrderItemId"
- :reportId="mainReportId"
- :isAddMainquestion="isAddMainquestion"
- :taskOrderDetail="taskOrderDetail"
- @success="handleUpdateServiceRecordList"
- />
- <!-- 选择打印机 -->
- <el-dialog
- v-model="printDialog"
- title="打印机列表"
- width="30vw"
- destroy-on-close
- :close-on-click-modal="false"
- >
- <div>
- <el-form :model="printFormData" label-width="auto" :rules="rules" ref="printFormRef">
- <!-- <el-form-item label="受理单号">
- <div> {{ printFormData.acceptNo || '-' }}</div>
- </el-form-item> -->
- <!-- <el-form-item label="选择打印机" prop="printer">
- <el-select filterable clearable v-model="printFormData.printer" placeholder="选择打印机">
- <el-option v-for="item in printList" :label="item" :value="item" :key="item">
- {{ item }}
- </el-option>
- </el-select>
- </el-form-item> -->
- <el-form-item label="打印原因" prop="reason">
- <el-input type="textarea" v-model="printFormData.reason" maxlength="50" show-word-limit :autosize="{minRows: 3, maxRows: 6}"/>
- </el-form-item>
- </el-form>
- </div>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="printDialog = false">取消</el-button>
- <el-button type="primary" @click="confirmPrint(1)" :loading="printLoading">打印</el-button>
- <!-- <el-button type="primary" @click="confirmPrint(2)" :loading="printPreLoading">打印预览</el-button> -->
- <!-- <el-button type="primary" @click="handleDownload" :loading="printLoading">下载</el-button> -->
- </div>
- </template>
- </el-dialog>
- <FilePreviewDialog
- v-if="signPreviewVisible"
- v-model="signPreviewVisible"
- :id="signPreviewId"
- :filename="signFileName"
- :title="'文件预览'"
- @close="handleSignPreviewClose"
- />
- <CustomTableDialog ref="customTableDialogRef" :showSearch="false" :showFooter="false" />
- <unitContainerForm ref="unitContainerFormRef" />
- <!-- PDF预览弹窗 -->
- <PdfPreviewDialog
- v-model="pdfPreviewVisible"
- :pdfBlob="currentPdfBlob"
- @close="handlePdfPreviewClose"
- />
- <!-- 服务单/受理单 -->
- <OrderDialog
- v-if="orderReportVisible"
- v-model:visible="orderReportVisible"
- :orderId="currentTaskOrderId"
- type="pipe"
- />
- </template>
- <script setup lang="ts">
- import { ref, reactive, onMounted, getCurrentInstance } from 'vue'
- import { ElMessage } from 'element-plus'
- import { formatArrayDate, formatDate } from '@/utils/formatTime'
- import { PipeTaskOrderApi, PipeTaskOrderVO } from '@/api/pressure2/pipetaskorder'
- import ServiceRecordList from './components/ServiceRecordList.vue'
- import unitContainerForm from '@/components/unitContainerForm/index.vue'
- import { ElTable } from 'element-plus'
- import { PrintIssuePaymentStatusMap, PrintIssueStatusMap } from '@/utils/constants'
- import IssuePrintReportDialog from './components/IssuePrintReportDialog.vue'
- import PrintIssueRecordDialog from './components/PrintIssueRecordDialog.vue'
- import FilePreview from '@/views/Functional/components/FilePreview.vue'
- import { PressurePipeCheckTypeMap, PressurePipeCheckType } from '@/utils/constants'
- import { useRouter } from 'vue-router'
- import FilePreviewDialog from './FilePreview.vue'
- import CustomTableDialog from '@/components/CustomTableDialog/index.vue'
- import { SmartTableColumn } from '@/types/table'
- import {getJCP} from '@/utils/jcp/jcp-vue'
- import {PipeInputApi} from "@/api/pressure2/pipeInput";
- import PdfPreviewDialog from './PdfPreviewDialog.vue'
- import 'https://printjs-4de6.kxcdn.com/print.min.js'
- import OrderDialog from "@/views/pressure2/boilertaskorder/components/OrderDialog.vue";
- const router = useRouter()
- /** 出具报告任务单 列表 */
- defineOptions({ name: 'PrintIssueCertificatesPipe' })
- const signFileName = ref<string>('')
- const signPreviewId = ref<string>('')
- const signPreviewVisible = ref<boolean>(false)
- const unitContainerFormRef = ref<InstanceType<typeof unitContainerForm>>()
- const loading = ref(true)
- const list = ref<PipeTaskOrderVO[]>([])
- const total = ref(0)
- // PDF预览相关
- const pdfPreviewVisible = ref(false)
- const currentPdfBlob = ref<Blob | null>(null)
- const queryParams = reactive({
- pageNo: 1,
- pageSize: 50,
- releaseRecordNum: undefined,
- releaseStatus: undefined,
- paymentStatus: undefined,
- orderNo: undefined,
- productNo: undefined,
- unitName: undefined,
- reportNo: undefined,
- ratifyTime: undefined,
- equipCode: undefined,
- templateName: undefined,
- deptName: undefined,
- useRegisterNo: undefined,
- checkType: undefined,
- nextCheckDate: undefined,
- deptId: undefined,
- reportConclusion: undefined,
- useUnitName: undefined,
- checkDate: undefined
- })
- const queryFormRef = ref()
- const tableRef = ref<InstanceType<typeof ElTable>>()
- // 表格选择状态
- const selectedRows = ref<PipeTaskOrderVO[]>([])
- // 出具报告对话框状态
- const issueReportDialogVisible = ref(false)
- const currentTaskOrderId = ref('')
- const currentReportType = ref<100 | 200>(100)
- // 发放报告记录对话框状态
- const reportRecordDialogVisible = ref(false)
- const currentReportId = ref('')
- const currentEquipId = ref('')
- // 打印机列表
- const printList = ref([])
- const printUrl = ref('') // 打印文件地址
- const printDialog = ref(false) // 打印机弹窗
- const printFormData = ref({}) as any // 打印参数
- const printLoading = ref(false) // 打印按钮的loading
- const printPreLoading = ref(false) // 打印预览 loading
- const printFormRef = ref() as any // 打印表单引用
- const rules = ref({
- reason: [
- { required: true, message: '请输入打印原因', trigger: 'blur' },
- ]
- })// 预览
- const previewVisible = ref<boolean>(false)
- const currentPreviewUrl = ref<string>('')
- const currentFilename = ref<string>('')
- const currentFilesize = ref<number>(0)
- /** 服务单/受理单 */
- const serviceRecordListVisible = ref(false)
- const businessType = ref()
- const serviceOrderDialogFormData = ref<Record<string, any>>({
- serviceFormReceiver: '',
- serviceFormReceiverPhone: '',
- confirmStatus: ''
- })
- const mainOrderItemId = ref('')
- const mainReportId = ref('')
- const isAddMainquestion = ref<'add' | 'edit' | 'view'>('view')
- const taskOrderDetail = ref<any>(null)
- const handleUpdateServiceRecordList = () => {
- isAddMainquestion.value = 'view'
- // emit('refresh')
- }
- /** 查询列表 */
- const getList = async () => {
- loading.value = true
- try {
- const params = { ...queryParams }
- if (queryParams?.ratifyTime) {
- params['ratifyTimeStart'] = queryParams?.ratifyTime[0]
- params['ratifyTimeEnd'] = queryParams?.ratifyTime[1]
- delete params['ratifyTime']
- }
- const data = await PipeTaskOrderApi.getIssueReportPrintPage(params)
- list.value = data?.list || []
- total.value = data?.total || 0
- } finally {
- loading.value = false
- }
- }
- /** 表格选择变化 */
- const handleSelectionChange = (selection: PipeTaskOrderVO[]) => {
- selectedRows.value = selection
- }
- /** 搜索按钮操作 */
- const handleQuery = () => {
- queryParams.pageNo = 1
- getList()
- }
- const handleSignPreviewClose = () => {
- signPreviewId.value = ''
- signFileName.value = ''
- signPreviewVisible.value = false
- }
- /** 重置按钮操作 */
- const resetQuery = () => {
- queryFormRef.value.resetFields()
- handleQuery()
- }
- /** 查看发放报告记录 */
- const handleViewReportRecord = (reportId: string,equipId :string) => {
- currentReportId.value = reportId
- currentEquipId.value = equipId
- reportRecordDialogVisible.value = true
- }
- const printTypeMap = [
- {
- label: '直接打印',
- value: 100
- },
- {
- label: '下载PDF',
- value: 200
- }
- ]
- const customTableDialogRef = ref<InstanceType<typeof CustomTableDialog>>()
- type ModalParamsConfig = {
- modalUrl: string
- columns: SmartTableColumn[]
- isSingle: boolean
- modalParams?: any
- keyWord?: string
- modalTitle?: string
- }
- const openModalConfig: ModalParamsConfig = {
- modalUrl: '/pressure2/pipe-task-order-item-print/page',
- columns: [
- {
- prop: 'type',
- label: '打印类型',
- fieldProps: {
- align: 'center',
- minWidth: 120
- },
- render: (row, value) => {
- return printTypeMap.find((item) => item.value == value)?.label || '-'
- }
- },
- {
- prop: 'creatorUser',
- label: '打印人',
- fieldProps: {
- align: 'center',
- minWidth: 120
- },
- render: (row, value) => {
- return value
- ? `${value?.nickname}${value?.employeeNo ? `(${value?.employeeNo})` : ''}`
- : '-'
- }
- },
- {
- prop: 'createTime',
- label: '打印时间',
- fieldProps: {
- align: 'center',
- minWidth: 120
- },
- render: (row, value) => {
- return formatDate(value)
- }
- },
- {
- prop: 'reason',
- label: '打印原因',
- fieldProps: {
- align: 'center',
- minWidth: 150
- }
- }
- ],
- isSingle: true,
- keyWord: 'name',
- modalTitle: '打印记录详情'
- }
- const handleViewPrintRecord = (row) => {
- openModalConfig.modalParams = {
- itemId: row.id
- }
- customTableDialogRef.value?.openModal(openModalConfig, false)
- }
- // 委托协议
- const orderReportVisible = ref(false)
- const handleConsignmentAgreement = (row) => {
- // businessType.value = 100
- // serviceRecordListVisible.value = true
- // isAddMainquestion.value = 'view'
- // taskOrderDetail.value = { ...row, id: row.orderId } //'a08885bd8f4f1607acb3b4e41d99fd11'
- // if (row.checkType == PressureBoilerCheckType.IN || row.checkType == PressureBoilerCheckType.OUT) {
- // // 内外检验
- // } else if (row.checkType == PressureBoilerCheckType.PRESSURE) {
- // // 耐压检验
- // }
- currentTaskOrderId.value = row.orderId
- orderReportVisible.value = true
- }
- /** 电子发放 */
- const handleElectronicDistribution = (id) => {
- if (selectedRows.value.length === 0) {
- ElMessage.warning('请先选择需要出具报告的设备')
- return
- }
- currentTaskOrderId.value = id
- currentReportType.value = 200
- issueReportDialogVisible.value = true
- }
- const handleRoute = (routerName, query?: Record<string, any>) => {
- router.push({
- name: routerName,
- query
- })
- }
- /** 打印发放 */
- const handlePrintIssuebution = (id) => {
- if (selectedRows.value.length === 0) {
- ElMessage.warning('请先选择需要出具报告的设备')
- return
- }
- currentTaskOrderId.value = id
- currentReportType.value = 100
- issueReportDialogVisible.value = true
- }
- /** 出具报告确认 */
- const handleIssueReportConfirm = (data: any) => {
- console.log('出具报告数据:', data)
- // 这里应该调用API提交数据
- // 提交成功后刷新列表
- getList()
- }
- /**
- * 确认打印
- * @param type 1 打印 2 打印预览
- */
- const confirmPrint = async (type = 1) => {
- const loadingInstance = ElLoading.service({
- fullscreen: true,
- text: '正在打印...'
- })
- try {
- printLoading.value = false
- printDialog.value = false // 打开弹窗
- const response = await PipeTaskOrderApi.generateReportPdf({
- orderId: printRow.value.orderId
- }, { responseType: 'blob' }) // 确保以blob格式接收响应
- // 创建Blob对象
- const pdfBlob = new Blob([response], { type: 'application/pdf' })
- if (pdfBlob) {
- // 创建临时 URL
- const pdfUrl = URL.createObjectURL(pdfBlob)
- // 使用 printJS 打印
- printJS({
- printable: pdfUrl,
- type: 'pdf',
- showModal: false,
- onPrintDialogClose: () => {
- // 打印对话框关闭后释放 URL
- URL.revokeObjectURL(pdfUrl)
- handleAddPrintRecord(100)
- },
- })
- } else {
- ElMessage.error('获取打印文件失败')
- }
- } catch (error) {
- console.error('打印失败:', error)
- ElMessage.error('打印失败')
- }finally {
- loadingInstance.close()
- }
- }
- // 预览
- const toPreview = async (id: string) => {
- const loadingInstance = ElLoading.service({
- fullscreen: true,
- text: '正在生成...'
- })
- try {
- loading.value = true
- // 获取PDF字节流
- const response = await PipeTaskOrderApi.generateReportPdf({
- orderId: id
- }, { responseType: 'blob' }) // 确保以blob格式接收响应
- // 创建Blob对象
- const blob = new Blob([response], { type: 'application/pdf' })
-
- // 设置当前PDF blob并显示预览弹窗
- currentPdfBlob.value = blob
- pdfPreviewVisible.value = true
-
- loading.value = false
- } catch (error) {
- console.error('预览PDF失败:', error)
- ElMessage.error('预览PDF失败')
- loading.value = false
- } finally {
- // 关闭 Loading
- loadingInstance.close()
- }
- }
- // PDF预览关闭处理
- const handlePdfPreviewClose = () => {
- currentPdfBlob.value = null
- }
- const handleSign = async (id: string, equipCode: string) => {
- signPreviewId.value = id
- signFileName.value = `${equipCode}使用标志`
- signPreviewVisible.value = true
- // previewVisible.value = true
- // currentPreviewUrl.value = buildFileUrl(url)
- }
- const signShowFn = (row: any) => {
- if (!row.useRegisterNo || row.useRegisterNo.length < 4) {
- return false
- } else {
- return true
- }
- }
- const handlePreviewClose = () => {
- currentPreviewUrl.value = ''
- previewVisible.value = false
- }
- // 打印
- const printRow = ref<any>({})
- const handlePrint = async (row) => {
- const { id } = row
- if (!id) return ElMessage.error('未找到受理单ID!')
- try {
- printRow.value = row
- printLoading.value = false
- printDialog.value = true // 打开弹窗
- } catch (error) {
- console.error('打印失败:', error)
- ElMessage.error('打印失败')
- }finally {
- }
- }
- const handleDownload2 = async (row) => {
- const { id } = row
- if (!id) return ElMessage.error('未找到受理单ID!')
- ElMessageBox.confirm('是否确认下载', '提示', {
- confirmButtonText: '确 认',
- cancelButtonText: '取 消'
- })
- .then(async () => {
- const loadingInstance = ElLoading.service({
- fullscreen: true,
- text: '正在下载...'
- })
- try {
- loading.value = true
- // 获取PDF字节流
- const response = await PipeTaskOrderApi.generateReportPdf({
- orderId: row.orderId
- }, { responseType: 'blob' }) // 确保以blob格式接收响应
- // 创建Blob对象
- const blob = new Blob([response], { type: 'application/pdf' })
- // 创建下载链接
- const url = window.URL.createObjectURL(blob)
- const link = document.createElement('a')
- link.href = url
- link.download = `检验报告_${row.reportNo}.pdf` // 设置下载文件名
- // 触发下载
- document.body.appendChild(link)
- link.click()
- // 清理
- document.body.removeChild(link)
- window.URL.revokeObjectURL(url)
- ElMessage.success('报告下载成功')
- loading.value = false
- } catch (error) {
- console.error('下载PDF失败:', error)
- ElMessage.error('报告下载失败')
- loading.value = false
- } finally {
- // 关闭 Loading
- loadingInstance.close()
- }
- })
- .catch(() => console.info('操作取消'))
- }
- const handleAddPrintRecord = async (type: 100 | 200) => {
- const params = {
- itemId: printRow.value.id,
- reason: printFormData.value.reason,
- type
- }
- try {
- printLoading.value = true
- await PipeTaskOrderApi.createPrintRecord(params)
- ElMessage.success('打印记录添加成功')
- getList()
- } catch (error) {
- ElMessage.error('打印记录添加失败!')
- } finally {
- printLoading.value = false
- }
- }
- const handleUnitCodeFn = (code) => {
- if (!code) {
- return ElMessage.warning('该单位信息异常!')
- }
- unitContainerFormRef.value?.open('', code, true)
- }
- /** 初始化 **/
- onMounted(() => {
- getList()
- })
- </script>
- <style lang="scss" scoped>
- .report-count-link {
- color: #409eff;
- text-decoration: underline;
- cursor: pointer;
- &:hover {
- color: #66b1ff;
- }
- }
- .dialog-footer {
- display: flex;
- padding-top: 0.2rem;
- margin-top: 0.2rem;
- border-top: 0.01rem solid #dcdfe6;
- box-sizing: border-box;
- justify-content: flex-end;
- align-items: center;
- }
- </style>
|