From 61f0c5d3a9308d1eaefd8890a46b3c569707e050 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期四, 09 四月 2026 09:24:47 +0800
Subject: [PATCH] 测试完成
---
src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue | 1272 ++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 766 insertions(+), 506 deletions(-)
diff --git a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
index 57b4dff..d25ddf7 100644
--- a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
+++ b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
@@ -13,147 +13,286 @@
<el-row :gutter="20">
<el-col :span="8">
<div class="info-item">
- <span class="label">鎮h�呭鍚嶏細</span>
- <span class="value">{{ currentRecord.patientName }}</span>
+ <span class="label">闂鍐呭锛�</span>
+ <span class="value">{{ currentRecord.questiontext || '鏃�' }}</span>
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
- <span class="label">鎬у埆锛�</span>
- <span class="value">{{ currentRecord.gender === 1 ? '鐢�' : '濂�' }}</span>
+ <span class="label">鍥炵瓟鍐呭锛�</span>
+ <span class="value">{{ currentRecord.asrtext || '鏃犲洖绛�' }}</span>
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
- <span class="label">骞撮緞锛�</span>
- <span class="value">{{ currentRecord.age }}宀�</span>
- </div>
- </el-col>
- <el-col :span="8">
- <div class="info-item">
- <span class="label">鑱旂郴鏂瑰紡锛�</span>
- <span class="value">{{ currentRecord.phone }}</span>
- </div>
- </el-col>
- <el-col :span="8">
- <div class="info-item">
- <span class="label">鍑洪櫌绉戝锛�</span>
- <span class="value">{{ currentRecord.dischargeDept }}</span>
- </div>
- </el-col>
- <el-col :span="8">
- <div class="info-item">
- <span class="label">鍑洪櫌鐥呭尯锛�</span>
- <span class="value">{{ currentRecord.dischargeWard }}</span>
- </div>
- </el-col>
- <el-col :span="8">
- <div class="info-item">
- <span class="label">濉啓鏃堕棿锛�</span>
- <span class="value">{{ currentRecord.fillTime }}</span>
+ <span class="label">瑙f瀽鍊硷細</span>
+ <span class="value">{{ currentRecord.matchedtext || '鏃�' }}</span>
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<span class="label">璐熻矗绉戝锛�</span>
- <el-tag type="primary">{{ currentRecord.responsibilityDept }}</el-tag>
+ <el-tag v-if="currentRecord.todeptname" type="primary">{{ currentRecord.todeptname }}</el-tag>
+ <span v-else class="value">鏈垎閰�</span>
</div>
</el-col>
<el-col :span="8">
<div class="info-item">
<span class="label">澶勭悊鐘舵�侊細</span>
<el-tag
- :type="getStatusTagType(currentRecord.processStatus)"
+ :type="getStatusTagType(currentRecord.handleFlag)"
effect="dark"
>
- {{ getStatusText(currentRecord.processStatus) }}
+ {{ getStatusText(currentRecord.handleFlag) }}
</el-tag>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">妯℃澘绫诲瀷锛�</span>
+ <el-tag :type="currentRecord.templateType === 1 ? 'primary' : 'success'">
+ {{ currentRecord.templateType === 1 ? '璇煶妯℃澘' : '闂嵎妯℃澘' }}
+ </el-tag>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鍒涘缓鏃堕棿锛�</span>
+ <span class="value">{{ formatDateTime(currentRecord.createTime) }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">澶勭悊鏃堕棿锛�</span>
+ <span class="value">{{ currentRecord.handleTime ? formatDateTime(currentRecord.handleTime) : '鏈鐞�' }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">澶勭悊浜猴細</span>
+ <span class="value">{{ currentRecord.handleBy || '鏈鐞�' }}</span>
+ </div>
+ </el-col>
+ <el-col :span="24" v-if="currentRecord.patdesc">
+ <div class="info-item">
+ <span class="label">鎮h�呬俊鎭細</span>
+ <span class="value">{{ currentRecord.patdesc }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8" v-if="currentRecord.handleresult">
+ <div class="info-item">
+ <span class="label">澶勭悊缁撴灉锛�</span>
+ <span class="value">{{ getHandleresultText(currentRecord.handleresult) }}</span>
+ </div>
+ </el-col>
+ <el-col :span="16" v-if="currentRecord.handledesc">
+ <div class="info-item">
+ <span class="label">澶勭悊璇存槑锛�</span>
+ <span class="value">{{ currentRecord.handledesc }}</span>
+ </div>
+ </el-col>
+ <el-col :span="24" v-if="currentRecord.finaloption">
+ <div class="info-item">
+ <span class="label">鏈�缁堟剰瑙侊細</span>
+ <span class="value">{{ currentRecord.finaloption }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8" v-if="currentRecord.recordurl">
+ <div class="info-item">
+ <span class="label">褰曢煶鍦板潃锛�</span>
+ <el-button
+ type="text"
+ size="small"
+ icon="el-icon-headset"
+ @click="handlePlayAudio(currentRecord.recordurl)"
+ >
+ 鎾斁褰曢煶
+ </el-button>
+ </div>
+ </el-col>
+ <el-col :span="8" v-if="currentRecord.ccdepts">
+ <div class="info-item">
+ <span class="label">鎶勯�佺瀹わ細</span>
+ <span class="value">{{ currentRecord.ccdepts }}</span>
</div>
</el-col>
</el-row>
</div>
- <!-- 闂嵎璇︽儏 -->
- <div class="questionnaire-section">
- <div class="section-title">闂嵎濉啓璇︽儏</div>
- <div class="questionnaire-content">
- <div class="question-item" v-for="(question, index) in questionnaireData" :key="index">
- <div class="question-header">
- <span class="question-index">{{ index + 1 }}.</span>
- <span class="question-text">{{ question.question }}</span>
- <el-tag
- size="mini"
- :type="question.type === 1 ? 'primary' : 'success'"
- class="question-type"
- >
- {{ question.type === 1 ? '鍗曢�夐' : '澶氶�夐' }}
- </el-tag>
- </div>
- <div class="question-options">
- <el-radio-group
- v-model="question.answer"
- v-if="question.type === 1"
- disabled
- >
- <el-radio
- v-for="option in question.options"
- :key="option.value"
- :label="option.value"
- :class="{ 'unsatisfactory-option': isUnsatisfactoryOption(option.value) }"
+ <!-- 闂嵎/璇煶璇︽儏 -->
+ <div class="content-container" v-if="templateData.length > 0">
+ <el-tabs v-model="activeName" type="border-card">
+ <!-- 闂嵎闅忚璇︽儏 -->
+ <el-tab-pane name="wj" v-if="currentRecord.templateType === 2">
+ <span slot="label"><i class="el-icon-notebook-1"></i> 闂嵎闅忚璇︽儏</span>
+ <div class="CONTENT">
+ <div class="title">{{ currentRecord.questiontext || '闂嵎璇︽儏' }}</div>
+ <div class="preview-left" v-if="!isVoiceTemplate">
+ <div
+ class="topic-dev"
+ v-for="(item, index) in templateData"
+ :key="item.id"
>
- {{ option.text }}
- </el-radio>
- </el-radio-group>
- <el-checkbox-group
- v-model="question.answer"
- v-else
- disabled
- >
- <el-checkbox
- v-for="option in question.options"
- :key="option.value"
- :label="option.value"
- :class="{ 'unsatisfactory-option': isUnsatisfactoryOption(option.value) }"
- >
- {{ option.text }}
- </el-checkbox>
- </el-checkbox-group>
+ <!-- 鍗曢�� -->
+ <div
+ :class="getTopicClass(item)"
+ :key="index"
+ v-if="item.scriptType == 1 && !item.astrict"
+ >
+ <div class="dev-text">
+ {{ index + 1 }}銆乕鍗曢�塢<span>{{ item.scriptContent }}</span>
+ </div>
+ <div class="dev-xx">
+ <el-radio-group v-model="item.scriptResult" disabled>
+ <el-radio
+ v-for="(option, optionIndex) in item.svyTaskTemplateTargetoptions"
+ :class="getOptionClass(option)"
+ :key="optionIndex"
+ :label="option.optioncontent"
+ >{{ option.optioncontent }}</el-radio>
+ </el-radio-group>
+ </div>
+ <div
+ v-if="item.showAppendInput || item.answerps"
+ class="append-input-container"
+ >
+ <el-input
+ type="textarea"
+ :rows="2"
+ placeholder="璇疯緭鍏ュ叿浣撲俊鎭�"
+ v-model="item.answerps"
+ readonly
+ ></el-input>
+ </div>
+ <div v-show="item.prompt">
+ <el-alert :title="item.prompt" type="warning"></el-alert>
+ </div>
+ </div>
+ <!-- 澶氶�� -->
+ <div
+ :class="item.isabnormal ? 'scriptTopic-isabnormal' : 'scriptTopic-dev'"
+ :key="index"
+ v-if="item.scriptType == 2 && !item.astrict"
+ >
+ <div class="dev-text">
+ {{ index + 1 }}銆乕澶氶�塢<span>{{ item.scriptContent }}</span>
+ </div>
+ <div class="dev-xx">
+ <el-checkbox-group v-model="item.scriptResult" disabled>
+ <el-checkbox
+ :class="option.isabnormal ? 'red-star' : ''"
+ v-for="(option, optionIndex) in item.svyTaskTemplateTargetoptions"
+ :key="optionIndex"
+ :label="option.optioncontent"
+ >
+ {{ option.optioncontent }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </div>
+ <div v-show="item.prompt && item.scriptResult[0]">
+ <el-alert :title="item.prompt" type="warning"></el-alert>
+ </div>
+ </div>
+ <!-- 濉┖ -->
+ <div
+ class="scriptTopic-dev"
+ :key="index"
+ v-if="item.scriptType == 4 && !item.astrict"
+ >
+ <div class="dev-text">
+ {{ index + 1 }}銆乕闂瓟]<span>{{ item.scriptContent }}</span>
+ <span v-if="item.valueType == 3">(鍙兘杈撳叆鏁板瓧)</span>
+ </div>
+ <div class="dev-xx" v-if="item.valueType == 3">
+ <el-input
+ type="text"
+ placeholder="璇疯緭鍏ョ瓟妗�"
+ v-model="item.scriptResult"
+ readonly
+ ></el-input>
+ </div>
+ <div class="dev-xx" v-else>
+ <el-input
+ type="textarea"
+ :rows="2"
+ placeholder="璇疯緭鍏ョ瓟妗�"
+ v-model="item.scriptResult"
+ readonly
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
- <div v-if="question.additional" class="additional-remark">
- <div class="remark-label">琛ュ厖璇存槑锛�</div>
- <div class="remark-content">{{ question.additional }}</div>
+ </el-tab-pane>
+
+ <!-- 璇煶闅忚璇︽儏 -->
+ <el-tab-pane name="yy" v-if="currentRecord.templateType === 1">
+ <span slot="label"><i class="el-icon-headset"></i> 璇煶闅忚璇︽儏</span>
+ <div class="borderdiv">
+ <div class="title">{{ taskName }}</div>
+ <div class="voice-audio" v-if="voiceAudioUrl">
+ 瀹屾暣璇煶锛�
+ <audio-player
+ :audio-source="voiceAudioUrl"
+ ></audio-player>
+ </div>
+ <div class="preview-left" v-if="voiceData.length > 0">
+ <div v-for="(item, index) in voiceData" :key="index">
+ <div class="leftside">
+ <i class="el-icon-phone-outline"></i>
+ <span>{{ item.questiontext || '闂鍐呭' }}</span>
+ </div>
+ <div class="offside">
+ <i class="el-icon-user"></i>
+ <div class="offside-value">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 1 }"
+ v-model="item.asrtext"
+ readonly
+ ></el-input>
+ <div v-if="item.questionvoice">
+ <audio-player
+ :audio-source="item.questionvoice"
+ ></audio-player>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
- </div>
- </div>
+ </el-tab-pane>
+ </el-tabs>
</div>
<!-- 澶勭悊璁板綍 -->
- <div class="process-section">
+ <div class="process-section" v-if="processRecords.length > 0">
<div class="section-title">澶勭悊璁板綍</div>
- <div class="process-timeline" v-if="processRecords.length > 0">
+ <div class="process-timeline">
<el-timeline>
<el-timeline-item
v-for="(record, index) in processRecords"
:key="index"
- :timestamp="record.time"
+ :timestamp="formatDateTime(record.handleTime || record.createTime)"
placement="top"
>
<el-card>
<div class="process-item">
<div class="process-header">
- <span class="process-user">{{ record.user }}</span>
+ <span class="process-user">{{ record.handleBy || '绯荤粺' }}</span>
<el-tag
size="small"
- :type="getStatusTagType(record.status)"
+ :type="getStatusTagType(record.handleFlag)"
>
- {{ getStatusText(record.status) }}
+ {{ getStatusText(record.handleFlag) }}
</el-tag>
</div>
<div class="process-content">
- <div v-if="record.reportDepts && record.reportDepts.length > 0" class="process-depts">
- <span class="label">鎶ュ绉戝锛�</span>
+ <div v-if="record.ccdepts" class="process-depts">
+ <span class="label">鎶勯�佺瀹わ細</span>
<el-tag
- v-for="dept in record.reportDepts"
+ v-for="dept in getDeptArray(record.ccdepts)"
:key="dept"
size="small"
type="info"
@@ -162,31 +301,23 @@
{{ dept }}
</el-tag>
</div>
- <div v-if="record.remark" class="process-remark">
- <span class="label">澶勭悊澶囨敞锛�</span>
- <span class="content">{{ record.remark }}</span>
+ <div v-if="record.handleresult" class="process-remark">
+ <span class="label">澶勭悊缁撴灉锛�</span>
+ <span class="content">{{ getHandleresultText(record.handleresult) }}</span>
</div>
- <div v-if="record.attachments && record.attachments.length > 0" class="process-attachments">
- <span class="label">闄勪欢锛�</span>
- <el-button
- v-for="file in record.attachments"
- :key="file.id"
- type="text"
- size="small"
- icon="el-icon-document"
- @click="handlePreviewFile(file)"
- >
- {{ file.name }}
- </el-button>
+ <div v-if="record.handledesc" class="process-remark">
+ <span class="label">澶勭悊璇存槑锛�</span>
+ <span class="content">{{ record.handledesc }}</span>
+ </div>
+ <div v-if="record.finaloption" class="process-remark">
+ <span class="label">鏈�缁堟剰瑙侊細</span>
+ <span class="content">{{ record.finaloption }}</span>
</div>
</div>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
- </div>
- <div v-else class="no-record">
- 鏆傛棤澶勭悊璁板綍
</div>
</div>
@@ -195,7 +326,7 @@
type="primary"
icon="el-icon-edit"
@click="handleProcess"
- v-if="currentRecord.processStatus !== 2"
+ v-if="currentRecord.handleFlag !== '1'"
>
澶勭悊寮傚父
</el-button>
@@ -217,61 +348,72 @@
label-width="100px"
size="medium"
>
- <el-form-item label="澶勭悊鐘舵��" prop="status">
+ <el-form-item label="澶勭悊鐘舵��" prop="handleFlag">
<el-select
- v-model="processForm.status"
+ v-model="processForm.handleFlag"
placeholder="璇烽�夋嫨澶勭悊鐘舵��"
style="width: 100%"
>
- <el-option label="澶勭悊涓�" :value="1" />
- <el-option label="宸插鐞�" :value="2" />
- <el-option label="宸查┏鍥�" :value="3" />
+ <el-option label="宸插鐞�" :value="'1'" />
+ <el-option label="鍙栨秷澶勭悊" :value="'0'" />
</el-select>
</el-form-item>
- <el-form-item label="鎶ュ绉戝" prop="reportDepts">
+ <el-form-item label="鎶勯�佺瀹�" prop="ccdepts">
<el-select
- v-model="processForm.reportDepts"
- placeholder="璇烽�夋嫨鎶ュ绉戝"
+ v-model="processForm.ccdepts"
+ placeholder="璇烽�夋嫨鎶勯�佺瀹�"
multiple
filterable
collapse-tags
style="width: 100%"
+ :disabled="processForm.handleFlag !== '1'"
>
<el-option
v-for="dept in deptList"
- :key="dept.id"
- :label="dept.name"
- :value="dept.id"
+ :key="dept.deptCode"
+ :label="dept.label"
+ :value="dept.deptCode"
/>
</el-select>
</el-form-item>
- <el-form-item label="澶勭悊澶囨敞" prop="remark">
+ <el-form-item label="澶勭悊缁撴灉" prop="handleresult">
+ <el-select
+ v-model="processForm.handleresult"
+ placeholder="璇烽�夋嫨澶勭悊缁撴灉"
+ style="width: 100%"
+ :disabled="processForm.handleFlag !== '1'"
+ >
+ <el-option label="宸茶В鍐�" value="resolved" />
+ <el-option label="宸茶В閲�" value="explained" />
+ <el-option label="宸茶浆浜�" value="transferred" />
+ <el-option label="闇�鏀硅繘" value="improvement" />
+ <el-option label="宸查┏鍥�" value="rejected" />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="澶勭悊璇存槑" prop="handledesc">
<el-input
- v-model="processForm.remark"
+ v-model="processForm.handledesc"
type="textarea"
:rows="4"
- placeholder="璇疯緭鍏ュ鐞嗗娉紙鏈�澶�500瀛楋級"
+ placeholder="璇疯緭鍏ュ鐞嗚鏄庯紙鏈�澶�500瀛楋級"
maxlength="500"
show-word-limit
+ :disabled="processForm.handleFlag !== '1'"
/>
</el-form-item>
- <el-form-item label="闄勪欢涓婁紶">
- <el-upload
- class="upload-demo"
- action="#"
- :on-preview="handleFilePreview"
- :on-remove="handleFileRemove"
- :before-remove="beforeFileRemove"
- :limit="3"
- :on-exceed="handleFileExceed"
- :file-list="fileList"
- >
- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- <div slot="tip" class="el-upload__tip">鏀寔涓婁紶鍥剧墖銆佹枃妗g瓑闄勪欢锛屽崟涓枃浠朵笉瓒呰繃10MB</div>
- </el-upload>
+ <el-form-item label="鏈�缁堟剰瑙�" prop="finaloption" v-if="hasQualityPermission">
+ <el-input
+ v-model="processForm.finaloption"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ユ渶缁堝鐞嗘剰瑙侊紙鏈�澶�300瀛楋級"
+ maxlength="300"
+ show-word-limit
+ />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -285,24 +427,42 @@
</el-button>
</span>
</el-dialog>
+
+ <!-- 褰曢煶鎾斁鍣� -->
+ <audio
+ v-if="audioUrl"
+ :src="audioUrl"
+ ref="audioPlayer"
+ controls
+ style="display: none"
+ />
</el-dialog>
</template>
<script>
+import { traceedit } from "@/api/AiCentre/index";
+import { getsearchrResults, getPersonVoices, getTaskservelist } from "@/api/AiCentre/index";
+import { deptTreeSelect } from "@/api/system/user";
+import AudioPlayer from "@/components/AudioPlayer"; // 闇�瑕佸垱寤鸿繖涓煶棰戞挱鏀剧粍浠�
+
export default {
name: 'ExceptionDetailDialog',
+ components: {
+ AudioPlayer
+ },
props: {
- // 鏄惁鏄剧ず瀵硅瘽妗�
visible: {
type: Boolean,
default: false
},
- // 璁板綍ID
recordId: {
type: [Number, String],
default: null
},
- // 瀵硅瘽妗嗘爣棰�
+ recordData: {
+ type: Object,
+ default: () => ({})
+ },
title: {
type: String,
default: '寮傚父鍙嶉璇︽儏'
@@ -313,45 +473,71 @@
// 褰撳墠璁板綍
currentRecord: {},
- // 闂嵎鏁版嵁
- questionnaireData: [],
+ // 闂嵎/璇煶鏁版嵁
+ activeName: 'wj',
+ taskName: '',
+ templateData: [],
+ voiceData: [],
+ voiceAudioUrl: '',
// 澶勭悊璁板綍
processRecords: [],
// 绉戝鍒楄〃
- deptList: [
- { id: 1, name: '蹇冭绠″唴绉�' },
- { id: 2, name: '绁炵粡鍐呯' },
- { id: 3, name: '鏅绉�' },
- { id: 4, name: '楠ㄧ' },
- { id: 5, name: '濡囦骇绉�' },
- { id: 6, name: '鍎跨' },
- { id: 7, name: '鎬ヨ瘖绉�' },
- { id: 8, name: '鍛煎惛鍐呯' }
- ],
+ deptList: [],
// 澶勭悊瀵硅瘽妗�
processDialogVisible: false,
processing: false,
processForm: {
- status: '',
- reportDepts: [],
- remark: ''
+ handleFlag: '',
+ ccdepts: [],
+ handleresult: '',
+ handledesc: '',
+ finaloption: ''
},
processRules: {
- status: [
+ handleFlag: [
{ required: true, message: '璇烽�夋嫨澶勭悊鐘舵��', trigger: 'change' }
],
- remark: [
- { required: true, message: '璇疯緭鍏ュ鐞嗗娉�', trigger: 'blur' },
- { min: 5, max: 500, message: '澶囨敞闀垮害鍦� 5 鍒� 500 涓瓧绗�', trigger: 'blur' }
+ handleresult: [
+ {
+ required: true,
+ message: '璇烽�夋嫨澶勭悊缁撴灉',
+ trigger: 'change',
+ validator: (rule, value, callback) => {
+ if (this.processForm.handleFlag === '1' && !value) {
+ callback(new Error('璇烽�夋嫨澶勭悊缁撴灉'));
+ } else {
+ callback();
+ }
+ }
+ }
+ ],
+ handledesc: [
+ {
+ required: true,
+ message: '璇疯緭鍏ュ鐞嗚鏄�',
+ trigger: 'blur',
+ validator: (rule, value, callback) => {
+ if (this.processForm.handleFlag === '1' && (!value || value.trim().length < 3)) {
+ callback(new Error('澶勭悊璇存槑鑷冲皯3涓瓧绗�'));
+ } else {
+ callback();
+ }
+ }
+ }
]
},
- fileList: [],
+
+ // 闊抽鎾斁
+ audioUrl: '',
// 鍔犺浇鐘舵��
- loading: false
+ loading: false,
+
+ // 鏉冮檺鎺у埗
+ hasQualityPermission: false
};
},
@@ -363,6 +549,10 @@
set(val) {
this.$emit('update:visible', val);
}
+ },
+
+ isVoiceTemplate() {
+ return this.currentRecord.templateType === 1;
}
},
@@ -370,237 +560,293 @@
visible: {
immediate: true,
handler(val) {
- if (val && this.recordId) {
+ if (val) {
this.loadData();
+ } else {
+ this.resetData();
+ }
+ }
+ },
+
+ recordData: {
+ immediate: true,
+ handler(val) {
+ if (val && Object.keys(val).length > 0) {
+ this.currentRecord = { ...val };
}
}
}
},
methods: {
- // 鍔犺浇鏁版嵁
- async loadData() {
- this.loading = true;
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ formatDateTime(dateTime) {
+ if (!dateTime) return '';
try {
- await Promise.all([
- this.loadRecordDetail(),
- this.loadQuestionnaireData(),
- this.loadProcessRecords()
- ]);
- } finally {
- this.loading = false;
+ const date = new Date(dateTime);
+ if (isNaN(date.getTime())) {
+ return dateTime;
+ }
+ return date.toLocaleDateString().replace(/\//g, '-') + ' ' +
+ date.toTimeString().split(' ')[0];
+ } catch (error) {
+ console.error('鏃ユ湡鏍煎紡鍖栭敊璇�:', error);
+ return dateTime;
}
},
- // 鍔犺浇璁板綍璇︽儏
- async loadRecordDetail() {
- return new Promise(resolve => {
- setTimeout(() => {
- // 鏍规嵁涓嶅悓鐨剅ecordId杩斿洖涓嶅悓鐨刴ock鏁版嵁
- const mockRecords = {
- 1: {
- id: 1,
- patientName: '寮犲厛鐢�',
- gender: 1,
- age: 45,
- phone: '13800138000',
- dischargeDept: '蹇冭绠″唴绉�',
- dischargeWard: '鍐呯涓�鐥呭尯',
- fillTime: '2024-01-15 10:30:25',
- responsibilityDept: '蹇冭绠″唴绉�',
- processStatus: 0
- },
- 2: {
- id: 2,
- patientName: '鏉庡コ澹�',
- gender: 0,
- age: 38,
- phone: '13900139000',
- dischargeDept: '绁炵粡鍐呯',
- dischargeWard: '鍐呯浜岀梾鍖�',
- fillTime: '2024-01-14 16:20:10',
- responsibilityDept: '绁炵粡鍐呯',
- processStatus: 0
- },
- 3: {
- id: 3,
- patientName: '鐜嬪厛鐢�',
- gender: 1,
- age: 52,
- phone: '13700137000',
- dischargeDept: '鏅绉�',
- dischargeWard: '澶栫涓�鐥呭尯',
- fillTime: '2024-01-13 09:15:45',
- responsibilityDept: '鏅绉�',
- processStatus: 1
- }
- };
-
- this.currentRecord = mockRecords[this.recordId] || {
- id: 1,
- patientName: '寮犲厛鐢�',
- gender: 1,
- age: 45,
- phone: '13800138000',
- dischargeDept: '蹇冭绠″唴绉�',
- dischargeWard: '鍐呯涓�鐥呭尯',
- fillTime: '2024-01-15 10:30:25',
- responsibilityDept: '蹇冭绠″唴绉�',
- processStatus: 0
- };
- resolve();
- }, 300);
- });
+ // 妫�鏌ヨ川绠℃潈闄�
+ checkQualityPermission() {
+ const userRoles = this.$store.getters.roles || [];
+ return userRoles.includes('quality_manager') || userRoles.includes('admin');
},
- // 鍔犺浇闂嵎鏁版嵁
- async loadQuestionnaireData() {
- return new Promise(resolve => {
- setTimeout(() => {
- this.questionnaireData = [
- {
- question: '鎮ㄥ鍖绘姢浜哄憳鐨勬湇鍔℃�佸害鏄惁婊℃剰锛�',
- type: 1,
- options: [
- { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
- { value: '婊℃剰', text: '婊℃剰' },
- { value: '涓�鑸�', text: '涓�鑸�' },
- { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
- { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
- ],
- answer: '涓嶆弧鎰�',
- additional: '鍖荤敓鏌ユ埧鏃堕棿澶煭锛屾矡閫氫笉澶熷厖鍒嗭紝瀵圭梾鎯呰В閲婁笉澶熻缁�'
- },
- {
- question: '鎮ㄥ鍖荤敓鐨勮瘖鐤楁按骞冲拰鎶�鏈兘鍔涜瘎浠峰浣曪紵',
- type: 1,
- options: [
- { value: '闈炲父涓撲笟', text: '闈炲父涓撲笟' },
- { value: '姣旇緝涓撲笟', text: '姣旇緝涓撲笟' },
- { value: '涓�鑸�', text: '涓�鑸�' },
- { value: '涓嶅涓撲笟', text: '涓嶅涓撲笟' },
- { value: '闈炲父涓嶄笓涓�', text: '闈炲父涓嶄笓涓�' }
- ],
- answer: '姣旇緝涓撲笟',
- additional: ''
- },
- {
- question: '鎮ㄥ鍖婚櫌鐨勭幆澧冨拰鍗敓鐘跺喌鏄惁婊℃剰锛�',
- type: 1,
- options: [
- { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
- { value: '婊℃剰', text: '婊℃剰' },
- { value: '涓�鑸�', text: '涓�鑸�' },
- { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
- { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
- ],
- answer: '涓�鑸�',
- additional: ''
- },
- {
- question: '鎮ㄨ涓哄尰鎶や汉鍛樹笌鎮ㄧ殑娌熼�氭槸鍚﹀厖鍒嗭紵',
- type: 1,
- options: [
- { value: '闈炲父鍏呭垎', text: '闈炲父鍏呭垎' },
- { value: '姣旇緝鍏呭垎', text: '姣旇緝鍏呭垎' },
- { value: '涓�鑸�', text: '涓�鑸�' },
- { value: '涓嶅鍏呭垎', text: '涓嶅鍏呭垎' },
- { value: '闈炲父涓嶅厖鍒�', text: '闈炲父涓嶅厖鍒�' }
- ],
- answer: '涓嶅鍏呭垎',
- additional: '鍖荤敓璁茶В鐥呮儏鏃惰閫熷お蹇紝娌℃湁缁欒冻澶熺殑鏃堕棿鎻愰棶'
- },
- {
- question: '鎮ㄥ绛夊緟灏辫瘖鍜屾不鐤楃殑鏃堕棿鏄惁婊℃剰锛�',
- type: 1,
- options: [
- { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
- { value: '婊℃剰', text: '婊℃剰' },
- { value: '涓�鑸�', text: '涓�鑸�' },
- { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
- { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
- ],
- answer: '涓嶆弧鎰�',
- additional: '棰勭害鐨�9鐐癸紝瀹為檯10鐐规墠瑙佸埌鍖荤敓'
- }
- ];
- resolve();
- }, 300);
- });
+ // 鑾峰彇绉戝鍒楄〃
+ async getDeptOptions() {
+ try {
+ const res = await deptTreeSelect();
+ if (res.code == 200) {
+ this.deptList = this.flattenArray(res.data) || [];
+ }
+ } catch (error) {
+ console.error('鑾峰彇绉戝鍒楄〃澶辫触:', error);
+ }
},
- // 鍔犺浇澶勭悊璁板綍
- async loadProcessRecords() {
- return new Promise(resolve => {
- setTimeout(() => {
- this.processRecords = [
- {
- id: 1,
- time: '2024-01-15 14:20:30',
- user: '寮犲尰鐢�',
- status: 1, // 澶勭悊涓�
- reportDepts: ['鍖诲姟绉�', '鎶ょ悊閮�'],
- remark: '宸叉敹鍒板弽棣堬紝姝e湪瀹夋帓鐩稿叧浜哄憳鏍告煡鎯呭喌',
- attachments: [
- { id: 1, name: '鍒濇璋冩煡璁板綍.docx' },
- { id: 2, name: '鎮h�呮矡閫氳褰�.jpg' }
- ]
- },
- {
- id: 2,
- time: '2024-01-15 10:45:12',
- user: '绯荤粺',
- status: 0, // 寰呭鐞�
- remark: '绯荤粺鑷姩璇嗗埆涓哄紓甯稿弽棣堬紝宸插垎閰嶅埌璐d换绉戝',
- attachments: []
- }
- ];
- resolve();
- }, 300);
- });
- },
+ // 灞曞钩鏁扮粍
+ flattenArray(multiArray) {
+ let result = [];
- // 鍒ゆ柇鏄惁涓轰笉婊℃剰閫夐」
- isUnsatisfactoryOption(value) {
- const unsatisfactoryValues = [
- '涓嶆弧鎰�',
- '闈炲父涓嶆弧鎰�',
- '涓嶅涓撲笟',
- '闈炲父涓嶄笓涓�',
- '涓嶅鍏呭垎',
- '闈炲父涓嶅厖鍒�'
- ];
- return unsatisfactoryValues.includes(value);
+ function flatten(element) {
+ if (element.children && element.children.length > 0) {
+ element.children.forEach((child) => flatten(child));
+ } else {
+ let item = JSON.parse(JSON.stringify(element));
+ result.push(item);
+ }
+ }
+
+ multiArray.forEach((element) => flatten(element));
+ return result;
},
// 鑾峰彇鐘舵�佹爣绛剧被鍨�
- getStatusTagType(status) {
- switch (status) {
- case 0: return 'warning'; // 寰呭鐞�
- case 1: return 'primary'; // 澶勭悊涓�
- case 2: return 'success'; // 宸插鐞�
- case 3: return 'danger'; // 宸查┏鍥�
+ getStatusTagType(handleFlag) {
+ switch (handleFlag) {
+ case '0': return 'warning'; // 鏈鐞�
+ case '1': return 'success'; // 宸插鐞�
default: return 'info';
}
},
// 鑾峰彇鐘舵�佹枃鏈�
- getStatusText(status) {
- switch (status) {
- case 0: return '寰呭鐞�';
- case 1: return '澶勭悊涓�';
- case 2: return '宸插鐞�';
- case 3: return '宸查┏鍥�';
+ getStatusText(handleFlag) {
+ switch (handleFlag) {
+ case '0': return '鏈鐞�';
+ case '1': return '宸插鐞�';
default: return '鏈煡';
+ }
+ },
+
+ // 鑾峰彇澶勭悊缁撴灉鏂囨湰
+ getHandleresultText(handleresult) {
+ const map = {
+ 'resolved': '宸茶В鍐�',
+ 'explained': '宸茶В閲�',
+ 'transferred': '宸茶浆浜�',
+ 'improvement': '闇�鏀硅繘',
+ 'rejected': '宸查┏鍥�'
+ };
+ return map[handleresult] || handleresult;
+ },
+
+ // 鑾峰彇绉戝鏁扮粍
+ getDeptArray(ccdepts) {
+ if (!ccdepts) return [];
+ return ccdepts.split(',');
+ },
+
+ // 鎾斁闊抽
+ handlePlayAudio(url) {
+ this.audioUrl = url;
+ this.$nextTick(() => {
+ const audioPlayer = this.$refs.audioPlayer;
+ if (audioPlayer) {
+ audioPlayer.play().catch(error => {
+ console.error('鎾斁澶辫触:', error);
+ this.$message.error('闊抽鎾斁澶辫触');
+ });
+ }
+ });
+ },
+
+ // 鑾峰彇涓婚鏍峰紡绫�
+ getTopicClass(item) {
+ if (item.isabnormal == 1) {
+ return "scriptTopic-isabnormal";
+ } else if (item.isabnormal == 2) {
+ return "scriptTopic-warning";
+ } else {
+ return "scriptTopic-dev";
+ }
+ },
+
+ // 鑾峰彇閫夐」鏍峰紡绫�
+ getOptionClass(items) {
+ if (items.isabnormal == 1) {
+ return "red-star";
+ } else if (items.isabnormal == 2) {
+ return "yellow-star";
+ }
+ return "";
+ },
+
+ // 鍔犺浇鏁版嵁
+ async loadData() {
+ this.loading = true;
+ try {
+ this.hasQualityPermission = this.checkQualityPermission();
+ await this.getDeptOptions();
+
+ if (Object.keys(this.currentRecord).length === 0) {
+ this.currentRecord = this.recordData || {};
+ }
+
+ // 濡傛灉褰撳墠璁板綍鏄闊虫ā鏉匡紝鍔犺浇璇煶鏁版嵁
+ if (this.currentRecord.templateType === 1) {
+ await this.loadVoiceData();
+ this.activeName = 'yy';
+ } else if (this.currentRecord.templateType === 2) {
+ await this.loadQuestionnaireData();
+ this.activeName = 'wj';
+ }
+
+ await this.loadProcessRecords();
+ } catch (error) {
+ console.error('鍔犺浇璇︽儏鏁版嵁澶辫触:', error);
+ this.$message.error('鍔犺浇鏁版嵁澶辫触');
+ } finally {
+ this.loading = false;
+ }
+ },
+
+ // 閲嶇疆鏁版嵁
+ resetData() {
+ this.currentRecord = {};
+ this.templateData = [];
+ this.voiceData = [];
+ this.processRecords = [];
+ this.voiceAudioUrl = '';
+ this.taskName = '';
+ this.activeName = 'wj';
+ },
+
+ // 鍔犺浇闂嵎鏁版嵁
+ async loadQuestionnaireData() {
+ try {
+ // 杩欓噷闇�瑕佹牴鎹疄闄呮儏鍐佃皟鐢ㄦ帴鍙h幏鍙栭棶鍗锋暟鎹�
+ // 濡傛灉recordData涓凡缁忓寘鍚簡闂嵎鏁版嵁锛屽彲浠ョ洿鎺ヤ娇鐢�
+ if (this.currentRecord.taskid && this.currentRecord.patid) {
+ const params = {
+ taskid: this.currentRecord.taskid,
+ patid: this.currentRecord.patid,
+ subId: this.currentRecord.subId || this.currentRecord.id,
+ isFinish: true
+ };
+
+ const res = await getsearchrResults(params);
+ if (res.code === 200 && res.data) {
+ this.templateData = res.data.scriptResult || [];
+ this.taskName = res.data.taskName || '';
+
+ // 澶勭悊鏁版嵁鏍煎紡
+ this.templateData.forEach((item) => {
+ if (item.scriptType == 2) item.scriptResult = [];
+ if (item.scriptResultId && item.scriptType != 2) {
+ item.isoption = 3;
+ item.scriptResult = item.scriptResult;
+ } else if (item.scriptResultId && item.scriptType == 2) {
+ item.scriptResult = item.scriptResult.split("&");
+ item.isoption = 3;
+ }
+ });
+
+ this.overdata();
+ }
+ }
+ } catch (error) {
+ console.error('鍔犺浇闂嵎鏁版嵁澶辫触:', error);
+ }
+ },
+
+ // 澶勭悊寮傚父鏁版嵁
+ overdata() {
+ this.templateData.forEach((item, index) => {
+ var obj = item.svyTaskTemplateTargetoptions.find(
+ (items) => items.optioncontent == item.scriptResult
+ );
+ if (obj && obj.isabnormal) {
+ this.templateData[index].isabnormal = obj.isabnormal;
+ }
+ this.$forceUpdate();
+ });
+ },
+
+ // 鍔犺浇璇煶鏁版嵁
+ async loadVoiceData() {
+ try {
+ if (this.currentRecord.taskid && this.currentRecord.patid) {
+ const params = {
+ taskid: this.currentRecord.taskid,
+ patid: this.currentRecord.patid,
+ subId: this.currentRecord.subId || this.currentRecord.id
+ };
+
+ const res = await getPersonVoices(params);
+ if (res.code == 200) {
+ this.voiceData = res.data.serviceSubtaskDetails || [];
+ this.voiceAudioUrl = res.data.voice || '';
+ this.taskName = res.data.taskName || '';
+ this.templateData = res.data.filteredDetails || [];
+
+ this.templateData.forEach((item) => {
+ if (item.targetvalue) {
+ item.scriptResult = item.targetvalue.split("&");
+ } else {
+ item.scriptResult = [];
+ }
+ });
+ }
+ }
+ } catch (error) {
+ console.error('鍔犺浇璇煶鏁版嵁澶辫触:', error);
+ }
+ },
+
+ // 鍔犺浇澶勭悊璁板綍
+ async loadProcessRecords() {
+ try {
+ // 杩欓噷鍙互鏍规嵁recordId鍔犺浇澶勭悊鍘嗗彶
+ // 鏆傛椂浣跨敤褰撳墠璁板綍鐨勫鐞嗕俊鎭�
+ if (this.currentRecord.handleTime) {
+ this.processRecords = [{
+ ...this.currentRecord,
+ time: this.currentRecord.handleTime
+ }];
+ }
+ } catch (error) {
+ console.error('鍔犺浇澶勭悊璁板綍澶辫触:', error);
}
},
// 澶勭悊寮傚父
handleProcess() {
this.processForm = {
- status: this.currentRecord.processStatus === 0 ? 1 : this.currentRecord.processStatus,
- reportDepts: [],
- remark: ''
+ handleFlag: this.currentRecord.handleFlag === '0' ? '1' : '0',
+ ccdepts: this.currentRecord.ccdepts ? this.currentRecord.ccdepts.split(',') : [],
+ handleresult: this.currentRecord.handleresult || '',
+ handledesc: this.currentRecord.handledesc || '',
+ finaloption: this.currentRecord.finaloption || ''
};
this.processDialogVisible = true;
},
@@ -608,52 +854,56 @@
// 鎻愪氦澶勭悊
async submitProcess() {
this.$refs.processForm.validate(async (valid) => {
- if (valid) {
- this.processing = true;
- try {
- // Mock API璋冪敤
- await new Promise(resolve => setTimeout(resolve, 1000));
+ if (!valid) {
+ return;
+ }
- this.$message.success('澶勭悊鎻愪氦鎴愬姛');
+ this.processing = true;
+ try {
+ const submitData = {
+ id: this.currentRecord.id,
+ handleFlag: this.processForm.handleFlag,
+ handleresult: this.processForm.handleresult,
+ handledesc: this.processForm.handledesc,
+ finaloption: this.processForm.finaloption,
+ ccdepts: Array.isArray(this.processForm.ccdepts)
+ ? this.processForm.ccdepts.join(",")
+ : this.processForm.ccdepts
+ };
+
+ const res = await traceedit(submitData);
+ if (res.code === 200) {
+ this.$message.success("澶勭悊鎻愪氦鎴愬姛");
this.processDialogVisible = false;
- // 閲嶆柊鍔犺浇鏁版嵁
- await this.loadData();
+ // 鏇存柊褰撳墠璁板綍
+ this.currentRecord = {
+ ...this.currentRecord,
+ ...submitData,
+ handleBy: this.$store.getters.name, // 褰撳墠鐢ㄦ埛
+ handleTime: new Date().toISOString().replace('T', ' ').substr(0, 19)
+ };
+
+ // 閲嶆柊鍔犺浇澶勭悊璁板綍
+ await this.loadProcessRecords();
// 瑙﹀彂鐖剁粍浠跺埛鏂�
this.$emit('processed');
- } finally {
- this.processing = false;
+ } else {
+ this.$message.error(res.msg || "澶勭悊鎻愪氦澶辫触");
}
+ } catch (error) {
+ console.error("澶勭悊鎻愪氦澶辫触:", error);
+ this.$message.error("澶勭悊鎻愪氦澶辫触锛岃绋嶅悗閲嶈瘯");
+ } finally {
+ this.processing = false;
}
});
- },
-
- // 棰勮鏂囦欢
- handlePreviewFile(file) {
- this.$message.info(`棰勮鏂囦欢: ${file.name}`);
},
// 澶勭悊瀵硅瘽妗嗗叧闂�
handleClose() {
this.$emit('close');
- },
-
- // 鏂囦欢涓婁紶鐩稿叧鏂规硶
- handleFilePreview(file) {
- console.log('棰勮鏂囦欢:', file);
- },
-
- handleFileRemove(file, fileList) {
- console.log('绉婚櫎鏂囦欢:', file, fileList);
- },
-
- beforeFileRemove(file) {
- return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
- },
-
- handleFileExceed(files, fileList) {
- this.$message.warning(`褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
}
}
};
@@ -705,116 +955,137 @@
font-size: 14px;
color: #303133;
font-weight: 500;
+ flex: 1;
}
}
}
- .questionnaire-section {
+ .content-container {
margin-bottom: 20px;
- padding: 20px;
- background: #fff;
- border-radius: 8px;
- border: 1px solid #ebeef5;
- .section-title {
- font-size: 16px;
- font-weight: 600;
- color: #303133;
- margin-bottom: 15px;
- padding-bottom: 10px;
- border-bottom: 2px solid #409EFF;
+ ::v-deep .el-tabs__content {
+ padding: 20px;
+ background: #fff;
+ border-radius: 0 0 4px 4px;
}
- .questionnaire-content {
- .question-item {
- margin-bottom: 20px;
- padding: 15px;
- border-radius: 6px;
- border: 1px solid #ebeef5;
- transition: all 0.3s;
+ .CONTENT, .borderdiv {
+ padding: 20px;
+ background: #fff;
+ border-radius: 6px;
- &:hover {
- border-color: #409EFF;
- box-shadow: 0 2px 12px 0 rgba(64, 158, 255, 0.1);
+ .title {
+ font-size: 18px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid #409EFF;
+ }
+
+ .voice-audio {
+ margin-bottom: 20px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+
+ .audio-player {
+ flex: 1;
+ }
+ }
+
+ .preview-left {
+ .topic-dev {
+ margin-bottom: 20px;
+ padding: 15px;
+ border-radius: 6px;
+ border: 1px solid #ebeef5;
+ background: #fff;
+
+ .dev-text {
+ font-size: 15px;
+ font-weight: 500;
+ color: #303133;
+ margin-bottom: 15px;
+ line-height: 1.5;
+
+ span {
+ color: #606266;
+ }
+ }
+
+ .dev-xx {
+ ::v-deep .el-radio-group,
+ ::v-deep .el-checkbox-group {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
+
+ ::v-deep .el-radio,
+ ::v-deep .el-checkbox {
+ margin: 0;
+ padding: 8px 12px;
+ border-radius: 4px;
+ border: 1px solid #ebeef5;
+ transition: all 0.3s;
+
+ &:hover {
+ background: #f5f7fa;
+ }
+
+ &.red-star {
+ border-color: #f56c6c;
+ background: #fef0f0;
+ }
+
+ &.yellow-star {
+ border-color: #e6a23c;
+ background: #fdf6ec;
+ }
+ }
+ }
+
+ .append-input-container {
+ margin-top: 15px;
+ }
+
+ .el-alert {
+ margin-top: 10px;
+ }
}
- .question-header {
+ .leftside {
display: flex;
align-items: center;
- margin-bottom: 15px;
- padding-bottom: 10px;
- border-bottom: 1px dashed #dcdfe6;
+ gap: 10px;
+ margin-bottom: 10px;
+ font-size: 15px;
+ font-weight: 500;
+ color: #303133;
- .question-index {
- font-weight: 600;
+ i {
color: #409EFF;
- margin-right: 8px;
- font-size: 15px;
+ }
+ }
+
+ .offside {
+ display: flex;
+ align-items: flex-start;
+ gap: 10px;
+ margin-bottom: 20px;
+
+ i {
+ color: #67C23A;
+ margin-top: 8px;
}
- .question-text {
+ .offside-value {
flex: 1;
- font-size: 15px;
- color: #303133;
- font-weight: 500;
- line-height: 1.5;
- }
- .question-type {
- margin-left: 10px;
- }
- }
-
- .question-options {
- ::v-deep .el-radio-group {
- display: flex;
- flex-direction: column;
- gap: 10px;
- }
-
- ::v-deep .el-checkbox-group {
- display: flex;
- flex-wrap: wrap;
- gap: 15px;
- }
-
- ::v-deep .el-radio,
- ::v-deep .el-checkbox {
- margin: 0;
- padding: 8px 12px;
- border-radius: 4px;
- border: 1px solid #ebeef5;
- transition: all 0.3s;
-
- &:hover {
- background: #f5f7fa;
+ .el-textarea {
+ margin-bottom: 10px;
}
-
- &.unsatisfactory-option {
- border-color: #e6a23c;
- background: #fdf6ec;
- }
- }
- }
-
- .additional-remark {
- margin-top: 15px;
- padding: 12px;
- background: #f0f9ff;
- border-radius: 6px;
- border-left: 4px solid #409EFF;
-
- .remark-label {
- font-size: 13px;
- color: #606266;
- font-weight: 500;
- margin-bottom: 5px;
- }
-
- .remark-content {
- font-size: 14px;
- color: #303133;
- line-height: 1.6;
}
}
}
@@ -886,30 +1157,8 @@
line-height: 1.5;
}
}
-
- .process-attachments {
- .label {
- font-size: 13px;
- color: #606266;
- margin-right: 5px;
- }
-
- ::v-deep .el-button {
- margin-right: 8px;
- margin-bottom: 5px;
- }
- }
}
}
- }
-
- .no-record {
- text-align: center;
- padding: 40px 0;
- color: #909399;
- font-style: italic;
- background: #f8f9fa;
- border-radius: 6px;
}
}
@@ -920,4 +1169,15 @@
gap: 10px;
}
}
+
+// 寮傚父鏍峰紡
+.scriptTopic-isabnormal {
+ border-color: #f56c6c !important;
+ background: #fef0f0 !important;
+}
+
+.scriptTopic-warning {
+ border-color: #e6a23c !important;
+ background: #fdf6ec !important;
+}
</style>
--
Gitblit v1.9.3