| | |
| | | data: data, |
| | | }); |
| | | } |
| | | // 首页中部数据 |
| | | export function getServiceStatistics(data) { |
| | | return request({ |
| | | url: "/smartor/serviceSubtask/getServiceStatistics", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | // 查询患者住院记录列表 |
| | | export function getechartsMedInhospList(data) { |
| | | return request({ |
| | |
| | | display_name: config.displayName, |
| | | iceServers: [{ urls: "stun:stun.l.google.com:19302" }], |
| | | register: true, |
| | | session_expires: 180, |
| | | sessionTimersExpires: 300, |
| | | session_expires: 900, |
| | | sessionTimersExpires: 600, |
| | | extraHeaders: ["Min-SE: 120"], |
| | | register_expires: 300, |
| | | connection_recovery_min_interval: 2, |
| | |
| | | this.setupAudio(this.currentSession); |
| | | |
| | | } catch (error) { |
| | | this.updateCallStatus("failed", `呼叫失败: ${error.message}`); |
| | | this.updateCallStatus("failed", `呼叫失败1: ${error.message}`); |
| | | reject(error); |
| | | } |
| | | }); |
| | |
| | | errorMessage = `呼叫失败: ${e.cause || e.message}`; |
| | | } |
| | | |
| | | this.updateCallStatus("failed", errorMessage); |
| | | this.updateCallStatus("failed2", errorMessage); |
| | | reject(new Error(errorMessage)); |
| | | } |
| | | |
| | |
| | | placeholder="请输入主治医生" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="经管医生" prop="managementDoctor"> |
| | | <el-input |
| | | v-model="topqueryParams.managementDoctor" |
| | | placeholder="请输入主治医生" |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="患者范围" prop="status"> |
| | | <el-cascader |
| | |
| | | align="center" |
| | | key="updateBy" |
| | | prop="updateBy" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="经管医生" |
| | | align="center" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | |
| | | affiliation() { |
| | | this.topqueryParams.drcode = store.getters.hisUserId; |
| | | this.topqueryParams.nurseId = store.getters.hisUserId; |
| | | this.topqueryParams.managementDoctor = store.getters.name; |
| | | this.getList(1); |
| | | }, |
| | | onthatday() { |
| | |
| | | ></el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <!-- 中间echars --> |
| | | <!-- 中部线性柱状图 --> |
| | | <div class="boxEchars"> |
| | | <div class="echars1" id="echars"></div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <!-- 中间和右边 --> |
| | | <!-- 右边列表 --> |
| | | <el-col :span="4" class="aside"> |
| | | <div class="grid-content bg-purple" style="margin-top: -180px"> |
| | | <div class="title"> |
| | |
| | | ></el-table-column> |
| | | |
| | | <el-table-column prop="rc" class-name="rc"> |
| | | <template slot-scope="scope"> |
| | | {{ scope.row.rc }}次 |
| | | </template> |
| | | <template slot-scope="scope"> {{ scope.row.rc }}次 </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | |
| | | getechartsListCountdata, |
| | | getechartsMedOuthospList, |
| | | getechartsMedInhospList, |
| | | getechartsandData, |
| | | getServiceStatistics, |
| | | getDeptRanking, |
| | | } from "@/api/AiCentre/index"; |
| | | import dayjs from "dayjs"; |
| | |
| | | lastHeight: window.innerHeight, |
| | | radio1: "月", |
| | | ticketStatistics: {}, |
| | | timeTypeMap: { |
| | | 周: "day", |
| | | 月: "month", |
| | | 年: "year", |
| | | }, |
| | | DischargeData: { |
| | | rs: "", |
| | | rc: "", |
| | |
| | | this.getgraphdata(); |
| | | this.getranking(); |
| | | this.$nextTick(function () { |
| | | this.getregionAmountCollect(); |
| | | this.myEcharts2(); |
| | | this.getnodeCollect(); |
| | | this.getSkuTop(); |
| | | }); |
| | |
| | | this.getgraphdata(); |
| | | this.getranking(); |
| | | this.getTopdata(); |
| | | this.getregionAmountCollect(); |
| | | this.myEcharts2(); |
| | | this.getnodeCollect(); |
| | | this.getSkuTop(); |
| | | }, |
| | |
| | | }, |
| | | // top排行 |
| | | async getSkuTop() { |
| | | let Rankingdata = { |
| | | let Rankingdata = { |
| | | startDate: this.endatd, |
| | | endDate: this.statd, |
| | | cy: 1, |
| | | }; |
| | | await getDeptRanking(Rankingdata).then((res) => { |
| | | if (res.code == 200) { |
| | | this.SkuTop=res.rows.sort((a, b) => b.rc - a.rc); |
| | | console.log(this.SkuTop,'this.SkuTop'); |
| | | this.SkuTop = res.rows.sort((a, b) => b.rc - a.rc); |
| | | console.log(this.SkuTop, "this.SkuTop"); |
| | | } |
| | | }); |
| | | |
| | |
| | | } |
| | | }); |
| | | }, |
| | | // 获取就诊数量 |
| | | getranking() { |
| | | |
| | | }, |
| | | // 获取中部线柱图数据 |
| | | getgraphdata() { |
| | | let Outhospdata = { |
| | | getranking() {}, |
| | | |
| | | async getgraphdata() { |
| | | let params = { |
| | | startDate: this.endatd, |
| | | endDate: this.statd, |
| | | cy: 1, |
| | | timeType: |
| | | this.radio1 === "周" |
| | | ? "day" |
| | | : this.radio1 === "月" |
| | | ? "month" |
| | | : "year", |
| | | }; |
| | | let Inhospdata = { |
| | | startDate: this.endatd, |
| | | endDate: this.statd, |
| | | cy: 1, |
| | | |
| | | try { |
| | | const res = await getServiceStatistics(params); |
| | | if (res.code === 200) { |
| | | this.processChartData(res.data); |
| | | } |
| | | } catch (error) { |
| | | console.error("获取图表数据失败:", error); |
| | | } |
| | | }, |
| | | processChartData(data) { |
| | | // 按时间排序确保数据顺序正确 |
| | | const sortedData = [...data].sort( |
| | | (a, b) => new Date(a.timePeriod) - new Date(b.timePeriod) |
| | | ); |
| | | |
| | | const xAxisData = []; |
| | | const dischargeFollowData = []; |
| | | const outpatientFollowData = []; |
| | | const pmiData = []; |
| | | const pmoData = []; |
| | | |
| | | sortedData.forEach((item) => { |
| | | // 根据时间类型格式化显示 |
| | | let timeLabel = item.timePeriod; |
| | | if (this.radio1 === "周") { |
| | | timeLabel = dayjs(item.timePeriod).format("MM-DD"); |
| | | } else if (this.radio1 === "月") { |
| | | timeLabel = item.timePeriod.split("-")[1] + "月"; |
| | | } else { |
| | | timeLabel = item.timePeriod.split("-")[0] + "年"; |
| | | } |
| | | |
| | | xAxisData.push(timeLabel); |
| | | dischargeFollowData.push(item.dischargeFollowCount); |
| | | outpatientFollowData.push(item.outpatientFollowCount); |
| | | pmiData.push(item.pmiCount); |
| | | pmoData.push(item.pmoCount); |
| | | }); |
| | | |
| | | // 更新图表 |
| | | this.updateChart( |
| | | xAxisData, |
| | | dischargeFollowData, |
| | | outpatientFollowData, |
| | | pmiData, |
| | | pmoData |
| | | ); |
| | | }, |
| | | updateChart( |
| | | xAxisData, |
| | | dischargeFollowData, |
| | | outpatientFollowData, |
| | | pmiData, |
| | | pmoData |
| | | ) { |
| | | if (!this.myChart2) { |
| | | this.myEcharts2(); |
| | | return; |
| | | } |
| | | |
| | | // 计算随访量的最大值 |
| | | const maxFollow = Math.max( |
| | | ...dischargeFollowData, |
| | | ...outpatientFollowData |
| | | ); |
| | | // 计算服务人次的最大值 |
| | | const maxService = Math.max(...pmiData, ...pmoData); |
| | | |
| | | // 动态计算interval值 |
| | | const followInterval = this.calculateOptimalInterval(maxFollow); |
| | | const serviceInterval = this.calculateOptimalInterval(maxService); |
| | | |
| | | const option = { |
| | | xAxis: { |
| | | data: xAxisData, |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | interval: followInterval, |
| | | max: Math.ceil(maxFollow / followInterval) * followInterval, |
| | | }, |
| | | { |
| | | interval: serviceInterval, |
| | | max: Math.ceil(maxService / serviceInterval) * serviceInterval, |
| | | }, |
| | | ], |
| | | series: [ |
| | | { data: dischargeFollowData }, |
| | | { data: outpatientFollowData }, |
| | | { data: pmiData }, |
| | | { data: pmoData }, |
| | | ], |
| | | }; |
| | | getechartsMedOuthospList(Outhospdata).then((res) => {}); |
| | | getechartsMedInhospList(Inhospdata).then((res) => {}); |
| | | |
| | | this.myChart2.setOption(option); |
| | | }, |
| | | |
| | | // 计算最优的interval值 |
| | | calculateOptimalInterval(maxValue) { |
| | | if (maxValue <= 0) return 50; // 默认值 |
| | | |
| | | // 根据最大值计算合适的间隔 |
| | | const magnitude = Math.pow(10, Math.floor(Math.log10(maxValue))); |
| | | const stepRatio = maxValue / magnitude; |
| | | |
| | | let interval; |
| | | if (stepRatio > 5) { |
| | | interval = magnitude; |
| | | } else if (stepRatio > 2) { |
| | | interval = magnitude / 2; |
| | | } else { |
| | | interval = magnitude / 5; |
| | | } |
| | | |
| | | // 确保interval是整数 |
| | | interval = Math.round(interval); |
| | | |
| | | // 限制最小间隔 |
| | | return Math.max(interval, 50); |
| | | }, |
| | | // 获取线状图时间 |
| | | async getregionAmountCollect() { |
| | | //getregionAmountCollect(1, this.endatd, this.statd); |
| | |
| | | this.series = [123, 123, 223, 212, 432, 123, 442, 234]; |
| | | this.myEcharts2(); |
| | | }, |
| | | // 线性图 |
| | | // 线性图及柱状图 |
| | | myEcharts2() { |
| | | var echarts = require("echarts"); |
| | | var myChart2 = echarts.init(document.getElementById("echars")); |
| | | this.myChart2 = myChart2; |
| | | |
| | | var option2 = { |
| | | tooltip: { |
| | | trigger: "axis", |
| | |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: [ |
| | | "出院随访量", |
| | | "门诊随访量", |
| | | // "在院随访量", |
| | | // "门诊复诊通知", |
| | | "出院服务人次", |
| | | "门诊服务人次", |
| | | ], |
| | | data: ["出院随访量", "门诊随访量", "出院服务人次", "门诊服务人次"], |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: "category", |
| | | data: [ |
| | | "一月", |
| | | "二月", |
| | | "三月", |
| | | "四月", |
| | | "五月", |
| | | "六月", |
| | | "七月", |
| | | "八月", |
| | | "九月", |
| | | "十月", |
| | | ], |
| | | data: [], // 初始为空,将通过API数据填充 |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | |
| | | type: "value", |
| | | name: "随访量", |
| | | min: 0, |
| | | max: 250, |
| | | interval: 50, |
| | | axisLabel: { |
| | | formatter: "{value} 人", |
| | | }, |
| | | }, |
| | | { |
| | | type: "value", |
| | | name: "复诊/评估次数", |
| | | name: "服务人次", |
| | | min: 0, |
| | | max: 250, |
| | | interval: 50, |
| | | axisLabel: { |
| | | formatter: "{value} 次", |
| | | }, |
| | |
| | | return value + " 人"; |
| | | }, |
| | | }, |
| | | data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160], |
| | | data: [], // 初始为空,将通过API数据填充 |
| | | }, |
| | | // { |
| | | // name: "影像随访量", |
| | | // type: "bar", |
| | | // tooltip: { |
| | | // valueFormatter: function (value) { |
| | | // return value + " 人"; |
| | | // }, |
| | | // }, |
| | | // data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180], |
| | | // }, |
| | | { |
| | | name: "门诊随访量", |
| | | type: "bar", |
| | |
| | | return value + " 人"; |
| | | }, |
| | | }, |
| | | data: [145, 92, 178, 134, 167, 85, 199, 112, 156, 88, 120, 145], |
| | | data: [], // 初始为空,将通过API数据填充 |
| | | }, |
| | | |
| | | // { |
| | | // name: "出院复诊通知", |
| | | // type: "line", |
| | | // smooth: 0.3, |
| | | // yAxisIndex: 1, |
| | | // tooltip: { |
| | | // valueFormatter: function (value) { |
| | | // return value + " 次"; |
| | | // }, |
| | | // }, |
| | | // data: [45, 123, 78, 156, 89, 34, 199, 112, 67, 145, 88, 175], |
| | | // }, |
| | | { |
| | | name: "出院服务人次", |
| | | type: "line", |
| | |
| | | return value + " 次"; |
| | | }, |
| | | }, |
| | | data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180], |
| | | data: [], // 初始为空,将通过API数据填充 |
| | | }, |
| | | { |
| | | name: "门诊服务人次", |
| | |
| | | return value + " 次"; |
| | | }, |
| | | }, |
| | | data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160], |
| | | data: [], // 初始为空,将通过API数据填充 |
| | | }, |
| | | ], |
| | | }; |
| | | myChart2.on("updateAxisPointer", function (event) { |
| | | const xAxisInfo = event.axesInfo[0]; |
| | | if (xAxisInfo) { |
| | | const dimension = xAxisInfo.value + 1; |
| | | myChart2.setOption({ |
| | | series: { |
| | | id: "pie", |
| | | label: { |
| | | formatter: "{b}: {@[" + dimension + "]} ", |
| | | }, |
| | | encode: { |
| | | value: dimension, |
| | | tooltip: dimension, |
| | | }, |
| | | }, |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | myChart2.setOption(option2); |
| | | |
| | | // 初始加载数据 |
| | | this.getgraphdata(); |
| | | }, |
| | | // 饼状图 |
| | | myPieChart() { |
| | |
| | | }); |
| | | } |
| | | // 宣教分类 |
| | | getheLibraryAssort({}).then((res) => { |
| | | getheLibraryAssort({ hetype: 1 }).then((res) => { |
| | | this.sortlist = res.rows; |
| | | console.log(this.sortlist); |
| | | }); |
| | |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="经管医生" |
| | | align="center" |
| | | key="managementDoctor" |
| | | prop="managementDoctor" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="主治医生" |
| | | align="center" |
| | | key="drname" |
| | |
| | | </el-select> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <el-form-item label="执行周期" prop="longTask"> |
| | | <el-form-item label="执行周期" prop="longTask"> |
| | | <el-radio-group v-model="form.longTask"> |
| | | <el-radio :label="0">自定义周期</el-radio> |
| | | <el-radio :label="1">长期任务</el-radio> |
| | |
| | | <el-radio :label="2">即刻发送</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="执行日期:" v-if="form.sendType == 1&& !form.longTask"> |
| | | <el-form-item |
| | | label="执行日期:" |
| | | v-if="form.sendType == 1 && !form.longTask" |
| | | > |
| | | <el-date-picker |
| | | v-model="daytime" |
| | | @change="changeTimeday" |
| | |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="执行时间点:" v-if="form.sendType == 3&& !form.longTask"> |
| | | <el-form-item |
| | | label="执行时间点:" |
| | | v-if="form.sendType == 3 && !form.longTask" |
| | | > |
| | | <div style="display: flex"> |
| | | <div style="margin-right: 10px"> |
| | | <el-date-picker |
| | |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="执行时间段:" v-if="form.sendType == 1&& !form.longTask"> |
| | | <el-form-item |
| | | label="执行时间段:" |
| | | v-if="form.sendType == 1 && !form.longTask" |
| | | > |
| | | <div style="display: flex"> |
| | | <div style="margin-right: 10px"> |
| | | <span style="font-size: 18px; margin-right: 10px">①</span> |
| | |
| | | icon="el-icon-upload2" |
| | | size="medium" |
| | | @click="handleImport" |
| | | |
| | | >导入</el-button |
| | | > |
| | | </el-col> |
| | |
| | | <!-- 模板预览 --> |
| | | <el-dialog title="模板预览" :visible.sync="previewtf" width="60%"> |
| | | <div class="preview-left"> |
| | | <!-- 单选 --> |
| | | <div v-html="htmlRichText"></div> |
| | | <!-- 根据模板类型显示不同内容 --> |
| | | <div v-if="currentTemplateType == '2'"> |
| | | <!-- 通知模板只显示纯文本内容 --> |
| | | <div style="white-space: pre-wrap; font-size: 16px; line-height: 1.6"> |
| | | {{ plainTextContent }} |
| | | </div> |
| | | </div> |
| | | <div v-else> |
| | | <!-- 其他类型模板显示富文本内容 --> |
| | | <div v-html="htmlRichText"></div> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <!-- <el-button @click="previewGo">前往模板详情修改</el-button> --> |
| | | <el-button type="primary" @click="previewFn">确认使用</el-button> |
| | | </span> |
| | | </el-dialog> |
| | |
| | | |
| | | <el-table :data="uploadingData" style="width: 100%"> |
| | | <el-table-column prop="serial" label="患者id"> </el-table-column> |
| | | <el-table-column prop="name" label="姓名" |
| | | width="100"> </el-table-column> |
| | | <el-table-column prop="sex" label="性别"width="100"> </el-table-column> |
| | | <el-table-column prop="idcardno" width="300" label="证件号码"> </el-table-column> |
| | | <el-table-column prop="name" label="姓名" width="100"> |
| | | </el-table-column> |
| | | <el-table-column prop="sex" label="性别" width="100"> |
| | | </el-table-column> |
| | | <el-table-column prop="idcardno" width="300" label="证件号码"> |
| | | </el-table-column> |
| | | <el-table-column prop="goday" label="出生日期"> </el-table-column> |
| | | <el-table-column prop="telcode" width="200" label="联系方式"> </el-table-column> |
| | | <el-table-column prop="createTime" width="200" label="创建日期"> |
| | | <el-table-column prop="telcode" width="200" label="联系方式"> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" width="200" label="创建日期"> |
| | | </el-table-column> |
| | | </el-table> |
| | | <!-- <pagination |
| | |
| | | <el-form-item label="宣教名称"> |
| | | <el-input v-model="topqueryParams.preachname"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="宣教分类" prop="region"> |
| | | <el-form-item label="宣教类型" prop="region"> |
| | | <el-select |
| | | v-model="topqueryParams.assortid" |
| | | v-model="topqueryParams.hetype" |
| | | size="medium" |
| | | filterable |
| | | placeholder="请选择分类" |
| | | > |
| | | <el-option-group |
| | | v-for="group in sortlist" |
| | | :key="group.id" |
| | | :label="group.assortname" |
| | | <el-option |
| | | v-for="item in heLibraryAssortList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id" |
| | | > |
| | | <el-option |
| | | v-for="item in group.heLibraryAssortList" |
| | | :key="item.id" |
| | | :label="item.assortname" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | |
| | | return { |
| | | title: "宣教内容列表", |
| | | currenttype: 1, //1宣教2门诊3出院4复诊5体检6问卷 |
| | | currentTemplateType: "", // 当前模板类型 |
| | | plainTextContent: "", // 纯文本内容 |
| | | id: "", // |
| | | previewid: "", //任务模板传递id |
| | | libName: "", |
| | |
| | | tableLabelxj: [ |
| | | { label: "创建人", width: "", prop: "createBy" }, |
| | | { label: "宣教名称", width: "180", prop: "preachname" }, |
| | | { label: "宣教描述", width: "180", prop: "preachcontent" }, |
| | | { label: "宣教内容", width: "180", prop: "preachcontent" }, |
| | | // { label: "宣教形式", width: "", prop: "playType" }, |
| | | { label: "适用方式", width: "", prop: "suitway" }, |
| | | { label: "修改日期", width: "", prop: "uploadTime" }, |
| | |
| | | ], |
| | | variableListTime: [], |
| | | sortlist: [], |
| | | heLibraryAssortList: [ |
| | | { id: 1, value: "宣教" }, |
| | | { id: 2, value: "通知" }, |
| | | ], |
| | | tasktopic: null, //新增类型 |
| | | SelectPatientslist: [], |
| | | form: { |
| | |
| | | templatename: "", |
| | | templateid: null, |
| | | libtemplateid: null, |
| | | kcb: "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。", |
| | | kcb: |
| | | "亲爱的患者-家属,我们是" + |
| | | localStorage.getItem("orgname") + |
| | | "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。", |
| | | jsy: "生活上要劳逸结合,注意休息和营养,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次宣教内容就到这里,祝您身体健康!", |
| | | }, |
| | | taskoptions: [ |
| | |
| | | submitForm(formName) { |
| | | this.form.preachform = this.checkList.join(","); |
| | | // this.formatFn(1); |
| | | if (!this.form.patTaskRelevances[0]) { |
| | | if (!this.form.patTaskRelevances[0]&&this.form.longTask==0) { |
| | | this.$modal.msgError("请选择病人"); |
| | | return; |
| | | } |
| | |
| | | this.form.isoperation = 2; |
| | | } else { |
| | | this.form.isoperation = 1; |
| | | this.form.sendState=1; |
| | | this.form.sendState = 1; |
| | | } |
| | | if (!this.form.type) { |
| | | this.form.type = this.$route.query.type; |
| | |
| | | // ----------------------表格子组件事件 |
| | | // 选择模板并预览 |
| | | selectfn(row, type) { |
| | | // 模板情况下获取模板信息 |
| | | this.libName = row.preachname; |
| | | this.htmlRichText = null; |
| | | this.libId = row.id; |
| | | console.log(row, "row"); |
| | | this.Tasktemplate = row; |
| | | |
| | | // 设置当前模板类型 |
| | | this.currentTemplateType = row.hetype || "1"; // 默认为宣教类型 |
| | | |
| | | this.previewtf = true; |
| | | this.previewid = row.svyid; |
| | | console.log(this.questionList, "questionList"); |
| | | // this.Variablehandling(row.svyLibScripts, 1); |
| | | console.log(row.htmlRichText); |
| | | axios |
| | | .get(row.htmlRichText) |
| | | .then((response) => { |
| | | console.log(response.data, "数据"); // 输出获取到的文件内容 |
| | | this.htmlRichText = response.data; |
| | | this.htmlRichText = this.addStyleToImages(this.htmlRichText); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取富文本失败"); |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | |
| | | if (this.currentTemplateType == "2") { |
| | | // 如果是通知模板,获取纯文本内容 |
| | | this.plainTextContent = row.preachcontent; |
| | | } else { |
| | | // 其他类型模板获取富文本内容 |
| | | axios |
| | | .get(row.htmlRichText) |
| | | .then((response) => { |
| | | this.htmlRichText = response.data; |
| | | this.htmlRichText = this.addStyleToImages(this.htmlRichText); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取富文本失败"); |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | } |
| | | }, |
| | | // 预览模板 |
| | | previewfnm() { |
| | |
| | | this.Tasktemplate = res.rows[0]; |
| | | this.previewtf = true; |
| | | this.previewid = res.rows[0].svyid; |
| | | axios |
| | | .get(res.rows[0].htmlRichText) |
| | | .then((response) => { |
| | | this.htmlRichText = response.data; |
| | | this.htmlRichText = this.addStyleToImages(this.htmlRichText); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取富文本失败"); |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | this.currentTemplateType = res.rows[0].hetype || "1"; // 默认为宣教类型 |
| | | |
| | | if (this.currentTemplateType == "2") { |
| | | // 如果是通知模板,获取纯文本内容 |
| | | this.plainTextContent = res.rows[0].preachcontent; |
| | | } else { |
| | | // 其他类型模板获取富文本内容 |
| | | axios |
| | | .get(res.rows[0].htmlRichText) |
| | | .then((response) => { |
| | | this.htmlRichText = response.data; |
| | | this.htmlRichText = this.addStyleToImages(this.htmlRichText); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取富文本失败"); |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | addStyleToImages(html) { |
| | |
| | | handleExport() {}, |
| | | |
| | | // 选择患者表数据 |
| | | handleSelectionChange(selection,type) { |
| | | handleSelectionChange(selection, type) { |
| | | console.log("多选患者"); |
| | | this.SelectPatientslist = selection; |
| | | this.multiple = !selection.length; |
| | |
| | | item.sfzh = item.idcardno; |
| | | } |
| | | if (type) { |
| | | item.hospType=type |
| | | }else{ |
| | | item.hospType = type; |
| | | } else { |
| | | item.hospType = this.patientqueryParams.allhosp; |
| | | } |
| | | this.overallCase.push(item); |
| | |
| | | templateid: null, |
| | | libtemplateid: null, |
| | | serviceType: Number(this.$route.query.serviceType), |
| | | kcb: "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。", |
| | | kcb: |
| | | "亲爱的患者-家属,我们是" + |
| | | localStorage.getItem("orgname") + |
| | | "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。", |
| | | jsy: "生活上要劳逸结合,注意休息和营养,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!", |
| | | }; |
| | | |
| | |
| | | this.$refs.upload.submit(); |
| | | this.dractive++; |
| | | } else if (this.dractive == 2) { |
| | | this.handleSelectionChange(this.uploadingData,4); |
| | | this.handleSelectionChange(this.uploadingData, 4); |
| | | this.upload.open = false; |
| | | this.dractive = 1 |
| | | this.dractive = 1; |
| | | } |
| | | }, |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | /* 新增样式 */ |
| | | .preview-left { |
| | | padding: 20px; |
| | | max-height: 70vh; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | /* 纯文本内容样式 */ |
| | | .plain-text-content { |
| | | white-space: pre-wrap; |
| | | font-size: 16px; |
| | | line-height: 1.6; |
| | | padding: 15px; |
| | | background: #f9f9f9; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .download { |
| | | text-align: center; |
| | | .el-upload__tip { |
| | |
| | | <template> |
| | | <div class="Questionnairemanagement"> |
| | | <div class="NotificationManagement"> |
| | | <!-- 左侧栏 --> |
| | | <div class="sidecolumn"> |
| | | <el-steps finish-status="success" :active="Editprogress" simple> |
| | |
| | | > |
| | | </template> |
| | | </el-step> |
| | | <el-step> |
| | | <template slot="title"> |
| | | <span style="cursor: pointer" @click="Editprogress = 2" |
| | | >通知内容</span |
| | | > |
| | | </template> |
| | | </el-step> |
| | | </el-steps> |
| | | </div> |
| | | <!-- 右侧数据 --> |
| | |
| | | <!-- 基本信息 --> |
| | | <div v-if="Editprogress == 1"> |
| | | <div class="leftvlue-jbxx">基本信息</div> |
| | | <el-divider></el-divider> |
| | | <el-form |
| | | :model="ruleForm" |
| | | :rules="rules" |
| | |
| | | <el-col :span="12"> </el-col> |
| | | </el-row> |
| | | <el-form-item label="通知标题" prop="preachname"> |
| | | <div style="width: 30%"> |
| | | <div style="width: 60%"> |
| | | <el-input |
| | | v-model="ruleForm.preachname" |
| | | placeholder="请输入标题" |
| | | ></el-input> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="通知描述" prop="preachcontent"> |
| | | <div style="width: 60%"> |
| | | <el-form-item label="通知内容" prop="preachcontent"> |
| | | <div style="width: 80%"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="2" |
| | | :rows="5" |
| | | v-model="ruleForm.preachcontent" |
| | | placeholder="请输入描述" |
| | | placeholder="请输入通知内容" |
| | | ></el-input> |
| | | </div> |
| | | </el-form-item> |
| | |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="文件" prop="sickness"> |
| | | <div style="width: 40%"> |
| | | <el-upload |
| | | class="upload-demo" |
| | | action="https://jsonplaceholder.typicode.com/posts/" |
| | | :on-change="handleChange" |
| | | :file-list="fileList" |
| | | > |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip"> |
| | | 只能上传jpg/png/xsl文件,且不超过50mb |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="标签" prop="desc"> |
| | | <div class="xinz-inf"> |
| | | <el-tag |
| | |
| | | @change="handleInputConfirm" |
| | | filterable |
| | | remote |
| | | allow-create |
| | | reserve-keyword |
| | | default-first-option |
| | | :remote-method="remoteMethodtag" |
| | |
| | | ></el-col> |
| | | <el-col :span="9"> |
| | | <el-form-item label="可用状态" prop="region"> |
| | | <el-select |
| | | v-model="ruleForm.isavailable" |
| | | size="medium" |
| | | filterable |
| | | placeholder="请选择分类" |
| | | > |
| | | <el-option |
| | | class="ruleFormaa" |
| | | v-for="item in usable" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | <el-radio-group v-model="ruleForm.isAvailable"> |
| | | <el-radio |
| | | v-for="(item, index) in usable" |
| | | :label="item.value" |
| | | >{{ item.label }}</el-radio |
| | | > |
| | | </el-option> |
| | | </el-select> </el-form-item |
| | | ></el-col> |
| | | </el-radio-group> |
| | | </el-form-item></el-col |
| | | > |
| | | </el-row> |
| | | <el-form-item label="通知方式" prop="region"> |
| | | <el-select |
| | | v-model="ruleForm.suitway" |
| | | size="medium" |
| | | multiple |
| | | filterable |
| | | placeholder="请选择分类" |
| | | > |
| | | <el-option |
| | | class="ruleFormaa" |
| | | v-for="item in mode" |
| | | :key="item.label" |
| | | :label="item.label" |
| | | :value="item.label" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="适用疾病" prop="region"> |
| | | <el-button type="warning" @click="$refs.child.handleAddpatient()" |
| | | >添加疾病</el-button |
| | | > |
| | | </el-form-item> --> |
| | | <el-form-item label="适用院区" prop="region"> |
| | | <el-select |
| | | v-model="ruleForm.campus" |
| | | size="medium" |
| | | multiple |
| | | filterable |
| | | placeholder="请选择分类" |
| | | placeholder="请选择院区" |
| | | > |
| | | <el-option |
| | | class="ruleFormaa" |
| | |
| | | </el-cascader> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="success" @click="nextstep('ruleForm')" |
| | | >下一步</el-button |
| | | > |
| | | <el-button type="success" @click="Departmenttreatment('ruleForm')" |
| | | >保存</el-button |
| | | > |
| | | <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <!-- 通知内容 --> |
| | | <div v-if="Editprogress == 2"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="4"><div class="leftvlue-jbxx">通知内容</div></el-col> |
| | | </el-row> |
| | | |
| | | <div> |
| | | <el-form |
| | | :model="ruleForm" |
| | | :rules="rules" |
| | | ref="ruleForm" |
| | | label-width="100px" |
| | | class="demo-ruleForm" |
| | | > |
| | | <el-row gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资料形式" prop="region"> |
| | | <el-select |
| | | v-model="ruleForm.shape" |
| | | placeholder="请选择内容形式" |
| | | > |
| | | <el-option |
| | | v-for="item in xjxsoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div> |
| | | <el-button @click="laststep('ruleForm')">上一步</el-button> |
| | | <el-button |
| | | type="success" |
| | | @click="Departmenttreatment('ruleForm')" |
| | | >保存</el-button |
| | | > |
| | | <el-button |
| | | type="warning" |
| | | @click="Departmenttreatment('ruleForm')" |
| | | >另存新版本</el-button |
| | | > |
| | | <el-button type="info" @click="closeFm('ruleForm')" |
| | | >关闭</el-button |
| | | > |
| | | </div></el-col |
| | | > |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <div> |
| | | <el-upload |
| | | class="upload-demo" |
| | | :action="uploadImgUrlword" |
| | | :on-success="uploadEditorSuccessword" |
| | | :on-error="uploadEditorErrorword" |
| | | :before-upload="beforeEditorUploadword" |
| | | :headers="headers" |
| | | > |
| | | <el-button size="small" type="primary">word文件上传</el-button> |
| | | </el-upload> |
| | | <div id="quillEditorQiniu"> |
| | | <!-- 基于elementUi的上传组件 el-upload begin--> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | :action="uploadImgUrl" |
| | | :accept="'image/*,video/*'" |
| | | :show-file-list="false" |
| | | :on-success="uploadEditorSuccess" |
| | | :on-error="uploadEditorError" |
| | | :before-upload="beforeEditorUpload" |
| | | :headers="headers" |
| | | > |
| | | </el-upload> |
| | | <!-- 基于elementUi的上传组件 el-upload end--> |
| | | <quill-editor |
| | | class="editor" |
| | | v-model="content" |
| | | ref="customQuillEditor" |
| | | :options="editorOption" |
| | | @blur="onEditorBlur" |
| | | @focus="onEditorFocus" |
| | | @change="onEditorChange" |
| | | > |
| | | </quill-editor> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 添加适用疾病窗口 --> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { quillEditor } from "vue-quill-editor"; |
| | | import axios from "axios"; |
| | | |
| | | import { |
| | | getheLibraryAssort, |
| | | delheLibraryAssort, |
| | |
| | | illnesslistget, |
| | | getillness, |
| | | } from "@/api/AiCentre/index"; |
| | | import OptionalForm from "@/components/OptionalForm"; //正则组件 |
| | | |
| | | import OptionalForm from "@/components/OptionalForm"; |
| | | import { listDept } from "@/api/system/dept"; |
| | | // import * as Quill from "quill"; |
| | | import Quill from "quill"; |
| | | import { listtag } from "@/api/system/label"; |
| | | import store from "@/store"; |
| | | |
| | | // 这里引入修改过的video模块并注册 |
| | | import Video from "./video"; |
| | | Quill.register(Video, true); |
| | | //获取登录token,引入文件,如果只是简单测试,没有上传文件是否登录的限制的话, |
| | | //这个token可以不用获取,文件可以不引入,把上面对应的上传文件携带请求头 :headers="headers" 这个代码删掉即可 |
| | | import { getToken } from "@/utils/auth"; |
| | | const toolbarOptions = [ |
| | | ["bold", "italic", "underline", "strike"], // toggled buttons |
| | | ["blockquote", "code-block"], |
| | | |
| | | [{ header: 1 }, { header: 2 }], // custom button values |
| | | [{ list: "ordered" }, { list: "bullet" }], |
| | | [{ script: "sub" }, { script: "super" }], // superscript/subscript |
| | | [{ indent: "-1" }, { indent: "+1" }], // outdent/indent |
| | | [{ direction: "rtl" }], // text direction |
| | | |
| | | [{ size: ["small", false, "large", "huge"] }], // custom dropdown |
| | | [{ header: [1, 2, 3, 4, 5, 6, false] }], |
| | | |
| | | [{ color: [] }, { background: [] }], // dropdown with defaults from theme |
| | | [{ font: [] }], |
| | | [{ align: [] }], |
| | | ["link", "image", "video"], |
| | | ["clean"], // remove formatting button |
| | | ]; |
| | | |
| | | export default { |
| | | name: "NotificationManagement", |
| | | components: { OptionalForm }, |
| | | data() { |
| | | return { |
| | | headers: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", |
| | | uploadImgUrlword: process.env.VUE_APP_BASE_API + "/common/uploadShow", |
| | | uploadUrlPath: "没有文件上传", |
| | | quillUpdateImg: false, |
| | | fileList: [ |
| | | { |
| | | name: "food.jpeg", |
| | | url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", |
| | | }, |
| | | { |
| | | name: "food2.jpeg", |
| | | url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", |
| | | }, |
| | | ], |
| | | content: "", //最终保存的内容 |
| | | fileName: "", //文件名 |
| | | dynamicTags: [], |
| | | inputVisible: false, |
| | | illnessVisible: false, |
| | | dialogVisiblepatient: false, //适用疾病窗口 |
| | | dialogVisiblepatient: false, |
| | | inputValue: "", |
| | | // 富文本 |
| | | editorOption: { |
| | | placeholder: "你想说什么?", |
| | | modules: { |
| | | imageResize: { |
| | | displayStyles: { |
| | | backgroundColor: "black", |
| | | border: "none", |
| | | color: "white", |
| | | }, |
| | | modules: ["Resize", "DisplaySize", "Toolbar"], |
| | | }, |
| | | toolbar: { |
| | | container: toolbarOptions, // 工具栏 |
| | | handlers: { |
| | | image: function (value) { |
| | | if (value) { |
| | | document |
| | | .querySelector("#quillEditorQiniu .avatar-uploader input") |
| | | .click(); |
| | | } else { |
| | | this.quill.format("image", false); |
| | | } |
| | | }, |
| | | video: function (value) { |
| | | if (value) { |
| | | document |
| | | .querySelector("#quillEditorQiniu .avatar-uploader input") |
| | | .click(); |
| | | } else { |
| | | this.quill.format("video", false); |
| | | } |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | |
| | | sidecolumnrabs: "left", //方向 |
| | | Editprogress: 1, //编辑进度 |
| | | currentVersion: "1.2.3", //当前版本 |
| | | loading: false, // 遮罩层 |
| | | drawer: false, //控制展开 |
| | | radio: "false", //单选题选中 |
| | | radios: [], //多选题选中 |
| | | radioas: "", //填空题答案 |
| | | // 总条数 |
| | | sidecolumnrabs: "left", |
| | | Editprogress: 1, |
| | | currentVersion: "1.2.3", |
| | | loading: false, |
| | | drawer: false, |
| | | radio: "false", |
| | | radios: [], |
| | | radioas: "", |
| | | total: 1, |
| | | hetype: "", |
| | | id: null, |
| | |
| | | deptList: [], |
| | | tempDetpRelevanceslist: [], |
| | | props: { multiple: true, value: "deptId", label: "deptName" }, |
| | | xjxsoptions: [ |
| | | { |
| | | value: "1", |
| | | label: "图文", |
| | | }, |
| | | { |
| | | value: "2", |
| | | label: "视频", |
| | | }, |
| | | { |
| | | value: "3", |
| | | label: "音频", |
| | | }, |
| | | ], |
| | | valssu: [ |
| | | { |
| | | idd: 1, |
| | | wssd: "你最近怎么样", |
| | | sdadd: ["sss", "ssccss", "ssaas", "ss"], |
| | | }, |
| | | ], |
| | | addvalue: "添加题目", |
| | | |
| | | variablelist: [ |
| | | { variatename: "姓名", variate: "${name}", default: 1 }, |
| | | { variatename: "电话", variate: "${phone}", default: 1 }, |
| | | { variatename: "病情", variate: "${illness}", default: 1 }, |
| | | ], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }, |
| | | }; |
| | | }, |
| | | |
| | | activated() { |
| | | if (this.id != this.$route.query.id) { |
| | | this.gettabList(); |
| | | this.getList(); |
| | | this.illnessUpdate(); |
| | | } |
| | | }, |
| | | created() { |
| | | this.gettabList(); |
| | | this.getList(); |
| | |
| | | this.precedencetype = store.getters.precedencetype; |
| | | this.courtyardlist = store.getters.courtyardlist; |
| | | }, |
| | | watch: { |
| | | content(newVal, oldVal) { |
| | | //this.$emit('input', newVal); |
| | | console.log(newVal, "A"); |
| | | console.log(oldVal, "B"); |
| | | }, |
| | | }, |
| | | |
| | | methods: { |
| | | processElement(element) { |
| | | return { ...element, isoperation: null }; |
| | | }, |
| | | // 获取页面数据 |
| | | getList() { |
| | | this.loading = true; |
| | |
| | | if (this.id) { |
| | | getlibraryinfo({ id: this.id }).then((res) => { |
| | | this.ruleForm = res.data[0]; |
| | | this.ruleForm.campus = this.ruleForm.campus.split(","); |
| | | if (this.ruleForm.campus) |
| | | this.ruleForm.campus = this.ruleForm.campus.split(","); |
| | | this.dynamicTags = res.data[0].heLibraryTagList.map( |
| | | this.processElement |
| | | ); |
| | | this.Getmissioncontent(this.ruleForm.richText); |
| | | if (this.ruleForm.deptNames) { |
| | | this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames); |
| | | } |
| | | if (this.ruleForm.suitway) { |
| | | this.ruleForm.suitway = this.ruleForm.suitway.split(","); |
| | | } |
| | | this.variablelist = this.ruleForm.otherdata |
| | | ? JSON.parse(this.ruleForm.otherdata) |
| | |
| | | // 通知分类 |
| | | getheLibraryAssort({ hetype: 2 }).then((res) => { |
| | | this.sortlist = res.rows; |
| | | console.log(this.sortlist); |
| | | }); |
| | | // 部门 |
| | | listDept(this.queryParams).then((response) => { |
| | | this.deptList = this.handleTree(response.data, "deptId"); |
| | | }); |
| | | this.loading = false; |
| | | }, |
| | | |
| | | processElement(element) { |
| | | return { ...element, isoperation: null }; |
| | | }, |
| | | submitForm(formName) { |
| | | let tgs = []; |
| | | this.dynamicTags.forEach((item) => { |
| | | tgs.push(item.tagname); |
| | | }); |
| | | this.ruleForm.campus = this.ruleForm.campus.join(","); |
| | | if (this.ruleForm.campus) { |
| | | this.ruleForm.campus = this.ruleForm.campus.join(","); |
| | | } |
| | | this.ruleForm.labelInfo = tgs.length != 0 ? tgs.join(", ") : ""; |
| | | this.ruleForm.otherdata = JSON.stringify(this.variablelist); |
| | | this.ruleForm.hetype = 2; |
| | | console.log(22); |
| | | this.ruleForm.suitway = |
| | | this.ruleForm.suitway.length != 0 |
| | | ? this.ruleForm.suitway.join(",") |
| | | : ""; |
| | | this.ruleForm.hetype = 2; // 通知类型 |
| | | |
| | | addrichText({ |
| | | content: this.content, |
| | | fileName: this.fileName ? this.fileName : "测试.html", |
| | | }).then((res) => { |
| | | this.ruleForm.richText = res.msg; |
| | | if (this.id) { |
| | | this.ruleForm.isoperation = 2; |
| | | compilelibrary(this.ruleForm).then((res) => { |
| | | if (this.id) { |
| | | this.ruleForm.isoperation = 2; |
| | | compilelibrary(this.ruleForm).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$modal.msgSuccess("编辑成功"); |
| | | this.confirmillness(); |
| | | this.$router.go(-1); |
| | | }); |
| | | } else { |
| | | this.ruleForm.isoperation = 1; |
| | | compilelibrary(this.ruleForm).then((res) => { |
| | | } |
| | | }); |
| | | } else { |
| | | this.ruleForm.isoperation = 1; |
| | | compilelibrary(this.ruleForm).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.confirmillness(res.data); |
| | | this.$router.go(-1); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | // 保存疾病 |
| | | confirmillness(guid) { |
| | |
| | | if (guid) { |
| | | item.outid = guid; |
| | | } else { |
| | | console.log(this.ruleForm); |
| | | item.outid = this.ruleForm.id; |
| | | } |
| | | item.icd10name = item.icdname; |
| | |
| | | }); |
| | | this.illnessVisible = false; |
| | | this.$modal.msgSuccess("编辑成功"); |
| | | }, |
| | | getFileNameFromPath(path) { |
| | | const parts = path.split("/"); |
| | | return parts[parts.length - 1]; |
| | | }, |
| | | // 下一步 |
| | | nextstep() { |
| | | if (this.Editprogress <= 1) { |
| | | return this.Editprogress++; |
| | | } |
| | | }, |
| | | // 上一步 |
| | | laststep() { |
| | | this.Editprogress = this.Editprogress - 1; |
| | | }, |
| | | // 关闭 |
| | | closeFm() { |
| | |
| | | ); |
| | | if (!condition) { |
| | | listDept({ deptId: item }).then((res) => { |
| | | console.log("dept"); |
| | | res.data[0].type = 2; |
| | | this.ruleForm.tempDetpRelevances.push(res.data[0]); |
| | | }); |
| | |
| | | setTimeout(() => { |
| | | this.submitForm(); |
| | | }, 1000); |
| | | // this.submitForm(); |
| | | }, |
| | | // 保存题目信息 |
| | | Saveproblem() {}, |
| | | /** 查询题目列表 */ |
| | | |
| | | // 新增变量 |
| | | addvariable() { |
| | | this.variablelist.push({ |
| | |
| | | delvariable(item) { |
| | | const index = this.variablelist.indexOf(item); |
| | | if (index !== -1) { |
| | | this.variablelist.splice(index, 1); // 从索引位置删除一个元素 |
| | | this.variablelist.splice(index, 1); |
| | | } else { |
| | | console.log("未找到该对象"); |
| | | } |
| | | }, |
| | | // 控制文件 |
| | | handleChange(file, fileList) { |
| | | this.fileList = fileList.slice(-3); |
| | | }, |
| | | // 标签----------------- |
| | | // 标签相关方法 |
| | | gettabList() { |
| | | const tagqueryParams = { |
| | | pageNum: 1, |
| | |
| | | }); |
| | | }, |
| | | handleClosetag(tag) { |
| | | console.log(tag); |
| | | const lindex = this.ruleForm.heLibraryTagList.findIndex( |
| | | (item) => item.tagname == tag.tagname |
| | | ); |
| | | console.log(lindex); |
| | | this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); |
| | | this.ruleForm.heLibraryTagList[lindex].isoperation = 3; |
| | | }, |
| | |
| | | showInput() { |
| | | this.inputVisible = true; |
| | | }, |
| | | // 疾病----------------------- |
| | | // 疾病相关方法 |
| | | illnessUpdate() { |
| | | if (this.id) { |
| | | getillness({ outid: this.$route.query.id, type: 6 }).then((res) => { |
| | |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | // -------------------------- |
| | | |
| | | // 预览模板 |
| | | PreviewTemplate() { |
| | | this.drawer = true; |
| | |
| | | resetForm(formName) { |
| | | this.$refs[formName].resetFields(); |
| | | }, |
| | | |
| | | //上传图片之前async |
| | | beforeEditorUpload(res, file) { |
| | | //显示上传动画 |
| | | this.quillUpdateImg = true; |
| | | // const res1 = await uploadImage() |
| | | // console.log(res1,'====='); |
| | | // this.$emit('before',res, file) |
| | | console.log(res); |
| | | console.log(file); |
| | | }, |
| | | // 上传图片成功 |
| | | uploadEditorSuccess(res, file) { |
| | | console.log("上传成功"); |
| | | // this.$emit('upload',res, file) |
| | | console.log(res, file); |
| | | //拼接出上传的图片在服务器的完整地址 |
| | | let imgUrl = res.url; |
| | | let type = imgUrl.substring(imgUrl.lastIndexOf(".") + 1); |
| | | console.log(type); |
| | | // 获取富文本组件实例 |
| | | let quill = this.$refs.customQuillEditor.quill; |
| | | // 获取光标所在位置 |
| | | let length = quill.getSelection().index; |
| | | // 插入图片||视频 res.info为服务器返回的图片地址 |
| | | if (type == "mp4" || type == "MP4") { |
| | | window.jsValue = imgUrl; |
| | | quill.insertEmbed(length, "video", imgUrl); |
| | | } else { |
| | | quill.insertEmbed(length, "image", imgUrl); |
| | | } |
| | | // 调整光标到最后 |
| | | quill.setSelection(length + 1); |
| | | //取消上传动画 |
| | | this.quillUpdateImg = false; |
| | | }, |
| | | // 失去焦点事件 |
| | | onEditorBlur(e) { |
| | | console.log("onEditorBlur: ", e); |
| | | }, |
| | | // 获得焦点事件 |
| | | onEditorFocus(e) { |
| | | console.log("onEditorFocus: ", e); |
| | | }, |
| | | // 内容改变事件 |
| | | onEditorChange(e) { |
| | | console.log("onEditorChange: ", e); |
| | | }, |
| | | // 上传(文件)图片失败 |
| | | uploadEditorError(res, file) { |
| | | console.log(res, "word"); |
| | | console.log(file, "word"); |
| | | //页面提示 |
| | | this.$message.error("上传图片失败"); |
| | | //取消上传动画 |
| | | this.quillUpdateImg = false; |
| | | }, |
| | | //上传组件返回的结果 |
| | | uploadResult: function (res) { |
| | | this.uploadUrlPath = res; |
| | | }, |
| | | // 上传(文件)图片失败 |
| | | uploadEditorErrorword(res, file) { |
| | | console.log(res); |
| | | console.log(file); |
| | | //页面提示 |
| | | this.$message.error("上传图片失败"); |
| | | //取消上传动画 |
| | | this.quillUpdateImg = false; |
| | | }, |
| | | //上传图片之前async |
| | | beforeEditorUploadword(res, file) { |
| | | //显示上传动画 |
| | | this.quillUpdateImg = true; |
| | | // const res1 = await uploadImage() |
| | | // console.log(res1,'====='); |
| | | // this.$emit('before',res, file) |
| | | console.log(res); |
| | | console.log(file); |
| | | }, |
| | | // 上传图片成功 |
| | | uploadEditorSuccessword(res, file) { |
| | | console.log("上传成功"); |
| | | const data = null; |
| | | console.log(res, file, "word"); |
| | | axios |
| | | .get(res.url) |
| | | .then((response) => { |
| | | console.log(response.data, "数据"); // 输出获取到的文件内容 |
| | | this.content = response.data; |
| | | this.texturl = res.url; |
| | | this.fileName = this.getFileNameFromPath(res.url); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | }, |
| | | Getmissioncontent(url) { |
| | | axios |
| | | .get(url) |
| | | .then((response) => { |
| | | console.log(response.data, "数据"); // 输出获取到的文件内容 |
| | | this.content = response.data; |
| | | this.fileName = this.getFileNameFromPath(res.url); |
| | | }) |
| | | .catch((error) => { |
| | | console.error("Failed to fetch file:", error); |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .Questionnairemanagement { |
| | | // display: flex; |
| | | } |
| | | .sidecolumn { |
| | | // width: 300px; |
| | | // min-height: 100vh; |
| | | // text-align: center; |
| | | // display: flex; |
| | | // margin-top: 20px; |
| | | margin: 20px; |
| | | margin-bottom: 0; |
| | | padding: 20px; |
| | |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | } |
| | | |
| | | .leftvlue { |
| | | // display: flex; |
| | | // flex: 1; |
| | | 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); |
| | | .mulsz { |
| | | font-size: 20px; |
| | | } |
| | | |
| | | .leftvlue-jbxx { |
| | | margin-bottom: 50px; |
| | | font-size: 20px; |
| | | span { |
| | | position: absolute; |
| | | right: 80px; |
| | | } |
| | | } |
| | | .demo-cascader { |
| | | margin-right: 20px; |
| | | } |
| | | .PreviewTemplate { |
| | | color: #02a7f0; |
| | | cursor: pointer; |
| | | font-size: 20px; |
| | | margin: 0 20px; |
| | | font-size: 24px; |
| | | height: 30px; |
| | | border-left: 3px solid #41a1be; |
| | | padding-left: 3px; |
| | | } |
| | | } |
| | | |
| | | .xinz-inf { |
| | | font-size: 18px; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | |
| | | line-height: 48px; |
| | | |
| | | .el-tag + .el-tag { |
| | | margin-left: 10px; |
| | | } |
| | | |
| | | .button-new-tag { |
| | | margin-left: 10px; |
| | | height: 32px; |
| | |
| | | padding-top: 0; |
| | | padding-bottom: 0; |
| | | } |
| | | |
| | | .input-new-tag { |
| | | width: 90px; |
| | | margin-left: 10px; |
| | | vertical-align: bottom; |
| | | } |
| | | } |
| | | .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); |
| | | .topic-dev { |
| | | margin-bottom: 25px; |
| | | font-size: 20px !important; |
| | | .dev-text { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | | .addtopic { |
| | | margin-top: 30px; |
| | | } |
| | | .presentation { |
| | | margin: 20px 0; |
| | | display: flex; |
| | | .presentation-left { |
| | | width: 50%; |
| | | height: 500px; |
| | | .button-textxg { |
| | | color: #024df0; |
| | | } |
| | | .button-textsc { |
| | | color: #f52727; |
| | | } |
| | | } |
| | | .presentation-right { |
| | | width: 50%; |
| | | height: 500px; |
| | | padding: 20px; |
| | | font-size: 18px; |
| | | border: 1px solid #909091; |
| | | span { |
| | | padding: 0 35px; |
| | | margin-right: 10px; |
| | | border-bottom: 1px solid #909091; |
| | | } |
| | | .headline { |
| | | font-size: 20px; |
| | | border-left: 3px solid #41a1be; |
| | | padding-left: 5px; |
| | | margin: 15px 0; |
| | | } |
| | | } |
| | | } |
| | | ::v-deep .addtopic-input { |
| | | input { |
| | | background: #02a7f0; |
| | | color: #edf1f7; |
| | | width: 150px; |
| | | } |
| | | } |
| | | ::v-deep.el-step.is-vertical .el-step__title { |
| | | |
| | | ::v-deep .el-step.is-vertical .el-step__title { |
| | | font-size: 25px; |
| | | } |
| | | |
| | | ::v-deep.el-input--medium { |
| | | font-size: 18px !important; |
| | | } |
| | | ::v-deep.ruleFormaa.el-select { |
| | | display: inline-block; |
| | | position: relative; |
| | | width: 700px; |
| | | } |
| | | .el-select__tags { |
| | | |
| | | ::v-deep.el-select__tags { |
| | | font-size: 20px; |
| | | max-width: 888px !important; |
| | | } |
| | | |
| | | ::v-deep.el-radio__inner { |
| | | width: 22px; |
| | | height: 22px; |
| | | } |
| | | // ::v-deep.topic-dev.el-radio__label { |
| | | // font-size: 24px; |
| | | // } |
| | | |
| | | ::v-deep.el-radio-group { |
| | | span { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | |
| | | ::v-deep.el-checkbox-group { |
| | | span { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | .editor { |
| | | line-height: normal !important; |
| | | height: 600px; |
| | | margin-bottom: 80px; |
| | | } |
| | | .ql-snow .ql-tooltip[data-mode="link"]::before { |
| | | content: "请输入链接地址:"; |
| | | } |
| | | .ql-snow .ql-tooltip.ql-editing a.ql-action::after { |
| | | border-right: 0px; |
| | | content: "保存"; |
| | | padding-right: 0px; |
| | | } |
| | | |
| | | .ql-snow .ql-tooltip[data-mode="video"]::before { |
| | | content: "请输入视频地址:"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item::before { |
| | | content: "14px"; |
| | | } |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before { |
| | | content: "10px"; |
| | | } |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before { |
| | | content: "18px"; |
| | | } |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before { |
| | | content: "32px"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item::before { |
| | | content: "文本"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { |
| | | content: "标题1"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { |
| | | content: "标题2"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { |
| | | content: "标题3"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { |
| | | content: "标题4"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { |
| | | content: "标题5"; |
| | | } |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { |
| | | content: "标题6"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item::before { |
| | | content: "标准字体"; |
| | | } |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before { |
| | | content: "衬线字体"; |
| | | } |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before { |
| | | content: "等宽字体"; |
| | | } |
| | | </style> |
| | |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:user:add']" |
| | | >新增</el-button |
| | | > |
| | | </el-col> |