| | |
| | | 前往CDSS查询 |
| | | </el-link> |
| | | </div> |
| | | <div class="merge-controls" v-if="Whetherall"> |
| | | <el-button |
| | | type="primary" |
| | | @click="toggleMergeMode" |
| | | :disabled="selectedServices.length < 2" |
| | | > |
| | | {{ isMergeMode ? "取消合并" : "合并编辑问卷" }} |
| | | </el-button> |
| | | <el-button |
| | | v-if="isMergeMode" |
| | | type="success" |
| | | @click="openMergeDialog" |
| | | :disabled="selectedServices.length < 2" |
| | | > |
| | | 开始合并 (已选 {{ selectedServices.length }} 个服务) |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | <!-- <el-button type="success">随访后短信</el-button> --> |
| | | </div> |
| | |
| | | :data="logsheetlist" |
| | | :row-class-name="tableRowClassName" |
| | | style="width: 100%" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column |
| | | type="selection" |
| | | width="55" |
| | | :selectable="checkSelectable" |
| | | v-if="Whetherall" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sendname" |
| | | align="center" |
| | |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="Followuserinfos"> |
| | | <div> |
| | | <el-form ref="form" :model="form" label-width="120px"> |
| | | <!-- 添加合并编辑对话框 --> |
| | | <el-dialog |
| | | title="合并编辑问卷" |
| | | :visible.sync="mergeDialogVisible" |
| | | width="80%" |
| | | top="5vh" |
| | | v-dialogDrag |
| | | > |
| | | <MergeAndModify |
| | | v-if="mergeDialogVisible" |
| | | :selected-services="selectedServices" |
| | | :patid="patid" |
| | | @save="handleMergeSave" |
| | | @cancel="mergeDialogVisible = false" |
| | | /> |
| | | </el-dialog> |
| | | <div class="action-container"> |
| | | <div class="call-action"> |
| | | <div class="call-container"> |
| | | <!-- <div class="call-header"> |
| | | <h2>一键呼叫功能</h2> |
| | | </div> --> |
| | | |
| | | <div class="headline"> |
| | | <div>人工处理</div> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="8" |
| | | ><el-form-item label="联系电话"> |
| | | <el-input |
| | | placeholder="联系电话缺失" |
| | | v-model="userform.telcode" |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | <el-col :span="8" |
| | | ><el-form-item label="联系人电话"> |
| | | <el-input |
| | | placeholder="联系人电话缺失" |
| | | v-model="userform.relativetelcode" |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | <el-col :span="8" |
| | | ><el-form-item label="联系人关系"> |
| | | <el-input |
| | | placeholder="联系人关系缺失" |
| | | v-model="userform.relation" |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <div style="margin-left: 30px"> |
| | | <el-button type="primary" plain @click="Editsingletasksonyic('')" |
| | | >保存服务</el-button |
| | | > |
| | | </div> |
| | | <div>随访内容</div> |
| | | </div> |
| | | <div> |
| | | <el-tabs v-model="activeName" type="border-card"> |
| | | <el-tab-pane name="wj"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-notebook-1"></i> 问卷随访结果</span |
| | | > |
| | | <div class="CONTENT"> |
| | | <div class="title">{{ taskname ? taskname : "问卷" }}</div> |
| | | |
| | | <el-form-item label="随访记录"> |
| | | <el-input type="textarea" v-model="form.remark"></el-input> |
| | | </el-form-item> |
| | | <div class="preview-left" v-if="!Voicetype"> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in tableDatatop" |
| | | :key="item.id" |
| | | > |
| | | <!-- 单选 --> |
| | | <div |
| | | :class=" |
| | | item.isabnormal |
| | | ? 'scriptTopic-isabnormal' |
| | | : 'scriptTopic-dev' |
| | | " |
| | | :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" |
| | | @change=" |
| | | handleOptionChange( |
| | | $event, |
| | | index, |
| | | item.svyLibTemplateTargetoptions, |
| | | item |
| | | ) |
| | | " |
| | | > |
| | | <el-radio |
| | | v-for="( |
| | | items, indexs |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :class="items.isabnormal ? 'red-star' : ''" |
| | | :key="indexs" |
| | | :label="items.optioncontent" |
| | | >{{ items.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" |
| | | clearable |
| | | ></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" |
| | | @change="updateScore($event, index, item)" |
| | | > |
| | | <el-checkbox |
| | | :class="items.isabnormal ? 'red-star' : ''" |
| | | @change="$forceUpdate()" |
| | | v-for="( |
| | | items, indexs |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :key="indexs" |
| | | :label="items.optioncontent" |
| | | > |
| | | {{ items.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> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请输入答案" |
| | | v-model="item.scriptResult" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-form-item label="处理意见"> |
| | | <div> |
| | | <el-button plain type="warning" @click="Editsingletaskson('1')" |
| | | >暂不处理</el-button |
| | | > |
| | | <el-button plain type="success" @click="Editsingletaskson('2')" |
| | | >病情稳定</el-button |
| | | > |
| | | <el-button plain type="primary" @click="Editsingletaskson('3')" |
| | | >通知就诊</el-button |
| | | > |
| | | <!-- <el-button type="danger" @click="Editsingletaskson('4')" |
| | | >失访</el-button |
| | | > --> |
| | | <el-button plain type="info" @click="Editsingletaskson('5')" |
| | | >中心随访</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | v-if="this.form.isVisitAgain != 2" |
| | | @click="sendAgain()" |
| | | >再次随访</el-button |
| | | > |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-collapse> |
| | | <el-collapse-item title="查看当前患者信息" name="1"> |
| | | <div class="preview-left" v-else> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in tableDatatop" |
| | | :key="item.id" |
| | | > |
| | | <div v-if="item.targetvalue"> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、[单选]<span>{{ |
| | | item.questiontext |
| | | }}</span> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-radio-group |
| | | v-model="item.matchedtext" |
| | | @change=" |
| | | handleOptionChange( |
| | | $event, |
| | | index, |
| | | item.ivrTaskScriptTargetoptionList, |
| | | item |
| | | ) |
| | | " |
| | | > |
| | | <el-radio |
| | | v-for="(items, index) in item.scriptResult" |
| | | :key="items" |
| | | :label="items" |
| | | >{{ items }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </div> |
| | | <div v-show="item.prompt"> |
| | | <el-alert :title="item.prompt" type="warning"> |
| | | </el-alert> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="scriptTopic-dev" :key="index" v-else> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、[问答]<span>{{ |
| | | item.questiontext |
| | | }}</span> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请输入答案" |
| | | v-model="item.matchedtext" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-button |
| | | v-if="Voicetype" |
| | | type="primary" |
| | | @click="yuyingetdetail" |
| | | >保存服务详情</el-button |
| | | > |
| | | <el-button v-else type="primary" @click="getdetail" |
| | | >保存服务详情</el-button |
| | | > |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane name="yy"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-headset"></i> 语音随访详情</span |
| | | > |
| | | <div class="borderdiv"> |
| | | <div class="title">{{ taskname ? taskname : "问卷" }}</div> |
| | | <div |
| | | style=" |
| | | display: flex; |
| | | text-align: center; |
| | | align-items: center; |
| | | color: #59a0f0; |
| | | " |
| | | > |
| | | 完整语音: |
| | | <mini-audio |
| | | :audio-source=" |
| | | voice ? voice : '@assets/order/example.mp3' |
| | | " |
| | | ></mini-audio> |
| | | </div> |
| | | <div class="preview-left"> |
| | | <div v-for="item in voiceDatatop"> |
| | | <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" |
| | | ></el-input> |
| | | |
| | | <div> |
| | | <mini-audio |
| | | :audio-source=" |
| | | item.questionvoice |
| | | ? item.questionvoice |
| | | : '@assets/order/example.mp3' |
| | | " |
| | | ></mini-audio> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-button |
| | | v-if="Voicetype" |
| | | type="primary" |
| | | @click="yuyingetdetail" |
| | | >保存随访详情</el-button |
| | | > |
| | | <el-button v-else type="primary" @click="getdetail" |
| | | >保存随访详情</el-button |
| | | > |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="manual-action"> |
| | | <div class="Followuserinfos"> |
| | | <div> |
| | | <el-form |
| | | ref="userform" |
| | | :model="form" |
| | | :rules="userrules" |
| | | label-width="120px" |
| | | > |
| | | <div class="headline"> |
| | | <div>人工处理</div> |
| | | <div style="margin: 0 30px"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | @click="Editsingletasksonyic('')" |
| | | >保存基础信息</el-button |
| | | > |
| | | </div> |
| | | <div> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | v-if="this.form.isVisitAgain != 2" |
| | | @click="sendAgain()" |
| | | >再次随访</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | <el-row> |
| | | <el-col :span="14" |
| | | ><el-form-item label="联系电话"> |
| | | <el-input |
| | | placeholder="联系电话缺失" |
| | | v-model="userform.telcode" |
| | | > |
| | | <el-button |
| | | slot="append" |
| | | icon="el-icon-phone" |
| | | @click="handleCall(userform.telcode, 'tel')" |
| | | :disabled="!isValidPhone(userform.telcode)" |
| | | ></el-button |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="14" |
| | | ><el-form-item label="联系人电话"> |
| | | <el-input |
| | | placeholder="联系人电话缺失" |
| | | v-model="userform.relativetelcode" |
| | | > |
| | | <el-button |
| | | slot="append" |
| | | icon="el-icon-phone" |
| | | @click=" |
| | | handleCall(userform.relativetelcode, 'relative') |
| | | " |
| | | :disabled="!isValidPhone(userform.relativetelcode)" |
| | | ></el-button |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | <el-col :span="10" |
| | | ><el-form-item label="联系人关系"> |
| | | <el-input |
| | | placeholder="联系人关系缺失" |
| | | v-model="userform.relation" |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <div class="call-controls"> |
| | | <CallButton |
| | | ref="callButton" |
| | | :phoneNumber="currentPhoneNumber" |
| | | style="display: none" |
| | | /> |
| | | |
| | | <div v-if="callStatus === 'connected'" class="hangup-btn"> |
| | | <el-button |
| | | type="danger" |
| | | icon="el-icon-phone" |
| | | @click="endCurrentCall" |
| | | :loading="isEndingCall" |
| | | > |
| | | 挂断电话 |
| | | </el-button> |
| | | </div> |
| | | <div class="call-status" v-if="callStatus !== 'idle'"> |
| | | <el-alert |
| | | :title="callStatusText" |
| | | :type="callStatusType" |
| | | :closable="false" |
| | | show-icon |
| | | /> |
| | | </div> |
| | | </div> |
| | | <el-form-item label="随访记录"> |
| | | <el-input type="textarea" v-model="form.remark"></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="处理意见"> |
| | | <div> |
| | | <el-button |
| | | plain |
| | | type="warning" |
| | | @click="Editsingletaskson('1')" |
| | | >暂不处理</el-button |
| | | > |
| | | <el-button |
| | | plain |
| | | type="success" |
| | | @click="Editsingletaskson('2')" |
| | | >病情稳定</el-button |
| | | > |
| | | <el-button |
| | | plain |
| | | type="primary" |
| | | @click="Editsingletaskson('3')" |
| | | >通知就诊</el-button |
| | | > |
| | | <el-button plain type="info" @click="Editsingletaskson('5')" |
| | | >中心随访</el-button |
| | | > |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <div class="detailed"> |
| | | <h3>患者档案信息</h3> |
| | | <el-form ref="userform" :model="userform" label-width="100px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | |
| | | /> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <!-- <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="标签" prop="desc"> |
| | | <div class="xinz-inf"> |
| | | <el-tag |
| | | :key="tag.tagname" |
| | | type="success" |
| | | v-for="tag in dynamicTags" |
| | | :disable-transitions="false" |
| | | > |
| | | {{ tag.tagname }} |
| | | </el-tag> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> --> |
| | | </el-form> |
| | | </div> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-tabs v-model="activeName" type="border-card"> |
| | | <el-tab-pane name="wj"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-notebook-1"></i> 问卷随访结果</span |
| | | > |
| | | <div class="CONTENT"> |
| | | <div class="title">{{ taskname ? taskname : "问卷" }}</div> |
| | | |
| | | <div class="preview-left" v-if="!Voicetype"> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in tableDatatop" |
| | | :key="item.id" |
| | | > |
| | | <!-- 单选 --> |
| | | <div |
| | | :class=" |
| | | item.isabnormal |
| | | ? 'scriptTopic-isabnormal' |
| | | : 'scriptTopic-dev' |
| | | " |
| | | :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" |
| | | @change=" |
| | | handleOptionChange( |
| | | $event, |
| | | index, |
| | | item.svyLibTemplateTargetoptions |
| | | ) |
| | | " |
| | | > |
| | | <el-radio |
| | | v-for="( |
| | | items, indexs |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :class="items.isabnormal ? 'red-star' : ''" |
| | | :key="indexs" |
| | | :label="items.optioncontent" |
| | | >{{ items.optioncontent }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </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" |
| | | @change="updateScore($event, index, item)" |
| | | > |
| | | <el-checkbox |
| | | :class="items.isabnormal ? 'red-star' : ''" |
| | | @change="$forceUpdate()" |
| | | v-for="( |
| | | items, indexs |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :key="indexs" |
| | | :label="items.optioncontent" |
| | | > |
| | | {{ items.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> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请输入答案" |
| | | v-model="item.scriptResult" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="preview-left" v-else> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in tableDatatop" |
| | | :key="item.id" |
| | | > |
| | | <div v-if="item.targetvalue"> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、[单选]<span>{{ item.questiontext }}</span> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-radio-group |
| | | v-model="item.matchedtext" |
| | | @change="handleOptionChange($event, index, item)" |
| | | > |
| | | <el-radio |
| | | v-for="(items, index) in item.scriptResult" |
| | | :key="items" |
| | | :label="items" |
| | | >{{ items }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </div> |
| | | <div v-show="item.prompt"> |
| | | <el-alert :title="item.prompt" type="warning"> </el-alert> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="scriptTopic-dev" :key="index" v-else> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}、[问答]<span>{{ item.questiontext }}</span> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="2" |
| | | placeholder="请输入答案" |
| | | v-model="item.matchedtext" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail" |
| | | >保存服务详情</el-button |
| | | > |
| | | <el-button v-else type="primary" @click="getdetail" |
| | | >保存服务详情</el-button |
| | | > |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane name="yy"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-headset"></i> 语音随访详情</span |
| | | > |
| | | <div class="borderdiv"> |
| | | <div class="title">{{ taskname ? taskname : "问卷" }}</div> |
| | | <div |
| | | style=" |
| | | display: flex; |
| | | text-align: center; |
| | | align-items: center; |
| | | color: #59a0f0; |
| | | " |
| | | > |
| | | 完整语音: |
| | | <mini-audio |
| | | :audio-source=" |
| | | voice ? voice : 'https://example.com/example.mp3' |
| | | " |
| | | ></mini-audio> |
| | | </div> |
| | | <div class="preview-left"> |
| | | <div v-for="item in voiceDatatop"> |
| | | <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" |
| | | ></el-input> |
| | | |
| | | <div> |
| | | <mini-audio |
| | | :audio-source=" |
| | | item.questionvoice |
| | | ? item.questionvoice |
| | | : 'https://example.com/example.mp3' |
| | | " |
| | | ></mini-audio> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail" |
| | | >保存随访详情</el-button |
| | | > |
| | | <el-button v-else type="primary" @click="getdetail" |
| | | >保存随访详情</el-button |
| | | > |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | <el-dialog |
| | | title="患者再次随访" |
| | | v-dialogDrags |
| | |
| | | allow-create |
| | | default-first-option |
| | | @change="visitChange" |
| | | placeholder="请选择随访方式" |
| | | placeholder="请选择随访方式(依出院时间技计算)" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | |
| | | :picker-options="pickerOptions" |
| | | align="right" |
| | | v-model="form.date1" |
| | | class="custom-disabled" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | alterpatient, |
| | | listcontactinformation, |
| | | } from "@/api/patient/homepage"; |
| | | import CallButton from "@/components/CallButton"; |
| | | import MergeAndModify from "./MergeAndModify.vue"; |
| | | export default { |
| | | components: { |
| | | CallButton, |
| | | MergeAndModify, |
| | | }, |
| | | |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | data() { |
| | | const validatePhone = (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error("请输入联系电话")); |
| | | } |
| | | setTimeout(() => { |
| | | if (!/^1[3-9]\d{9}$/.test(value)) { |
| | | callback(new Error("请输入正确的11位手机号码")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, 300); |
| | | }; |
| | | return { |
| | | userid: "", |
| | | currentPhoneNumber: "", |
| | | callType: "", // 用于区分是哪个电话 |
| | | // 已有数据... |
| | | callStatus: "idle", // idle, calling, connected, ended, failed |
| | | isEndingCall: false, |
| | | currentCall: null, // 当前通话对象 |
| | | input: "今天身体还不错", |
| | | radio: "2", |
| | | taskname: "", |
| | |
| | | tableDatatop: [], //题目表 |
| | | voiceDatatop: [], //题目表 |
| | | dynamicTags: [], |
| | | isMergeMode: false, |
| | | mergeDialogVisible: false, |
| | | selectedServices: [], // 选中的服务列表 |
| | | zcrules: { |
| | | resource: [ |
| | | { required: true, message: "请选择随访方式", trigger: "change" }, |
| | | ], |
| | | date1: [{ required: true, message: "请选择随访时间", trigger: "blur" }], |
| | | }, |
| | | userrules: { |
| | | telcode: [{ validator: validatePhone, trigger: "blur" }], |
| | | relativetelcode: [{ validator: validatePhone, trigger: "blur" }], |
| | | }, |
| | | url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo", |
| | | postData: { |
| | |
| | | }, |
| | | }, |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | // 禁用今天及之前的日期 |
| | | return time.getTime() < Date.now() - 24 * 60 * 60 * 1000; |
| | | }, |
| | | shortcuts: [ |
| | | { |
| | | text: "七天后", |
| | |
| | | patid: null, |
| | | }; |
| | | }, |
| | | |
| | | computed: { |
| | | callStatusText() { |
| | | const statusMap = { |
| | | idle: "准备呼叫", |
| | | calling: `正在呼叫 ${this.currentPhoneNumber}...`, |
| | | connected: `已接通 ${this.currentPhoneNumber}`, |
| | | ended: "通话已结束", |
| | | failed: "呼叫失败", |
| | | }; |
| | | return statusMap[this.callStatus]; |
| | | }, |
| | | callStatusType() { |
| | | const typeMap = { |
| | | idle: "info", |
| | | calling: "warning", |
| | | connected: "success", |
| | | ended: "info", |
| | | failed: "error", |
| | | }; |
| | | return typeMap[this.callStatus]; |
| | | }, |
| | | }, |
| | | created() { |
| | | this.taskid = this.$route.query.taskid; |
| | | this.id = this.$route.query.id; |
| | |
| | | const queryParams = { |
| | | pid: Number(this.patid), |
| | | allhosp: "0", |
| | | pageNum: 1, |
| | | }; |
| | | // 患者基础信息 |
| | | messagelistpatient(queryParams).then((response) => { |
| | |
| | | // 根据选择的随访方式设置时间 |
| | | const now = new Date(); |
| | | if (value.includes("七天后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 7); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 7 |
| | | ); |
| | | } else if (value.includes("15天后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 15); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 15 |
| | | ); |
| | | } else if (value.includes("一个月后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 30); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 30 |
| | | ); |
| | | } else if (value.includes("三个月后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 90); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 90 |
| | | ); |
| | | } else if (value.includes("六个月后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 180); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 180 |
| | | ); |
| | | } else if (value.includes("一年后")) { |
| | | this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 365); |
| | | this.form.date1 = new Date( |
| | | Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 365 |
| | | ); |
| | | } |
| | | }, |
| | | |
| | |
| | | scriptid: item.id, |
| | | excep: excep, |
| | | questiontext: item.scriptContent, |
| | | answerps: item.answerps || null, // 添加附加信息 |
| | | }; |
| | | if (item.scriptType == 2 && item.scriptResult[0]) { |
| | | obj.asrtext = item.scriptResult.join("&"); |
| | |
| | | }) |
| | | .catch(() => { |
| | | if (this.form.serviceType == 13) { |
| | | if (this.visitCount) { |
| | | if (this.visitCount != 1) { |
| | | this.$router.push({ |
| | | path: "/logisticsservice/zbAgain", |
| | | }); |
| | |
| | | path: "/logisticsservice/record", |
| | | }); |
| | | } |
| | | } else if (form.serviceType == 2) { |
| | | if (this.visitCount) { |
| | | } else if (this.form.serviceType == 2) { |
| | | if (this.visitCount != 1) { |
| | | this.$router.push({ |
| | | path: "/followvisit/again", |
| | | path: "/logisticsservice/again", |
| | | }); |
| | | } else { |
| | | this.$router.push({ |
| | |
| | | // 如果有任何一个异步操作失败,会进入这里 |
| | | console.error("发生错误:", error); |
| | | }); |
| | | }, |
| | | // 电话============================ |
| | | // 验证电话号码格式并返回错误信息 |
| | | validatePhoneNumber(phone) { |
| | | if (!phone) { |
| | | return { isValid: false, message: "请输入电话号码" }; |
| | | } |
| | | |
| | | // 手机号正则 |
| | | const mobileRegex = /^1[3-9]\d{9}$/; |
| | | |
| | | // 带区号的固定电话(完整格式) |
| | | const landlineFullRegex = /^0\d{2,3}-?\d{7,8}$/; |
| | | |
| | | // 不带区号的固定电话(仅本地号码) |
| | | const landlineLocalRegex = /^\d{7,8}$/; |
| | | |
| | | if (mobileRegex.test(phone)) { |
| | | return { isValid: true, type: "mobile" }; |
| | | } else if (landlineFullRegex.test(phone)) { |
| | | return { isValid: true, type: "landline" }; |
| | | } else if (landlineLocalRegex.test(phone)) { |
| | | return { |
| | | isValid: false, |
| | | message: "本地号码请添加区号(如028-1234567)", |
| | | }; |
| | | } else { |
| | | return { |
| | | isValid: false, |
| | | message: "请输入正确的电话号码(手机号或带区号的固定电话)", |
| | | }; |
| | | } |
| | | }, |
| | | // 使用示例 |
| | | isValidPhone(phone) { |
| | | return this.validatePhoneNumber(phone).isValid; |
| | | }, |
| | | handleCall(phone, type) { |
| | | if (!this.isValidPhone(phone)) { |
| | | this.$message.error("请输入正确的手机号码"); |
| | | return; |
| | | } |
| | | |
| | | this.currentPhoneNumber = phone; |
| | | this.callType = type; |
| | | this.callStatus = "calling"; |
| | | |
| | | this.$nextTick(() => { |
| | | this.$refs.callButton.startCall(); |
| | | |
| | | // 监听通话状态变化 |
| | | this.$refs.callButton.$on("call-status-change", (status) => { |
| | | this.handleCallStatusChange(status); |
| | | }); |
| | | }); |
| | | }, |
| | | // 处理通话状态变化 |
| | | handleCallStatusChange(status) { |
| | | console.log(status, "status"); |
| | | |
| | | this.callStatus = status.type; |
| | | |
| | | if (status.type === "connected") { |
| | | this.currentCall = { |
| | | phone: this.currentPhoneNumber, |
| | | type: this.callType, |
| | | startTime: new Date(), |
| | | }; |
| | | } else if (status.type === "ended" || status.type === "failed") { |
| | | this.currentCall = null; |
| | | } |
| | | |
| | | // 可以根据状态执行其他操作 |
| | | if (status.type === "failed") { |
| | | this.$message.error(`呼叫失败: ${status.text}`); |
| | | } |
| | | }, |
| | | // 结束当前通话 |
| | | endCurrentCall() { |
| | | if (!this.currentCall) return; |
| | | |
| | | this.isEndingCall = true; |
| | | this.$refs.callButton.endCall(); |
| | | |
| | | // 3秒后重置状态 |
| | | setTimeout(() => { |
| | | this.isEndingCall = false; |
| | | }, 3000); |
| | | }, |
| | | yuyingetdetail() { |
| | | this.tableDatatop.forEach((item, index) => { |
| | |
| | | }) |
| | | .catch(() => { |
| | | if (this.form.serviceType == 13) { |
| | | if (this.visitCount) { |
| | | if (this.visitCount != 1) { |
| | | this.$router.push({ |
| | | path: "/logisticsservice/zbAgain", |
| | | }); |
| | |
| | | }); |
| | | } |
| | | } else if (form.serviceType == 2) { |
| | | if (this.visitCount) { |
| | | if (this.visitCount != 1) { |
| | | this.$router.push({ |
| | | path: "/followvisit/again", |
| | | }); |
| | |
| | | this.form = res.rows[0].serviceSubtaskList.find( |
| | | (item) => item.id == this.id |
| | | ); |
| | | console.log(this.form.serviceType, "serviceType"); |
| | | |
| | | this.logsheetlist = res.rows[0].serviceSubtaskList; |
| | | this.templateid = this.logsheetlist[0].templateid; |
| | | const targetDate = new Date(this.form.longSendTime); // 目标日期 |
| | | const now = new Date(); // 当前时间 |
| | | this.form.endtime = this.formatTime(this.form.endtime); |
| | | if (now < targetDate && this.form.sendstate == 2) { |
| | | this.$confirm("当前服务未到发送时间请谨慎修改", "提示", { |
| | | confirmButtonText: "确定", |
| | |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | handleOptionChange(a, b, c) { |
| | | aahandleOptionChange(a, b, c) { |
| | | const result = c.find((item) => item.optioncontent == a); |
| | | if (result.nextQuestion == 0) { |
| | | this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => { |
| | |
| | | } |
| | | this.$forceUpdate(); |
| | | }, |
| | | // 在methods部分,修改handleOptionChange方法: |
| | | handleOptionChange(selectedOption, questionIndex, options, a) { |
| | | if (document.activeElement) { |
| | | document.activeElement.blur(); |
| | | } |
| | | |
| | | // 找到被选中的选项对象 |
| | | const selectedOptionObj = options.find( |
| | | (item) => item.optioncontent == selectedOption |
| | | ); |
| | | |
| | | // 处理异常状态高亮 |
| | | this.tableDatatop[questionIndex].isabnormal = |
| | | !!selectedOptionObj.isabnormal; |
| | | // 处理附加输入框显示 |
| | | |
| | | this.tableDatatop[questionIndex].showAppendInput = |
| | | selectedOptionObj.appendflag == 1; |
| | | console.log(this.tableDatatop); |
| | | |
| | | // if (!this.tableDatatop[questionIndex].showAppendInput) { |
| | | // this.tableDatatop[questionIndex].answerps = ""; // 清除附加信息 |
| | | // } |
| | | // 保存当前题目之前已经隐藏的题目状态 |
| | | const previouslyHiddenBeforeCurrent = this.tableDatatop |
| | | .slice(0, questionIndex) |
| | | .map((item, index) => (item.astrict ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // 保存之前因nextQuestion=0而隐藏的题目范围 |
| | | const previouslyHiddenByEnd = this.tableDatatop |
| | | .map((item, index) => (item.hiddenByEnd ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // 如果branchFlag为1,处理题目跳转 |
| | | if (a.branchFlag == 1) { |
| | | if (selectedOptionObj.nextQuestion == 0) { |
| | | // 结束问答 - 隐藏后面所有题目并标记 |
| | | this.tableDatatop = this.tableDatatop.map((item, index) => ({ |
| | | ...item, |
| | | astrict: index > questionIndex, |
| | | hiddenByEnd: index > questionIndex, // 标记这些题目是被结束问答隐藏的 |
| | | })); |
| | | } else { |
| | | // 正常跳转逻辑 |
| | | const nextQuestionIndex = selectedOptionObj.nextQuestion - 1; |
| | | |
| | | this.tableDatatop = this.tableDatatop.map((item, index) => { |
| | | // 保留当前题目之前的隐藏状态 |
| | | if (index < questionIndex) { |
| | | return { |
| | | ...item, |
| | | astrict: previouslyHiddenBeforeCurrent.includes(index), |
| | | hiddenByEnd: false, // 清除结束标记 |
| | | }; |
| | | } |
| | | |
| | | // 当前题目总是可见 |
| | | if (index === questionIndex) { |
| | | return { ...item, astrict: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 显示目标下一题 |
| | | if (index === nextQuestionIndex) { |
| | | return { ...item, astrict: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 如果是之前被结束问答隐藏的题目,现在应该恢复显示 |
| | | if (item.hiddenByEnd) { |
| | | return { ...item, astrict: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 隐藏当前题和目标题之间的题目 |
| | | if (index > questionIndex && index < nextQuestionIndex) { |
| | | return { ...item, astrict: 1, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 其他情况保持原状 |
| | | return item; |
| | | }); |
| | | } |
| | | } else { |
| | | // 如果没有跳转,只需确保下一题可见 |
| | | this.tableDatatop = this.tableDatatop.map((item, index) => ({ |
| | | ...item, |
| | | astrict: index === questionIndex + 1 ? 0 : item.astrict, |
| | | hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd, |
| | | })); |
| | | } |
| | | |
| | | this.$forceUpdate(); |
| | | }, |
| | | overdata() { |
| | | this.tableDatatop.forEach((item, index) => { |
| | | var obj = item.svyLibTemplateTargetoptions.find( |
| | |
| | | setupsubtask() { |
| | | this.$refs["zcform"].validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.date1 && new Date(this.form.date1) < new Date()) { |
| | | this.$message.error("随访时间不能小于当前时间"); |
| | | return false; |
| | | } |
| | | this.form.remark = |
| | | this.form.remark + "【" + this.getCurrentTime() + "】"; |
| | | let form = structuredClone(this.form); |
| | |
| | | form.finishtime = ""; |
| | | if (form.resource) { |
| | | if (form.resource == 2) { |
| | | form.serviceType = 13; |
| | | form.visitDeptCode = localStorage.getItem("deptCode"); |
| | | form.visitDeptName = "随访中心"; |
| | | } else { |
| | |
| | | } |
| | | // form.id = null; |
| | | form.sendstate = 2; |
| | | console.log(form.serviceType, "form.serviceType"); |
| | | |
| | | addserviceSubtask(form).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$modal.msgSuccess("创建成功"); |
| | |
| | | }); |
| | | } else if (form.serviceType == 2) { |
| | | this.$router.push({ |
| | | path: "/followvisit/again", |
| | | path: "/logisticsservice/again", |
| | | }); |
| | | } |
| | | } else { |
| | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | }, |
| | | updateScore(a, b, c) {}, |
| | | // 合并修改相关============================= |
| | | toggleMergeMode() { |
| | | this.isMergeMode = !this.isMergeMode; |
| | | if (!this.isMergeMode) { |
| | | this.selectedServices = []; |
| | | } |
| | | }, |
| | | |
| | | handleSelectionChange(selection) { |
| | | this.selectedServices = selection |
| | | .filter( |
| | | (item) => !item.preachformson || !item.preachformson.includes("3") |
| | | ) |
| | | .map((item) => ({ |
| | | id: item.id, |
| | | taskid: item.taskid, |
| | | taskName: item.taskName, |
| | | sendname: item.sendname, |
| | | })); |
| | | }, |
| | | checkSelectable(row, index) { |
| | | // 当 sendstate 为 6 时不可选 |
| | | return row.sendstate !== 6; |
| | | }, |
| | | openMergeDialog() { |
| | | if (this.selectedServices.length < 2) { |
| | | this.$message.warning("请至少选择2个问卷服务进行合并"); |
| | | return; |
| | | } |
| | | this.mergeDialogVisible = true; |
| | | }, |
| | | |
| | | handleMergeSave(mergedData) { |
| | | // 处理合并保存逻辑 |
| | | this.mergeDialogVisible = false; |
| | | this.isMergeMode = false; |
| | | this.selectedServices = []; |
| | | |
| | | // 显示保存结果 |
| | | if (mergedData.successCount == mergedData.totalCount) { |
| | | this.$message.success(`成功保存 ${mergedData.successCount} 个问卷`); |
| | | } else if (mergedData.successCount > 0) { |
| | | this.$message.warning( |
| | | `成功保存 ${mergedData.successCount} 个问卷,失败 ${ |
| | | mergedData.totalCount - mergedData.successCount |
| | | } 个` |
| | | ); |
| | | } else { |
| | | this.$message.error("所有问卷保存失败"); |
| | | } |
| | | |
| | | // 刷新数据 |
| | | this.getTaskservelist(); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | <style lang="scss" scoped> |
| | | .Followupdetailspage { |
| | | margin: 10px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 20px; |
| | | } |
| | | |
| | | .action-container { |
| | | display: flex; |
| | | gap: 20px; |
| | | margin: 0 10px 20px 10px; |
| | | |
| | | .manual-action { |
| | | flex: 1; |
| | | min-width: 0; |
| | | height: 100%; /* 确保高度继承 */ |
| | | } |
| | | |
| | | .call-action { |
| | | width: 60%; |
| | | min-width: 0; |
| | | height: 100%; /* 确保高度继承 */ |
| | | } |
| | | } |
| | | |
| | | .call-container { |
| | | padding: 20px; |
| | | background: #fff; |
| | | border: 1px solid #dcdfe6; |
| | | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | border-radius: 4px; |
| | | height: 100%; |
| | | |
| | | .call-header { |
| | | margin-bottom: 20px; |
| | | |
| | | h2 { |
| | | font-size: 20px; |
| | | color: #333; |
| | | margin: 0; |
| | | padding-bottom: 10px; |
| | | border-bottom: 1px solid #eee; |
| | | } |
| | | } |
| | | |
| | | .call-status { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .hangup-btn { |
| | | text-align: center; |
| | | margin-top: 20px; |
| | | } |
| | | } |
| | | .merge-controls { |
| | | background: #f5f7fa; |
| | | border-radius: 4px; |
| | | margin-left: 20px; |
| | | } |
| | | .Followuserinfo { |
| | | margin: 20px 10px; |
| | | margin: 10px 10px 0 10px; |
| | | align-items: center; |
| | | padding: 30px; |
| | | background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | |
| | | .userinfo-text { |
| | | font-size: 20px; |
| | | margin-right: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .userinfo-value { |
| | | color: rgb(15, 139, 211); |
| | | |
| | | span { |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep.el-table .warning-row { |
| | | background: #c4e2ee; |
| | | } |
| | | |
| | | .Followuserinfos { |
| | | margin: 20px 10px; |
| | | align-items: center; |
| | | padding: 30px; |
| | | background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | height: 100%; /* 确保高度继承 */ |
| | | min-height: 880px; /* 最小高度与随访内容一致 */ |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .userinfo-text { |
| | | font-size: 20px; |
| | | margin-right: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .userinfo-value { |
| | | color: rgb(15, 139, 211); |
| | | |
| | | span { |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | |
| | | .el-form { |
| | | flex: 1; |
| | | overflow-y: auto; /* 内容超过高度时显示滚动条 */ |
| | | max-height: calc(880px - 60px); /* 减去padding */ |
| | | padding-right: 10px; /* 防止滚动条遮挡内容 */ |
| | | } |
| | | } |
| | | .append-input-container { |
| | | margin-top: 15px; |
| | | padding: 10px; |
| | | background-color: #f5f7fa; |
| | | border-radius: 4px; |
| | | border: 1px solid #dcdfe6; |
| | | } |
| | | .borderdiv { |
| | | min-height: 60vh; |
| | | font-size: 20px; |
| | | padding: 30px; |
| | | |
| | | .title { |
| | | font-size: 22px; |
| | | font-weight: bold; |
| | | margin-bottom: 20px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .leftside { |
| | | margin: 30px 0; |
| | | |
| | | span { |
| | | width: 400px; |
| | | margin-left: 20px; |
| | |
| | | border-radius: 10px; |
| | | } |
| | | } |
| | | |
| | | .offside { |
| | | display: flex; |
| | | flex-direction: row-reverse; |
| | | |
| | | .offside-value { |
| | | padding: 10px; |
| | | background: rgb(217, 173, 253); |
| | |
| | | } |
| | | } |
| | | } |
| | | .topic-dev[inert] { |
| | | opacity: 0.5; |
| | | pointer-events: none; |
| | | } |
| | | .CONTENT { |
| | | padding: 10px; |
| | | height: 100%; |
| | | min-height: 660px; /* 设置最小高度 */ |
| | | |
| | | .title { |
| | | font-size: 22px; |
| | | font-weight: bold; |
| | |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .preview-left { |
| | | margin: 20px; |
| | | // margin: 20px; |
| | | padding: 30px; |
| | | // background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | max-height: 580px; /* 设置最大高度 */ |
| | | overflow-y: auto; /* 内容超过高度时显示滚动条 */ |
| | | |
| | | .topic-dev { |
| | | margin-bottom: 25px; |
| | | font-size: 20px !important; |
| | | |
| | | .dev-text { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .scriptTopic-isabnormal { |
| | | color: red; |
| | | } |
| | | |
| | | .detailed { |
| | | width: 88%; |
| | | border-radius: 8px; |
| | | padding: 30px; |
| | | margin-bottom: 30px; |
| | | background-color: #ddf0f8; |
| | | |
| | | .bg-purple { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .spanvalue { |
| | | display: inline-block; |
| | | min-width: 200px; |
| | | border-bottom: 1px solid rgb(172, 172, 172); |
| | | } |
| | | } |
| | | |
| | | .headline { |
| | | font-size: 24px; |
| | | height: 40px; |
| | |
| | | padding-left: 5px; |
| | | margin-bottom: 10px; |
| | | display: flex; |
| | | // justify-content: space-between; |
| | | |
| | | .Add-details { |
| | | font-size: 18px; |
| | | color: #02a7f0; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | .red-star { |
| | | ::v-deep.el-radio__label { |
| | | position: relative; |
| | | padding-right: 10px; /* 根据需要调整 */ |
| | | padding-right: 10px; |
| | | } |
| | | |
| | | ::v-deep.el-radio__label::after { |
| | | content: "*"; |
| | | color: red; |
| | | position: absolute; |
| | | right: -5px; /* 根据需要调整 */ |
| | | right: -5px; |
| | | top: 0; |
| | | } |
| | | |
| | | ::v-deep.el-input-group__textarea { |
| | | white-space: pre-wrap; /* 保持空白符序列并正常换行 */ |
| | | word-break: break-all; /* 在长单词或URL地址内部进行换行 */ |
| | | white-space: pre-wrap; |
| | | word-break: break-all; |
| | | } |
| | | |
| | | ::v-deep.el-checkbox__label { |
| | | position: relative; |
| | | padding-right: 10px; /* 根据需要调整 */ |
| | | padding-right: 10px; |
| | | } |
| | | |
| | | ::v-deep.el-checkbox__label::after { |
| | | content: "*"; |
| | | color: red; |
| | | position: absolute; |
| | | right: -5px; /* 根据需要调整 */ |
| | | right: -5px; |
| | | top: 0; |
| | | } |
| | | } |
| | | |
| | | ::v-deep.offside-value .el-radio__label { |
| | | color: #fff; |
| | | } |
| | | |
| | | ::v-deep.el-link.el-link--default { |
| | | color: #02a7f0 !important; |
| | | } |
| | | |
| | | .el-message-box__btns button:nth-child(2) { |
| | | margin-left: 10px; |
| | | background-color: #f57676; |
| | | border-color: #f57676; |
| | | } |
| | | |
| | | .el-icon-phone { |
| | | transition: all 0.3s; |
| | | } |
| | | |
| | | .el-button[disabled] .el-icon-phone { |
| | | color: #c0c4cc; |
| | | } |
| | | |
| | | .el-button:not([disabled]) .el-icon-phone { |
| | | color: #409eff; |
| | | } |
| | | |
| | | .el-button:not([disabled]):hover .el-icon-phone { |
| | | color: #66b1ff; |
| | | transform: scale(1.1); |
| | | } |
| | | |
| | | .mulsz { |
| | | font-size: 25px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .el-input.is-disabled .el-input__inner { |
| | | background-color: #fff; /* 背景颜色 */ |
| | | border-color: #dcdfe6; /* 边框颜色 */ |
| | | color: #080808 !important; /* 文字颜色 */ |
| | | cursor: not-allowed; /* 鼠标样式 */ |
| | | background-color: #fff; |
| | | border-color: #dcdfe6; |
| | | color: #080808 !important; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .el-textarea.is-disabled .el-textarea__inner { |
| | | background-color: #fff; /* 背景颜色 */ |
| | | border-color: #dcdfe6; /* 边框颜色 */ |
| | | color: #080808 !important; /* 文字颜色 */ |
| | | cursor: not-allowed; /* 鼠标样式 */ |
| | | background-color: #fff; |
| | | border-color: #dcdfe6; |
| | | color: #080808 !important; |
| | | cursor: not-allowed; |
| | | } |
| | | </style> |