fix: resolve pre-existing build errors in 6 Vue files
This commit is contained in:
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
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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' }],
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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 => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user