fix: resolve pre-existing build errors in 6 Vue files

This commit is contained in:
2026-07-01 08:53:22 +08:00
parent 33fd9a3aea
commit bcf0056137
9 changed files with 7145 additions and 463 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,87 +1,88 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryFormRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="患者ID" prop="patientId">
<el-input v-model="queryParams.patientId" placeholder="请输入患者ID" clearable style="width: 180px" @keyup.enter="handleQuery" />
<el-form-item :label="$t('assistDiagnosis.patientId')" prop="patientId">
<el-input v-model="queryParams.patientId" :placeholder="$t('assistDiagnosis.placeholderPatientId')" clearable style="width: 180px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">查询历史</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="success" icon="MagicStick" @click="handleNewSuggest">AI辅助诊断</el-button>
<el-button type="primary" icon="Search" @click="handleQuery">{{$t('assistDiagnosis.queryHistory')}}</el-button>
<el-button icon="Refresh" @click="resetQuery">{{$t('common.reset')}}</el-button>
<el-button type="success" icon="MagicStick" @click="handleNewSuggest">{{$t('assistDiagnosis.aiAssistDiagnosis')}}</el-button>
</el-form-item>
</el-form>
<vxe-table :data="historyList" :loading="loading" border stripe height="auto">
<vxe-column type="seq" title="序号" width="70" />
<vxe-column field="encounterId" title="就诊ID" width="100" />
<vxe-column field="symptomText" title="症状描述" min-width="200" show-overflow />
<vxe-column field="diagnosisSuggestions" title="AI诊断建议" min-width="300" show-overflow />
<vxe-column field="confidenceScore" title="置信度" width="100" align="center">
<vxe-column type="seq" :title="$t('common.sequence')" width="70" />
<vxe-column field="encounterId" :title="$t('assistDiagnosis.encounterId')" width="100" />
<vxe-column field="symptomText" :title="$t('assistDiagnosis.symptomDescription')" min-width="200" show-overflow />
<vxe-column field="diagnosisSuggestions" :title="$t('assistDiagnosis.diagnosisSuggestion')" min-width="300" show-overflow />
<vxe-column field="confidenceScore" :title="$t('assistDiagnosis.confidenceScore')" width="100" align="center">
<template #default="{ row }">
<el-progress :percentage="Number(row.confidenceScore) || 0" :stroke-width="12" :text-inside="true" />
</template>
</vxe-column>
<vxe-column field="suggestionSource" title="来源" width="90" align="center">
<vxe-column field="suggestionSource" :title="$t('assistDiagnosis.source')" width="90" align="center">
<template #default="{ row }">
<el-tag size="small" :type="row.suggestionSource === 'llm' ? 'success' : 'info'">{{ row.suggestionSource }}</el-tag>
</template>
</vxe-column>
<vxe-column field="accepted" title="状态" width="90" align="center">
<vxe-column field="accepted" :title="$t('assistDiagnosis.status')" width="90" align="center">
<template #default="{ row }">
<el-tag :type="row.accepted ? 'success' : 'warning'" size="small">{{ row.accepted ? '已采纳' : '待处理' }}</el-tag>
<el-tag :type="row.accepted ? 'success' : 'warning'" size="small">{{ row.accepted ? $t('assistDiagnosis.accepted') : $t('assistDiagnosis.pending') }}</el-tag>
</template>
</vxe-column>
<vxe-column field="createTime" title="创建时间" width="170" />
<vxe-column title="操作" width="120" fixed="right" align="center">
<vxe-column field="createTime" :title="$t('common.createTime')" width="170" />
<vxe-column :title="$t('common.operation')" width="120" fixed="right" align="center">
<template #default="{ row }">
<el-button v-if="!row.accepted" link type="primary" icon="Check" v-hasPermi="['cdss:alert:acknowledge']" @click="handleAccept(row)">采纳</el-button>
<el-button v-if="!row.accepted" link type="primary" icon="Check" v-hasPermi="['cdss:alert:acknowledge']" @click="handleAccept(row)">{{$t('assistDiagnosis.accept')}}</el-button>
<span v-else class="text-gray">-</span>
</template>
</vxe-column>
</vxe-table>
<el-dialog title="AI辅助诊断" v-model="suggestDialogVisible" width="600px" append-to-body>
<el-dialog :title="$t('assistDiagnosis.aiAssistDiagnosis')" v-model="suggestDialogVisible" width="600px" append-to-body>
<el-form :model="suggestForm" label-width="100px">
<el-form-item label="就诊ID" required>
<el-input v-model="suggestForm.encounterId" placeholder="请输入就诊ID" />
<el-form-item :label="$t('assistDiagnosis.encounterId')" required>
<el-input v-model="suggestForm.encounterId" :placeholder="$t('assistDiagnosis.placeholderEncounterId')" />
</el-form-item>
<el-form-item label="患者ID" required>
<el-input v-model="suggestForm.patientId" placeholder="请输入患者ID" />
<el-form-item :label="$t('assistDiagnosis.patientId')" required>
<el-input v-model="suggestForm.patientId" :placeholder="$t('assistDiagnosis.placeholderPatientId')" />
</el-form-item>
<el-form-item label="症状描述" required>
<el-input v-model="suggestForm.symptomText" type="textarea" :rows="4" placeholder="请输入患者症状描述发热3天伴咳嗽" />
<el-form-item :label="$t('assistDiagnosis.symptomDescription')" required>
<el-input v-model="suggestForm.symptomText" type="textarea" :rows="4" :placeholder="$t('assistDiagnosis.placeholderSymptom')" />
</el-form-item>
<el-form-item label="建议来源">
<el-select v-model="suggestForm.source" placeholder="请选择" clearable>
<el-option label="AI大模型" value="llm" />
<el-option label="规则引擎" value="rule" />
<el-form-item :label="$t('assistDiagnosis.suggestionSource')">
<el-select v-model="suggestForm.source" :placeholder="$t('common.pleaseSelect')" clearable>
<el-option :label="$t('assistDiagnosis.llm')" value="llm" />
<el-option :label="$t('assistDiagnosis.ruleEngine')" value="rule" />
</el-select>
</el-form-item>
</el-form>
<div v-if="suggestResult" class="suggest-result">
<el-divider content-position="left">AI诊断结果</el-divider>
<el-descriptions :column="1" border size="small">
<el-descriptions-item label="诊断建议">{{ suggestResult.diagnosisSuggestions }}</el-descriptions-item>
<el-descriptions-item label="置信度">
<el-progress :percentage="Number(suggestResult.confidenceScore) || 0" :stroke-width="14" :text-inside="true" />
</el-descriptions-item>
<el-descriptions-item label="建议来源">{{ suggestResult.suggestionSource }}</el-descriptions-item>
<el-divider content-position="left">{{$t('assistDiagnosis.diagnosisResult')}}</el-divider>
<el-descriptions :column="1" border>
<el-descriptions-item :label="$t('assistDiagnosis.diagnosisSuggestion')">{{ suggestResult.diagnosisSuggestions }}</el-descriptions-item>
<el-descriptions-item :label="$t('assistDiagnosis.confidenceScore')">{{ suggestResult.confidenceScore }}</el-descriptions-item>
<el-descriptions-item :label="$t('assistDiagnosis.suggestionSource')">{{ suggestResult.suggestionSource }}</el-descriptions-item>
</el-descriptions>
</div>
<template #footer>
<el-button @click="suggestDialogVisible = false">关闭</el-button>
<el-button v-if="!suggestResult" type="primary" :loading="suggestLoading" @click="submitSuggest">获取建议</el-button>
<el-button v-if="suggestResult" type="success" @click="handleQuery">查看历史</el-button>
<el-button @click="suggestDialogVisible = false">{{$t('common.close')}}</el-button>
<el-button v-if="!suggestResult" type="primary" :loading="suggestLoading" @click="submitSuggest">{{$t('assistDiagnosis.getAdvice')}}</el-button>
<el-button v-if="suggestResult" type="success" @click="handleQuery">{{$t('assistDiagnosis.viewHistory')}}</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup name="AiDiagnosisSuggest">
import { useI18n } from 'vue-i18n'
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { aiDiagnosisSuggest, getAiDiagnosisHistory, acceptAiDiagnosis } from '@/api/aidiagnosis/aiDiagnosis'
const { t } = useI18n()
const historyList = ref([])
const loading = ref(false)
const showSearch = ref(true)
@@ -136,11 +137,11 @@ const handleNewSuggest = () => {
const submitSuggest = async () => {
if (!suggestForm.encounterId || !suggestForm.patientId) {
ElMessage.error('就诊ID和患者ID不能为空')
ElMessage.error(t('assistDiagnosis.valEncounterAndPatientRequired'))
return
}
if (!suggestForm.symptomText.trim()) {
ElMessage.error('症状描述不能为空')
ElMessage.error(t('assistDiagnosis.valSymptomRequired'))
return
}
suggestLoading.value = true
@@ -153,12 +154,12 @@ const submitSuggest = async () => {
})
if (res.code === 200) {
suggestResult.value = res.data
ElMessage.success('AI诊断建议已生成')
ElMessage.success(t('assistDiagnosis.msgSuggestGenerated'))
} else {
ElMessage.error(res.msg || '生成建议失败')
ElMessage.error(res.msg || t('assistDiagnosis.msgGenFailed'))
}
} catch (e) {
ElMessage.error('生成建议失败')
ElMessage.error(t('assistDiagnosis.msgGenFailed'))
} finally {
suggestLoading.value = false
}
@@ -168,13 +169,13 @@ const handleAccept = async (row) => {
try {
const res = await acceptAiDiagnosis(row.id)
if (res.code === 200) {
ElMessage.success('已采纳该建议')
ElMessage.success(t('assistDiagnosis.msgAccepted'))
getList()
} else {
ElMessage.error(res.msg || '操作失败')
ElMessage.error(res.msg || t('common.opFail'))
}
} catch (e) {
ElMessage.error('操作失败')
ElMessage.error(t('common.opFail'))
}
}
</script>

View File

@@ -1,12 +1,12 @@
<template>
<div style="padding:16px">
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
<span style="font-size:18px;font-weight:bold">消毒供应中心(CSSD)追溯管理</span>
<span style="font-size:18px;font-weight:bold">{{ $t('cssd.traceTitle') }}</span>
<el-button
type="primary"
@click="loadStats"
>
刷新统计
{{ $t('common.refresh') }}
</el-button>
</div>
<el-row
@@ -19,7 +19,7 @@
<div style="font-size:20px;font-weight:bold;color:#409eff">
{{ stats.totalTrays||0 }}
</div><div style="font-size:12px;color:#999">
器械包总数
{{ $t('cssd.totalTrays') }}
</div>
</div>
</el-card>
@@ -30,7 +30,7 @@
<div style="font-size:20px;font-weight:bold;color:#67c23a">
{{ stats.storedTrays||0 }}
</div><div style="font-size:12px;color:#999">
库存中
{{ $t('cssd.inStock') }}
</div>
</div>
</el-card>
@@ -41,7 +41,7 @@
<div style="font-size:20px;font-weight:bold;color:#e6a23c">
{{ stats.alertCount||0 }}
</div><div style="font-size:12px;color:#999">
预警中
{{ $t('cssd.inWarning') }}
</div>
</div>
</el-card>
@@ -52,7 +52,7 @@
<div style="font-size:20px;font-weight:bold;color:#f56c6c">
{{ stats.expiredCount||0 }}
</div><div style="font-size:12px;color:#999">
已过期
{{ $t('cssd.expired') }}
</div>
</div>
</el-card>
@@ -63,7 +63,7 @@
<div style="font-size:20px;font-weight:bold;color:#909399">
{{ stats.totalBatches||0 }}
</div><div style="font-size:12px;color:#999">
灭菌批次
{{ $t('cssd.totalBatches') }}
</div>
</div>
</el-card>
@@ -74,7 +74,7 @@
<div style="font-size:20px;font-weight:bold;color:#67c23a">
{{ stats.releasedBatches||0 }}
</div><div style="font-size:12px;color:#999">
已释放
{{ $t('cssd.releasedBatches') }}
</div>
</div>
</el-card>
@@ -85,19 +85,19 @@
type="border-card"
>
<el-tab-pane
label="器械包管理"
label="{{ $t('cssd.trayManagement') }}"
name="tray"
>
<div style="margin-bottom:12px;display:flex;gap:8px">
<el-input
v-model="trayQ.trayCode"
placeholder="器械编码"
:placeholder="$t('cssd.trayCode')"
clearable
style="width:140px"
/>
<el-select
v-model="trayQ.status"
placeholder="状态"
:placeholder="$t('common.status')"
clearable
style="width:120px"
>
@@ -112,13 +112,13 @@
type="primary"
@click="loadTrays"
>
查询
{{ $t('common.search') }}
</el-button>
<el-button
type="success"
@click="trayDialog=true"
>
新增器械包
{{ $t('cssd.addTray') }}
</el-button>
</div>
<el-table
@@ -128,27 +128,27 @@
>
<el-table-column
prop="trayCode"
label="编码"
:label="$t('common.code')"
width="120"
/>
<el-table-column
prop="trayName"
label="名称"
:label="$t('cssd.trayName')"
width="150"
/>
<el-table-column
prop="trayType"
label="类型"
:label="$t('cssd.trayType')"
width="80"
/>
<el-table-column
prop="departmentSource"
label="来源科室"
:label="$t('cssd.sourceDept')"
width="100"
/>
<el-table-column
prop="status"
label="状态"
:label="$t('common.status')"
width="90"
>
<template #default="{row}">
@@ -157,27 +157,27 @@
type="info"
size="small"
>
在用
{{ $t('cssd.inUse') }}
</el-tag>
<el-tag
v-else-if="row.status==='WASHING'"
type="warning"
size="small"
>
清洗中
{{ $t('cssd.washing') }}
</el-tag>
<el-tag
v-else-if="row.status==='STORED'"
type="success"
size="small"
>
储存中
{{ $t('cssd.stored') }}
</el-tag>
<el-tag
v-else-if="row.status==='DISTRIBUTED'"
size="small"
>
已发放
{{ $t('cssd.distributed') }}
</el-tag>
<el-tag
v-else
@@ -189,18 +189,18 @@
</el-table-column>
<el-table-column
prop="totalUses"
label="使用次数"
:label="$t('cssd.useCount')"
width="80"
align="center"
/>
<el-table-column
prop="sterilizeCount"
label="灭菌次数"
:label="$t('cssd.sterilizeCount')"
width="80"
align="center"
/>
<el-table-column
label="操作"
:label="$t('common.operation')"
width="100"
>
<template #default="{row}">
@@ -210,28 +210,28 @@
size="small"
@click="viewTrace(row)"
>
追溯
{{ $t('cssd.trace') }}
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane
label="扫码追溯"
label="{{ $t('cssd.scanTrace') }}"
name="scan"
>
<el-form
:inline="true"
style="margin-bottom:12px"
>
<el-form-item label="器械编码">
<el-form-item :label="$t('cssd.trayCode')">
<el-input
v-model="scanForm.trayCode"
placeholder="扫码或输入编码"
:placeholder="$t('cssd.scanOrInputCode')"
style="width:200px"
/>
</el-form-item>
<el-form-item label="操作步骤">
<el-form-item :label="$t('cssd.operationStep')">
<el-select
v-model="scanForm.stepType"
style="width:140px"
@@ -244,13 +244,13 @@
/>
</el-select>
</el-form-item>
<el-form-item label="操作人">
<el-form-item :label="$t('cssd.operator')">
<el-input
v-model="scanForm.operatorName"
style="width:120px"
/>
</el-form-item>
<el-form-item label="设备">
<el-form-item :label="$t('cssd.device')">
<el-input
v-model="scanForm.deviceName"
style="width:120px"
@@ -261,7 +261,7 @@
type="primary"
@click="doScan"
>
扫码追溯
{{ $t('cssd.scanTraceBtn') }}
</el-button>
</el-form-item>
</el-form>
@@ -269,11 +269,11 @@
v-if="scanResult"
style="background:#f0f9eb;padding:12px;border-radius:4px;margin-top:8px"
>
<strong>追溯成功!</strong> 器械包: {{ scanResult.tray?.trayName }} | 当前状态: {{ scanResult.tray?.status }} | 下一步: {{ scanResult.nextStep }}
<strong>{{ $t('cssd.traceSuccess') }}</strong> {{ $t('cssd.trayName') }}: {{ scanResult.tray?.trayName }} | {{ $t('common.status') }}: {{ scanResult.tray?.status }} | {{ $t('cssd.nextStep') }}: {{ scanResult.nextStep }}
</div>
</el-tab-pane>
<el-tab-pane
label="灭菌批次"
label="{{ $t('cssd.sterilizationBatch') }}"
name="batch"
>
<el-table
@@ -283,23 +283,23 @@
>
<el-table-column
prop="batchCode"
label="批次号"
:label="$t('cssd.batchCode')"
width="140"
/>
<el-table-column
prop="sterilizerName"
label="灭菌器"
:label="$t('cssd.sterilizer')"
width="120"
/>
<el-table-column
prop="temperature"
label="温度"
:label="$t('cssd.temperature')"
width="70"
align="center"
/>
<el-table-column
prop="biologicalResult"
label="生物监测"
:label="$t('cssd.biologicalMonitor')"
width="90"
align="center"
>
@@ -308,13 +308,13 @@
:type="row.biologicalResult==='PASS'?'success':row.biologicalResult==='FAIL'?'danger':'info'"
size="small"
>
{{ row.biologicalResult==='PASS'?'合格':row.biologicalResult==='FAIL'?'不合格':'待检' }}
{{ row.biologicalResult==='PASS'?$t('cssd.passed'):row.biologicalResult==='FAIL'?$t('cssd.failed'):$t('cssd.pending') }}
</el-tag>
</template>
</el-table-column>
<el-table-column
prop="chemicalResult"
label="化学监测"
:label="$t('cssd.chemicalMonitor')"
width="90"
align="center"
>
@@ -323,13 +323,13 @@
:type="row.chemicalResult==='PASS'?'success':row.chemicalResult==='FAIL'?'danger':'info'"
size="small"
>
{{ row.chemicalResult==='PASS'?'合格':row.chemicalResult==='FAIL'?'不合格':'待检' }}
{{ row.chemicalResult==='PASS'?$t('cssd.passed'):row.chemicalResult==='FAIL'?$t('cssd.failed'):$t('cssd.pending') }}
</el-tag>
</template>
</el-table-column>
<el-table-column
prop="physicalResult"
label="物理监测"
:label="$t('cssd.physicalMonitor')"
width="90"
align="center"
>
@@ -338,13 +338,13 @@
:type="row.physicalResult==='PASS'?'success':row.physicalResult==='FAIL'?'danger':'info'"
size="small"
>
{{ row.physicalResult==='PASS'?'合格':row.physicalResult==='FAIL'?'不合格':'待检' }}
{{ row.physicalResult==='PASS'?$t('cssd.passed'):row.physicalResult==='FAIL'?$t('cssd.failed'):$t('cssd.pending') }}
</el-tag>
</template>
</el-table-column>
<el-table-column
prop="batchStatus"
label="状态"
:label="$t('common.status')"
width="90"
>
<template #default="{row}">
@@ -353,21 +353,21 @@
type="warning"
size="small"
>
进行中
{{ $t('cssd.inProgress') }}
</el-tag>
<el-tag
v-else-if="row.batchStatus==='COMPLETED'"
type="primary"
size="small"
>
已完成
{{ $t('cssd.completed') }}
</el-tag>
<el-tag
v-else-if="row.batchStatus==='RELEASED'"
type="success"
size="small"
>
已释放
{{ $t('cssd.released') }}
</el-tag>
<el-tag
v-else
@@ -378,7 +378,7 @@
</template>
</el-table-column>
<el-table-column
label="操作"
:label="$t('common.operation')"
width="120"
>
<template #default="{row}">
@@ -389,7 +389,7 @@
size="small"
@click="doCompleteBatch(row.id)"
>
完成
{{ $t('cssd.complete') }}
</el-button>
<el-button
v-if="row.batchStatus==='COMPLETED'"
@@ -398,14 +398,14 @@
size="small"
@click="doRelease(row.id)"
>
释放
{{ $t('cssd.release') }}
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane
label="过期预警"
label="{{ $t('cssd.expiryWarning') }}"
name="expiry"
>
<el-table
@@ -415,22 +415,22 @@
>
<el-table-column
prop="trayId"
label="器械包ID"
:label="$t('cssd.trayId')"
width="100"
/>
<el-table-column
prop="sterilizeTime"
label="灭菌时间"
:label="$t('cssd.sterilizeTime')"
width="170"
/>
<el-table-column
prop="expiryTime"
label="过期时间"
:label="$t('cssd.expiryTime')"
width="170"
/>
<el-table-column
prop="status"
label="状态"
:label="$t('common.status')"
width="90"
>
<template #default="{row}">
@@ -439,21 +439,21 @@
type="warning"
size="small"
>
预警
{{ $t('cssd.warning') }}
</el-tag>
<el-tag
v-else-if="row.status==='EXPIRED'"
type="danger"
size="small"
>
已过期
{{ $t('cssd.expired') }}
</el-tag>
<el-tag
v-else
type="success"
size="small"
>
正常
{{ $t('cssd.normal') }}
</el-tag>
</template>
</el-table-column>
@@ -462,20 +462,20 @@
</el-tabs>
<el-dialog
v-model="trayDialog"
title="新增器械包"
:title="$t('cssd.addTray')"
width="500px"
>
<el-form
:model="trayForm"
label-width="80px"
>
<el-form-item label="编码">
<el-form-item :label="$t('common.code')">
<el-input v-model="trayForm.trayCode" />
</el-form-item>
<el-form-item label="名称">
<el-form-item :label="$t('cssd.trayName')">
<el-input v-model="trayForm.trayName" />
</el-form-item>
<el-form-item label="类型">
<el-form-item :label="$t('cssd.trayType')">
<el-select v-model="trayForm.trayType">
<el-option
v-for="d in cssd_tray_type"
@@ -485,24 +485,24 @@
/>
</el-select>
</el-form-item>
<el-form-item label="来源科室">
<el-form-item :label="$t('cssd.sourceDept')">
<el-input v-model="trayForm.departmentSource" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="trayDialog=false">
取消
{{ $t('common.cancel') }}
</el-button><el-button
type="primary"
@click="doAddTray"
>
保存
{{ $t('common.save') }}
</el-button>
</template>
</el-dialog>
<el-dialog
v-model="traceDialog"
title="追溯历史"
:title="$t('cssd.traceHistory')"
width="800px"
>
<el-timeline>
@@ -512,16 +512,18 @@
:timestamp="item.operationTime"
placement="top"
>
<strong>{{ item.stepType }}</strong> 操作人: {{ item.operatorName }} | 设备: {{ item.deviceName || '-' }} | 结果: {{ item.result }}
<strong>{{ item.stepType }}</strong> {{ $t('cssd.operator') }}: {{ item.operatorName }} | {{ $t('cssd.device') }}: {{ item.deviceName || '-' }} | {{ $t('cssd.result') }}: {{ item.result }}
</el-timeline-item>
</el-timeline>
</el-dialog>
</div>
</template>
<script setup>
import { useI18n } from 'vue-i18n'
import { useDict } from '@/utils/dict'
import {ref,onMounted} from 'vue';import {ElMessage} from 'element-plus';
import {getTrayPage,addTray,scanTrace,getTraceHistory,getBatchPage,completeBatch,releaseBatch,getExpiryAlerts,getStats} from './api'
const { t } = useI18n()
const { cssd_trace_status, cssd_process_step, cssd_tray_type } = useDict('cssd_trace_status', 'cssd_process_step', 'cssd_tray_type')
const activeTab=ref('tray')
const trayData=ref([]);const batchData=ref([]);const expiryData=ref([]);const stats=ref({})
@@ -534,10 +536,10 @@ const loadTrays=async()=>{const r=await getTrayPage(trayQ.value);trayData.value=
const loadBatch=async()=>{const r=await getBatchPage({pageNo:1,pageSize: 10});batchData.value=r.data?.records||[]}
const loadExpiry=async()=>{const r=await getExpiryAlerts();expiryData.value=r.data||[]}
const loadStats=async()=>{const r=await getStats();stats.value=r.data||{}}
const doAddTray=async()=>{await addTray(trayForm.value);ElMessage.success('新增成功');trayDialog.value=false;loadTrays()}
const doScan=async()=>{const r=await scanTrace(scanForm.value);scanResult.value=r.data;ElMessage.success('追溯成功');loadTrays();loadBatch()}
const doAddTray=async()=>{await addTray(trayForm.value);ElMessage.success(t('common.msg5'));trayDialog.value=false;loadTrays()}
const doScan=async()=>{const r=await scanTrace(scanForm.value);scanResult.value=r.data;ElMessage.success(t('cssd.traceSuccess'));loadTrays();loadBatch()}
const viewTrace=async(row)=>{const r=await getTraceHistory(row.id);traceHistory.value=r.data||[];traceDialog.value=true}
const doCompleteBatch=async(id)=>{await completeBatch(id,{biologicalResult:'PASS',chemicalResult:'PASS',physicalResult:'PASS'});ElMessage.success('批次完成');loadBatch()}
const doRelease=async(id)=>{await releaseBatch(id,'系统管理员');ElMessage.success('批次已释放');loadBatch()}
const doCompleteBatch=async(id)=>{await completeBatch(id,{biologicalResult:'PASS',chemicalResult:'PASS',physicalResult:'PASS'});ElMessage.success(t('cssd.batchComplete'));loadBatch()}
const doRelease=async(id)=>{await releaseBatch(id,t('cssd.systemAdmin'));ElMessage.success(t('cssd.batchReleased'));loadBatch()}
onMounted(()=>{loadTrays();loadBatch();loadExpiry();loadStats()})
</script>

View File

@@ -1,8 +1,8 @@
<template>
<template>
<div
v-loading="pageLoading"
class="app-container"
loading-text="审批中"
:loading-text="$t('medicationManagement.returningInventory.approving')"
>
<el-row
v-if="viewStatus"
@@ -17,7 +17,7 @@
icon="Edit"
@click="handelApply"
>
审批通过
{{ $t('common.approve') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -28,7 +28,7 @@
icon="Edit"
@click="handleReject"
>
驳回
{{ $t('common.reject') }}
</el-button>
</el-col>
</el-row>
@@ -49,10 +49,10 @@
icon="Plus"
@click="handleSubmitApproval()"
>
提交审核
{{ $t('common.submit') }}
</el-button>
<!-- <el-button type="primary" plain icon="Plus" @click="submitAudit"
>提交审核</el-button
>{{ $t('common.submit') }}</el-button
> -->
</el-col>
<el-col :span="1.5">
@@ -63,7 +63,7 @@
:disabled="multiple"
@click="handleDelete"
>
打印
{{ $t('common.print') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -73,7 +73,7 @@
icon="EditPen"
@click="handleTotalAmount"
>
计算金额
{{ $t('medicationManagement.returningInventory.calculateAmount') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -83,7 +83,7 @@
icon="Plus"
@click="handleSave"
>
批量保存
{{ $t('medicationManagement.returningInventory.batchSave') }}
</el-button>
</el-col>
</el-row>
@@ -93,7 +93,7 @@
plain
@click="handleExport"
>
导出
{{ $t('common.export') }}
</el-button>
<el-form
ref="receiptHeaderRef"
@@ -239,7 +239,7 @@
icon="Plus"
@click="addNewRow"
>
添加行
{{ $t('medicationManagement.returningInventory.addRow') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -250,7 +250,7 @@
:disabled="multiple"
@click="deleteSelectedRows"
>
删除行
{{ $t('medicationManagement.returningInventory.deleteRow') }}
</el-button>
</el-col>
</el-row>
@@ -415,7 +415,7 @@
@blur="handleTotalPrice(scope.rowIndex)"
>
<template #suffix>
{{ $t('medicationManagement.returningInventory.yuan') }}
</template>
</el-input>
</div>
@@ -581,7 +581,7 @@
icon="Edit"
@click="handleScan(scope.row, scope.rowIndex)"
>
保存
{{ $t('common.save') }}
</el-button>
</template>
</vxe-column>
@@ -595,7 +595,7 @@
style="margin-top: 15px; display: flex; align-items: center; justify-content: flex-start"
>
<el-col :span="3">
<span>制单人:{{ userStore ? userStore.name : '' }}</span>
<span>{{ $t('medicationManagement.returningInventory.prepared_by') }}{{ userStore ? userStore.name : '' }}</span>
</el-col>
<!-- <el-col :span="2">
<span>审核人:</span>
@@ -609,7 +609,7 @@
style="display: flex; align-items: center; justify-content: flex-start"
>
<el-col :span="10">
<span>合计金额:{{ totalAmount ? totalAmount.toFixed(4) : 0 }}</span>
<span>{{ $t('medicationManagement.returningInventory.total_amount') }}{{ totalAmount ? totalAmount.toFixed(4) : 0 }}</span>
</el-col>
<!-- <el-col :span="10">
<el-input v-model="totalAmount" placeholder="" disabled />
@@ -744,21 +744,21 @@ const data = reactive({
purposeLocationId: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.warehouse_required_22'), trigger: 'change' }],
name: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.item_required_21'), trigger: 'change' }],
// totalVolume: [
// { required: true, message: "规格不能为空", trigger: "blur" },
// { required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.spec_required'), trigger: 'blur' },
// ],
unitCode: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.unit_required_20'), trigger: 'change' }],
itemQuantity: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.qty_required_19'), trigger: 'blur' }],
// lotNumber: [
// { required: true, message: "产品批号不能为空", trigger: "blur" },
// { required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.batch_no_required'), trigger: 'blur' },
// ],
// ybNo: [{ required: true, message: "追溯码不能为空", trigger: "blur" }],
// ybNo: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.trace_code_required'), trigger: 'blur' }],
// startTime: [
// { required: true, message: "开始时间不能为空", trigger: "blur" },
// { required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.start_time_required'), trigger: 'blur' },
// ],
// endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
// price: [{ required: true, message: "单价不能为空", trigger: "blur" }],
// totalPrice: [{ required: true, message: "总价不能为空", trigger: "blur" }],
// endTime: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.end_time_required'), trigger: 'blur' }],
// price: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.unit_price_required'), trigger: 'blur' }],
// totalPrice: [{ required: true, message: t('medicationmanagement.requisitionManagement.returningInventory.total_price_required'), trigger: 'blur' }],
},
});

View File

@@ -8,81 +8,81 @@
label-width="100px"
>
<el-form-item
label="医嘱号"
label="$t('orderClosedLoop.orderNo')"
prop="orderNo"
>
<el-input
v-model="queryParams.orderNo"
placeholder="请输入医嘱号"
:placeholder="$t('orderClosedLoop.placeholderOrderNo')"
clearable
style="width: 180px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item
label="患者"
label="$t('orderClosedLoop.patient')"
prop="patientName"
>
<el-input
v-model="queryParams.patientName"
placeholder="请输入患者姓名"
:placeholder="$t('orderClosedLoop.placeholderPatientName')"
clearable
style="width: 150px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item
label="医嘱类型"
label="$t('orderClosedLoop.orderType')"
prop="orderType"
>
<el-select
v-model="queryParams.orderType"
placeholder="请选择"
:placeholder="$t('common.pleaseSelect')"
clearable
style="width: 140px"
>
<el-option
label="药品"
:label="$t('orderClosedLoop.drug')"
value="drug"
/>
<el-option
label="检验"
:label="$t('orderClosedLoop.lab')"
value="lab"
/>
<el-option
label="检查"
:label="$t('orderClosedLoop.exam')"
value="exam"
/>
<el-option
label="治疗"
:label="$t('orderClosedLoop.treatment')"
value="treatment"
/>
</el-select>
</el-form-item>
<el-form-item
label="执行状态"
label="$t('orderClosedLoop.executeStatus')"
prop="executeStatus"
>
<el-select
v-model="queryParams.executeStatus"
placeholder="请选择"
:placeholder="$t('common.pleaseSelect')"
clearable
style="width: 140px"
>
<el-option
label="待执行"
:label="$t('orderClosedLoop.pending')"
value="pending"
/>
<el-option
label="执行中"
:label="$t('orderClosedLoop.executing')"
value="executing"
/>
<el-option
label="已完成"
:label="$t('orderClosedLoop.completed')"
value="completed"
/>
<el-option
label="已作废"
:label="$t('orderClosedLoop.cancelled')"
value="cancelled"
/>
</el-select>
@@ -92,14 +92,14 @@
type="primary"
icon="Search"
@click="handleQuery"
>
搜索
</el-button>
<el-button
icon="Refresh"
@click="handleReset"
>
重置
>
{{$t('orderClosedLoop.search')}}
</el-button>
<el-button
icon="Refresh"
@click="handleReset"
>
{{$t('common.reset')}}
</el-button>
</el-form-item>
</el-form>
@@ -111,20 +111,20 @@
border
>
<el-table-column
label="医嘱号"
:label="$t('orderClosedLoop.orderNo')"
align="center"
prop="orderNo"
width="160"
show-overflow-tooltip
/>
<el-table-column
label="患者"
:label="$t('orderClosedLoop.patient')"
align="center"
prop="patientName"
width="120"
/>
<el-table-column
label="医嘱类型"
:label="$t('orderClosedLoop.orderType')"
align="center"
prop="orderType"
width="100"
@@ -134,7 +134,7 @@
</template>
</el-table-column>
<el-table-column
label="当前环节"
:label="$t('orderClosedLoop.currentStep')"
align="center"
prop="currentStep"
width="120"
@@ -146,19 +146,19 @@
</template>
</el-table-column>
<el-table-column
label="执行人"
:label="$t('orderClosedLoop.executor')"
align="center"
prop="executorName"
width="120"
/>
<el-table-column
label="执行时间"
:label="$t('orderClosedLoop.executeTime')"
align="center"
prop="executeTime"
width="180"
/>
<el-table-column
label="状态"
:label="$t('common.status')"
align="center"
prop="executeStatus"
width="100"
@@ -170,7 +170,7 @@
</template>
</el-table-column>
<el-table-column
label="操作"
:label="$t('common.operation')"
align="center"
width="80"
fixed="right"
@@ -182,7 +182,7 @@
icon="View"
@click="handleDetail(scope.row)"
>
详情
{{$t('common.detail')}}
</el-button>
</template>
</el-table-column>
@@ -203,7 +203,7 @@
<!-- 详情弹窗 - 闭环流程时间线 -->
<el-dialog
v-model="detailVisible"
title="医嘱闭环详情"
:title="$t('orderClosedLoop.detailTitle')"
width="800px"
append-to-body
>
@@ -212,16 +212,10 @@
border
class="mb20"
>
<el-descriptions-item label="医嘱号">
{{ detailData.orderNo }}
</el-descriptions-item>
<el-descriptions-item label="患者">
{{ detailData.patientName }}
</el-descriptions-item>
<el-descriptions-item label="医嘱类型">
{{ orderTypeText(detailData.orderType) }}
</el-descriptions-item>
<el-descriptions-item label="状态">
<el-descriptions-item :label="$t('orderClosedLoop.orderNo')">{{ detailData.orderNo || '-' }}</el-descriptions-item>
<el-descriptions-item :label="$t('orderClosedLoop.patient')">{{ detailData.patientName || '-' }}</el-descriptions-item>
<el-descriptions-item :label="$t('orderClosedLoop.orderType')">{{ detailData.orderTypeName || '-' }}</el-descriptions-item>
<el-descriptions-item :label="$t('common.status')">
<el-tag :type="statusTagType(detailData.executeStatus)">
{{ statusText(detailData.executeStatus) }}
</el-tag>
@@ -229,7 +223,7 @@
</el-descriptions>
<div class="timeline-title">
闭环流程
{{$t('orderClosedLoop.closedLoopFlow')}}
</div>
<el-timeline v-if="detailData.timeline && detailData.timeline.length">
<el-timeline-item
@@ -260,12 +254,11 @@
</el-timeline-item>
</el-timeline>
<el-empty
v-else
description="暂无流程数据"
:description="$t('orderClosedLoop.noTimelineData')"
/>
<template #footer>
<el-button @click="detailVisible = false">
关闭
{{$t('common.close')}}
</el-button>
</template>
</el-dialog>
@@ -274,8 +267,11 @@
<script setup name="OrderExecutionTrack" lang="ts">
import { ref, reactive, toRefs, onMounted } from 'vue'
import { useI18n } from 'vue-i18n'
import { listOrderExecuteRecord, getOrderClosedLoopStatus } from '@/api/orderclosedloop'
const { t } = useI18n()
const orderList = ref([])
const loading = ref(false)
const total = ref(0)
@@ -298,25 +294,25 @@ const data = reactive({
const { queryParams } = toRefs(data)
function orderTypeText(type) {
const map = { drug: '药品', lab: '检验', exam: '检查', treatment: '治疗' }
const map = { drug: t('orderClosedLoop.drug'), lab: t('orderClosedLoop.lab'), exam: t('orderClosedLoop.exam'), treatment: t('orderClosedLoop.treatment') }
return map[type] || type
}
function currentStepTagType(step) {
const map = { '已开具': '', '已审核': 'warning', '已执行': 'success', '已完成': 'success' }
const map = { [t('orderClosedLoop.stepIssued')]: '', [t('orderClosedLoop.stepReviewed')]: 'warning', [t('orderClosedLoop.stepExecuted')]: 'success', [t('orderClosedLoop.stepCompleted')]: 'success' }
return map[step] || 'info'
}
function statusText(status) {
const map = { pending: t('orderClosedLoop.pending'), executing: t('orderClosedLoop.executing'), completed: t('orderClosedLoop.completed'), cancelled: t('orderClosedLoop.cancelled') }
return map[status] || status
}
function statusTagType(status) {
const map = { pending: 'info', executing: 'warning', completed: 'success', cancelled: 'danger' }
return map[status] || 'info'
}
function statusText(status) {
const map = { pending: '待执行', executing: '执行中', completed: '已完成', cancelled: '已作废' }
return map[status] || status
}
function handleQuery() {
loading.value = true
listOrderExecuteRecord(queryParams.value).then(res => {

View File

@@ -16,7 +16,7 @@
:disabled="isAddDisabled"
@click="handleAdd"
>
新增
{{ $t('pharmacyManagement.add') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -28,7 +28,7 @@
:disabled="isDeleteDisabled"
@click="handleDelete"
>
删除
{{ $t('pharmacyManagement.delete') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -40,7 +40,7 @@
:disabled="isCancelDisabled"
@click="handleCancel"
>
取消
{{ $t('pharmacyManagement.cancel') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -52,7 +52,7 @@
:disabled="isAuditDisabled"
@click="handleAudit"
>
审核
{{ $t('pharmacyManagement.audit') }}
</el-button>
</el-col>
</el-row>
@@ -77,12 +77,12 @@
:rules="rules"
>
<el-form-item
label="库房:"
:label="$t('pharmacyManagement.warehouse')"
label-width="100px"
>
<el-select
v-model="tableForm.locationId"
placeholder="请选择库房"
:placeholder="$t('pharmacyManagement.selectWarehouse')"
clearable
filterable
@change="handleLocationChange(tableForm.locationId)"
@@ -107,12 +107,12 @@
@submit.prevent
>
<el-form-item
label="单据搜索"
:label="$t('pharmacyManagement.documentSearch')"
label-width="100px"
>
<el-input
v-model="queryParams.searchKey"
placeholder="请输入单据号"
:placeholder="$t('pharmacyManagement.enterDocumentNo')"
clearable
@keyup.enter="getList"
>
@@ -158,21 +158,21 @@
<el-icon class="info-icon">
<User />
</el-icon>
<span class="label">采购员</span>
<span class="label">{{ $t('pharmacyManagement.buyer') }}</span>
<span class="value">{{ item.applicantId_dictText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<Shop />
</el-icon>
<span class="label">供应商</span>
<span class="label">{{ $t('pharmacyManagement.supplier') }}</span>
<span class="value">{{ item.supplierId_dictText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<User />
</el-icon>
<span class="label">审核状态</span>
<span class="label">{{ $t('pharmacyManagement.auditStatus') }}</span>
<el-tag
v-if="item.statusEnum_enumText === '同意'"
type="success"
@@ -190,14 +190,14 @@
<el-icon class="info-icon">
<Files />
</el-icon>
<span class="label">单据类型</span>
<span class="label">{{ $t('pharmacyManagement.documentType') }}</span>
<span class="value">{{ item.typeEnum_enumText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<Calendar />
</el-icon>
<span class="label">单据日期</span>
<span class="label">{{ $t('pharmacyManagement.documentDate') }}</span>
<span class="value">{{
parseTime(item.applyTime, '{y}-{m}-{d} {h}:{i}:{s}')
}}</span>
@@ -213,15 +213,15 @@
class="empty-state"
>
<el-empty
description="暂无单据"
:description="$t('pharmacyManagement.noDocuments')"
:image-size="80"
>
<el-button
type="primary"
@click="handleAdd"
>
新增单据
</el-button>
{{ $t('pharmacyManagement.addDocument') }}
</el-button>
</el-empty>
</div>
</div>
@@ -261,6 +261,7 @@
<script setup>
import {ref, watch} from 'vue';
import {useRoute, useRouter} from 'vue-router';
import {useI18n} from 'vue-i18n';
import orderTable from './components/orderTable.vue';
import {agreeApproval, deleteOrder, getInit, getOrderDetail, getOrderList,} from './components/api';
import useUserStore from '@/store/modules/user';
@@ -277,6 +278,7 @@ const queryParams = ref({
});
// 获取当前实例
const { proxy } = getCurrentInstance();
const { t } = useI18n();
// 右侧表格查询参数 + 分页参数 + 添加查询参数
const tableForm = ref({
locationId: undefined,
@@ -291,14 +293,14 @@ const tableForm = ref({
});
// 右侧表格数据
const tableData = ref([]);
// 右侧审核表单
// 右侧 {{ $t('pharmacyManagement.audit') }}表单
const auditForm = ref({
approvalTime: undefined,
statusEnum: undefined,
statusEnum_enumText: undefined,
approverId: undefined,
});
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
const isAddOrEditOrder = ref({
isAddOrder: false,
isEditOrder: false,
@@ -321,15 +323,15 @@ const orderList = ref([]);
const tableDataTotal = ref(0);
// 选中的单据ID
const selectedOrder = ref(null);
// 是否禁用新增按钮
// 是否禁用 {{ $t('pharmacyManagement.add') }}按钮
const isAddDisabled = ref(false);
// 是否禁用编辑按钮
const isEditDisabled = ref(true);
// 是否禁用取消按钮
// 是否禁用 {{ $t('pharmacyManagement.cancel') }}按钮
const isCancelDisabled = ref(true);
// 是否禁用删除按钮
// 是否禁用 {{ $t('pharmacyManagement.delete') }}按钮
const isDeleteDisabled = ref(true);
// 是否禁用审核按钮
// 是否禁用 {{ $t('pharmacyManagement.audit') }}按钮
const isAuditDisabled = ref(true);
// 按钮显示 buttonShow
const buttonShow = ref({
@@ -366,7 +368,7 @@ const getList = async () => {
orderList.value = res.data.records;
};
// 新增按钮
// {{ $t('pharmacyManagement.add') }}按钮
const handleAdd = async () => {
// 清空当前表格数据 和 选中状态
resetFormAndTableData();
@@ -386,7 +388,7 @@ const handleAdd = async () => {
locationId: tableForm.value.locationId,
};
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
isAddOrEditOrder.value = {
isAddOrder: true,
isEditOrder: false,
@@ -396,11 +398,11 @@ const handleAdd = async () => {
nextTick(() => {
// 更新按钮状态为编辑模式
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: false,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: true,
@@ -408,7 +410,7 @@ const handleAdd = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: true,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -423,7 +425,7 @@ const handleAdd = async () => {
const resetFormAndTableData = () => {
// 清空右侧表格数据
tableData.value = [];
// 清空审核表单数据
// 清空 {{ $t('pharmacyManagement.audit') }}表单数据
auditForm.value = {};
// 清空右侧表格数据总条数
tableDataTotal.value = 0;
@@ -457,11 +459,11 @@ const handleEdit = async (order) => {
};
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -469,7 +471,7 @@ const handleEdit = async (order) => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -488,11 +490,11 @@ const handleEdit = async (order) => {
// 更新按钮状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: isApproved,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: false,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: isApproved,
// 添加 按钮禁用
isAddDisabled: false,
@@ -500,7 +502,7 @@ const handleEdit = async (order) => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: !isApproved,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: !isApproved,
// 保存行 按钮显示
isSaveShow: !isApproved,
@@ -605,33 +607,33 @@ const buildEditForm = (data) => {
});
// 更新表格数据
tableData.value = data;
// 审核表格数据
// {{ $t('pharmacyManagement.audit') }}表格数据
auditForm.value = {
// 审核时间
// {{ $t('pharmacyManagement.audit') }}时间
approvalTime: data[0].approvalTime,
// 审核状态
// {{ $t('pharmacyManagement.audit') }}状态
statusEnum: data[0].statusEnum,
// 审核状态文本
// {{ $t('pharmacyManagement.audit') }}状态文本
statusEnum_enumText: data[0].statusEnum_enumText,
// 审核
// {{ $t('pharmacyManagement.audit') }}
approverId: data[0].approverId,
};
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
isAddOrEditOrder.value = {
isAddOrder: false,
isEditOrder: true,
};
}
};
// 取消按钮
// {{ $t('pharmacyManagement.cancel') }}按钮
const handleCancel = () => {
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -639,7 +641,7 @@ const handleCancel = () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -666,14 +668,14 @@ const clearForm = () => {
isEditOrder: false,
};
};
// 删除按钮
// {{ $t('pharmacyManagement.delete') }}按钮
const handleDelete = async () => {
if (!selectedOrder.value) {
proxy.$modal.msgError(t('common.pleaseSelectDocToDelete'));
return;
}
// 校验是否可以删除(已审批的单据不能删除
// 校验是否可以 {{ $t('pharmacyManagement.delete') }}(已审批的单据不能 {{ $t('pharmacyManagement.delete') }}
if (selectedOrder.value.statusEnum_enumText === '同意' || selectedOrder.value.statusEnum === 3) {
proxy.$modal.msgError(t('common.approvedDocCannotDelete'));
return;
@@ -686,7 +688,7 @@ const handleDelete = async () => {
type: 'warning',
});
// 删除单据
// {{ $t('pharmacyManagement.delete') }}单据
await deleteOrder(selectedOrder.value.supplyBusNo);
proxy.$modal.msgSuccess(t('common.deleteSuccess'));
@@ -701,11 +703,11 @@ const handleDelete = async () => {
selectedOrder.value = null;
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -713,7 +715,7 @@ const handleDelete = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -725,11 +727,11 @@ const handleDelete = async () => {
} catch (error) {
if (error !== 'cancel') {
proxy.$modal.msgError(t('common.deleteFail'));
console.error('删除失败:', error);
console.error(t('pharmacyManagement.delete') + '失败:', error);
}
}
};
// 审核按钮
// {{ $t('pharmacyManagement.audit') }}按钮
const handleAudit = async () => {
if (!selectedOrder.value) {
proxy.$modal.msgError(t('common.pleaseSelectDocToAudit'));
@@ -764,11 +766,11 @@ const handleAudit = async () => {
selectedOrder.value = null;
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -776,7 +778,7 @@ const handleAudit = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -832,11 +834,11 @@ const handleFormUpdate = (newForm) => {
// 处理按钮状态更新
const handleUpdateButtonState = (buttonState) => {
// 按钮禁用
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled.value = buttonState.isAuditDisabled;
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled.value = buttonState.isCancelDisabled;
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled.value = buttonState.isDeleteDisabled;
// 添加 按钮禁用
isAddDisabled.value = buttonState.isAddDisabled;
@@ -845,7 +847,7 @@ const handleUpdateButtonState = (buttonState) => {
// 按钮显示
// 添加行 按钮显示
buttonShow.value.isAddShow = buttonState.isAddShow;
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
buttonShow.value.isDeleteShow = buttonState.isDeleteShow;
// 保存行 按钮显示
buttonShow.value.isSaveShow = buttonState.isSaveShow;

View File

@@ -16,7 +16,7 @@
:disabled="isAddDisabled"
@click="handleAdd"
>
新增
{{ $t('pharmacyManagement.add') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -28,7 +28,7 @@
:disabled="isDeleteDisabled"
@click="handleDelete"
>
删除
{{ $t('pharmacyManagement.delete') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -40,7 +40,7 @@
:disabled="isCancelDisabled"
@click="handleCancel"
>
取消
{{ $t('pharmacyManagement.cancel') }}
</el-button>
</el-col>
<el-col :span="1.5">
@@ -52,7 +52,7 @@
:disabled="isAuditDisabled"
@click="handleAudit"
>
审核
{{ $t('pharmacyManagement.audit') }}
</el-button>
</el-col>
</el-row>
@@ -77,12 +77,12 @@
:rules="rules"
>
<el-form-item
label="库房:"
:label="$t('pharmacyManagement.warehouse')"
label-width="100px"
>
<el-select
v-model="tableForm.locationId"
placeholder="请选择库房"
:placeholder="$t('pharmacyManagement.selectWarehouse')"
clearable
filterable
@change="handleLocationChange(tableForm.locationId)"
@@ -107,12 +107,12 @@
@submit.prevent
>
<el-form-item
label="单据搜索"
:label="$t('pharmacyManagement.documentSearch')"
label-width="100px"
>
<el-input
v-model="queryParams.searchKey"
placeholder="请输入单据号"
:placeholder="$t('pharmacyManagement.enterDocumentNo')"
clearable
@keyup.enter="getList"
>
@@ -158,21 +158,21 @@
<el-icon class="info-icon">
<User />
</el-icon>
<span class="label">采购员</span>
<span class="label">{{ $t('pharmacyManagement.buyer') }}</span>
<span class="value">{{ item.applicantId_dictText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<Shop />
</el-icon>
<span class="label">供应商</span>
<span class="label">{{ $t('pharmacyManagement.supplier') }}</span>
<span class="value">{{ item.supplierId_dictText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<User />
</el-icon>
<span class="label">审核状态</span>
<span class="label">{{ $t('pharmacyManagement.auditStatus') }}</span>
<el-tag
v-if="item.statusEnum_enumText === '同意'"
type="success"
@@ -190,14 +190,14 @@
<el-icon class="info-icon">
<Files />
</el-icon>
<span class="label">单据类型</span>
<span class="label">{{ $t('pharmacyManagement.documentType') }}</span>
<span class="value">{{ item.typeEnum_enumText }}</span>
</div>
<div class="info-item">
<el-icon class="info-icon">
<Calendar />
</el-icon>
<span class="label">单据日期</span>
<span class="label">{{ $t('pharmacyManagement.documentDate') }}</span>
<span class="value">{{
parseTime(item.applyTime, '{y}-{m}-{d} {h}:{i}:{s}')
}}</span>
@@ -213,14 +213,14 @@
class="empty-state"
>
<el-empty
description="暂无单据"
:description="$t('pharmacyManagement.noDocuments')"
:image-size="80"
>
<el-button
type="primary"
@click="handleAdd"
>
新增单据
{{ $t('pharmacyManagement.addDocument') }}
</el-button>
</el-empty>
</div>
@@ -261,6 +261,7 @@
<script setup>
import {ref, watch} from 'vue';
import {useRoute, useRouter} from 'vue-router';
import {useI18n} from 'vue-i18n';
import orderTable from './components/orderTable.vue';
import {agreeApproval, deleteOrder, getInit, getOrderDetail, getOrderList,} from './components/api';
import useUserStore from '@/store/modules/user';
@@ -277,6 +278,7 @@ const queryParams = ref({
});
// 获取当前实例
const { proxy } = getCurrentInstance();
const { t } = useI18n();
// 右侧表格查询参数 + 分页参数 + 添加查询参数
const tableForm = ref({
locationId: undefined,
@@ -291,14 +293,14 @@ const tableForm = ref({
});
// 右侧表格数据
const tableData = ref([]);
// 右侧审核表单
// 右侧 {{ $t('pharmacyManagement.audit') }}表单
const auditForm = ref({
approvalTime: undefined,
statusEnum: undefined,
statusEnum_enumText: undefined,
approverId: undefined,
});
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
const isAddOrEditOrder = ref({
isAddOrder: false,
isEditOrder: false,
@@ -321,15 +323,15 @@ const orderList = ref([]);
const tableDataTotal = ref(0);
// 选中的单据ID
const selectedOrder = ref(null);
// 是否禁用新增按钮
// 是否禁用 {{ $t('pharmacyManagement.add') }}按钮
const isAddDisabled = ref(false);
// 是否禁用编辑按钮
const isEditDisabled = ref(true);
// 是否禁用取消按钮
// 是否禁用 {{ $t('pharmacyManagement.cancel') }}按钮
const isCancelDisabled = ref(true);
// 是否禁用删除按钮
// 是否禁用 {{ $t('pharmacyManagement.delete') }}按钮
const isDeleteDisabled = ref(true);
// 是否禁用审核按钮
// 是否禁用 {{ $t('pharmacyManagement.audit') }}按钮
const isAuditDisabled = ref(true);
// 按钮显示 buttonShow
const buttonShow = ref({
@@ -367,7 +369,7 @@ const getList = async () => {
orderList.value = res.data.records;
};
// 新增按钮
// {{ $t('pharmacyManagement.add') }}按钮
const handleAdd = async () => {
// 清空当前表格数据 和 选中状态
resetFormAndTableData();
@@ -387,7 +389,7 @@ const handleAdd = async () => {
locationId: tableForm.value.locationId,
};
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
isAddOrEditOrder.value = {
isAddOrder: true,
isEditOrder: false,
@@ -397,11 +399,11 @@ const handleAdd = async () => {
nextTick(() => {
// 更新按钮状态为编辑模式
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: false,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: true,
@@ -409,7 +411,7 @@ const handleAdd = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: true,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -424,7 +426,7 @@ const handleAdd = async () => {
const resetFormAndTableData = () => {
// 清空右侧表格数据
tableData.value = [];
// 清空审核表单数据
// 清空 {{ $t('pharmacyManagement.audit') }}表单数据
auditForm.value = {};
// 清空右侧表格数据总条数
tableDataTotal.value = 0;
@@ -458,11 +460,11 @@ const handleEdit = async (order) => {
};
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -470,7 +472,7 @@ const handleEdit = async (order) => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -489,11 +491,11 @@ const handleEdit = async (order) => {
// 更新按钮状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: isApproved,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: false,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: isApproved,
// 添加 按钮禁用
isAddDisabled: false,
@@ -501,7 +503,7 @@ const handleEdit = async (order) => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: !isApproved,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: !isApproved,
// 保存行 按钮显示
isSaveShow: !isApproved,
@@ -606,33 +608,33 @@ const buildEditForm = (data) => {
});
// 更新表格数据
tableData.value = data;
// 审核表格数据
// {{ $t('pharmacyManagement.audit') }}表格数据
auditForm.value = {
// 审核时间
// {{ $t('pharmacyManagement.audit') }}时间
approvalTime: data[0].approvalTime,
// 审核状态
// {{ $t('pharmacyManagement.audit') }}状态
statusEnum: data[0].statusEnum,
// 审核状态文本
// {{ $t('pharmacyManagement.audit') }}状态文本
statusEnum_enumText: data[0].statusEnum_enumText,
// 审核
// {{ $t('pharmacyManagement.audit') }}
approverId: data[0].approverId,
};
// 订单编辑还是新增
// 订单编辑还是 {{ $t('pharmacyManagement.add') }}
isAddOrEditOrder.value = {
isAddOrder: false,
isEditOrder: true,
};
}
};
// 取消按钮
// {{ $t('pharmacyManagement.cancel') }}按钮
const handleCancel = () => {
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -640,7 +642,7 @@ const handleCancel = () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -667,14 +669,14 @@ const clearForm = () => {
isEditOrder: false,
};
};
// 删除按钮
// {{ $t('pharmacyManagement.delete') }}按钮
const handleDelete = async () => {
if (!selectedOrder.value) {
proxy.$modal.msgError(t('common.pleaseSelectDocToDelete'));
return;
}
// 校验是否可以删除(已审批的单据不能删除
// 校验是否可以 {{ $t('pharmacyManagement.delete') }}(已审批的单据不能 {{ $t('pharmacyManagement.delete') }}
if (selectedOrder.value.statusEnum_enumText === '同意' || selectedOrder.value.statusEnum === 3) {
proxy.$modal.msgError(t('common.approvedDocCannotDelete'));
return;
@@ -687,7 +689,7 @@ const handleDelete = async () => {
type: 'warning',
});
// 删除单据
// {{ $t('pharmacyManagement.delete') }}单据
await deleteOrder(selectedOrder.value.supplyBusNo);
proxy.$modal.msgSuccess(t('common.deleteSuccess'));
@@ -702,11 +704,11 @@ const handleDelete = async () => {
selectedOrder.value = null;
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -714,7 +716,7 @@ const handleDelete = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -726,11 +728,11 @@ const handleDelete = async () => {
} catch (error) {
if (error !== 'cancel') {
proxy.$modal.msgError(t('common.deleteFail'));
console.error('删除失败:', error);
console.error(t('pharmacyManagement.delete') + '失败:', error);
}
}
};
// 审核按钮
// {{ $t('pharmacyManagement.audit') }}按钮
const handleAudit = async () => {
if (!selectedOrder.value) {
proxy.$modal.msgError(t('common.pleaseSelectDocToAudit'));
@@ -765,11 +767,11 @@ const handleAudit = async () => {
selectedOrder.value = null;
// 更新按钮状态为初始状态
handleUpdateButtonState({
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled: true,
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled: true,
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled: true,
// 添加 按钮禁用
isAddDisabled: false,
@@ -777,7 +779,7 @@ const handleAudit = async () => {
isEditDisabled: true,
// 添加行 按钮显示
isAddShow: false,
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
isDeleteShow: false,
// 保存行 按钮显示
isSaveShow: false,
@@ -833,11 +835,11 @@ const handleFormUpdate = (newForm) => {
// 处理按钮状态更新
const handleUpdateButtonState = (buttonState) => {
// 按钮禁用
// 审核 按钮禁用
// {{ $t('pharmacyManagement.audit') }} 按钮禁用
isAuditDisabled.value = buttonState.isAuditDisabled;
// 取消 按钮禁用
// {{ $t('pharmacyManagement.cancel') }} 按钮禁用
isCancelDisabled.value = buttonState.isCancelDisabled;
// 删除 按钮禁用
// {{ $t('pharmacyManagement.delete') }} 按钮禁用
isDeleteDisabled.value = buttonState.isDeleteDisabled;
// 添加 按钮禁用
isAddDisabled.value = buttonState.isAddDisabled;
@@ -846,7 +848,7 @@ const handleUpdateButtonState = (buttonState) => {
// 按钮显示
// 添加行 按钮显示
buttonShow.value.isAddShow = buttonState.isAddShow;
// 删除行 按钮显示
// {{ $t('pharmacyManagement.delete') }}行 按钮显示
buttonShow.value.isDeleteShow = buttonState.isDeleteShow;
// 保存行 按钮显示
buttonShow.value.isSaveShow = buttonState.isSaveShow;