已删除2个文件
已重命名2个文件
已修改17个文件
| | |
| | | export function listSmstemplet(query) { |
| | | return request({ |
| | | url: '/smartor/smstemplet/list', |
| | | method: 'get', |
| | | params: query |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | |
| | |
| | | // æ°å¢çä¿¡æ¨¡æ¿ |
| | | export function addSmstemplet(data) { |
| | | return request({ |
| | | url: '/smartor/smstemplet', |
| | | url: '/smartor/smstemplet/add', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | |
| | | <el-dialog |
| | | title="çä¿¡åé" |
| | | :visible.sync="smsDialogVisible" |
| | | width="500px" |
| | | width="800px" |
| | | :close-on-click-modal="false" |
| | | append-to-body |
| | | > |
| | | <el-form ref="smsForm" :model="smsForm" label-width="100px"> |
| | | <el-form-item label="æ£è
åç§°"> |
| | | <el-input v-model="smsForm.sendname" readonly></el-input> |
| | | <el-input v-model="smsForm.sendname"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å¹´é¾"> |
| | | <el-input v-model="smsForm.age" readonly></el-input> |
| | | <el-input v-model="smsForm.age"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="çµè¯"> |
| | | <el-input v-model="smsForm.telcode" readonly></el-input> |
| | | <el-input v-model="smsForm.telcode"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç§å®¤"> |
| | | <el-input v-model="smsForm.deptname" readonly></el-input> |
| | | <el-input v-model="smsForm.deptname"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç
åº"> |
| | | <el-input |
| | | v-model="smsForm.leavehospitaldistrictname" |
| | | readonly |
| | | ></el-input> |
| | | <el-input v-model="smsForm.leavehospitaldistrictname"></el-input> |
| | | </el-form-item> |
| | | <!-- çä¿¡åéå¯¹è¯æ¡ - 模æ¿éæ©åºåï¼å¢å¼ºçï¼ --> |
| | | <el-form-item label="éæ©æ¨¡æ¿"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="7"> |
| | | <el-select |
| | | v-model="templateFilterDept" |
| | | placeholder="æç§å®¤" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="filterTemplates" |
| | | > |
| | | <el-option |
| | | v-for="dept in departmentOptions" |
| | | :key="dept.value" |
| | | :label="dept.label" |
| | | :value="dept.value" |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="7"> |
| | | <el-select |
| | | v-model="templateFilterWard" |
| | | placeholder="æç
åº" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="filterTemplates" |
| | | > |
| | | <el-option |
| | | v-for="ward in wardOptions" |
| | | :key="ward.value" |
| | | :label="ward.label" |
| | | :value="ward.value" |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-select |
| | | v-model="selectedTemplateId" |
| | | placeholder="è¯·éæ©ç信模æ¿" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleTemplateSelect" |
| | | > |
| | | <el-option |
| | | v-for="tmpl in filteredTemplateOptions" |
| | | :key="tmpl.templetid" |
| | | :label="`ã${tmpl.templetno}ã${tmpl.templetname}`" |
| | | :value="tmpl.templetid" |
| | | > |
| | | <span style="float: left">{{ tmpl.templetname }}</span> |
| | | <span style="float: right; color: #909399; font-size: 12px"> |
| | | {{ tmpl.deptName || "éç¨" }} / |
| | | {{ tmpl.wardName || "å
¨é¨" }} |
| | | </span> |
| | | </el-option> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | @click="openQuickCreateTemplate" |
| | | > |
| | | æ°å»º |
| | | </el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="çä¿¡å
容"> |
| | | <el-input |
| | | type="textarea" |
| | |
| | | 确认åé |
| | | </el-button> |
| | | </div> |
| | | <!-- å
åµï¼å¿«éæ°å»ºæ¨¡æ¿å¯¹è¯æ¡ --> |
| | | <!-- å¿«éæ°å»ºæ¨¡æ¿å¯¹è¯æ¡ï¼å¢å¼ºçï¼ --> |
| | | <el-dialog |
| | | title="æ°å»ºç信模æ¿" |
| | | :visible.sync="quickCreateVisible" |
| | | width="500px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-form |
| | | :model="quickTemplateForm" |
| | | :rules="quickTemplateRules" |
| | | ref="quickTemplateForm" |
| | | label-width="90px" |
| | | > |
| | | <el-form-item label="模æ¿ç¼å·" prop="templetno"> |
| | | <el-input |
| | | v-model="quickTemplateForm.templetno" |
| | | placeholder="请è¾å
¥æ¨¡æ¿ç¼å·" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="模æ¿åç§°" prop="templetname"> |
| | | <el-input |
| | | v-model="quickTemplateForm.templetname" |
| | | placeholder="请è¾å
¥æ¨¡æ¿åç§°" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±ç§å®¤"> |
| | | <el-select |
| | | v-model="quickTemplateForm.deptCode" |
| | | placeholder="è¯·éæ©ç§å®¤" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change=" |
| | | (val) => { |
| | | const dept = departmentOptions.find((d) => d.value === val); |
| | | quickTemplateForm.deptName = dept ? dept.label : ''; |
| | | } |
| | | " |
| | | > |
| | | <el-option |
| | | v-for="dept in departmentOptions" |
| | | :key="dept.value" |
| | | :label="dept.label" |
| | | :value="dept.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æå±ç
åº"> |
| | | <el-select |
| | | v-model="quickTemplateForm.wardCode" |
| | | placeholder="è¯·éæ©ç
åº" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="ward in wardOptions" |
| | | :key="ward.value" |
| | | :label="ward.label" |
| | | :value="ward.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="模æ¿å
容" prop="templetcontent"> |
| | | <el-input |
| | | v-model="quickTemplateForm.templetcontent" |
| | | type="textarea" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥ç信模æ¿å
容" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="quickCreateVisible = false">å æ¶</el-button> |
| | | <el-button |
| | | type="primary" |
| | | @click="submitQuickTemplate" |
| | | :loading="quickCreateLoading" |
| | | > |
| | | ä¿åå¹¶ä½¿ç¨ |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getCurrentUserServiceSubtaskCount } from "@/api/AiCentre/index"; |
| | | import { sendMsg } from "@/api/AiCentre/index"; |
| | | import { |
| | | getCurrentUserServiceSubtaskCount, |
| | | sendMsg, |
| | | } from "@/api/AiCentre/index"; |
| | | import { |
| | | listSmstemplet, |
| | | getSmstemplet, |
| | | addSmstemplet, |
| | | updateSmstemplet, |
| | | delSmstemplet, |
| | | } from "@/api/smartor/smstemplet"; |
| | | export default { |
| | | name: "FloatBall", |
| | | |
| | |
| | | hideTimer: null, |
| | | updateTime: "", |
| | | roles: null, |
| | | templateOptions: [], // 模æ¿ä¸æå表 |
| | | selectedTemplateId: "", // éä¸ç模æ¿ID |
| | | templateLoading: false, // 模æ¿å表å è½½ç¶æ |
| | | // 模æ¿çé |
| | | templateFilterDept: "", |
| | | templateFilterWard: "", // æ°å¢ï¼ç
åºçé |
| | | filteredTemplateOptions: [], |
| | | |
| | | // ç§å®¤é项ï¼ä» Vuex è·åï¼ |
| | | departmentOptions: [], |
| | | // æ°å¢ï¼ç
åºé项ï¼ä» Vuex è·åï¼ |
| | | wardOptions: [], |
| | | // å¿«éæ°å»ºæ¨¡æ¿ |
| | | quickCreateVisible: false, |
| | | quickCreateLoading: false, |
| | | quickTemplateForm: { |
| | | templetno: "", |
| | | templetname: "", |
| | | templetcontent: "", |
| | | }, |
| | | quickTemplateRules: { |
| | | templetname: [ |
| | | { required: true, message: "请è¾å
¥æ¨¡æ¿åç§°", trigger: "blur" }, |
| | | ], |
| | | templetcontent: [ |
| | | { required: true, message: "请è¾å
¥æ¨¡æ¿å
容", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | // çä¿¡åéå¯¹è¯æ¡ |
| | | // smsDialogVisible: false, |
| | | smsLoading: false, // â
æ°å¢å è½½ç¶æ |
| | |
| | | }, |
| | | watch: { |
| | | // â
çå¬ Vuex å¯¹è¯æ¡ç¶æ |
| | | "$store.state.sms.smsDialogVisible"(val) { |
| | | if (val) { |
| | | const patientData = this.$store.state.sms.patientData; |
| | | this.smsForm = { ...patientData }; |
| | | this.smsContent = this.$store.state.sms.smsTemplate || ""; |
| | | "$store.state.sms.smsDialogVisible": { |
| | | handler(val) { |
| | | if (val) { |
| | | const patientData = this.$store.state.sms.patientData; |
| | | this.smsForm = { ...patientData }; |
| | | this.smsContent = this.$store.state.sms.smsTemplate || ""; |
| | | |
| | | // å±å¼æ¬æµ®ç |
| | | if (!this.isExpanded) { |
| | | this.isExpanded = true; |
| | | this.isHidden = false; |
| | | clearTimeout(this.hideTimer); |
| | | // å±å¼æ¬æµ®ç |
| | | if (!this.isExpanded) { |
| | | this.isExpanded = true; |
| | | this.isHidden = false; |
| | | clearTimeout(this.hideTimer); |
| | | } |
| | | |
| | | // â
â
â
å
³é®ä¿®å¤ï¼å¨è¿éåå§å模æ¿ç¸å
³æ°æ® â
â
â
|
| | | this.initTemplateData(); |
| | | } |
| | | } |
| | | }, |
| | | immediate: false, |
| | | }, |
| | | }, |
| | | mounted() { |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | initTemplateData() { |
| | | // åå§åç§å®¤é项 |
| | | if (this.$store.getters.belongDepts) { |
| | | this.departmentOptions = this.$store.getters.belongDepts.map( |
| | | (dept) => ({ |
| | | label: dept.deptName, |
| | | value: dept.deptCode, |
| | | }) |
| | | ); |
| | | } |
| | | |
| | | // â
â
â
æ°å¢ï¼åå§åç
åºé项 â
â
â
|
| | | if (this.$store.getters.belongWards) { |
| | | this.wardOptions = this.$store.getters.belongWards.map((ward) => ({ |
| | | label: ward.districtName, |
| | | value: ward.districtCode, |
| | | })); |
| | | } |
| | | |
| | | // éç½®çé |
| | | this.templateFilterDept = ""; |
| | | this.templateFilterWard = ""; // æ°å¢ |
| | | this.selectedTemplateId = ""; |
| | | |
| | | // å 载模æ¿å表 |
| | | this.loadTemplates(); |
| | | }, |
| | | toggleExpand() { |
| | | this.isExpanded = !this.isExpanded; |
| | | if (this.isExpanded) { |
| | |
| | | this.updateStats(); |
| | | } |
| | | }, |
| | | async loadTemplates() { |
| | | this.templateLoading = true; |
| | | try { |
| | | // const { listSmstemplet } = await import("@/api/smartor/smstemplet"); |
| | | const res = await listSmstemplet({ pageNum: 1, pageSize: 999 }); |
| | | this.templateOptions = res.rows || []; |
| | | this.filterTemplates(); // åºç¨çé |
| | | } catch (error) { |
| | | console.error("å è½½ç信模æ¿å¤±è´¥:", error); |
| | | this.templateOptions = []; |
| | | this.filteredTemplateOptions = []; |
| | | } finally { |
| | | this.templateLoading = false; |
| | | } |
| | | }, |
| | | handleTemplateSelect(templateId) { |
| | | if (!templateId) { |
| | | this.smsContent = ""; |
| | | return; |
| | | } |
| | | const selected = this.templateOptions.find( |
| | | (t) => t.templetid === templateId |
| | | ); |
| | | if (selected) { |
| | | this.smsContent = selected.templetcontent || ""; |
| | | } |
| | | }, |
| | | openQuickCreateTemplate() { |
| | | this.quickTemplateForm = { |
| | | templetno: "", |
| | | templetname: "", |
| | | templetcontent: "", |
| | | }; |
| | | this.quickCreateVisible = true; |
| | | this.$nextTick(() => { |
| | | if (this.$refs.quickTemplateForm) { |
| | | this.$refs.quickTemplateForm.clearValidate(); |
| | | } |
| | | }); |
| | | }, |
| | | /** |
| | | * æäº¤å¿«éæ°å»ºæ¨¡æ¿ |
| | | */ |
| | | async submitQuickTemplate() { |
| | | this.$refs.quickTemplateForm.validate(async (valid) => { |
| | | if (!valid) return; |
| | | |
| | | this.quickCreateLoading = true; |
| | | try { |
| | | // const { addSmstemplet } = await import("@/api/smartor/smstemplet"); |
| | | const res = await addSmstemplet(this.quickTemplateForm); |
| | | |
| | | if (res.code === 200) { |
| | | this.$modal.msgSuccess("模æ¿å建æå"); |
| | | |
| | | // å·æ°æ¨¡æ¿å表 |
| | | await this.loadTemplates(); |
| | | |
| | | // èªå¨éä¸ååå»ºçæ¨¡æ¿ |
| | | const newTmpl = this.templateOptions.find( |
| | | (t) => t.templetname === this.quickTemplateForm.templetname |
| | | ); |
| | | if (newTmpl) { |
| | | this.selectedTemplateId = newTmpl.templetid; |
| | | this.smsContent = newTmpl.templetcontent; |
| | | } |
| | | |
| | | this.quickCreateVisible = false; |
| | | } else { |
| | | this.$modal.msgError(res.msg || "å建失败"); |
| | | } |
| | | } catch (error) { |
| | | console.error("å建模æ¿å¤±è´¥:", error); |
| | | this.$modal.msgError("å建失败ï¼è¯·ç¨åéè¯"); |
| | | } finally { |
| | | this.quickCreateLoading = false; |
| | | } |
| | | }); |
| | | }, |
| | | handleMouseEnter() { |
| | | this.isHovering = true; |
| | | if (this.autoHide) { |
| | |
| | | } |
| | | }, |
| | | // æå¼çä¿¡åéå¯¹è¯æ¡ |
| | | openSmsDialog() { |
| | | // 仿¬æµ®çå
鍿弿¶ï¼æ¸
空表åï¼å 为没æé䏿£è
ï¼ |
| | | /** |
| | | * æ¹é åæç openSmsDialog æ¹æ³ |
| | | */ |
| | | openSmsDialog(patientData = {}) { |
| | | // éç½®çé |
| | | this.templateFilterDept = ""; |
| | | |
| | | // éç½®éæ© |
| | | this.selectedTemplateId = ""; |
| | | this.smsContent = patientData.smsTemplate || ""; |
| | | |
| | | // å 载模æ¿å表 |
| | | this.loadTemplates(); |
| | | |
| | | // æå¼å¯¹è¯æ¡ï¼éè¿ Vuexï¼ |
| | | this.$store.dispatch("sms/openSmsDialog", { |
| | | name: "", |
| | | age: "", |
| | | phone: "", |
| | | deptName: "", |
| | | wardName: "", |
| | | smsTemplate: "", |
| | | name: patientData.name || "", |
| | | age: patientData.age || "", |
| | | phone: patientData.phone || "", |
| | | deptName: patientData.deptName || "", |
| | | wardName: patientData.wardName || "", |
| | | smsTemplate: patientData.smsTemplate || "", |
| | | }); |
| | | }, |
| | | // æ°å¢ï¼ç鿍¡æ¿ |
| | | filterTemplates() { |
| | | let filtered = [...this.templateOptions]; |
| | | |
| | | // æç§å®¤çé |
| | | if (this.templateFilterDept) { |
| | | filtered = filtered.filter( |
| | | (tmpl) => tmpl.deptCode === this.templateFilterDept || !tmpl.deptCode |
| | | ); |
| | | } |
| | | |
| | | // â
â
â
æ°å¢ï¼æç
åºçé â
â
â
|
| | | if (this.templateFilterWard) { |
| | | filtered = filtered.filter( |
| | | (tmpl) => tmpl.wardCode === this.templateFilterWard || !tmpl.wardCode |
| | | ); |
| | | } |
| | | |
| | | this.filteredTemplateOptions = filtered; |
| | | |
| | | // æ¸
空已é |
| | | this.selectedTemplateId = ""; |
| | | this.smsContent = ""; |
| | | }, |
| | | // åéçä¿¡ |
| | | async sendSms() { |
| | | if (!this.smsContent.trim()) { |
| | |
| | | this.$modal.msgError("åé失败ï¼è¯·ç¨åéè¯"); |
| | | } finally { |
| | | this.smsLoading = false; |
| | | this.selectedTemplateId = ""; |
| | | } |
| | | }, |
| | | async updateStats() { |
| | |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="98px" |
| | | label-width="110px" |
| | | > |
| | | <el-form-item label="ä»»å¡åç§°"> |
| | | <el-input |
| | |
| | | v-model="topqueryParams.leavediagname" |
| | | placeholder="请è¾å
¥è¯æåç§°" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="åºé¢æ¶é´èå´" required> |
| | | <el-date-picker |
| | | type="daterange" |
| | | v-model="TimeRange" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¶é´" |
| | | end-placeholder="ç»ææ¶é´" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¶é´èå´" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="éè®¿ç¶æ" prop="status"> |
| | | <el-cascader |
| | |
| | | type="text" |
| | | @click=" |
| | | gettoken360( |
| | | scope.row.sfzh, |
| | | scope.row.drcode, |
| | | scope.row.drname, |
| | | scope.row.patid |
| | | ) |
| | | scope.row.sfzh, |
| | | scope.row.drcode, |
| | | scope.row.drname, |
| | | scope.row.patid |
| | | ) |
| | | " |
| | | ><span class="button-textsc">{{ |
| | | scope.row.sendname |
| | |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | <el-table-column |
| | | label="ä»»å¡ç¶æ" |
| | | align="center" |
| | | key="sendstate" |
| | |
| | | historservelist, |
| | | buidegetTasklist, |
| | | query360PatInfo, |
| | | query360PatInfonh |
| | | query360PatInfonh, |
| | | } from "@/api/AiCentre/index"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | |
| | | deptName: undefined, |
| | | // é»è®¤å¯ç |
| | | initPassword: undefined, |
| | | // æ¥æèå´ |
| | | dateRange: [], |
| | | |
| | | TimeRange: [], |
| | | // å²ä½é项 |
| | | postOptions: [], |
| | | ruleForm: { |
| | |
| | | children: [{ value: 4, label: "䏿§è¡" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | cardlist: [ |
| | | { |
| | | name: "æ£è
æå¡æ»é", |
| | | value: 0, |
| | |
| | | store.getters.belongWards.map((obj) => obj.districtCode); |
| | | } |
| | | this.topqueryParams.pageNum = 1; |
| | | this.topqueryParams.startOutHospTime = this.dateRange[0]; |
| | | this.topqueryParams.endOutHospTime = this.dateRange[1]; |
| | | this.topqueryParams.startOutHospTime = this.TimeRange[0]; |
| | | this.topqueryParams.endOutHospTime = this.TimeRange[1]; |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.TimeRange = []; |
| | | this.topqueryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div class="selected-info"> |
| | | å·²éä¸ |
| | | <span style="color: #409eff; font-weight: bold">{{ |
| | | getSelectedCount() |
| | | }}</span> |
| | | æ¡æ°æ® |
| | | <el-button |
| | | v-if="getSelectedCount() > 0" |
| | | type="text" |
| | | @click="clearAllSelection" |
| | | > |
| | | æ¸
é¤éä¸ |
| | | </el-button> |
| | | </div> |
| | | <el-table |
| | | v-loading="loading" |
| | | ref="userform" |
| | | :data="userList" |
| | | :row-class-name="tableRowClassName" |
| | | @selection-change="handleSelectionChange" |
| | | @select-all="handleSelectAll" |
| | | > |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column |
| | |
| | | inputValue: "", |
| | | preachform: "", |
| | | previewVisible: false, //å½±åé访é¢è§å¼¹æ¡ |
| | | isRestoring: false, |
| | | radio: "", |
| | | radios: [], |
| | | previewtype: 2, //é¢è§å½±åé访类å |
| | |
| | | // 满æåº¦è°æ¥æ°æ® |
| | | scoreDialogVisible: false, |
| | | selectedRows: [], |
| | | selectedRowMap: new Map(), // key: row.id, value: row æ°æ® |
| | | |
| | | // 级èéæ©å¨ç»å®å¼ |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢é访æå¡å表 */ |
| | | getList(refresh) { |
| | | async getList(refresh) { |
| | | // é»è®¤å
¨é¨ |
| | | if (this.topqueryParams.searchscope == 3) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | |
| | | this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS( |
| | | this.getEndOfDay() |
| | | ); |
| | | } else { |
| | | // this.topqueryParams.endSendDateTime = null; |
| | | } |
| | | |
| | | // æ¥åå¼å¸¸è·³è½¬ |
| | | if (this.errtype) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push( |
| | | this.leavehospitaldistrictcode |
| | | ); |
| | | } |
| | | |
| | | this.loading = true; |
| | | |
| | | if ( |
| | | this.topqueryParams.leavehospitaldistrictcodes[0] && |
| | | this.topqueryParams.leaveldeptcodes[0] |
| | |
| | | } else { |
| | | this.topqueryParams.deptOrDistrict = 1; |
| | | } |
| | | |
| | | if (!this.followupAuthority()) { |
| | | this.$message.warning("æªé
ç½®ç§å®¤/ç
åºç¸å
³æéä¸å¯æ¥è¯¢"); |
| | | this.loading = false; |
| | | return Promise.reject(new Error("æ æéæ¥è¯¢")); |
| | | } |
| | | |
| | | getTaskservelist(this.topqueryParams).then((response) => { |
| | | try { |
| | | const response = await getTaskservelist(this.topqueryParams); |
| | | |
| | | // â
ç¬¬ä¸æ¥ï¼å
é宿¢å¤ç¶æ |
| | | this.isRestoring = true; |
| | | |
| | | // â
ç¬¬äºæ¥ï¼åæ´æ°æ°æ®ï¼è¿ä¼è§¦å selection-changeï¼ä½è¢«éä½äºï¼ |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | |
| | | // â
ç¬¬ä¸æ¥ï¼æ¢å¤éä¸ç¶æ |
| | | // this.restoreSelection(); |
| | | this.$nextTick(() => { |
| | | this.restoreSelection(); |
| | | }); |
| | | |
| | | // â
ç¬¬åæ¥ï¼å¤çå
¶ä»æ°æ® |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | // this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = Number(response.rows[0].yc) || 0; |
| | | this.jgvalue = response.rows[0].jg; |
| | |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | | |
| | | // â
ç¬¬äºæ¥ï¼å¤ç preachform çå
¶ä»æ°æ® |
| | | this.userList.forEach((item) => { |
| | | let idArray = null; |
| | | if (item.endtime) { |
| | |
| | | } |
| | | |
| | | item.preachform = idArray.map((value) => { |
| | | // æ¥æ¾id对åºç对象 |
| | | const item = this.checkboxlist.find( |
| | | (item) => item.value == value |
| | | ); |
| | | // 妿æ¾å°å¯¹åºçidï¼è¿ålabelå¼ï¼å¦åè¿ånull |
| | | return item ? item.label : null; |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | this.total = response.total; |
| | | }); |
| | | this.loading = false; |
| | | |
| | | // â
第å
æ¥ï¼è§£é |
| | | this.$nextTick(() => { |
| | | this.isRestoring = false; |
| | | }); |
| | | } catch (error) { |
| | | console.error("è·åå表失败:", error); |
| | | this.loading = false; |
| | | this.isRestoring = false; |
| | | } |
| | | }, |
| | | loadData() { |
| | | this.errtype = this.$route.query.errtype; |
| | |
| | | this.handleQuery(1); |
| | | }, |
| | | handleSelectionChange(rows) { |
| | | console.log(rows, 911); |
| | | // â
å¦ææ¯æ¢å¤éä¸ç¶æè§¦åçï¼ç´æ¥è¿å |
| | | if (this.isRestoring) { |
| | | console.log("æ£å¨æ¢å¤éä¸ç¶æï¼è·³è¿ handleSelectionChange"); |
| | | return; |
| | | } |
| | | |
| | | this.selectedRows = rows.map((row) => { |
| | | // åå§åè¯ååæ®µ |
| | | return { |
| | | console.log("handleSelectionChange 被触åï¼éä¸è¡æ°:", rows.length); |
| | | |
| | | // åªåæ·»å æä½ |
| | | rows.forEach((row) => { |
| | | this.selectedRowMap.set(row.id, { |
| | | ...row, |
| | | authenticity: row.authenticity || 0, |
| | | weekFinish: row.weekFinish || 0, |
| | |
| | | environment: row.environment || 0, |
| | | doctorSatisfaction: row.doctorSatisfaction || 0, |
| | | nurseSatisfaction: row.nurseSatisfaction || 0, |
| | | }; |
| | | }); |
| | | }); |
| | | |
| | | if (this.selectedRows.length > 0) { |
| | | this.multiple = false; |
| | | } else { |
| | | this.multiple = true; |
| | | } |
| | | this.selectedRows = Array.from(this.selectedRowMap.values()); |
| | | this.multiple = this.selectedRows.length === 0; |
| | | }, |
| | | |
| | | // è®¡ç®æ»å |
| | |
| | | } |
| | | return ""; |
| | | }, |
| | | restoreSelection() { |
| | | if (!this.$refs.userform) { |
| | | console.log("è¡¨æ ¼å¼ç¨ä¸åå¨"); |
| | | return; |
| | | } |
| | | |
| | | console.log("æ§è¡ restoreSelection"); |
| | | |
| | | // æ¸
é¤å½åé¡µçææéä¸ç¶æ |
| | | this.$refs.userform.clearSelection(); |
| | | |
| | | // æ¾åºå½å页ä¸åªäºè¡æ¯è¢«éä¸ç |
| | | const toBeSelected = this.userList.filter((row) => |
| | | this.selectedRowMap.has(row.id) |
| | | ); |
| | | |
| | | console.log("éè¦æ¢å¤çè¡æ°:", toBeSelected.length); |
| | | |
| | | // éæ°éä¸è¿äºè¡ |
| | | toBeSelected.forEach((row) => { |
| | | this.$refs.userform.toggleRowSelection(row, true); |
| | | }); |
| | | }, |
| | | // â
å¤ç表头å
¨éäºä»¶ |
| | | handleSelectAll(selection) { |
| | | console.log("å
¨éäºä»¶è§¦åï¼éä¸è¡æ°:", selection.length); |
| | | |
| | | // 妿 selection é¿åº¦çäºå½åé¡µè¡æ°ï¼è¯´ææ¯å
¨é |
| | | if (selection.length === this.userList.length) { |
| | | // å
¨éå½å页 |
| | | this.userList.forEach((row) => { |
| | | this.selectedRowMap.set(row.id, { |
| | | ...row, |
| | | authenticity: row.authenticity || 0, |
| | | weekFinish: row.weekFinish || 0, |
| | | standard: row.standard || 0, |
| | | timeliness: row.timeliness || 0, |
| | | library: row.library || 0, |
| | | environment: row.environment || 0, |
| | | doctorSatisfaction: row.doctorSatisfaction || 0, |
| | | nurseSatisfaction: row.nurseSatisfaction || 0, |
| | | }); |
| | | }); |
| | | } else { |
| | | // åæ¶å
¨éï¼æ¸
é¤å½å页çéä¸ç¶æ |
| | | this.userList.forEach((row) => { |
| | | this.selectedRowMap.delete(row.id); |
| | | }); |
| | | } |
| | | |
| | | // æ´æ° selectedRows |
| | | this.selectedRows = Array.from(this.selectedRowMap.values()); |
| | | this.multiple = this.selectedRows.length === 0; |
| | | }, |
| | | |
| | | // æ¸
餿æéä¸ |
| | | clearAllSelection() { |
| | | this.selectedRowMap.clear(); |
| | | this.selectedRows = []; |
| | | this.multiple = true; |
| | | |
| | | if (this.$refs.userform) { |
| | | this.$refs.userform.clearSelection(); |
| | | } |
| | | }, |
| | | |
| | | // è·åé䏿°é |
| | | getSelectedCount() { |
| | | return this.selectedRowMap.size; |
| | | }, |
| | | // åå»ºåæ¬¡é访æå¡ |
| | | setupsubtask() { |
| | | this.$refs["zcform"].validate((valid) => { |
| | |
| | | flex-shrink: 0; |
| | | margin-top: 2px; |
| | | } |
| | | |
| | | ::v-deep .el-table__row.selected-row:hover > td { |
| | | background-color: #e6f7ff !important; |
| | | } |
| | | |
| | | /* éä¸ä¿¡æ¯æ¾ç¤º */ |
| | | .selected-info { |
| | | padding: 10px 0; |
| | | font-size: 14px; |
| | | color: #666; |
| | | } |
| | | </style> |
| | |
| | | handleOptionChange( |
| | | $event, |
| | | index, |
| | | question.svyLibTemplateTargetoptions, |
| | | question.svyTaskTemplateTargetoptions, |
| | | question |
| | | ) |
| | | " |
| | |
| | | <el-radio |
| | | v-for="( |
| | | option, optIndex |
| | | ) in question.svyLibTemplateTargetoptions" |
| | | ) in question.svyTaskTemplateTargetoptions" |
| | | :key="optIndex" |
| | | :label="option.optioncontent" |
| | | :class="option.isabnormal ? 'red-star' : ''" |
| | |
| | | <div class="dev-xx" v-if="question.scriptType == 2"> |
| | | <el-checkbox-group |
| | | v-model="question.mergedResult" |
| | | @change="updateScore($event, index, question.options, question)" |
| | | @change="updateScore($event, index, question.svyTaskTemplateTargetoptions, question)" |
| | | > |
| | | <el-checkbox |
| | | v-for="(option, optIndex) in question.options" |
| | | v-for="(option, optIndex) in question.svyTaskTemplateTargetoptions" |
| | | :key="optIndex" |
| | | :label="option.optioncontent" |
| | | :class="option.isabnormal ? 'red-star' : ''" |
| | |
| | | }, |
| | | // è°èµ·çä¿¡åéå¯¹è¯æ¡ |
| | | sendAgainmsg() { |
| | | this.smsDialogVisible = true; |
| | | // å¯ä»¥å¨è¿éåå§å smsContentï¼ä¾å¦ this.smsContent = ''; |
| | | // this.smsDialogVisible = true; |
| | | this.$store.dispatch("sms/openSmsDialog", { |
| | | name: this.form.sendname, |
| | | age: this.form.age, |
| | | phone: this.userform.telcode, |
| | | deptName: this.form.deptname, |
| | | wardName: this.form.leavehospitaldistrictname, |
| | | smsTemplate: `å°æ¬ç${this.form.sendname}ï¼æ¨å¥½ï¼`, |
| | | }); |
| | | }, |
| | | |
| | | // åéçä¿¡çæ¹æ³ |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | export default { |
| | | name: "questionnaire", |
| | | name: "Questionbank", |
| | | components: { Treeselect }, |
| | | data() { |
| | | return { |
| | |
| | | svyLibScriptTagList: [], |
| | | suitway: "1", |
| | | scoretype: "4", |
| | | isavailable: "0", |
| | | language: "æ®éè¯", |
| | | }, |
| | | headers: { |
| | |
| | | <template> |
| | | <div class="smsConfig-management"> |
| | | <!-- 左侧æ --> |
| | | <div class="sidecolumn"> |
| | | <div class="sidecolumn-top"> |
| | | <div class="top-wj">模æ¿åç±»</div> |
| | | <div class="top-tj" @click="Newcategory">+æ·»å </div> |
| | | </div> |
| | | <div class="center-ss"> |
| | | <el-input |
| | | placeholder="请è¾å
¥å
容" |
| | | v-model="sidecolumnval" |
| | | class="input-with-select" |
| | | size="medium" |
| | | > |
| | | </el-input> |
| | | </div> |
| | | <div class="head-container" style="margin-top: 20px"> |
| | | <el-tree |
| | | :data="deptOptions" |
| | | :props="defaultProps" |
| | | :expand-on-click-node="false" |
| | | :filter-node-method="filterNode" |
| | | ref="tree" |
| | | node-key="id" |
| | | default-expand-all |
| | | highlight-current |
| | | @node-click="handleNodeClick" |
| | | > |
| | | <span class="custom-tree-node" slot-scope="{ node, data }"> |
| | | <span class="tree-node-label">{{ node.label }}</span> |
| | | <span v-if="data.id > 0"> |
| | | <div class="main-content"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="88px" |
| | | > |
| | | <el-form-item label="模æ¿ç¼å·" prop="templetno"> |
| | | <el-input |
| | | v-model="queryParams.templetno" |
| | | placeholder="请è¾å
¥æ¨¡æ¿ç¼å·" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="模æ¿åç§°" prop="templetname"> |
| | | <el-input |
| | | v-model="queryParams.templetname" |
| | | placeholder="请è¾å
¥æ¨¡æ¿åç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="é¨é¨åç§°" prop="deptName"> |
| | | <el-input |
| | | v-model="queryParams.deptName" |
| | | placeholder="请è¾å
¥é¨é¨åç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="text" |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleQuery" |
| | | >æç´¢</el-button |
| | | > |
| | | <el-button |
| | | icon="el-icon-refresh" |
| | | size="medium" |
| | | @click="resetQuery" |
| | | >éç½®</el-button |
| | | > |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-divider></el-divider> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | circle |
| | | size="mini" |
| | | @click="() => remove(node, data)" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >å é¤</el-button |
| | | > |
| | | </el-button> |
| | | </span> |
| | | <span v-if="data.id > 0"> |
| | | <el-button |
| | | type="text" |
| | | circle |
| | | size="mini" |
| | | @click="() => altertag(node, data)" |
| | | > |
| | | <span class="button-textxg"> |
| | | <i class="el-icon-edit-outline"></i> |
| | | </span> |
| | | </el-button> |
| | | </span> |
| | | </span> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- å³ä¾§æ°æ® --> |
| | | <div class="leftvlue"> |
| | | <div class="leftvlue-bg"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="98px" |
| | | > |
| | | <el-form-item label="模æ¿åç§°" prop="templetname"> |
| | | <el-input |
| | | v-model="queryParams.templetname" |
| | | placeholder="请è¾å
¥æ¨¡æ¿åç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="userList" |
| | | :border="true" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | |
| | | <el-form-item label="çä¿¡ç¾å" prop="signature"> |
| | | <el-input |
| | | v-model="queryParams.signature" |
| | | placeholder="请è¾å
¥çä¿¡ç¾å" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="å¯ç¨ç¶æ" prop="isenable"> |
| | | <el-select |
| | | v-model="queryParams.isenable" |
| | | placeholder="è¯·éæ©ç¶æ" |
| | | clearable |
| | | style="width: 200px" |
| | | > |
| | | <el-option |
| | | v-for="item in statusOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleQuery" |
| | | >æç´¢</el-button> |
| | | <el-button |
| | | icon="el-icon-refresh" |
| | | size="medium" |
| | | @click="resetQuery" |
| | | >éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-divider></el-divider> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >å é¤</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="userList" |
| | | :border="true" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | |
| | | <el-table-column |
| | | label="模æ¿åç§°" |
| | | align="center" |
| | | key="templetname" |
| | | prop="templetname" |
| | | width="160" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="çä¿¡ç¾å" |
| | | align="center" |
| | | key="signature" |
| | | prop="signature" |
| | | width="120" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="模æ¿å
容" |
| | | align="center" |
| | | key="templetcontent" |
| | | prop="templetcontent" |
| | | width="280" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="模æ¿ç±»å" |
| | | align="center" |
| | | key="templettype" |
| | | prop="templettype" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="typeOptions" :value="scope.row.templettype" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="å¯ç¨ç¶æ" |
| | | align="center" |
| | | key="isenable" |
| | | prop="isenable" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="statusOptions" :value="scope.row.isenable" /> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="夿³¨" |
| | | align="center" |
| | | key="remark" |
| | | prop="remark" |
| | | width="180" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="å建æ¶é´" |
| | | align="center" |
| | | key="createTime" |
| | | prop="createTime" |
| | | width="160" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="240" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleUpdate(scope.row)" |
| | | > |
| | | <span class="button-textxg"> |
| | | <i class="el-icon-edit"></i>ä¿®æ¹ |
| | | </span> |
| | | </el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handlePreview(scope.row)" |
| | | > |
| | | <span class="button-text"> |
| | | <i class="el-icon-view"></i>é¢è§ |
| | | </span> |
| | | </el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleDelete(scope.row)" |
| | | > |
| | | <span class="button-textsc"> |
| | | <i class="el-icon-edit"></i>å é¤ |
| | | </span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | <el-table-column |
| | | label="模æ¿ç¼å·" |
| | | align="center" |
| | | key="templetno" |
| | | prop="templetno" |
| | | width="140" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | | <el-table-column |
| | | label="模æ¿åç§°" |
| | | align="center" |
| | | key="templetname" |
| | | prop="templetname" |
| | | width="160" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="模æ¿å
容" |
| | | align="center" |
| | | key="templetcontent" |
| | | prop="templetcontent" |
| | | width="280" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="é¨é¨åç§°" |
| | | align="center" |
| | | key="deptName" |
| | | prop="deptName" |
| | | width="120" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ç
åºåç§°" |
| | | align="center" |
| | | key="wardName" |
| | | prop="wardName" |
| | | width="140" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ç¨æ·å·¥å·" |
| | | align="center" |
| | | key="userName" |
| | | prop="userName" |
| | | width="120" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ç¨æ·æµç§°" |
| | | align="center" |
| | | key="nickName" |
| | | prop="nickName" |
| | | width="120" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="æ¯å¦ä¸ä¼ " |
| | | align="center" |
| | | key="isupload" |
| | | prop="isupload" |
| | | width="90" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="ä¸ä¼ æ¶é´" |
| | | align="center" |
| | | key="uploadTime" |
| | | prop="uploadTime" |
| | | width="160" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="200" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleUpdate(scope.row)" |
| | | > |
| | | <span class="button-textxg"> |
| | | <i class="el-icon-edit"></i>ä¿®æ¹ |
| | | </span> |
| | | </el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handlePreview(scope.row)" |
| | | > |
| | | <span class="button-text"> |
| | | <i class="el-icon-view"></i>é¢è§ |
| | | </span> |
| | | </el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleDelete(scope.row)" |
| | | > |
| | | <span class="button-textsc"> |
| | | <i class="el-icon-edit"></i>å é¤ |
| | | </span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | | <!-- æ·»å /ä¿®æ¹ç信模æ¿å¼¹æ¡ --> |
| | |
| | | label-width="100px" |
| | | size="medium" |
| | | > |
| | | <el-form-item label="模æ¿åç±»" prop="categoryid"> |
| | | <el-select |
| | | v-model="form.categoryid" |
| | | placeholder="è¯·éæ©æ¨¡æ¿åç±»" |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in categoryOptions" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="模æ¿ç¼å·" prop="templetno"> |
| | | <el-input |
| | | v-model="form.templetno" |
| | | placeholder="请è¾å
¥æ¨¡æ¿ç¼å·" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="模æ¿åç§°" prop="templetname"> |
| | | <el-input |
| | | v-model="form.templetname" |
| | | placeholder="请è¾å
¥æ¨¡æ¿åç§°" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="çä¿¡ç¾å" prop="signature"> |
| | | <el-input |
| | | v-model="form.signature" |
| | | placeholder="请è¾å
¥çä¿¡ç¾åï¼å¦ï¼ã丽水人æ°å»é¢ãï¼" |
| | | maxlength="20" |
| | | maxlength="100" |
| | | /> |
| | | </el-form-item> |
| | | |
| | |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="模æ¿ç±»å" prop="templettype"> |
| | | <el-form-item label="ç§å®¤" prop="deptCode"> |
| | | <el-select |
| | | v-model="form.templettype" |
| | | placeholder="è¯·éæ©æ¨¡æ¿ç±»å" |
| | | v-model="form.deptCode" |
| | | placeholder="è¯·éæ©ç§å®¤" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleDeptChange" |
| | | > |
| | | <el-option |
| | | v-for="item in typeOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | v-for="dept in departmentOptions" |
| | | :key="dept.value" |
| | | :label="dept.label" |
| | | :value="dept.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="å¯ç¨ç¶æ" prop="isenable"> |
| | | <el-radio-group v-model="form.isenable"> |
| | | <el-radio |
| | | v-for="item in statusOptions" |
| | | :key="item.value" |
| | | :label="item.value" |
| | | >{{ item.label }}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input |
| | | v-model="form.remark" |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥å¤æ³¨ä¿¡æ¯" |
| | | maxlength="200" |
| | | show-word-limit |
| | | /> |
| | | <el-form-item label="ç
åº" prop="wardCode"> |
| | | <el-select |
| | | v-model="form.wardCode" |
| | | placeholder="è¯·éæ©ç
åº" |
| | | filterable |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleWardChange" |
| | | > |
| | | <el-option |
| | | v-for="ward in wardOptions" |
| | | :key="ward.value" |
| | | :label="ward.label" |
| | | :value="ward.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="cancelForm">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm" :loading="submitLoading">ç¡® å®</el-button> |
| | | <el-button type="primary" @click="submitForm" :loading="submitLoading" |
| | | >ç¡® å®</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 模æ¿é¢è§å¼¹æ¡ --> |
| | | <el-dialog |
| | | title="ç信模æ¿é¢è§" |
| | | :visible.sync="previewVisible" |
| | | width="40%" |
| | | > |
| | | <el-dialog title="ç信模æ¿é¢è§" :visible.sync="previewVisible" width="40%"> |
| | | <div class="preview-box"> |
| | | <div class="preview-item"> |
| | | <div class="preview-label">模æ¿ç¼å·ï¼</div> |
| | | <div class="preview-value">{{ previewData.templetno || "-" }}</div> |
| | | </div> |
| | | <div class="preview-item"> |
| | | <div class="preview-label">模æ¿åç§°ï¼</div> |
| | | <div class="preview-value">{{ previewData.templetname }}</div> |
| | | <div class="preview-value">{{ previewData.templetname || "-" }}</div> |
| | | </div> |
| | | <div class="preview-item"> |
| | | <div class="preview-label">çä¿¡ç¾åï¼</div> |
| | | <div class="preview-value">{{ previewData.signature }}</div> |
| | | <div class="preview-label">é¨é¨åç§°ï¼</div> |
| | | <div class="preview-value">{{ previewData.deptName || "-" }}</div> |
| | | </div> |
| | | <div class="preview-item"> |
| | | <div class="preview-label">模æ¿ç±»åï¼</div> |
| | | <div class="preview-value"> |
| | | <dict-tag :options="typeOptions" :value="previewData.templettype" /> |
| | | </div> |
| | | <div class="preview-label">ç
åºåç§°ï¼</div> |
| | | <div class="preview-value">{{ previewData.wardName || "-" }}</div> |
| | | </div> |
| | | <div class="preview-item"> |
| | | <div class="preview-label">å¯ç¨ç¶æï¼</div> |
| | | <div class="preview-value"> |
| | | <dict-tag :options="statusOptions" :value="previewData.isenable" /> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-divider></el-divider> |
| | | <div class="preview-content"> |
| | | <div class="preview-content-label">çä¿¡å
容é¢è§ï¼</div> |
| | | <div class="preview-content-box"> |
| | | {{ previewData.templetcontent || 'ææ å
容' }} |
| | | {{ previewData.templetcontent || "ææ å
容" }} |
| | | </div> |
| | | </div> |
| | | <div class="preview-item" v-if="previewData.remark"> |
| | | <div class="preview-label">夿³¨ï¼</div> |
| | | <div class="preview-value">{{ previewData.remark }}</div> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æ·»å ç±»å«å¼¹æ¡ --> |
| | | <el-dialog title="ç±»å«ç¼è¾" width="30%" :visible.sync="dialogFormVisible"> |
| | | <div style="text-align: center; margin-bottom: 20px"> |
| | | <el-radio-group v-model="radio"> |
| | | <el-radio-button label="主åç±»"></el-radio-button> |
| | | <el-radio-button label="ååç±»"></el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form :model="classifyform"> |
| | | <el-form-item label="è¯·éæ©æ¨¡æ¿å¤§ç±»" v-if="radio == 'ååç±»'"> |
| | | <el-select v-model="classifyform.pid" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in deptOptions" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="请è¾å
¥ç±»å«åç§°"> |
| | | <el-input v-model="classifyform.name" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="getDeptTree()">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitsidecolumn">ç¡® å®</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | previewVisible: false, |
| | | // é¢è§æ°æ® |
| | | previewData: {}, |
| | | // ç±»å«å¼¹æ¡ |
| | | dialogFormVisible: false, |
| | | // ç±»å«form |
| | | classifyform: {}, |
| | | // 主/ååç±» |
| | | radio: "主åç±»", |
| | | // ç±»å«æç´¢ |
| | | sidecolumnval: "", |
| | | // æ æ°æ® |
| | | deptOptions: [], |
| | | // åç±»ä¸æé项 |
| | | categoryOptions: [], |
| | | // æ props |
| | | defaultProps: { |
| | | children: "children", |
| | | label: "name", |
| | | }, |
| | | // ç¶æé项 |
| | | statusOptions: [ |
| | | { label: "å¯ç¨", value: "0" }, |
| | | { label: "åç¨", value: "1" }, |
| | | ], |
| | | // ç±»åé项 |
| | | typeOptions: [ |
| | | { label: "éªè¯ç ", value: "0" }, |
| | | { label: "éç¥", value: "1" }, |
| | | { label: "è¥é", value: "2" }, |
| | | { label: "é访", value: "3" }, |
| | | ], |
| | | // ç§å®¤é项 |
| | | departmentOptions: [], |
| | | // ç
åºé项 |
| | | wardOptions: [], |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | |
| | | templetcontent: [ |
| | | { required: true, message: "请è¾å
¥æ¨¡æ¿å
容", trigger: "blur" }, |
| | | ], |
| | | signature: [ |
| | | { required: true, message: "请è¾å
¥çä¿¡ç¾å", trigger: "blur" }, |
| | | ], |
| | | isenable: [ |
| | | { required: true, message: "è¯·éæ©å¯ç¨ç¶æ", trigger: "change" }, |
| | | ], |
| | | }, |
| | | }; |
| | | }, |
| | | watch: { |
| | | // çå¬ç±»å«æç´¢ |
| | | sidecolumnval(val) { |
| | | this.$refs.tree.filter(val); |
| | | computed: { |
| | | // ä» store getters è·åç§å®¤é项 |
| | | computedDepartmentOptions() { |
| | | if (this.$store.getters.belongDepts) { |
| | | return this.$store.getters.belongDepts.map((dept) => ({ |
| | | label: dept.deptName, |
| | | value: dept.deptCode, |
| | | })); |
| | | } |
| | | return []; |
| | | }, |
| | | // ä» store getters è·åç
åºé项 |
| | | computedWardOptions() { |
| | | console.log( |
| | | this.$store.getters.belongWards, |
| | | "this.$store.getters.belongWards" |
| | | ); |
| | | |
| | | if (this.$store.getters.belongWards) { |
| | | return this.$store.getters.belongWards.map((ward) => ({ |
| | | label: ward.districtName, |
| | | value: ward.districtCode, |
| | | })); |
| | | } |
| | | return []; |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.getDeptTree(); |
| | | this.departmentOptions = this.computedDepartmentOptions; |
| | | this.wardOptions = this.computedWardOptions; |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢å表 */ |
| | |
| | | handleAdd() { |
| | | this.dialogTitle = "æ°å¢ç信模æ¿"; |
| | | this.dialogVisible = true; |
| | | this.form = { |
| | | isenable: "0", |
| | | templettype: "1", |
| | | }; |
| | | // å¦æææ éä¸åç±»ï¼é»è®¤å¸¦å
¥ |
| | | if (this.queryParams.categoryid) { |
| | | this.form.categoryid = this.queryParams.categoryid; |
| | | } |
| | | this.form = {}; |
| | | this.$nextTick(() => { |
| | | if (this.$refs.formRef) { |
| | | this.$refs.formRef.clearValidate(); |
| | |
| | | getSmstemplet(templetid).then((response) => { |
| | | this.previewData = response.data; |
| | | }); |
| | | }, |
| | | |
| | | /** ç§å®¤éæ©åå - èªå¨å¡«å
ç§å®¤åç§° */ |
| | | handleDeptChange(value) { |
| | | const selectedDept = this.departmentOptions.find( |
| | | (dept) => dept.value === value |
| | | ); |
| | | if (selectedDept) { |
| | | this.form.deptName = selectedDept.label; |
| | | } else { |
| | | this.form.deptName = ""; |
| | | } |
| | | }, |
| | | |
| | | /** ç
åºéæ©åå - èªå¨å¡«å
ç
åºåç§° */ |
| | | handleWardChange(value) { |
| | | const selectedWard = this.wardOptions.find( |
| | | (ward) => ward.value === value |
| | | ); |
| | | if (selectedWard) { |
| | | this.form.wardName = selectedWard.label; |
| | | } else { |
| | | this.form.wardName = ""; |
| | | } |
| | | }, |
| | | |
| | | /** æäº¤è¡¨å */ |
| | |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | |
| | | // 表åéç½® |
| | | reset() { |
| | | this.form = { |
| | | templetid: undefined, |
| | | templetname: undefined, |
| | | signature: undefined, |
| | | templetcontent: undefined, |
| | | templettype: "1", |
| | | isenable: "0", |
| | | categoryid: undefined, |
| | | remark: undefined, |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | |
| | | /** æ¥è¯¢åç±»æ */ |
| | | getDeptTree() { |
| | | // 模æåç±»æ æ°æ® - å®é
项ç®ä¸åºæ¿æ¢ä¸ºçå®API |
| | | this.deptOptions = [ |
| | | { |
| | | id: 1, |
| | | name: "é访çä¿¡", |
| | | children: [ |
| | | { id: 11, name: "åºé¢é访" }, |
| | | { id: 12, name: "å¤è¯æé" }, |
| | | { id: 13, name: "å¥åº·å®£æ" }, |
| | | ], |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: "éç¥çä¿¡", |
| | | children: [ |
| | | { id: 21, name: "é¢çº¦éç¥" }, |
| | | { id: 22, name: "æ¥åéç¥" }, |
| | | ], |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: "éªè¯ç ", |
| | | children: [ |
| | | { id: 31, name: "ç»å½éªè¯" }, |
| | | { id: 32, name: "注åéªè¯" }, |
| | | ], |
| | | }, |
| | | ]; |
| | | this.categoryOptions = this.flattenTree(this.deptOptions); |
| | | }, |
| | | |
| | | /** æå¹³åæ æ°æ®ç¨äºä¸æéæ© */ |
| | | flattenTree(tree) { |
| | | let result = []; |
| | | tree.forEach((item) => { |
| | | result.push({ id: item.id, name: item.name }); |
| | | if (item.children && item.children.length) { |
| | | result = result.concat(item.children); |
| | | } |
| | | }); |
| | | return result; |
| | | }, |
| | | |
| | | /** çéèç¹ */ |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.name.indexOf(value) !== -1; |
| | | }, |
| | | |
| | | /** ç¹å»æ èç¹ */ |
| | | handleNodeClick(data) { |
| | | if (data.children && data.children.length) return; |
| | | this.queryParams.categoryid = data.id; |
| | | this.getList(); |
| | | }, |
| | | |
| | | // åç±»æ ----------------------- |
| | | /** æ°å»ºåç±» */ |
| | | Newcategory() { |
| | | this.classifyform = {}; |
| | | this.radio = "主åç±»"; |
| | | this.dialogFormVisible = true; |
| | | }, |
| | | |
| | | /** ä¿®æ¹åç±» */ |
| | | altertag(node, data) { |
| | | this.dialogFormVisible = true; |
| | | if (data.children && data.children.length) { |
| | | this.radio = "主åç±»"; |
| | | } else { |
| | | this.radio = "ååç±»"; |
| | | } |
| | | this.classifyform = { ...data }; |
| | | }, |
| | | |
| | | /** æäº¤åç±» */ |
| | | submitsidecolumn() { |
| | | if (this.classifyform.id) { |
| | | // ä¿®æ¹åç±» - å®é
项ç®ä¸åºæ¿æ¢ä¸ºçå®API |
| | | const index = this.deptOptions.findIndex( |
| | | (obj) => obj.id === this.classifyform.id |
| | | ); |
| | | if (index > -1) { |
| | | this.deptOptions[index].name = this.classifyform.name; |
| | | this.$set(this.deptOptions, index, this.deptOptions[index]); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | this.dialogFormVisible = false; |
| | | return; |
| | | } |
| | | |
| | | if (this.radio === "主åç±»" && this.classifyform.name) { |
| | | // æ°å¢ä¸»åç±» |
| | | const newId = Math.max(...this.deptOptions.map((d) => d.id), 0) + 1; |
| | | this.deptOptions.push({ |
| | | id: newId, |
| | | name: this.classifyform.name, |
| | | children: [], |
| | | }); |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | this.dialogFormVisible = false; |
| | | } else if ( |
| | | this.radio === "ååç±»" && |
| | | this.classifyform.pid && |
| | | this.classifyform.name |
| | | ) { |
| | | // æ°å¢ååç±» |
| | | const parent = this.deptOptions.find( |
| | | (obj) => obj.id === this.classifyform.pid |
| | | ); |
| | | if (parent) { |
| | | const newChildId = |
| | | Math.max(...parent.children.map((c) => c.id), parent.id * 10) + 1; |
| | | parent.children.push({ |
| | | id: newChildId, |
| | | name: this.classifyform.name, |
| | | }); |
| | | } |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | this.dialogFormVisible = false; |
| | | } else { |
| | | this.$modal.msgError("请填å宿´ä¿¡æ¯"); |
| | | } |
| | | this.classifyform = {}; |
| | | }, |
| | | |
| | | /** å é¤åç±» */ |
| | | remove(node, data) { |
| | | if (data.children && data.children.length) { |
| | | this.$modal |
| | | .confirm( |
| | | 'æ¯å¦ç¡®è®¤å é¤ä¸çº§åç±»"' + data.name + '"ï¼å é¤åå
¶ä¸åç±»å°æ æ³ä½¿ç¨' |
| | | ) |
| | | .then(() => { |
| | | const index = this.deptOptions.findIndex( |
| | | (obj) => obj.id === data.id |
| | | ); |
| | | if (index > -1) { |
| | | this.deptOptions.splice(index, 1); |
| | | } |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } else { |
| | | this.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤å类项为"' + data.name + '"çæ°æ®é¡¹ï¼') |
| | | .then(() => { |
| | | this.deptOptions.forEach((parent) => { |
| | | const idx = parent.children.findIndex( |
| | | (child) => child.id === data.id |
| | | ); |
| | | if (idx > -1) { |
| | | parent.children.splice(idx, 1); |
| | | } |
| | | }); |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .smsConfig-management { |
| | | display: flex; |
| | | padding: 20px; |
| | | } |
| | | |
| | | .sidecolumn { |
| | | width: 380px; |
| | | min-height: 100vh; |
| | | text-align: center; |
| | | margin-top: 20px; |
| | | margin: 20px; |
| | | .main-content { |
| | | padding: 30px; |
| | | background: #fff; |
| | | 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); |
| | | |
| | | .sidecolumn-top { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .top-wj { |
| | | font-size: 20px; |
| | | } |
| | | .top-tj { |
| | | font-size: 18px; |
| | | color: rgb(0, 89, 255); |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | /* æ ¸å¿ï¼è®¾ç½®åºå®å®½åº¦ï¼è¶
åºé¨åæ¾ç¤ºçç¥å· */ |
| | | .tree-node-label { |
| | | display: inline-block; |
| | | max-width: 160px; |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | vertical-align: bottom; |
| | | } |
| | | |
| | | /* å¯éï¼é¼ æ æ¬åæ¶åæ¶éå¶ï¼æ¾ç¤ºå
¨æ */ |
| | | .custom-tree-node:hover .tree-node-label { |
| | | max-width: none; |
| | | white-space: normal; |
| | | overflow: visible; |
| | | } |
| | | |
| | | .center-ss { |
| | | margin-top: 30px; |
| | | .input-with-select { |
| | | height: 40px !important; |
| | | } |
| | | } |
| | | |
| | | .bottom-fl { |
| | | margin-top: 30px; |
| | | display: center !important; |
| | | } |
| | | } |
| | | |
| | | .leftvlue { |
| | | width: 80%; |
| | | margin-top: 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; |
| | | } |
| | | } |
| | | |
| | | // é¢è§å¼¹æ¡æ ·å¼ |
| | |
| | | } |
| | | } |
| | | |
| | | // æ·±åº¦éæ©å¨ |
| | | ::v-deep .el-input--medium .el-input__inner { |
| | | height: 40px !important; |
| | | } |
| | | |
| | | ::v-deep .el-tree-node__content { |
| | | display: -webkit-box; |
| | | display: -ms-flexbox; |
| | | display: flex; |
| | | -webkit-box-align: center; |
| | | -ms-flex-align: center; |
| | | align-items: center; |
| | | height: 46px; |
| | | font-size: 20px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | ::v-deep .el-tree { |
| | | position: relative; |
| | | cursor: default; |
| | | border-radius: 5px; |
| | | background: #eff8fe; |
| | | color: #606266; |
| | | border: 1px solid #bbe1fa; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | } |
| | | |
| | | ::v-deep |
| | | .el-tree--highlight-current |
| | | .el-tree-node.is-current |
| | | > .el-tree-node__content { |
| | | background-color: #7799fb; |
| | | color: #fff; |
| | | } |
| | | |
| | | ::v-deep .el-button--mini.is-circle { |
| | | padding: 7px; |
| | | margin: 0; |
| | | color: red; |
| | | } |
| | | |
| | | // æé®æåé¢è² |
| | |
| | | } |
| | | |
| | | .questionnaire-title { |
| | | color: #175997; |
| | | color: #0d3b6b; // åºç¡æ·±èè² |
| | | font-size: 28px; |
| | | font-weight: 700; |
| | | margin-bottom: 15px; |
| | | line-height: 1.3; |
| | | text-shadow: 0 1px 3px rgba(255, 255, 255, 0.4); |
| | | |
| | | // é对å¤é´æ¨¡å¼çä¼å |
| | | @media (prefers-color-scheme: dark) { |
| | | color: #4a90d9; // å¤é´æ¨¡å¼ä½¿ç¨æ´äº®çèè² |
| | | text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); |
| | | } |
| | | } |
| | | |
| | | .questionnaire-description { |
| | |
| | | } |
| | | |
| | | .question-options { |
| | | margin: 15px 0; |
| | | margin: 12px 0; |
| | | padding: 0 4px; |
| | | } |
| | | |
| | | // ä¿®æ¹ options-group çæ ·å¼ |
| | | .options-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | display: grid; |
| | | grid-template-columns: repeat(2, 1fr); // æ¹ä¸ºä¸¤åç½æ ¼ |
| | | gap: 10px; |
| | | width: 100%; |
| | | } |
| | | // é对å¤éç checkbox-group ä¹åºç¨åæ ·çç½æ ¼å¸å± |
| | | :deep(.el-checkbox-group) { |
| | | display: grid; |
| | | grid-template-columns: repeat(2, 1fr); |
| | | gap: 10px; |
| | | width: 100%; |
| | | |
| | | @media (max-width: 420px) { |
| | | grid-template-columns: 1fr; |
| | | } |
| | | } |
| | | // ä¿®æ¹éé¡¹çæ ·å¼ |
| | | .option-radio, |
| | | .option-checkbox { |
| | | margin: 0; |
| | | padding: 12px 15px; |
| | | padding: 10px 12px; |
| | | border-radius: 6px; |
| | | border: 1px solid #e0e0e0; |
| | | transition: all 0.2s; |
| | | display: flex; |
| | | align-items: center; |
| | | width: 100%; |
| | | box-sizing: border-box; |
| | | |
| | | &:hover { |
| | | border-color: #c0c4cc; |
| | | background-color: #f8fafc; |
| | | } |
| | | |
| | | // ç¡®ä¿å
é¨å
容èªéåº |
| | | :deep(.el-radio__label), |
| | | :deep(.el-checkbox__label) { |
| | | display: inline; |
| | | font-size: 15px; |
| | | line-height: 1.4; |
| | | word-break: break-all; // å
许å¨ä»»æåç¬¦å¤æ¢è¡ |
| | | white-space: normal; // å
许èªå¨æ¢è¡ |
| | | padding-left: 6px; |
| | | } |
| | | |
| | | // ç¡®ä¿ radio/checkbox 徿 ä¸å缩 |
| | | :deep(.el-radio__input), |
| | | :deep(.el-checkbox__input) { |
| | | flex-shrink: 0; |
| | | } |
| | | } |
| | | |
| | | :deep(.option-radio .el-radio__label), |
| | | :deep(.option-checkbox .el-checkbox__label) { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 16px; |
| | | } |
| | | // :deep(.option-radio .el-radio__label), |
| | | // :deep(.option-checkbox .el-checkbox__label) { |
| | | // display: flex; |
| | | // align-items: center; |
| | | // font-size: 16px; |
| | | // } |
| | | |
| | | .option-text { |
| | | margin-right: 5px; |
| | | word-break: break-all; |
| | | white-space: normal; |
| | | line-height: 1.4; |
| | | } |
| | | |
| | | // å¨å°å±å¹ä¸è°æ´ä¸ºåå |
| | | @media (max-width: 300px) { |
| | | .options-group { |
| | | grid-template-columns: 1fr; // è¶
å°å±å¹æ¢å¤åå |
| | | } |
| | | } |
| | | .abnormal-indicator { |
| | | color: #f56c6c; |
| | | font-weight: bold; |
| | |
| | | import store from "@/store"; |
| | | |
| | | export default { |
| | | name: "questionnaire", |
| | | name: "Intention", |
| | | dicts: ["sys_normal_disable", "sys_user_sex"], |
| | | components: { Treeselect, Regular }, |
| | | data() { |
| | |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | export default { |
| | | name: "questionnaire", |
| | | name: "Verbaltrick", |
| | | components: { Treeselect }, |
| | | data() { |
| | | return { |
| | |
| | | :rules="rules" |
| | | label-width="100px" |
| | | > |
| | | <el-row :gutter="20"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é®é¢ä¸»æ¨" prop="scriptTopic"> |
| | | <el-input |
| | |
| | | </el-col> |
| | | </el-row> |
| | | <el-form-item label="é®é¢ææ¬" prop="scriptContent"> |
| | | <el-input |
| | | :rows="2" |
| | | type="textarea" |
| | | id="scriptContent" |
| | | show-word-limit |
| | | placeholder="请è¾å
¥å
容" |
| | | v-model.sync="indexform.scriptContent" |
| | | @focus="handleInput('scriptContent')" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="é®é¢æè¿°" prop="scriptDesc"> |
| | | <el-input |
| | | :rows="1" |
| | | type="textarea" |
| | | id="scriptDesc" |
| | | show-word-limit |
| | | placeholder="请è¾å
¥æè¿°å
容" |
| | | v-model.sync="indexform.scriptDesc" |
| | | /> |
| | | </el-form-item> |
| | | <el-input |
| | | :rows="2" |
| | | type="textarea" |
| | | id="scriptContent" |
| | | show-word-limit |
| | | placeholder="请è¾å
¥å
容" |
| | | v-model.sync="indexform.scriptContent" |
| | | @focus="handleInput('scriptContent')" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="é®é¢æè¿°" prop="scriptDesc"> |
| | | <el-input |
| | | :rows="1" |
| | | type="textarea" |
| | | id="scriptDesc" |
| | | show-word-limit |
| | | placeholder="请è¾å
¥æè¿°å
容" |
| | | v-model.sync="indexform.scriptDesc" |
| | | /> |
| | | </el-form-item> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯è¨" prop="deptId"> |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¯ç¨ç¶æ" prop="status"> |
| | | <el-select |
| | | <!-- <el-select |
| | | v-model="indexform.isAvailable" |
| | | placeholder="è¯·éæ©ç¶æ" |
| | | > |
| | |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-select> --> |
| | | <el-radio-group v-model="indexform.isAvailable"> |
| | | <el-radio |
| | | @change="$forceUpdate()" |
| | | v-for="(item, index) in usable" |
| | | :label="item.value" |
| | | >{{ item.label }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | ivrLibaScriptTargetoptionList: [], |
| | | ivrLibaScriptTagList: [], |
| | | suitway: "2", |
| | | noMatchText:'æ±æï¼ææ²¡æå¬æï¼æ¨è½å说ä¸éå?', |
| | | noClearlyText:'æ±æï¼ææ²¡æå¬æ¸
æ¨è¯´çè¯ï¼æ¨å¯ä»¥åè¯´ä¸æ¬¡å?', |
| | | slienceText:'æ±æï¼ææ²¡æå¬å°æ¨è¯´çè¯ï¼æ¨å¯ä»¥åè¯´ä¸æ¬¡å?', |
| | | isAvailable: "0", |
| | | noMatchText: "æ±æï¼ææ²¡æå¬æï¼æ¨è½å说ä¸éå?", |
| | | noClearlyText: "æ±æï¼ææ²¡æå¬æ¸
æ¨è¯´çè¯ï¼æ¨å¯ä»¥åè¯´ä¸æ¬¡å?", |
| | | slienceText: "æ±æï¼ææ²¡æå¬å°æ¨è¯´çè¯ï¼æ¨å¯ä»¥åè¯´ä¸æ¬¡å?", |
| | | }, |
| | | mode: [], |
| | | questionclass: [], |
| | |
| | | getverbaltrick() { |
| | | let id = this.$route.query.id; |
| | | this.indexform.language = "æ®éè¯"; |
| | | this.indexform.isAvailable = "1"; |
| | | this.indexform.isAvailable = "0"; |
| | | |
| | | if (id) { |
| | | getverbaltrick({ id: id }).then((res) => { |
| | |
| | | // æ |
| | | getbaltrickclassify({}).then((res) => { |
| | | this.questionclass = res.rows; |
| | | if (this.$route.query.assortid) { |
| | | if (this.$route.query.assortid) { |
| | | this.indexform.assortid = Number(this.$route.query.assortid); |
| | | } |
| | | }); |
| | |
| | | width="120" |
| | | key="successRate" |
| | | prop="successRate" |
| | | :render-header="Tooltipcgl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | |
| | | width="120" |
| | | key="followUpRate" |
| | | prop="followUpRate" |
| | | :render-header="Tooltipsfl" |
| | | /> |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | |
| | | width="120" |
| | | key="rate" |
| | | prop="rate" |
| | | :render-header="Tooltipjsl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | |
| | | width="120" |
| | | key="successRate" |
| | | prop="successRate" |
| | | :render-header="Tooltipcgl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | |
| | | width="120" |
| | | key="followUpRate" |
| | | prop="followUpRate" |
| | | :render-header="Tooltipsfl" |
| | | /> |
| | | <el-table-column |
| | | v-if="orgname != '丽水å¸ä¸å»é¢'" |
| | |
| | | width="120" |
| | | key="rate" |
| | | prop="rate" |
| | | :render-header="Tooltipjsl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | |
| | | return indexA - indexB; |
| | | }); |
| | | }, |
| | | |
| | | Tooltipcgl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "é访æå/(éé访-å¾
é访)", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | Tooltipjsl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "(åºé访æ¶é´+ä»»å¡å¨æ)å°äºå®ææ¶é´å³ä¸ºè¶
æ¶;(éé访-è¶
æ¶)/éé访", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | Tooltipsfl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "(é访æå+馿¬¡é访失败)/馿¬¡åºé访", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | sortChineseNumber(aRow, bRow) { |
| | | const a = aRow.leavehospitaldistrictname; |
| | | const b = bRow.leavehospitaldistrictname; |
| | |
| | | }, |
| | | // ä¸»è¡¨å¯¼åº |
| | | async exportTable() { |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "馿¬¡åºé¢é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "馿¬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | |
| | | if ( |
| | | this.queryParams.serviceType && |
| | | Array.isArray(this.queryParams.serviceType) && |
| | | this.queryParams.serviceType.length > 0 |
| | | ) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter((task) => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = `馿¬¡${label}`; |
| | | sheetTypeName = `馿¬¡${label}`; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map((task) => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = `馿¬¡${typeNames.join("/")}`; |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | } |
| | | } |
| | | |
| | | const excelName = `${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, " "); |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "馿¬¡åºé¢é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "馿¬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | |
| | | if (this.queryParams.serviceType && Array.isArray(this.queryParams.serviceType) && this.queryParams.serviceType.length > 0) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter(task => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | const worksheetName = cleanSheetName( |
| | | `${sheetTypeName}ç»è®¡_${sheetNameSuffix}` |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = `馿¬¡${label}`; |
| | | sheetTypeName = `馿¬¡${label}`; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map(task => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = `馿¬¡${typeNames.join("/")}`; |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `馿¬¡${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ ${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = `馿¬¡${typeStr}`; |
| | | sheetTypeName = "馿¬¡é访"; |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | const excelName = `${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, ' '); |
| | | }; |
| | | |
| | | const worksheetName = cleanSheetName(`${sheetTypeName}ç»è®¡_${sheetNameSuffix}`); |
| | | |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ ${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | }, |
| | | }, |
| | | // åè¡¨å¯¼åº |
| | | /** 导åºå»çå表 */ |
| | | async exportDoctorTable(row) { |
| | |
| | | width="120" |
| | | key="successRateAgain" |
| | | prop="successRateAgain" |
| | | :render-header="Tooltipcgl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | |
| | | width="120" |
| | | key="followUpRateAgain" |
| | | prop="followUpRateAgain" |
| | | :render-header="Tooltipsfl" |
| | | /> |
| | | <el-table-column |
| | | label="人工" |
| | |
| | | width="120" |
| | | key="successRateAgain" |
| | | prop="successRateAgain" |
| | | :render-header="Tooltipcgl" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span class="success-rate">{{ |
| | |
| | | width="120" |
| | | key="followUpRateAgain" |
| | | prop="followUpRateAgain" |
| | | :render-header="Tooltipsfl" |
| | | /> |
| | | <el-table-column |
| | | label="人工" |
| | |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | Tooltipcgl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "é访æå/(éé访-å¾
é访)", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | Tooltipjsl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "(åºé访æ¶é´+ä»»å¡å¨æ)å°äºå®ææ¶é´å³ä¸ºè¶
æ¶;(éé访-è¶
æ¶)/éé访", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | Tooltipsfl(h, { column }) { |
| | | return h( |
| | | "el-tooltip", |
| | | { |
| | | props: { |
| | | content: "(é访æå+馿¬¡é访失败)/馿¬¡åºé访", |
| | | placement: "top", |
| | | effect: "dark", |
| | | }, |
| | | }, |
| | | [h("span", column.label)] |
| | | ); |
| | | }, |
| | | getAllWardCodes() { |
| | | return this.flatArrayhospit |
| | | .filter((item) => item.value !== "all") |
| | |
| | | return rate.toFixed(2) + "%"; |
| | | }, |
| | | async exportTable() { |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | try { |
| | | let dateRangeString = ""; |
| | | let sheetNameSuffix = ""; |
| | | |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | // 夿æ¯å¦æ¯ä¸½æ°´å¸ä¸å»é¢ |
| | | const isLishuiHospital = this.orgname == "丽水å¸ä¸å»é¢"; |
| | | |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | if ( |
| | | this.queryParams.dateRange && |
| | | this.queryParams.dateRange.length === 2 |
| | | ) { |
| | | const startDateStr = this.queryParams.dateRange[0]; |
| | | const endDateStr = this.queryParams.dateRange[1]; |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼åªæ¾ç¤ºå¹´æ |
| | | const formatMonthOnly = (dateTimeStr) => { |
| | | const date = new Date(dateTimeStr); |
| | | const year = date.getFullYear(); |
| | | const month = date.getMonth() + 1; |
| | | return `${year}å¹´${month}æ`; |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "åºé¢é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "忬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | console.log(this.queryParams.serviceType); |
| | | |
| | | if ( |
| | | this.queryParams.serviceType && |
| | | Array.isArray(this.queryParams.serviceType) && |
| | | this.queryParams.serviceType.length > 0 |
| | | ) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter((task) => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = label; |
| | | sheetTypeName = label; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map((task) => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = typeNames.join("/"); |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | } |
| | | } |
| | | |
| | | const excelName = `忬¡${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, " "); |
| | | }; |
| | | const startDateFormatted = formatMonthOnly(startDateStr); |
| | | const endDateFormatted = formatMonthOnly(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºå¹´ææ¥ |
| | | const formatDateForDisplay = (dateTimeStr) => { |
| | | return dateTimeStr.split(" ")[0]; |
| | | }; |
| | | const startDateFormatted = formatDateForDisplay(startDateStr); |
| | | const endDateFormatted = formatDateForDisplay(endDateStr); |
| | | dateRangeString = `${startDateFormatted}è³${endDateFormatted}`; |
| | | sheetNameSuffix = `${startDateFormatted}è³${endDateFormatted}`; |
| | | } |
| | | } else { |
| | | const now = new Date(); |
| | | const currentMonth = now.getMonth() + 1; |
| | | const currentYear = now.getFullYear(); |
| | | |
| | | if (isLishuiHospital) { |
| | | // 丽水å¸ä¸å»é¢ï¼æ¾ç¤ºå¹´æ |
| | | dateRangeString = `${currentYear}å¹´${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentYear}å¹´${currentMonth}æ`; |
| | | } else { |
| | | // å
¶ä»å»é¢ï¼æ¾ç¤ºæä»½ |
| | | dateRangeString = `${currentMonth}æ`; |
| | | sheetNameSuffix = `${currentMonth}æ`; |
| | | } |
| | | } |
| | | |
| | | // æ ¹æ® serviceType çæé访类ååç§° |
| | | let serviceTypeName = "åºé¢é访"; // æä»¶å使ç¨çåç§° |
| | | let sheetTypeName = "忬¡é访"; // å·¥ä½è¡¨ä½¿ç¨çåç§°ï¼ç®åçï¼ |
| | | console.log(this.queryParams.serviceType); |
| | | |
| | | if ( |
| | | this.queryParams.serviceType && |
| | | Array.isArray(this.queryParams.serviceType) && |
| | | this.queryParams.serviceType.length > 0 |
| | | ) { |
| | | if (this.tasktypes && Array.isArray(this.tasktypes)) { |
| | | // è¿æ»¤åºå¹é
çé访类å |
| | | const matchedTypes = this.tasktypes.filter((task) => |
| | | this.queryParams.serviceType.includes(task.value) |
| | | const worksheetName = cleanSheetName( |
| | | `忬¡${sheetTypeName}ç»è®¡_${sheetNameSuffix}` |
| | | ); |
| | | |
| | | if (matchedTypes.length === 1) { |
| | | // å个类å |
| | | const label = matchedTypes[0].label; |
| | | serviceTypeName = label; |
| | | sheetTypeName = label; |
| | | } else if (matchedTypes.length > 1) { |
| | | // å¤ä¸ªç±»å |
| | | const typeNames = matchedTypes.map((task) => task.label); |
| | | |
| | | // æä»¶åï¼ç¨ææ åé |
| | | serviceTypeName = typeNames.join("/"); |
| | | |
| | | // å·¥ä½è¡¨åï¼ä½¿ç¨ç¬¬ä¸ä¸ªç±»åæç®ååç§° |
| | | if (matchedTypes.length <= 2) { |
| | | // å¦æåªæ2个类åï¼é½æ¾ç¤º |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } else { |
| | | // 妿è¶
è¿2个类åï¼åªæ¾ç¤ºç¬¬ä¸ä¸ª |
| | | sheetTypeName = `${typeNames[0]}ç`; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æå¹é
çï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ åæ¬¡${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | } else if (this.queryParams.serviceType.length > 0) { |
| | | // å¦ææ²¡æ tasktypesï¼ä½¿ç¨åå§å¼ |
| | | const typeStr = this.queryParams.serviceType.join("/"); |
| | | serviceTypeName = typeStr; |
| | | sheetTypeName = "忬¡é访"; |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | const excelName = `忬¡${serviceTypeName}ç»è®¡è¡¨_${dateRangeString}.xlsx`; |
| | | |
| | | // æ¸
çå·¥ä½è¡¨åç§°ï¼ç§»é¤éæ³å符 |
| | | const cleanSheetName = (name) => { |
| | | // Excelå·¥ä½è¡¨åä¸è½å
å«çå符: * ? : \ / [ ] |
| | | return name.replace(/[*?:\\/[\]]/g, ' '); |
| | | }; |
| | | |
| | | const worksheetName = cleanSheetName(`忬¡${sheetTypeName}ç»è®¡_${sheetNameSuffix}`); |
| | | |
| | | if (!this.tableData || this.tableData.length === 0) { |
| | | this.$message.warning(`ææ åæ¬¡${serviceTypeName}æ°æ®å¯å¯¼åº`); |
| | | return false; |
| | | } |
| | | |
| | | const workbook = new ExcelJS.Workbook(); |
| | | const worksheet = workbook.addWorksheet(worksheetName); |
| | | |
| | | // æå»ºè¡¨æ ¼ |
| | | this.buildExportSheet(worksheet, sheetNameSuffix); |
| | | |
| | | const buffer = await workbook.xlsx.writeBuffer(); |
| | | const blob = new Blob([buffer], { |
| | | type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| | | }); |
| | | saveAs(blob, excelName); |
| | | |
| | | this.$message.success("å¯¼åºæå"); |
| | | return true; |
| | | } catch (error) { |
| | | console.error("导åºå¤±è´¥:", error); |
| | | this.$message.error(`导åºå¤±è´¥: ${error.message}`); |
| | | return false; |
| | | } |
| | | }, |
| | | }, |
| | | /** 导åºå»çå表ï¼å次éè®¿ï¼ */ |
| | | async exportDoctorTable(row) { |
| | | try { |
| | |
| | | // target: `http://192.168.100.10:8094`,//çç«åå¾· |
| | | // target: `http://192.168.100.10:8095`,//æ°å |
| | | // target: `http://192.168.100.10:8098`,//å¸ä¸ |
| | | // target:`http://localhost:8095`, |
| | | target:`http://localhost:8095`, |
| | | // target:`http://35z1t16164.qicp.vip`, |
| | | // target: `http://192.168.100.172:8095`, |
| | | target: `http://192.168.100.10:8089`,//åå |
| | | // target: `http://192.168.100.10:8089`,//åå |
| | | // target: `http://192.168.191.181:8095`, |
| | | changeOrigin: true, |
| | | pathRewrite: { |