WXL
2025-06-27 d5806f320c4eb6520c1c0edfba081f00e0290a8c
测试完成
已删除1个文件
已重命名1个文件
已修改82个文件
已添加7个文件
已复制5个文件
11836 ■■■■ 文件已修改
.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.staging 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dist-wl.zip 补丁 | 查看 | 原始文档 | blame | 历史
package.json 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/EChartsdata.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/Homeimage.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/Qtemplate.js 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/external.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/indicator.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/questionnaire.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/knowledge/questionbank.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/login.js 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/patient/homepage.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/patient/record.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/user.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/styles/global.css 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/OptionalForm/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/WangEditor/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/Logo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/settings.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/getters.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/drag.js 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Intelligentcenter/centercontrol/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/complaint/complaintlist/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/complaint/complaintmy/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/SpecificDisease/index.vue 310 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/again/index.vue 833 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/index.vue 552 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/linem/index.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/outpatient/index.vue 889 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index.vue 588 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/index.vue 434 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/satisfaction/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/tasklist/index.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/technology/index.vue 376 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/zbAgain/index.vue 833 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/education/compilequer/index.vue 268 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/education/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/questionbank/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/questionbank/particulars/index.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/questionnaire/compilequer/index.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/questionnaire/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainnew.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainwt.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainwtnew.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainxj.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainxjnew.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/follow/index.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/medtechnician/Compositeeditdetails.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/medtechnician/PatientChart.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/medtechnician/SpecializedService.vue 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/ExternalPatient.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/authRole.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/behospitalized.vue 276 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/hospital.vue 286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/index.vue 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/indexls.vue 349 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/operation.vue 748 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/outpatient.vue 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/physical.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/profile/index.vue 143 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/profile/userInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/physical/index.vue 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/Missioncreation.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/Missionotice.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/QuestionnaireTask.vue 463 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/index.vue 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/particty.vue 341 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/questionnaire/index.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/shadow/index.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/subsequent/index.vue 930 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/register.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/general/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/intention/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/matching/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/configurat/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/configurat/taskub.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/verbaltrick/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sfstatistics/percentage/index.vue 503 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sfstatistics/propaganda/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sfstatistics/statement/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/shortmessage/communication/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/shortmessage/healthinformation/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/shortmessage/messagebank/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/authRole.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/profile/userInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/build/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -1,10 +1,10 @@
# é¡µé¢æ ‡é¢˜
VUE_APP_TITLE = æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°
VUE_APP_TITLE = æ™ºæ…§éšè®¿å¹³å°
# å¼€å‘环境配置
ENV = 'development'
# æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°/开发环境
# æ™¯å®äººæ°‘医院智慧随访平台/开发环境
VUE_APP_BASE_API = '/dev-api'
# è·¯ç”±æ‡’加载
.env.production
@@ -1,8 +1,8 @@
# é¡µé¢æ ‡é¢˜
VUE_APP_TITLE = æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°
VUE_APP_TITLE = æ™ºæ…§éšè®¿å¹³å°
# ç”Ÿäº§çŽ¯å¢ƒé…ç½®
ENV = 'production'
# æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°/生产环境
# æ™¯å®äººæ°‘医院智慧随访平台/生产环境
VUE_APP_BASE_API = '/prod-api'
.env.staging
@@ -1,10 +1,10 @@
# é¡µé¢æ ‡é¢˜
VUE_APP_TITLE = æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°
VUE_APP_TITLE = æ™ºæ…§éšè®¿å¹³å°
NODE_ENV = production
# æµ‹è¯•环境配置
ENV = 'staging'
# æµ™ä¸­åŒ»å¤§äºŒé™¢æ™ºæ…§éšè®¿å¹³å°/测试环境
# æ™¯å®äººæ°‘医院智慧随访平台/测试环境
VUE_APP_BASE_API = '/stage-api'
dist-wl.zip
Binary files differ
package.json
@@ -1,7 +1,7 @@
{
  "name": "ruoyi",
  "version": "3.8.5",
  "description": "浙中医大二院智慧随访平台",
  "description": "景宁人民医院智慧随访平台",
  "author": "杭新",
  "license": "MIT",
  "scripts": {
@@ -41,6 +41,8 @@
    "@riophae/vue-treeselect": "0.4.0",
    "@vue/babel-plugin-jsx": "^1.1.5",
    "@vue/composition-api": "^1.0.0-rc.6",
    "@wangeditor/editor": "^5.1.23",
    "@wangeditor/editor-for-vue": "^1.0.2",
    "axios": "0.24.0",
    "clipboard": "2.0.8",
    "codemirror": "^5.65.13",
src/api/AiCentre/EChartsdata.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
import request from "@/utils/request";
// æŸ¥è¯¢é—¨è¯Šçœ‹ç—…人次和人数
export function getEChartsPatMedOuthospCount(data) {
  return request({
    url: "/smartor/patouthosp/selectPatMedOuthospCount",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢å‡ºã€å…¥é™¢çœ‹ç—…人次和人数
export function getechartsListCountdata(data) {
  return request({
    url: "/smartor/patinhosp/selectPatMedInhospListCount",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢æ‚£è€…门诊记录列表
export function getechartsMedOuthospList(data) {
  return request({
    url: "/smartor/patouthosp/selectPatMedOuthospList",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢æ‚£è€…住院记录列表
export function getechartsMedInhospList(data) {
  return request({
    url: "/smartor/patinhosp/selectPatMedInhospList",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢å½“前登陆人自己(病区、部门)的患者住院记录列表
export function getechartsandData(data) {
  return request({
    url: "/smartor/patinhosp/selectPatMedInhospListByCondition",
    method: "post",
    data: data,
  });
}
// å„科室服务人次
export function getDeptRanking(data) {
  return request({
    url: "/smartor/patinhosp/getDeptRanking",
    method: "post",
    data: data,
  });
}
src/api/AiCentre/Homeimage.js
ÎļþÒÑɾ³ý
src/api/AiCentre/Qtemplate.js
@@ -26,109 +26,108 @@
}
// åˆ é™¤é—®å·æ¨¡æ¿
export function delQtemplateinfo(Id) {
    return request({
      url: "/smartor/svyLibTemplate/remove/" + Id,
      method: "get",
    });
  }
  return request({
    url: "/smartor/svyLibTemplate/remove/" + Id,
    method: "get",
  });
}
// æ–°å¢žæˆ–修改问卷模板详情
export function compileQtemplate(data) {
    return request({
      url: "/smartor/svyLibTemplate/saveOrUpdateTemplate",
      method: "post",
      data: data,
    });
  }
  return request({
    url: "/smartor/svyLibTemplate/saveOrUpdateTemplate",
    method: "post",
    data: data,
  });
}
  // æ–°å¢žé—®å·æ¨¡æ¿åˆ†ç±»
  export function addQtemplateclassify(data) {
    return request({
      url: "/smartor/svyLibTemplateCategory/addtree",
      method: "post",
      data: data,
    });
  }
    // æ–°å¢žé—®å·æ¨¡æ¿åˆ†ç±»
    export function editQtemplateclassify(data) {
      return request({
        url: "/smartor/svyLibTemplateCategory/edit",
        method: "post",
        data: data,
      });
    }
  // åˆ é™¤é—®å·æ¨¡æ¿åˆ†ç±»
// æ–°å¢žé—®å·æ¨¡æ¿åˆ†ç±»
export function addQtemplateclassify(data) {
  return request({
    url: "/smartor/svyLibTemplateCategory/addtree",
    method: "post",
    data: data,
  });
}
// æ–°å¢žé—®å·æ¨¡æ¿åˆ†ç±»
export function editQtemplateclassify(data) {
  return request({
    url: "/smartor/svyLibTemplateCategory/edit",
    method: "post",
    data: data,
  });
}
// åˆ é™¤é—®å·æ¨¡æ¿åˆ†ç±»
export function delQtemplateclassify(Id) {
  return request({
    url: "/smartor/svyLibTemplateCategory/remove/" + Id,
    method: "get",
  });
}
  // æŸ¥è¯¢é—®å·æ¨¡æ¿åˆ†ç±»æ ‘
  export function getQtemplateclassify(data) {
    return request({
      url: "/smartor/svyLibTemplateCategory/list",
      method: "post",
      data: data,
    });
  }
  // æŸ¥è¯¢é—®å·æ¨¡æ¿åˆ†ç±»æ ‘
  export function getQRcode(data) {
    return request({
      url: "/qrcode/getQRcode",
      method: "post",
      data: data,
    });
  }
    // æ–°å¢žä¿®æ”¹é—®å·ä»»åŠ¡
    export function Questionnairetaskdetails(data) {
      return request({
        url: "/smartor/svysingle/insertOrUpdateSvyTask",
        method: "post",
        data: data,
      });
    }
    // æŸ¥è¯¢é—®å·ä»»åŠ¡åˆ—è¡¨
    export function Questionnairetasklist(data) {
      return request({
        url: "/smartor/svytask/list",
        method: "post",
        data: data,
      });
    }
     // å‘起问卷任务
     export function Questionnairetasksponsor(data) {
      return request({
        url: "/smartor/svytask/list",
        method: "post",
        data: data,
      });
    }
    // æŸ¥è¯¢é—®å·ä»»åŠ¡è¯¦æƒ…
    export function Questionnairetaskget(data) {
      return request({
        url: "/smartor/svysingle/queryTaskByCondition",
        method: "post",
        data: data,
      });
    }
      // æŸ¥è¯¢é—®å·ä»»åŠ¡è¯¦æƒ…
      export function Questionnairetaskgetson(data) {
        return request({
          url: "/smartor/serviceSubtask/queryTaskByCondition",
          method: "post",
          data: data,
        });
      }
    // é—®å·ä»»åŠ¡æ¨¡æ¿æ–°å¢žä¿®æ”¹
   export function TaskQuestioncomit(data) {
    return request({
      url: "/smartor/svytemplateTask/saveOrUpdateTaskTemp",
      method: "post",
      data: data,
    });
  }
    // åˆ é™¤ä»»åŠ¡æ¨¡æ¿
// æŸ¥è¯¢é—®å·æ¨¡æ¿åˆ†ç±»æ ‘
export function getQtemplateclassify(data) {
  return request({
    url: "/smartor/svyLibTemplateCategory/list",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢é—®å·æ¨¡æ¿åˆ†ç±»æ ‘
export function getQRcode(data) {
  return request({
    url: "/qrcode/getQRcode",
    method: "post",
    data: data,
  });
}
// æ–°å¢žä¿®æ”¹é—®å·ä»»åŠ¡
export function Questionnairetaskdetails(data) {
  return request({
    url: "/smartor/svysingle/insertOrUpdateSvyTask",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢é—®å·ä»»åŠ¡åˆ—è¡¨
export function Questionnairetasklist(data) {
  return request({
    url: "/smartor/svytask/list",
    method: "post",
    data: data,
  });
}
// å‘起问卷任务
export function Questionnairetasksponsor(data) {
  return request({
    url: "/smartor/svytask/list",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢é—®å·ä»»åŠ¡è¯¦æƒ…
export function Questionnairetaskget(data) {
  return request({
    url: "/smartor/svysingle/queryTaskByCondition",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢é—®å·ä»»åŠ¡è¯¦æƒ…
export function Questionnairetaskgetson(data) {
  return request({
    url: "/smartor/serviceSubtask/queryTaskByCondition",
    method: "post",
    data: data,
  });
}
// é—®å·ä»»åŠ¡æ¨¡æ¿æ–°å¢žä¿®æ”¹
export function TaskQuestioncomit(data) {
  return request({
    url: "/smartor/svytemplateTask/saveOrUpdateTaskTemp",
    method: "post",
    data: data,
  });
}
// åˆ é™¤ä»»åŠ¡æ¨¡æ¿
export function deleteTaskQuestioncomit(svyid) {
  return request({
    url: "/smartor/svytemplateTask/remove/" + svyid,
@@ -136,52 +135,81 @@
  });
}
    export function getTaskQuestioncomit(svyid) {
      return request({
        url: "/smartor/svytemplateTask/" + svyid,
        method: "get",
      });
    }
 //科室病区模板关联新增
 export function depthospgetson(data) {
export function getTaskQuestioncomit(svyid) {
  return request({
    url: "/smartor/svytemplateTask/" + svyid,
    method: "get",
  });
}
//科室病区模板关联新增
export function depthospgetson(data) {
  return request({
    url: "/smartor/td/add",
    method: "post",
    data: data,
  });
}
 //科室病区模板关联查询
 export function depthospgetsonlist(data) {
//科室病区模板关联查询
export function depthospgetsonlist(data) {
  return request({
    url: "/smartor/td/list",
    method: "get",
    params: data,
  });
}
 //任务科室病区模板关联查询
 export function taskdepthospgetsonlist(data) {
//任务科室病区模板关联查询
export function taskdepthospgetsonlist(data) {
  return request({
    url: "/smartor/taskdept/list",
    method: "post",
    data: data,
  });
}
    // åˆ é™¤ç§‘室病区模板分类
    export function depthospgetsondel(id) {
      return request({
        url: "/smartor/td/remove/" + id,
        method: "get",
      });
    }
    // åˆ é™¤ä»»åŠ¡ç§‘å®¤å…³è”
    export function taskdepthospgetsondel(id) {
      return request({
        url: "/smartor/taskdept/remove/" + id,
        method: "get",
      });
    }
// åˆ é™¤ç§‘室病区模板分类
export function depthospgetsondel(id) {
  return request({
    url: "/smartor/td/remove/" + id,
    method: "get",
  });
}
// åˆ é™¤ä»»åŠ¡ç§‘å®¤å…³è”
export function taskdepthospgetsondel(id) {
  return request({
    url: "/smartor/taskdept/remove/" + id,
    method: "get",
  });
}
// åˆ é™¤ä»»åŠ¡ç–¾ç—…å…³è”
export function taskdiaghospgetsondel(id) {
  return request({
    url: `/smartor/taskdiag/remove/${id}`,
    method: "get",
  });
}
// åˆ é™¤ä»»åŠ¡æ‰‹æœ¯å…³è”
export function taskoperhospgetsondel(id) {
  return request({
    url: `/smartor/taskoper/remove/${id}`,
    method: "get",
  });
}
// èŽ·å–ä»»åŠ¡ç–¾ç—…å…³è”
export function taskdiaggetlist(data) {
  return request({
    url: "/smartor/taskdiag/list",
    method: "post",
    data: data,
  });
}
// èŽ·å–ä»»åŠ¡æ‰‹æœ¯å…³è”
export function taskopergetlist(data) {
  return request({
    url: "/smartor/taskoper/list",
    method: "post",
    data: data,
  });
}
// åŒ»æŠ¤ä¿å­˜æ•°æ®
export function serviceSubtaskDetailedit(data) {
  return request({
    url: "/smartor/serviceSubtaskDetail/editByCondition",
src/api/AiCentre/external.js
@@ -84,3 +84,20 @@
    data: data
  });
}
// èŽ·å–360系统token
export function gitzerotoken(data) {
  return request({
    url: "https://9.0.124.104:13021/mediinfo-lyra-authserver/connect/token",
    method: "post",
    data: data
  });
}
// æ–°å¢žæœåŠ¡
export function addserviceSubtask(data) {
  return request({
    url: "/smartor/serviceSubtask/addSubTaskAgain",
    method: "post",
    data: data
  });
}
src/api/AiCentre/index.js
@@ -7,5 +7,5 @@
export * from './questionnaire'
export * from './SingleTask'
export * from './external'
export * from './Homeimage'
export * from './patientexternal'
export * from './EChartsdata'
src/api/AiCentre/indicator.js
@@ -47,6 +47,14 @@
    data: data,
  });
}
// æŒ‡æ ‡ç»Ÿè®¡
export function Labelstatistics(Id) {
   return request({
    url: "/smartor/serviceSubtaskDetail/countPatByTarget/" + Id,
    method: "get",
   });
   }
// åˆ é™¤æŒ‡æ ‡
export function deletetarget(userId) {
  return request({
@@ -69,6 +77,14 @@
    method: "get",
  });
}
// æŸ¥è¯¢æ‰‹æœ¯
export function getbaseopera(data) {
  return request({
    url: "/smartor/baseopera/list",
    method: "post",
    data: data,
  });
}
// æŸ¥è¯¢æŒ‡æ ‡ç–¾ç—…
export function getillness(data) {
  return request({
src/api/AiCentre/questionnaire.js
@@ -63,3 +63,11 @@
      data: data,
    });
  }
   // æŸ¥è¯¢é—®å·é—®é¢˜åˆ†ç±»æ ‘
   export function query360PatInfo(data) {
    return request({
      url: "/smartor/serviceExternal/query360PatInfo",
      method: "post",
      data: data,
    });
  }
src/api/knowledge/questionbank.js
@@ -1,11 +1,11 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";//处理字符串,und,null转换为'';
// æŸ¥è¯¢é¢˜åº“列表
//
export function listpatient(query) {
  return request({
    url: '/smartor/patarchive/list',
    method: 'get',
    params: query
  })
};
};
src/api/login.js
@@ -1,60 +1,59 @@
import request from '@/utils/request'
import request from "@/utils/request";
// ç™»å½•方法
export function login(username, password, code, uuid,orgid) {
export function login(username, password, code, orgid) {
  const data = {
    username,
    password,
    code,
    uuid,
    orgid,
  }
  };
  return request({
    url: '/login',
    url: "/login",
    headers: {
      isToken: false
      isToken: false,
    },
    method: 'post',
    data: data
  })
    method: "post",
    data: data,
  });
}
// æ³¨å†Œæ–¹æ³•
export function register(data) {
  return request({
    url: '/register',
    url: "/register",
    headers: {
      isToken: false
      isToken: false,
    },
    method: 'post',
    data: data
  })
    method: "post",
    data: data,
  });
}
// èŽ·å–ç”¨æˆ·è¯¦ç»†ä¿¡æ¯
export function getInfo() {
  return request({
    url: '/getInfo',
    method: 'get'
  })
    url: "/getInfo",
    method: "get",
  });
}
// é€€å‡ºæ–¹æ³•
export function logout() {
  return request({
    url: '/logout',
    method: 'post'
  })
    url: "/logout",
    method: "post",
  });
}
// èŽ·å–éªŒè¯ç 
export function getCodeImg() {
  return request({
    url: '/captchaImage',
    url: "/captchaImage",
    headers: {
      isToken: false
      isToken: false,
    },
    method: 'get',
    timeout: 20000
  })
    method: "get",
    timeout: 20000,
  });
}
src/api/patient/homepage.js
@@ -17,6 +17,14 @@
    data: data
  })
};
// ç”¨æˆ·ä¿¡æ¯æŸ¥è¯¢æ‚£è€…列表
export function patarchivelist(data) {
  return request({
    url: '/smartor/patarchive/list',
    method: 'post',
    data: data
  })
};
// ä¿®æ”¹æ‚£è€…档案
export function alterpatient(data) {
@@ -80,6 +88,7 @@
    data: data
  })
};
// ç—…史列表
export function getmedicalhistory(data) {
  return request({
src/api/patient/record.js
@@ -30,4 +30,12 @@
      url: '/smartor/patinhosp/remove/' + userId,
      method: 'get',
    })
  };
  };
  // æŸ¥è¯¢ä½é™¢è®°å½•列表
export function listoperation(data) {
  return request({
    url: '/smartor/operation/list ',
    method: 'post',
    data: data
  })
};
src/api/system/user.js
@@ -142,10 +142,15 @@
}
// æŸ¥è¯¢éƒ¨é—¨ä¸‹æ‹‰æ ‘结构
export function deptTreeSelect() {
export function deptTreeSelect(type) {
  const data = {
    deptType:type,
    orgid:localStorage.getItem("orgid"),
  };
  return request({
    url: "/system/user/deptTree",
    method: "get",
    params: data,
  });
}
// æ–°å¢žç§‘室/病区
src/assets/styles/global.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
/* å®šä¹‰æ·¡è“è‰²ä¸»è‰²è°ƒ */
:root {
  --editor-primary-color: #007bff; /* ä¸»è‰²è°ƒ */
  --editor-background-color: #f8f9fa; /* èƒŒæ™¯é¢œè‰² */
  --editor-border-color: #dee2e6; /* è¾¹æ¡†é¢œè‰² */
  --editor-text-color: #343a40; /* æ–‡å­—颜色 */
}
/* è¦†ç›–编辑器的默认样式 */
.w-e-toolbar {
  background-color: var(--editor-background-color);
  border-bottom: 1px solid var(--editor-border-color);
  color: var(--editor-text-color);
}
.w-e-toolbar .w-e-menu {
  background-color: transparent;
  color: var(--editor-text-color);
}
.w-e-toolbar .w-e-menu:hover {
  background-color: var(--editor-primary-color);
  color: white;
}
.w-e-toolbar .w-e-menu.w-e-active {
  background-color: var(--editor-primary-color);
  color: white;
}
.w-e-toolbar .w-e-menu .w-e-icon {
  fill: var(--editor-text-color);
}
.w-e-toolbar .w-e-menu:hover .w-e-icon {
  fill: white;
}
.w-e-toolbar .w-e-menu.w-e-active .w-e-icon {
  fill: white;
}
.w-e-text-container {
  background-color: white;
  border: 1px solid var(--editor-border-color);
  color: var(--editor-text-color);
}
.w-e-text-container .w-e-text {
  color: var(--editor-text-color);
}
.w-e-text-container .w-e-text img {
  border: 1px solid var(--editor-border-color);
}
.w-e-text-container .w-e-text a {
  color: var(--editor-primary-color);
  text-decoration: underline;
}
.w-e-text-container .w-e-text a:hover {
  color: #0056b3;
}
src/components/OptionalForm/index.vue
@@ -199,7 +199,6 @@
      getillnesslist(this.patientqueryParams).then((res) => {
        this.donorchargeList = res.rows;
        this.patienttotal = res.total;
        console.log(this.$refs.multipleTable, "22");
        this.Restorecheck();
      });
    },
@@ -210,8 +209,6 @@
      if (this.multipleSelection.length <= selection.length) {
        this.multipleSelection = selection;
      } else {
        console.log(selection, "selection");
        console.log(this.multipleSelection, "this.multipleSelection");
        this.multipleSelection.forEach((item) => {
          if (selection.includes(item)) {
          } else {
@@ -232,11 +229,7 @@
        });
      }
      // èµ‹å€¼ç»™æ•´ä½“选中数组
      console.log(this.overallCase);
      this.multipleSelection.forEach((item) => {
        console.log(
          this.overallCase.every((obj) => obj.icdname != item.icdname)
        );
        if (this.overallCase.every((obj) => obj.icdname != item.icdname)) {
          this.overallCase.push(item);
src/components/WangEditor/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<template>
  <div>
    <div ref="editor" style="text-align: left;"></div>
  </div>
</template>
<script>
import E from 'wangeditor';
export default {
  name: 'WangEditor',
  data() {
    return {
      editor: null, // WangEditor å®žä¾‹
    };
  },
  props: {
    content: {
      type: String,
      default: ''
    }
  },
  watch: {
    // å½“父组件传入的 content å˜åŒ–时,更新编辑器内容
    content(newContent) {
      if (this.editor && newContent !== this.editor.txt.html()) {
        this.editor.txt.html(newContent);
      }
    }
  },
  mounted() {
    // åˆå§‹åŒ– WangEditor
    this.editor = new E(this.$refs.editor);
    this.editor.config.onchange = () => {
      // ç¼–辑器内容变化时,触发 input äº‹ä»¶ä¼ é€’给父组件
      this.$emit('input', this.editor.txt.html());
    };
    // é…ç½®èœå•和其他设置
    this.editor.config.menus = [
      'head', 'bold', 'italic', 'underline', 'image', 'link', 'list', 'undo', 'redo'
    ];
    this.editor.config.zIndex = 1000;
    // åˆ›å»ºç¼–辑器
    this.editor.create();
    // è®¾ç½®åˆå§‹å†…容
    if (this.content) {
      this.editor.txt.html(this.content);
    }
  },
  beforeDestroy() {
    // é”€æ¯ç¼–辑器实例,释放资源
    if (this.editor) {
      this.editor.destroy();
    }
  }
};
</script>
src/layout/components/Sidebar/Logo.vue
@@ -31,7 +31,7 @@
        </h1>
      </router-link>
      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
        <img v-if="logo" :src="logo" class="sidebar-logo" />
        <!-- <img v-if="logo" :src="logo" class="sidebar-logo" /> -->
        <h1
          class="sidebar-title"
          :style="{
@@ -70,7 +70,7 @@
  },
  data() {
    return {
      title: "浙中医大二院智慧随访平台",
      title: "智慧随访系统",
      logo: logoImg,
    };
  },
src/main.js
@@ -77,6 +77,8 @@
import components from "./components";
// è¯­éŸ³ç»„ä»¶
import VueAudio from 'vue-audio-better'
// å¼¹æ¡†æ‹–动
import '@/utils/drag.js';
// æ³¨å†Œè¿‡æ»¤å™¨
// è‡ªå®šä¹‰æŒ‡ä»¤
import * as directives from "./directives";
src/settings.js
@@ -27,7 +27,7 @@
  /**
   * æ˜¯å¦æ˜¾ç¤ºlogo
   */
  sidebarLogo: true,
  sidebarLogo: false,
  /**
   * æ˜¯å¦æ˜¾ç¤ºåŠ¨æ€æ ‡é¢˜
src/store/getters.js
@@ -14,6 +14,7 @@
  permissions: (state) => state.user.permissions,
  belongWards: (state) => state.user.belongWards,
  belongDepts: (state) => state.user.belongDepts,
  hisUserId: (state) => state.user.hisUserId,
  permission_routes: (state) => state.permission.routes,
  topbarRouters: (state) => state.permission.topbarRouters,
  defaultRoutes: (state) => state.permission.defaultRoutes,
@@ -123,7 +124,7 @@
    },
    {
      value: "2",
      label: "待执行",
      label: "待随访",
      raw: {
        cssClass: "",
        listClass: "",
src/store/modules/user.js
@@ -7,6 +7,7 @@
    name: '',
    Id: '',
    avatar: '',
    hisUserId:'',
    belongWards:[],
    belongDepts:[],
    roles: [],
@@ -24,7 +25,7 @@
    },
    {
      value: "2",
      label: "监测评估",
      label: "心电随访",
      route: "followvisit/QuestionnaireTask",
      raw: {
        cssClass: "",
@@ -33,7 +34,7 @@
    },
    {
      value: "3",
      label: "复诊管理",
      label: "体检随访",
      route: "followvisit/particty",
      raw: {
        cssClass: "",
@@ -106,6 +107,9 @@
    SET_leavehospitaldistrictcodes: (state, belongWards) => {
      state.belongWards = belongWards
    },
    SET_hisUserId: (state, hisUserId) => {
      state.hisUserId = hisUserId
    },
    SET_leaveldeptcodes: (state, belongDepts) => {
      state.belongDepts = belongDepts
    }
@@ -119,13 +123,30 @@
      const username = userInfo.username.trim()
      const password = userInfo.password
      const code = userInfo.code
      const uuid = userInfo.uuid
      const orgid = userInfo.orgid
      return new Promise((resolve, reject) => {
        login(username, password, code, uuid,orgid).then(res => {
        login(username, password, code, orgid).then(res => {
          setToken(res.token)
          commit('SET_TOKEN', res.token)
          localStorage.setItem('orgid', orgid);
          if (orgid=='47255004333112711A1001') {
          localStorage.setItem('orgname', '景宁畲族自治县人民医院');
          localStorage.setItem('ZuHuID', '1400361376454545408');
          localStorage.setItem('deptCode', '1017');
          }else if (orgid=='47231022633110211A2101') {
          localStorage.setItem('orgname', '丽水市中医院');
          localStorage.setItem('ZuHuID', '1400360867068907520');
          localStorage.setItem('deptCode', '01040201');
          }else if (orgid=='47246102433112211A2101') {
          localStorage.setItem('orgname', '缙云县中医医院');
          localStorage.setItem('ZuHuID', '1400360867068907520');
          localStorage.setItem('deptCode', '');
          }else if (orgid=='47240018433118111A2101') {
          localStorage.setItem('orgname', '龙泉市中医医院');
          localStorage.setItem('ZuHuID', '1400360867068907520');
          localStorage.setItem('deptCode', '');
          }
          resolve()
        }).catch(error => {
          reject(error)
@@ -147,8 +168,8 @@
            commit('SET_ROLES', ['ROLE_DEFAULT'])
          }
          commit('SET_NAME', user.userName)
          console.log(user.userId,'user1');
          commit('SET_Id', user.userId)
          commit('SET_hisUserId', user.hisUserId)
          commit('SET_leavehospitaldistrictcodes', user.belongWards)
          commit('SET_leaveldeptcodes', user.belongDepts)
          commit('SET_AVATAR', avatar)
src/utils/drag.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
import Vue from 'vue';
/*
*  ä½¿ç”¨æ–¹æ³•:
*  å°†ä»¥ä¸‹ä»£ç å¤åˆ¶åˆ°ä¸€ä¸ªjs文件中,然后在入口文件main.js中import引入即可;
*  ç»™elementUI的dialog上加上 v-dialogDrags
*  ç»™dialog设置 :close-on-click-modal="false" , ç¦æ­¢ç‚¹å‡»é®ç½©å±‚关闭弹出层
*/
// å…¼å®¹ie,谷歌
// v-dialogDrags: å¼¹çª—拖拽属性 ï¼ˆé‡ç‚¹ï¼ï¼ï¼ ç»™æ¨¡æ€æ¡†æ·»åŠ è¿™ä¸ªå±žæ€§æ¨¡æ€æ¡†å°±èƒ½æ‹–æ‹½äº†ï¼‰
Vue.directive('dialogDrags', { // å±žæ€§åç§°dialogDrags,前面加v- ä½¿ç”¨
    bind(el, binding, vnode, oldVnode) {
        const dialogHeaderEl = el.querySelector('.el-dialog__header');
        const dragDom = el.querySelector('.el-dialog');
        dialogHeaderEl.style.cssText += ';cursor:move;';
        // èŽ·å–åŽŸæœ‰å±žæ€§ ie dom元素.currentStyle ç«ç‹è°·æ­Œ window.getComputedStyle(dom元素, null);
        const sty = (function () {
            if (window.document.currentStyle) {
                return (dom, attr) => dom.currentStyle[attr];
            } else {
                return (dom, attr) => getComputedStyle(dom, false)[attr];
            }
        })();
        dialogHeaderEl.onmousedown = (e) => {
            // é¼ æ ‡æŒ‰ä¸‹ï¼Œè®¡ç®—当前元素距离可视区的距离
            const disX = e.clientX - dialogHeaderEl.offsetLeft;
            const disY = e.clientY - dialogHeaderEl.offsetTop;
            const screenWidth = document.body.clientWidth; // body当前宽度
            const screenHeight = document.documentElement.clientHeight; // å¯è§åŒºåŸŸé«˜åº¦(应为body高度,可某些环境下无法获取)
            const dragDomWidth = dragDom.offsetWidth; // å¯¹è¯æ¡†å®½åº¦
            const dragDomheight = dragDom.offsetHeight; // å¯¹è¯æ¡†é«˜åº¦
            // èŽ·å–åˆ°çš„å€¼å¸¦px æ­£åˆ™åŒ¹é…æ›¿æ¢
            let styL = sty(dragDom, 'left');
            let styT = sty(dragDom, 'top');
            // æ³¨æ„åœ¨ie中 ç¬¬ä¸€æ¬¡èŽ·å–åˆ°çš„å€¼ä¸ºç»„ä»¶è‡ªå¸¦50% ç§»åŠ¨ä¹‹åŽèµ‹å€¼ä¸ºpx
            if (styL.includes('%')) {
                styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
                styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
            } else {
                styL = +styL.replace(/\px/g, '');
                styT = +styT.replace(/\px/g, '');
            };
            document.onmousemove = function (e) {
                // é€šè¿‡äº‹ä»¶å§”托,计算移动的距离
                let left = e.clientX - disX + styL;
                let top = e.clientY - disY + styT;
                // // è¾¹ç•Œå¤„理
                // if (left < 0) {
                //     left = 0;
                // }
                // if (left > screenWidth - dragDomWidth) {
                //     left = screenWidth - dragDomWidth;
                // }
                // if (top < 0) {
                //     top = 0;
                // }
                // if (top > screenHeight - dragDomheight) {
                //     top = screenHeight - dragDomheight;
                // }
                // ç§»åŠ¨å½“å‰å…ƒç´ 
                dragDom.style.cssText += `;left:${left}px;top:${top}px;`;
            };
            document.onmouseup = function (e) {
                document.onmousemove = null;
                document.onmouseup = null;
            };
        };
    }
});
src/views/Intelligentcenter/centercontrol/index.vue
@@ -95,7 +95,8 @@
                  ><el-table :data="tableData" style="width: 100%">
                    <el-table-column prop="date" label="日期" width="180">
                    </el-table-column>
                    <el-table-column prop="name" label="姓名" width="180">
                    <el-table-column prop="name" label="姓名"
          width="100" >
                    </el-table-column>
                    <el-table-column prop="address" label="地址">
                    </el-table-column> </el-table
src/views/complaint/complaintlist/index.vue
@@ -152,6 +152,7 @@
            align="center"
            key="userName"
            prop="userName"
            width="100"
            :show-overflow-tooltip="true"
          />
          <el-table-column
@@ -159,9 +160,10 @@
            align="center"
            key="types"
            prop="types"
            width="100"
          />
          <el-table-column
            label="性别"
            label="性别"width="100"
            align="center"
            key="nickName"
            prop="nickName"
src/views/complaint/complaintmy/index.vue
@@ -124,6 +124,7 @@
            sortable
            key="userName"
            prop="userName"
             width="100"
            :show-overflow-tooltip="true"
          />
          <el-table-column
@@ -133,7 +134,7 @@
            prop="types"
          />
          <el-table-column
            label="性别"
            label="性别"width="100"
            align="center"
            key="nickName"
            prop="nickName"
@@ -217,7 +218,7 @@
              <el-input v-model="form.name"></el-input> </el-form-item
          ></el-col>
          <el-col :span="12"
            ><el-form-item label="性别">
            ><el-form-item label="性别"width="100">
              <el-radio v-model="form.radio" label="1">男</el-radio>
              <el-radio v-model="form.radio" label="2">女</el-radio>
              <el-radio v-model="form.radio" label="3">未知</el-radio>
src/views/followvisit/SpecificDisease/index.vue
copy from src/views/patient/ycquestionnaire/index.vue copy to src/views/followvisit/SpecificDisease/index.vue
Îļþ´Ó src/views/patient/ycquestionnaire/index.vue ¸´ÖÆ
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -26,7 +26,7 @@
          <div class="ysfleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
                <span>表单已发送</span>
                <span>已发送未领取</span>
                <div
                  style="
                    text-align: center;
@@ -154,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -192,7 +191,7 @@
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -208,11 +207,24 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                gettoken360(scope.row.sfzh,scope.row.drcode,scope.row.drname)
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -221,32 +233,41 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
              placement="top-start"
            >
              <div v-if="scope.row.sendstate == 1">
                <el-tag type="primary" :disable-transitions="false"
                  >被领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 2">
                <el-tag type="primary" :disable-transitions="false"
                  >待发送</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 3">
                <el-tag type="success" :disable-transitions="false"
                  >已发送未领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 4">
                <el-tag type="info" :disable-transitions="false">不执行</el-tag>
              </div>
              <div v-if="scope.row.sendstate == 5">
                <el-tag type="danger" :disable-transitions="false"
                  >发送失败</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="danger" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
            </el-tooltip>
          </template>
        </el-table-column>
        <!-- <el-table-column
@@ -258,7 +279,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -274,12 +295,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -361,7 +382,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -450,7 +471,7 @@
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              content="再次随访"
              placement="top"
            >
              <el-button
@@ -459,13 +480,15 @@
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
            </el-tooltip> -->
            <!-- <el-tooltip
            <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
              class="item"
              effect="dark"
              content="停止"
              content="暂停服务"
              placement="top"
            >
              <el-button
@@ -473,9 +496,11 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
            </el-tooltip> -->
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip>
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
@@ -493,7 +518,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -536,7 +561,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -622,6 +647,50 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="form" :model="zcform" label-width="80px">
        <el-form-item label="患者名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="任务名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="随访方式">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item>
        <el-form-item label="随访时间" v-if="!zcform.delivery">
          <el-col :span="11">
            <el-date-picker
              type="date"
              placeholder="选择日期"
              v-model="zcform.date1"
              style="width: 100%"
            ></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker
              placeholder="选择时间"
              v-model="zcform.date2"
              style="width: 100%"
            ></el-time-picker>
          </el-col>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="dialogFormVisible = false"
          >ç¡® å®š</el-button
        >
      </div>
    </el-dialog>
  </div>
</template>
@@ -635,7 +704,7 @@
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import { getTaskservelist } from "@/api/AiCentre/index";
import { getTaskservelist,query360PatInfo } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -656,12 +725,13 @@
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      dialogFormVisible: false,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -677,25 +747,58 @@
      ruleForm: {
        type: [],
      },
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
      value: [],
      list: [],
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: '',
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      sourcetype: [
        {
          value: 1,
@@ -718,10 +821,10 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -736,7 +839,7 @@
          value: 0,
        },
        {
          name: "待执行",
          name: "待发送",
          value: 0,
        },
        {
@@ -745,7 +848,7 @@
        },
        // {
        //   name: "表单已发送",
        //   name: "已发送未领取",
        //   value: 0,
        // },
      ],
@@ -763,8 +866,9 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 10,
        searchscope: 3,
        sendstate:2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -775,15 +879,15 @@
      topicoptions: [
        {
          value: 1,
          label: "表单已领取",
          label: "被领取",
        },
        {
          value: 2,
          label: "待执行",
          label: "待发送",
        },
        {
          value: 3,
          label: "表单已发送",
          label: "已发送未领取",
        },
        {
          value: 4,
@@ -848,7 +952,7 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
@@ -877,12 +981,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -893,8 +997,10 @@
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            item.preachform = idArray.map((value) => {
              // æŸ¥æ‰¾id对应的对象
@@ -909,7 +1015,23 @@
        this.total = response.total;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
     //患者360跳转
     gettoken360(sfzh,drcode,drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC=='丽水市中医院') {
        this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728';
        this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY';
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
           window.open(res.data.url, '_blank');
          // this.linkUrl = res.data.url;
        }else{
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -927,7 +1049,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1005,8 +1127,9 @@
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 10,
        searchscope: 2,
        sendstate:2,
      };
      this.handleQuery(1);
    },
@@ -1042,7 +1165,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 10,
        },
      });
    },
@@ -1161,6 +1284,41 @@
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit() {
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = '服务暂停';
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
      if (too == 1) {
@@ -1176,7 +1334,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1324,7 +1482,7 @@
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  background-color: #b3a21f;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
src/views/followvisit/again/index.vue
copy from src/views/patient/ycquestionnaire/index.vue copy to src/views/followvisit/again/index.vue
Îļþ´Ó src/views/patient/ycquestionnaire/index.vue ¸´ÖÆ
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
                {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -90,11 +90,28 @@
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="应随访时间">
          <el-date-picker
            v-model="dateRangefs"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="患者姓名" prop="sendname">
          <el-input
            v-model="topqueryParams.sendname"
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="诊断名称" prop="leavediagname">
          <el-input
            v-model="topqueryParams.leavediagname"
            placeholder="请输入诊断名称"
          ></el-input>
        </el-form-item>
@@ -119,6 +136,17 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="排序方式" prop="status">
          <el-select v-model="topqueryParams.sort" placeholder="请选择">
            <el-option
              v-for="item in topicoptionssort"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button
@@ -136,6 +164,20 @@
      <el-divider></el-divider>
      <el-row :gutter="10" class="mb8">
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
@@ -145,21 +187,7 @@
            >新增</el-button
          >
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
@@ -188,11 +216,45 @@
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                plain
                size="medium"
                @click="buidegetTasklist()"
                >待办服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="primary"
                plain
                size="medium"
                @click="affiliation()"
                >本人所属服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button type="success" size="medium" @click="onthatday()"
                >当日服务</el-button
              >
            </div>
          </div>
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -200,19 +262,33 @@
        <el-table-column
          label="任务名称"
          fixed
          width="150"
          show-overflow-tooltip
          align="center"
          key="taskName"
          prop="taskName"
          width="180"
        />
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                gettoken360(scope.row.sfzh, scope.row.drcode, scope.row.drname)
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -221,32 +297,41 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
              placement="top-start"
            >
              <div v-if="scope.row.sendstate == 1">
                <el-tag type="primary" :disable-transitions="false"
                  >表单已领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 2">
                <el-tag type="primary" :disable-transitions="false"
                  >待随访</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 3">
                <el-tag type="success" :disable-transitions="false"
                  >表单已发送</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 4">
                <el-tag type="info" :disable-transitions="false">不执行</el-tag>
              </div>
              <div v-if="scope.row.sendstate == 5">
                <el-tag type="danger" :disable-transitions="false"
                  >发送失败</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="success" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
            </el-tooltip>
          </template>
        </el-table-column>
        <!-- <el-table-column
@@ -258,7 +343,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -271,15 +356,9 @@
            />
          </template>
        </el-table-column>
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -312,6 +391,20 @@
          </template></el-table-column
        >
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <el-table-column
          label="随访人员"
          align="center"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="出院天数"
          width="120"
          align="center"
@@ -343,13 +436,6 @@
          key="nurseName"
          prop="nurseName"
        />
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
@@ -361,13 +447,21 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
          label="首次随访科室"
          align="center"
          key="deptname"
          prop="deptname"
          width="120"
        >
        </el-table-column>
        <el-table-column
          label="本次科室"
          align="center"
          key="visitDeptName"
          prop="visitDeptName"
          width="120"
        >
        </el-table-column>
@@ -380,15 +474,15 @@
        >
        </el-table-column>
        <!-- <el-table-column
          label="疾病名称"
        <el-table-column
          label="诊断名称"
          align="center"
          key="icdName"
          prop="icdName"
          key="leavediagname"
          prop="leavediagname"
          width="120"
          :show-overflow-tooltip="true"
        >
        </el-table-column> -->
        </el-table-column>
        <el-table-column
          label="出院随访模板名称"
@@ -425,47 +519,55 @@
        </el-table-column> -->
        <el-table-column
          label="任务结果说明"
          width="200"
          width="220"
          align="center"
          key="remark"
          prop="remark"
        >
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            <el-tooltip
              :content="scope.row.remark"
              placement="top"
              effect="dark"
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
              <el-tag
                type="warning"
                v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
                >{{ scope.row.remark }}</el-tag
              >
              <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
          fixed="right"
          width="200"
          width="300"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              content="再次随访"
              placement="top"
            >
              <el-button
                size="medium"
                type="text"
                v-if="scope.row.isVisitAgain!=2"
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
            </el-tooltip> -->
            <!-- <el-tooltip
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
            </el-tooltip>
            <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
              class="item"
              effect="dark"
              content="停止"
              content="暂停服务"
              placement="top"
            >
              <el-button
@@ -473,12 +575,22 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
              ></el-button
            >
            <el-button
              size="medium"
              type="text"
              @click="handleUpdate(scope.row)"
              ><span class="button-textxga"
                ><i class="el-icon-edit"></i>患者过滤</span
              ></el-button
            >
          </template>
@@ -493,58 +605,61 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
      width="700px"
      append-to-body
      :title="amendtag ? '修改患者信息' : '新增患者'"
      :visible.sync="Labelchange"
      width="900px"
    >
      <el-form ref="form" :model="form" label-width="100px">
        <el-row :gutter="20">
          <el-col :span="12"
            ><el-form-item label="任务名称">
              <el-input v-model="form.name"></el-input> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="所属科室">
              <el-select v-model="form.region" placeholder="请选择科室">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item></el-col
        ></el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="随访类型">
              <el-select v-model="form.region" placeholder="请选择随访类型">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="服务模块">
              <el-select v-model="form.region" placeholder="请选择模块">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名" width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in sextype"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="年龄" prop="age">
              <el-input
                v-model="form.age"
                placeholder="请输入年龄"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
        <el-row>
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            <el-form-item label="过滤原因">
              <el-input
                v-model="form.notrequiredreason"
                type="textarea"
                placeholder="请输入过滤原因"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">提 äº¤</el-button>
        <el-button @click="cancel">返 å›ž</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <!-- ä¿®æ”¹å‘送时间对话框 -->
@@ -622,20 +737,96 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="zcform" :rules="zcrules" :model="zcform" label-width="80px">
        <el-form-item label="任务名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.taskName"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.sendname"
          ></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.age"
          ></el-input>
        </el-form-item>
        <el-form-item label="科室">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.deptname"
          ></el-input>
        </el-form-item>
        <el-form-item label="病区">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.leavehospitaldistrictname"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访方式" prop="resource">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <!-- <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item> -->
        <el-form-item label="出院时间">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.endtime"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访完成时间" prop="date1">
          <el-date-picker
            type="date"
            placeholder="选择日期"
            v-model="zcform.date1"
            style="width: 100%"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="随访记录">
          <el-input type="textarea" v-model="zcform.remark"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="setupsubtask">确认创建服务</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import {
  listUser,
  getUser,
  delUser,
  addUser,
  updateUser,
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import { getTaskservelist } from "@/api/AiCentre/index";
import {
  getTaskservelist,
  buidegetTasklist,
  addserviceSubtask,
  query360PatInfo,
} from "@/api/AiCentre/index";
import { alterpatient, particularpatient } from "@/api/patient/homepage";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -656,12 +847,13 @@
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      dialogFormVisible: false,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -672,24 +864,27 @@
      initPassword: undefined,
      // æ—¥æœŸèŒƒå›´
      dateRange: [],
      dateRangefs: [],
      // å²—位选项
      postOptions: [],
      ruleForm: {
        type: [],
      },
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      Labelchange: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,25 +913,20 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
        },
        // {
        //   name: "异常",
        //   value: 0,
        // },
        {
          name: "发送失败",
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -749,7 +939,14 @@
        //   value: 0,
        // },
      ],
      zcrules: {
        date1: [
          { required: true, message: "请选择随访方式", trigger: "change" },
        ],
        resource: [
          { required: true, message: "请选择随访时间", trigger: "blur" },
        ],
      },
      // è¡¨å•参数
      form: {
        phonenumber: "",
@@ -759,14 +956,36 @@
        qystatus: "",
        btstatus: "",
      },
      topicoptionssort: [
        {
          value: 0,
          label: "出院时间(正序)",
        },
        {
          value: 1,
          label: "出院时间(倒序)",
        },
        {
          value: 2,
          label: "发送时间(正序)",
        },
        {
          value: 3,
          label: "发送时间(倒序)",
        },
      ],
      // æŸ¥è¯¢å‚æ•°
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        sendstate: 2,
        sort: 2, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 2,
        searchscope: 3,
        visitCount: 2,
        scopetype: [],
        leaveldeptcodes: [],
        visitDeptCodes: [],
        leaveldeptcodes:[],
        leavehospitaldistrictcodes: [],
      },
      propss: { multiple: true },
@@ -774,12 +993,16 @@
      topicoptions: [
        {
          value: null,
          label: "全部",
        },
        {
          value: 1,
          label: "表单已领取",
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -798,6 +1021,16 @@
          label: "已完成",
        },
      ],
      sextype: [
        {
          value: 1,
          label: "男",
        },
        {
          value: 2,
          label: "女",
        },
      ],
      topicoptionsyj: [
        {
          value: 1,
@@ -808,6 +1041,41 @@
          label: "正常",
        },
      ],
      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      amendtag: false,
      errtype: "",
      leavehospitaldistrictcode: "",
      serviceState: [],
@@ -848,10 +1116,14 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢éšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -866,12 +1138,95 @@
        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
      }
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      if (
        this.topqueryParams.leavehospitaldistrictcodes[0] &&
        this.topqueryParams.visitDeptCodes[0]&&this.topqueryParams.leaveldeptcodes[0]
      ) {
        this.topqueryParams.deptOrDistrict = 2;
      } else {
        this.topqueryParams.deptOrDistrict = 1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
      this.topqueryParams.startSendDateTime = this.getCurrentDate();
      this.topqueryParams.endSendDateTime = this.getCurrentDate();
      this.getList(1);
    },
    getCurrentDate() {
      const now = new Date();
      return now.toISOString().slice(0, 10); // æˆªå–前10个字符,即 YYYY-MM-DD
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
          this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      // æŽ¥å—异常跳转
      if (this.errtype) {
        this.topqueryParams.leavehospitaldistrictcodes.push(
          this.leavehospitaldistrictcode
        );
      }
      let obj = {
        pageNum: 1,
        pageSize: 10,
        leavehospitaldistrictcodes:
          this.topqueryParams.leavehospitaldistrictcodes,
        sendstates: [2, 3],
        visitDeptCodes: this.topqueryParams.visitDeptCodes,
        leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
      };
      buidegetTasklist(obj).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
@@ -881,7 +1236,7 @@
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[4].value = response.rows[0].dsf;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
@@ -893,8 +1248,10 @@
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            item.preachform = idArray.map((value) => {
              // æŸ¥æ‰¾id对应的对象
@@ -927,7 +1284,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -942,11 +1299,7 @@
          row.status = row.status === "0" ? "1" : "0";
        });
    },
    // å–消按钮
    cancel() {
      this.addalteropen = false;
      this.reset();
    },
    // è¡¨å•重置
    reset() {
      this.form = {
@@ -968,6 +1321,9 @@
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery(refresh) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -977,7 +1333,9 @@
      this.topqueryParams.pageNum = 1;
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
      this.topqueryParams.startSendDateTime = this.dateRangefs[0];
      this.topqueryParams.endSendDateTime = this.dateRangefs[1];
      console.log("2");
      this.getList(refresh);
    },
    // æ‚£è€…范围处理
@@ -985,14 +1343,16 @@
      let type = value[0];
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.visitDeptCodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.visitDeptCodes.push(code);
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
        this.topqueryParams.searchscope = 1;
      } else if (type == 2) {
        this.topqueryParams.leavehospitaldistrictcodes.push(code);
        this.topqueryParams.visitDeptCodes = [];
        this.topqueryParams.leaveldeptcodes = [];
        this.topqueryParams.searchscope = 2;
      } else {
@@ -1002,11 +1362,19 @@
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.dateRangefs = [];
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        searchscope: 2,
        sendstate: 2,
        sort: 2, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 2,
        searchscope: 3,
        visitCount: 2,
        scopetype: [],
        visitDeptCodes: [],
        leaveldeptcodes:[],
        leavehospitaldistrictcodes: [],
      };
      this.handleQuery(1);
    },
@@ -1042,8 +1410,24 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 2,
        },
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
@@ -1063,24 +1447,28 @@
        })
        .catch(() => {});
    },
    // å–消按钮
    cancel() {
      this.Labelchange = false;
      this.reset();
    },
    /** æäº¤æŒ‰é’® */
    submitForm: function () {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.userId != undefined) {
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
          this.form.isoperation = 2;
          this.form.notrequiredFlag = 1;
          alterpatient(this.form)
            .then((response) => {
              console.log(response);
            })
            .then(() => {
              this.getList(1);
              this.$modal.msgSuccess("患者过滤成功");
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList(1);
            });
          }
          this.reset();
          this.Labelchange = false;
        }
      });
    },
@@ -1148,7 +1536,6 @@
      if (row.preachformson) {
        if (row.preachformson.includes("3")) {
          type = 1;
          console.log(type, "rwo");
        }
      }
      this.$router.push({
@@ -1158,8 +1545,54 @@
          patid: row.patid,
          id: row.id,
          Voicetype: type,
          visitCount: this.topqueryParams.visitCount,
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit(row) {
      this.zcform = row;
      this.zcform.endtime = this.formatTime(this.zcform.endtime);
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = "服务暂停";
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // æ‚£è€…过滤触发
    handleUpdate(row) {
      particularpatient(row.patid).then((response) => {
        this.form = response.data;
      });
      this.amendtag = true;
      this.Labelchange = true;
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
@@ -1176,7 +1609,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1189,6 +1622,48 @@
        return "warning-row";
      }
      return "";
    },
    // åˆ›å»ºå†æ¬¡éšè®¿æœåŠ¡
    setupsubtask() {
      this.$refs["zcform"].validate((valid) => {
        if (valid) {
          this.zcform.remark =
            this.zcform.remark + "【" + this.getCurrentTime() + "】";
          let form = structuredClone(this.zcform);
          form.longSendTime = this.formatTime(form.date1);
          form.finishtime = "";
          if (form.resource) {
            if (form.resource == 2) {
              form.serviceType = 13;
            }
          } else {
            this.$modal.msgError("未选择随访方式");
          }
          form.id = null;
          form.sendstate = 2;
          form.preachform = form.preachformson;
          form.longTask = 0;
          addserviceSubtask(form).then((res) => {
            if (res.code == 200) {
              this.$modal.msgSuccess("创建成功");
            } else {
              this.$modal.msgError("创建失败");
            }
            this.dialogFormVisible = false;
          });
        }
      });
    },
    getCurrentTime() {
      const now = new Date();
      const year = now.getFullYear();
      const month = String(now.getMonth() + 1).padStart(2, "0");
      const day = String(now.getDate()).padStart(2, "0");
      const hours = String(now.getHours()).padStart(2, "0");
      const minutes = String(now.getMinutes()).padStart(2, "0");
      const seconds = String(now.getSeconds()).padStart(2, "0");
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },
  },
};
@@ -1324,7 +1799,7 @@
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  background-color: #b3a21f;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
src/views/followvisit/discharge/index.vue
@@ -108,6 +108,18 @@
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="诊断名称" prop="leavediagname">
          <el-input
            v-model="topqueryParams.leavediagname"
            placeholder="请输入诊断名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访人员" prop="updateBy">
          <el-input
            v-model="topqueryParams.updateBy"
            placeholder="请输入随访人员"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-cascader
@@ -158,6 +170,20 @@
      <el-divider></el-divider>
      <el-row :gutter="10" class="mb8">
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
@@ -167,21 +193,7 @@
            >新增</el-button
          >
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
@@ -223,11 +235,32 @@
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="primary"
                plain
                size="medium"
                @click="affiliation()"
                >本人所属服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button type="success" size="medium" @click="onthatday()"
                >当日服务</el-button
              >
            </div>
          </div>
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -248,23 +281,7 @@
          align="center"
          key="sendname"
          prop="sendname"
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                $router.push({
                  path: '/patient/indexls/',
                  query: { sfzh: scope.row.sfzh },
                })
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        />
        <el-table-column
          label="任务状态"
          align="center"
@@ -303,7 +320,7 @@
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="danger" :disable-transitions="false"
                <el-tag type="success" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
@@ -325,6 +342,7 @@
          prop="suggest"
          width="120"
        >
          <template slot-scope="scope">
            <dict-tag
              :options="dict.type.sys_suggest"
@@ -332,15 +350,9 @@
            />
          </template>
        </el-table-column>
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -373,6 +385,20 @@
          </template></el-table-column
        >
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <el-table-column
          label="随访人员"
          align="center"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="出院天数"
          width="120"
          align="center"
@@ -404,13 +430,6 @@
          key="nurseName"
          prop="nurseName"
        />
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
@@ -441,15 +460,15 @@
        >
        </el-table-column>
        <!-- <el-table-column
          label="疾病名称"
        <el-table-column
          label="诊断名称"
          align="center"
          key="icdName"
          prop="icdName"
          key="leavediagname"
          prop="leavediagname"
          width="120"
          :show-overflow-tooltip="true"
        >
        </el-table-column> -->
        </el-table-column>
        <el-table-column
          label="出院随访模板名称"
@@ -491,19 +510,13 @@
          key="remark"
          prop="remark"
        >
          <template  slot-scope="scope" v-if="scope.row.remark">
            <el-tooltip
              :content="scope.row.remark"
              placement="top"
              effect="dark"
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            >
              <el-tag
                type="warning"
                v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
                >{{ scope.row.remark }}</el-tag
              >
              <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
            </el-tooltip>
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column
@@ -523,15 +536,13 @@
              <el-button
                size="medium"
                type="text"
                v-if="scope.row.isVisitAgain!=2"
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
            </el-tooltip> -->
            <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="暂停服务"
@@ -542,14 +553,20 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip>
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
              ></el-button
            >
            <el-button
              size="medium"
              type="text"
              @click="handleUpdate(scope.row)"
              ><span class="button-textxga"
                ><i class="el-icon-edit"></i>患者过滤</span
              ></el-button
            >
          </template>
@@ -566,56 +583,55 @@
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
      width="700px"
      append-to-body
      :title="amendtag ? '修改患者信息' : '新增患者'"
      :visible.sync="Labelchange"
      width="900px"
    >
      <el-form ref="form" :model="form" label-width="100px">
        <el-row :gutter="20">
          <el-col :span="12"
            ><el-form-item label="任务名称">
              <el-input v-model="form.name"></el-input> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="所属科室">
              <el-select v-model="form.region" placeholder="请选择科室">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item></el-col
        ></el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="随访类型">
              <el-select v-model="form.region" placeholder="请选择随访类型">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="服务模块">
              <el-select v-model="form.region" placeholder="请选择模块">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名" width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in sextype"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="年龄" prop="age">
              <el-input
                v-model="form.age"
                placeholder="请输入年龄"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
        <el-row>
          <el-col :span="24">
            <el-form-item label="影像随访要求">
            <el-form-item label="门诊随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">提 äº¤</el-button>
        <el-button @click="cancel">返 å›ž</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <!-- ä¿®æ”¹å‘送时间对话框 -->
@@ -693,71 +709,6 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="zcform" :rules="zcrules" :model="zcform" label-width="80px">
        <el-form-item label="任务名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.taskName"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.sendname"
          ></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.age"
          ></el-input>
        </el-form-item>
        <el-form-item label="科室">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.deptname"
          ></el-input>
        </el-form-item>
        <el-form-item label="病区">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.leavehospitaldistrictname"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访方式" prop="resource">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <!-- <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item> -->
        <el-form-item label="随访时间" prop="date1">
          <el-date-picker
            type="date"
            placeholder="选择日期"
            v-model="zcform.date1"
            style="width: 100%"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="随访记录">
          <el-input type="textarea" v-model="zcform.remark"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="setupsubtask">确认创建服务</el-button>
      </div>
    </el-dialog>
  </div>
</template>
@@ -769,11 +720,7 @@
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import {
  getTaskservelist,
  buidegetTasklist,
  addserviceSubtask,
} from "@/api/AiCentre/index";
import { getTaskservelist, buidegetTasklist } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -820,6 +767,7 @@
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      Labelchange: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
@@ -859,19 +807,14 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
        },
        // {
        //   name: "异常",
        //   value: 0,
        // },
        {
          name: "发送失败",
          value: 0,
@@ -907,32 +850,12 @@
        qystatus: "",
        btstatus: "",
      },
      topicoptionssort:[
        {
          value: 0,
          label: "出院时间(正序)",
        },
        {
          value: 1,
          label: "出院时间(倒序)",
        },
        {
          value: 2,
          label: "发送时间(正序)",
        },
        {
          value: 3,
          label: "发送时间(倒序)",
        },
      ],
      // æŸ¥è¯¢å‚æ•°
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        sendstate: 2,
        sort: 3, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 2,
        searchscope: 3,
        searchscope: 3,visitCount: 1,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -941,6 +864,10 @@
      options: [],
      topicoptions: [
        {
          value: null,
          label: "全部",
        },
        {
          value: 1,
          label: "表单已领取",
@@ -966,6 +893,16 @@
          label: "已完成",
        },
      ],
      sextype: [
        {
          value: 1,
          label: "男",
        },
        {
          value: 2,
          label: "女",
        },
      ],
      topicoptionsyj: [
        {
          value: 1,
@@ -976,6 +913,41 @@
          label: "正常",
        },
      ],
      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      amendtag: false,
      errtype: "",
      leavehospitaldistrictcode: "",
      serviceState: [],
@@ -1016,9 +988,10 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
@@ -1048,12 +1021,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -1081,6 +1054,20 @@
        });
        this.total = response.total;
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
      this.topqueryParams.startSendDateTime = this.getCurrentDate();
      this.topqueryParams.endSendDateTime = this.getCurrentDate();
      this.getList(1);
    },
    getCurrentDate() {
      const now = new Date();
      return now.toISOString().slice(0, 10); // æˆªå–前10个字符,即 YYYY-MM-DD
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
@@ -1114,7 +1101,7 @@
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[4].value = response.rows[0].dsf;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
@@ -1177,11 +1164,7 @@
          row.status = row.status === "0" ? "1" : "0";
        });
    },
    // å–消按钮
    cancel() {
      this.addalteropen = false;
      this.reset();
    },
    // è¡¨å•重置
    reset() {
      this.form = {
@@ -1222,7 +1205,6 @@
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
@@ -1242,10 +1224,10 @@
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 2,
        sendstate: 2,
        sort: 2, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 2,
        searchscope: 2,
        sort: 3,
      };
      this.handleQuery(1);
    },
@@ -1285,6 +1267,22 @@
        },
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    /** é‡ç½®å¯†ç æŒ‰é’®æ“ä½œ */
    handleResetPwd(row) {
@@ -1302,24 +1300,28 @@
        })
        .catch(() => {});
    },
    // å–消按钮
    cancel() {
      this.Labelchange = false;
      this.reset();
    },
    /** æäº¤æŒ‰é’® */
    submitForm: function () {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.userId != undefined) {
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
          this.form.isoperation = 2;
          this.form.notrequiredFlag = 1;
          alterpatient(this.form)
            .then((response) => {
              console.log(response);
            })
            .then(() => {
              this.getList(1);
              this.$modal.msgSuccess("患者过滤成功");
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList(1);
            });
          }
          this.reset();
          this.Labelchange = false;
        }
      });
    },
@@ -1396,44 +1398,9 @@
          patid: row.patid,
          id: row.id,
          Voicetype: type,
          visitCount: this.topqueryParams.visitCount,
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit(row) {
      this.zcform = row;
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = "服务暂停";
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
@@ -1450,7 +1417,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1463,33 +1430,6 @@
        return "warning-row";
      }
      return "";
    },
    // åˆ›å»ºå†æ¬¡éšè®¿æœåŠ¡
    setupsubtask() {
      this.$refs["zcform"].validate((valid) => {
        if (valid) {
          let form = structuredClone(this.zcform);
          form.longSendTime = this.formatTime(form.date1);
          if (form.resource) {
            if (form.resource == 2) {
              form.serviceType = 10;
            }
          } else {
            this.$modal.msgError("未选择随访方式");
          }
          form.id = null;
          form.sendstate = 2;
          form.preachform = form.preachformson;
          addserviceSubtask(form).then((res) => {
            if (res.code == 200) {
              this.$modal.msgSuccess("创建成功");
            } else {
              this.$modal.msgError("创建失败");
            }
            this.dialogFormVisible = false;
          });
        }
      });
    },
  },
};
src/views/followvisit/linem/index.vue
@@ -51,6 +51,7 @@
          label="任务名称"
          align="center"
          sortable
          width="150"
          key="userName"
          prop="userName"
          :show-overflow-tooltip="true"
@@ -68,7 +69,7 @@
          prop="nickName"
        />
        <el-table-column
          label="待执行/总数"
          label="待随访/总数"
          align="center"
          key="phonenumber"
          prop="phonenumber"
@@ -178,7 +179,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -221,7 +222,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -269,7 +270,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // éƒ¨é—¨åç§°
@@ -285,13 +286,13 @@
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -479,7 +480,7 @@
    });
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿åˆ—表 */
    /** æŸ¥è¯¢å½±åƒéšè®¿åˆ—表 */
    getList() {
      this.loading = true;
      listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then(
@@ -490,7 +491,7 @@
        }
      );
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -508,7 +509,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -592,7 +593,7 @@
      // getUser().then((response) => {
      //   this.postOptions = response.posts;
      //   this.roleOptions = response.roles;
      //   this.title = "新增门诊随访";
      //   this.title = "新增影像随访";
      //   this.form.password = this.initPassword;
      // });
    },
src/views/followvisit/outpatient/index.vue
@@ -1,8 +1,69 @@
<template>
  <div class="app-container">
    <div class="leftvlue" style="margin-bottom: 20px">
      <el-row :gutter="10">
        <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
          <el-card
            shadow="hover"
            :body-style="item.router ? ' cursor: pointer' : 'cursor: default'"
          >
            <div style="padding: 8px" @click="$router.push(item.router)">
              <span>{{ item.name }}</span>
              <div
                style="
                  text-align: center;
                  font-size: 18px;
                  margin-top: 10px;
                  font-weight: 600;
                "
              >
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
        </el-col>
        <!-- <el-col :span="2.5">
          <div class="ysfleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
                <span>表单已发送</span>
                <div
                  style="
                    text-align: center;
                    font-size: 18px;
                    margin-top: 10px;
                    font-weight: 600;
                  "
                >
                  {{ yfsvalue }}
                </div>
              </div>
            </el-card>
          </div>
        </el-col> -->
        <el-col :span="2.5">
          <div class="errleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
                <span>异常</span>
                <div
                  style="
                    text-align: center;
                    font-size: 18px;
                    margin-top: 10px;
                    font-weight: 600;
                  "
                >
                  {{ ycvalue }}
                </div>
              </div>
            </el-card>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-row :gutter="20">
      <!--用户数据-->
      <el-form
        :model="topqueryParams"
        ref="queryForm"
@@ -12,12 +73,13 @@
        label-width="98px"
      >
        <el-form-item label="任务名称">
          <el-input v-model="topqueryParams.taskName"></el-input>
          <el-input
            v-model="topqueryParams.taskName"
            placeholder="请选择任务名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="发起人">
          <el-input v-model="topqueryParams.createBy"></el-input>
        </el-form-item>
        <!-- <el-form-item label="审核时间">
        <el-form-item label="门诊时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
@@ -27,13 +89,26 @@
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item> -->
        <el-form-item label="模板名称" prop="status">
          <el-input v-model="topqueryParams.templatename"></el-input>
        </el-form-item>
        <el-form-item label="门诊随访状态" prop="status">
        <el-form-item label="患者姓名" prop="sendname">
          <el-input
            v-model="topqueryParams.sendname"
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-cascader
            v-model="topqueryParams.scopetype"
            placeholder="默认全部"
            :options="sourcetype"
            :props="{ expandTrigger: 'hover' }"
            @change="handleChange"
          ></el-cascader>
        </el-form-item>
        <el-form-item label="任务状态" prop="status">
          <el-select v-model="topqueryParams.sendstate" placeholder="请选择">
            <el-option
              v-for="item in topicoptions"
@@ -44,12 +119,13 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button
            type="primary"
            icon="el-icon-search"
            size="medium"
            @click="handleQuery"
            @click="handleQuery(1)"
            >搜索</el-button
          >
          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
@@ -66,11 +142,10 @@
            icon="el-icon-plus"
            size="medium"
            @click="handleAdd"
            v-hasPermi="['system:user:add']"
            >新增</el-button
          >
        </el-col>
        <!-- <el-col :span="1.5">
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
@@ -79,51 +154,7 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
          </div>
        </el-col> -->
        <!-- <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                plain
                icon="el-icon-download"
                size="medium"
                @click="toleadExport"
                v-hasPermi="['system:user:export']"
                >导入</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="info"
                icon="el-icon-refresh"
                size="medium"
                @click="TaskReset"
                v-hasPermi="['system:user:export']"
                >任务重置</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                icon="el-icon-position"
                size="medium"
                @click="AllStarted"
                v-hasPermi="['system:user:export']"
                >全部开始</el-button
              >
            </div>
          </div>
@@ -133,11 +164,11 @@
            <div class="document">
              <el-button
                type="warning"
                icon="el-icon-remove"
                plain
                icon="el-icon-warning-outline"
                size="medium"
                @click="AllStop"
                v-hasPermi="['system:user:export']"
                >全部停止</el-button
                @click="toleadExport(1)"
                >执行失败</el-button
              >
            </div>
          </div>
@@ -146,54 +177,223 @@
          <div class="documentf">
            <div class="document">
              <el-button
                type="primary"
                icon="el-icon-remove"
                type="danger"
                plain
                icon="el-icon-warning"
                size="medium"
                @click="Sendtimesetting"
                v-hasPermi="['system:user:export']"
                >发送时间设置</el-button
                @click="toleadExport(2)"
                >结果异常</el-button
              >
            </div>
          </div>
        </el-col> -->
        <!-- <el-col :span="1.5"> </el-col> -->
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="50" align="center" />
        <el-table-column
          label="序号"
          label="任务名称"
          fixed
          align="center"
          key="id"
          prop="id"
          key="taskName"
          prop="taskName"
          width="180"
        />
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                  $router.push({
                    path: '/patient/indexls/',
                    query: { sfzh: scope.row.idcardno },
                  })
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
          key="sendstate"
          prop="sendstate"
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
          </template>
        </el-table-column>
        <!-- <el-table-column
          label="任务异常说明"
          width="120"
          align="center"
          key="remark"
          prop="remark" -->
        />
        <el-table-column
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
          width="120"
        >
          <template slot-scope="scope">
            <dict-tag
              :options="dict.type.sys_suggest"
              :value="scope.row.suggest"
            />
          </template>
        </el-table-column>
        <el-table-column
          label="随访人员"
          align="center"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.finishtime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="随访结果"
          width="200"
          align="center"
          key="remark"
          prop="remark"
        >
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="检查日期"
          width="200"
          align="center"
          key="endtime"
          prop="endtime"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.endtime) }}</span>
          </template></el-table-column
        >
        <el-table-column
          label="应随访日期"
          width="200"
          align="center"
          key="longSendTime"
          prop="longSendTime"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.longSendTime) }}</span>
          </template></el-table-column
        >
        <el-table-column
          label="已检查天数"
          width="120"
          align="center"
          key="endDay"
          prop="endDay"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.endDay ? scope.row.endDay + "天" : "" }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="身份证号码"
          width="200"
          align="center"
          key="sfzh"
          prop="sfzh"
        />
        <el-table-column
          label="联系电话"
          width="200"
          align="center"
          key="phone"
          prop="phone"
        />
        <!-- <el-table-column
          label="责任护士"
          width="120"
          align="center"
          key="nurseName"
          prop="nurseName"
        /> -->
        <el-table-column
          label="检查医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
          align="center"
          sortable
          key="medicalRecordNo"
          prop="medicalRecordNo"
          width="120"
        />
        <el-table-column
          label="年龄"
          align="center"
          key="age"
          prop="age"
        />
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
          align="center"
@@ -202,8 +402,16 @@
          width="120"
        >
        </el-table-column>
        <el-table-column
          label="病区"
          align="center"
          key="leavehospitaldistrictname"
          prop="leavehospitaldistrictname"
          width="120"
        >
        </el-table-column>
        <!-- <el-table-column
          label="疾病名称"
          align="center"
          key="icdName"
@@ -211,100 +419,80 @@
          width="120"
          :show-overflow-tooltip="true"
        >
        </el-table-column> -->
        </el-table-column>
        <el-table-column
          label="任务名称"
        <!-- <el-table-column
          label="门诊随访模板名称"
          align="center"
          key="taskName"
          prop="taskName"
          width="120"
        />
        <el-table-column
          label="随访方式"
          align="center"
          key="serviceform"
          prop="serviceform"
          width="120"
          key="templatename"
          prop="templatename"
          width="200"
        />
        <el-table-column
          label="随访人员"
          label="任务执行方式"
          align="center"
          key="operator"
          prop="operator"
          width="120"
        />
        <el-table-column
          label="就诊时间"
          sortable
          align="center"
          prop="admindate"
          key="preachform"
          prop="preachform"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.admindate) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="随访时间"
          sortable
          align="center"
          prop="finishtime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.finishtime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="随访状态"
          fixed="right"
          align="center"
          key="sendstate"
          prop="sendstate"
          width="120"
          :show-overflow-tooltip="true"
        >
        <template slot-scope="scope">
            <dict-tag :options="serviceState" :value="scope.row.sendstate" />
          <template slot-scope="scope">
            <span v-for="item in scope.row.preachform">{{ item }}、 </span>
          </template>
        </el-table-column>
        </el-table-column> -->
        <!-- <el-table-column
          label="任务发送流程"
          align="center"
          key="serviceSubtaskRecordList"
          prop="serviceSubtaskRecordList"
          width="160"
          :show-overflow-tooltip="true"
        >
          <template slot-scope="scope">
            <span v-for="item in scope.row.serviceSubtaskRecordList"
              >{{ item.remark }}、
            </span>
          </template>
        </el-table-column> -->
        <el-table-column
          label="操作"
          fixed="right"
          align="center"
          fixed="right"
          width="200"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <!-- <el-button
              size="medium"
              type="text"
              @click="followupvisit(scope.row)"
              v-hasPermi="['system:user:edit']"
              ><span class="button-bb"
                ><i class="el-icon-s-promotion"></i>重新随访</span
              ></el-button
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              placement="top"
            >
            <el-button
              size="medium"
              type="text"
              @click="handlestop(scope.row)"
              v-hasPermi="['system:user:edit']"
              ><span class="button-sc"
                ><i class="el-icon-delete"></i>停止</span
              ></el-button
            > -->
            <el-button
              size="medium"
              type="text"
              @click="Seedetails(scope.row)"
              v-hasPermi="['system:user:edit']"
              <el-button
                size="medium"
                type="text"
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
            </el-tooltip> -->
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="停止"
              placement="top"
            >
              <el-button
                size="medium"
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
              ></el-button
@@ -456,22 +644,21 @@
<script>
import {
  listUser,
  getUser,
  delUser,
  addUser,
  updateUser,
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import {
  getTaskservelist
} from "@/api/AiCentre/index";
import store from "@/store";
import { getTaskservelist } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
  name: "User",
  dicts: ["sys_normal_disable", "sys_user_sex"],
  name: "Discharge",
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
  components: { Treeselect },
  data() {
    return {
@@ -508,7 +695,10 @@
      },
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      radio: "",
      radios: [],
@@ -521,88 +711,61 @@
      },
      value: [],
      list: [],
      loading: false,
      states: [
        "Alabama",
        "Alaska",
        "Arizona",
        "Arkansas",
        "California",
        "Colorado",
        "Connecticut",
        "Delaware",
        "Florida",
        "Georgia",
        "Hawaii",
        "Idaho",
        "Illinois",
        "Indiana",
        "Iowa",
        "Kansas",
        "Kentucky",
        "Louisiana",
        "Maine",
        "Maryland",
        "Massachusetts",
        "Michigan",
        "Minnesota",
        "Mississippi",
        "Missouri",
        "Montana",
        "Nebraska",
        "Nevada",
        "New Hampshire",
        "New Jersey",
        "New Mexico",
        "New York",
        "North Carolina",
        "North Dakota",
        "Ohio",
        "Oklahoma",
        "Oregon",
        "Pennsylvania",
        "Rhode Island",
        "South Carolina",
        "South Dakota",
        "Tennessee",
        "Texas",
        "Utah",
        "Vermont",
        "Virginia",
        "Washington",
        "West Virginia",
        "Wisconsin",
        "Wyoming",
      ],
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() > Date.now();
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        shortcuts: [
          {
            text: "今天",
            onClick(picker) {
              picker.$emit("pick", new Date());
            },
          },
          {
            text: "昨天",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit("pick", date);
            },
          },
          {
            text: "一周前",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", date);
            },
          },
        ],
      },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      loading: false,
      cardlist: [
        {
          name: "门诊服务总量",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
        },
        // {
        //   name: "异常",
        //   value: 0,
        // },
        // {
        //   name: "发送失败",
        //   value: 0,
        // },
        {
          name: "待随访",
          value: 0,
        },
        {
          name: "已随访",
          value: 0,
        },
        // {
        //   name: "表单已发送",
        //   value: 0,
        // },
      ],
      // è¡¨å•参数
      form: {
        phonenumber: "",
@@ -616,62 +779,138 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType:3,
        serviceType: 11,
        sendstate:2,
        scopetype: [],
      },
      propss: { multiple: true },
      options: [],
      topicoptions: [
      {
        {
          value: 1,
          label: "表单已领取",
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
          label: "表单已发送",
        },
        {
          value: 4,
          label: "不执行",
        },
        {
          value: 5,
          label: "发送失败",
        },
        {
          value: 6,
          label: "已完成",
        },
      ],
      serviceState:[],
      topicoptionsyj: [
        {
          value: 1,
          label: "异常",
        },
        {
          value: 0,
          label: "正常",
        },
      ],
      errtype: "",
      leavehospitaldistrictcode: "",
      serviceState: [],
      checkboxlist: [],
      // è¡¨å•校验
      rules: {
      },
      rules: {},
    };
  },
  watch: {},
  created() {
    this.serviceState = store.getters.serviceState;
    this.getList();
    this.checkboxlist = store.getters.checkboxlist;
    this.errtype = this.$route.query.errtype;
    this.leavehospitaldistrictcode =
      this.$route.query.leavehospitaldistrictcode;
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    if (this.errtype) {
      this.toleadExport(2);
    } else {
      this.getList(1);
    }
    this.getConfigKey("sys.user.initPassword").then((response) => {
      this.initPassword = response.msg;
    });
  },
  // æœç´¢
  mounted() {
    this.list = this.states.map((item) => {
      return { value: `value:${item}`, label: `label:${item}` };
    });
  activated() {
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿åˆ—表 */
    getList() {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      // æŽ¥å—异常跳转
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      }
      getTaskservelist(this.topqueryParams).then(
        (response) => {
          this.userList = response.rows;
          this.total = response.total;
          this.loading = false;
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          // this.cardlist[1].value = response.rows[0].wzx;
          // this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          // this.cardlist[3].value = response.rows[0].fssb;
          // this.cardlist[4].value = response.rows[0].dsf;
          // this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
      );
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    Referencequestion(row) {
@@ -730,17 +969,32 @@
      this.resetForm("form");
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
    handleQuery(refresh) {
      this.topqueryParams.pageNum = 1;
      this.getList();
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
      this.getList(refresh);
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.topqueryParams.deptId = undefined;
      this.$refs.tree.setCurrentKey(null);
      this.handleQuery();
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 11,
        sendstate:2,
      };
      this.handleQuery(1);
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
@@ -774,7 +1028,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 3,
          serviceType: 11,
        },
      });
    },
@@ -804,13 +1058,13 @@
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
              this.getList(1);
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
              this.getList(1);
            });
          }
        }
@@ -825,7 +1079,7 @@
          return delUser(userIds);
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
@@ -838,7 +1092,7 @@
          return console.log("停止成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgWarning("停止成功");
        })
        .catch(() => {});
@@ -851,7 +1105,7 @@
          return console.log("开启成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("开启成功");
        })
        .catch(() => {});
@@ -864,7 +1118,7 @@
          return console.log("选中成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("重置成功");
        })
        .catch(() => {});
@@ -875,22 +1129,52 @@
    },
    // è·³è½¬è¯¦æƒ…页
    Seedetails(row) {
      let type = "";
      console.log(row, "rwo");
      if (row.preachformson) {
        if (row.preachformson.includes("3")) {
          type = 1;
          console.log(type, "rwo");
        }
      }
      this.$router.push({
        path: "/followvisit/record/detailpage/",
        query: { taskid: row.taskid, patid: row.patid },
        query: {
          taskid: row.taskid,
          patid: row.patid,
          id: row.id,
          Voicetype: type,
        },
      });
    },
    // å¯¼å…¥æŒ‰é’®
    toleadExport() {},
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
      if (too == 1) {
        this.topqueryParams.sendstate = 4;
        this.topqueryParams.excep = null;
      } else if (too == 2) {
        this.topqueryParams.excep = 1;
      }
      this.handleQuery();
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "system/user/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
        `user_${new Date().getTime()}.xlsx`
      );
    },
    // å¼‚常列渲染
    tableRowClassName({ row, rowIndex }) {
      if (row.excep == 1) {
        return "warning-row";
      }
      return "";
    },
  },
};
@@ -906,6 +1190,9 @@
.document {
  // width: 100px;
  height: 50px;
}
::v-deep.el-table .warning-row {
  background: #eec4c4;
}
.documentf {
@@ -985,6 +1272,28 @@
    }
  }
}
::v-deep.leftvlue .el-card__body {
  background: #d0e9fd;
}
::v-deep.leftvlue .el-card__body:hover {
  background: #8dc8f8;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
::v-deep.errleftvlue .el-card__body {
  background: #fdd0d7;
}
::v-deep.errleftvlue .el-card__body:hover {
  background: #f88d96;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
::v-deep.ysfleftvlue .el-card__body {
  background: #d0fdd8;
}
::v-deep.ysfleftvlue .el-card__body:hover {
  background: #8df8a4;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
.button-bb {
  font-weight: 500;
  background-color: #2ba05c;
src/views/followvisit/record/detailpage/index.vue
@@ -1,6 +1,6 @@
<template>
  <!-- èŠè¿žé¡µé¢è®°å½• -->
  <div class="Followupdetailspage">
  <div class="Followupdetailspage" id="app-container">
    <div class="Followuserinfo">
      <div>
        <div class="userinfo-text">
@@ -15,30 +15,41 @@
                >查看患者全部服务</el-button
              >
              <el-button v-else type="success" @click="getTaskservelist(id)"
                >查看患者本次服务信息</el-button
                >只展示本次服务信息</el-button
              >
            </div>
            <div style="margin-left: 20px; color: #59a0f0">
              <el-link
                href="https://9.208.2.207:6060/search-homepage"
                target="_blank"
                :underline="true"
              >
                å‰å¾€CDSS查询
              </el-link>
            </div>
          </div>
          <!-- <el-button type="success">随访后短信</el-button> -->
        </div>
      </div>
      <div>
        <el-table :data="logsheetlist" style="width: 100%">
        <el-table
          :data="logsheetlist"
          :row-class-name="tableRowClassName"
          style="width: 100%"
        >
          <el-table-column
            prop="sendname"
            align="center"
            label="姓名"
            width="100"
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="
                  gettoken360(
                    scope.row.sfzh,
                    scope.row.drcode,
                    scope.row.drname
                  )
                "
                ><span class="button-textsc">{{
                  scope.row.sendname
                }}</span></el-button
              >
            </template>
          </el-table-column>
          <el-table-column
            prop="taskName"
@@ -88,7 +99,7 @@
          <el-table-column
            prop="finishtime"
            align="center"
            label="完成时间"
            label="随访完成时间"
            width="200"
            show-overflow-tooltip
          >
@@ -184,7 +195,6 @@
                size="medium"
                type="text"
                @click="Seedetails(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-zx"
                  ><i class="el-icon-s-order"></i>查看</span
                ></el-button
@@ -200,18 +210,25 @@
          <div class="headline">
            <div>人工处理</div>
            <el-row :gutter="20">
              <el-col :span="12"
              <el-col :span="8"
                ><el-form-item label="联系电话">
                  <el-input
                    placeholder="联系电话缺失"
                    v-model="userform.telcode"
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="12"
              <el-col :span="8"
                ><el-form-item label="联系人电话">
                  <el-input
                    placeholder="联系人电话缺失"
                    v-model="userform.relativetelcode"
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="8"
                ><el-form-item label="联系人关系">
                  <el-input
                    placeholder="联系人关系缺失"
                    v-model="userform.relation"
                  ></el-input> </el-form-item
              ></el-col>
            </el-row>
@@ -243,9 +260,13 @@
              <el-button plain type="info" @click="Editsingletaskson('5')"
                >中心随访</el-button
              >
              <!-- <el-button type="primary" round @click="sendAgain()"
              <el-button
                type="primary"
                round
                v-if="this.form.isVisitAgain != 2"
                @click="sendAgain()"
                >再次随访</el-button
              > -->
              >
            </div>
          </el-form-item>
        </el-form>
@@ -262,13 +283,23 @@
                        maxlength="30"
                      ></el-input> </el-form-item
                  ></el-col>
                </el-row>
                <el-row :gutter="20">
                  <el-col :span="12"
                    ><el-form-item label="联系方式" prop="telcode">
                      <el-input
                        v-model="userform.telcode"
                        placeholder="请输入联系方式"
                        maxlength="30"
                        maxlength="20"
                      /> </el-form-item
                  ></el-col>
                  <el-col :span="12">
                    <el-form-item label="亲属联系方式" prop="name">
                      <el-input
                        v-model="userform.relativetelcode"
                        placeholder="请输入姓名"
                        maxlength="20"
                      ></el-input> </el-form-item
                  ></el-col>
                </el-row>
                <el-row :gutter="20">
@@ -323,12 +354,12 @@
            <div class="title">{{ taskname ? taskname : "问卷" }}</div>
            <div class="preview-left" v-if="!Voicetype">
              <!-- å•选 -->
              <div
                class="topic-dev"
                v-for="(item, index) in tableDatatop"
                :key="item.id"
              >
                <!-- å•选 -->
                <div
                  :class="
                    item.isabnormal
@@ -336,7 +367,7 @@
                      : 'scriptTopic-dev'
                  "
                  :key="index"
                  v-if="item.scriptType == 1"
                  v-if="item.scriptType == 1 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[单选]<span>{{ item.scriptContent }}</span>
@@ -344,14 +375,20 @@
                  <div class="dev-xx">
                    <el-radio-group
                      v-model="item.scriptResult"
                      @change="handleOptionChange($event, index, item)"
                      @change="
                        handleOptionChange(
                          $event,
                          index,
                          item.svyLibTemplateTargetoptions
                        )
                      "
                    >
                      <el-radio
                        v-for="(
                          items, index
                          items, indexs
                        ) in item.svyLibTemplateTargetoptions"
                        :class="items.isabnormal ? 'red-star' : ''"
                        :key="index"
                        :key="indexs"
                        :label="items.optioncontent"
                        >{{ items.optioncontent }}</el-radio
                      >
@@ -369,7 +406,7 @@
                      : 'scriptTopic-dev'
                  "
                  :key="index"
                  v-if="item.scriptType == 2"
                  v-if="item.scriptType == 2 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[多选]<span>{{ item.scriptContent }}</span>
@@ -400,7 +437,7 @@
                <div
                  class="scriptTopic-dev"
                  :key="index"
                  v-if="item.scriptType == 4"
                  v-if="item.scriptType == 4 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[问答]<span>{{ item.scriptContent }}</span>
@@ -532,7 +569,11 @@
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
    <el-dialog
      title="患者再次随访"
      v-dialogDrags
      :visible.sync="dialogFormVisible"
    >
      <el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px">
        <el-form-item label="任务名称">
          <el-input
@@ -565,30 +606,110 @@
            v-model="form.leavehospitaldistrictname"
          ></el-input>
        </el-form-item>
        <el-form-item label="出院时间">
          <el-input
            style="width: 400px"
            disabled
            v-model="form.endtime"
          ></el-input>
        </el-form-item>
        <div class="headline">上次随访</div>
        <el-divider></el-divider>
        <el-row>
          <el-col :span="12">
            <el-form-item label="随访方式">
              <el-select
                v-model="form.visitType2"
                filterable
                allow-create
                default-first-option
                disabled
                placeholder="请选择随访方式"
                class="custom-disabled"
              >
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="随访时间">
              <el-date-picker
                type="date"
                disabled
                placeholder="选择日期"
                :picker-options="pickerOptions"
                align="right"
                v-model="form.date2"
                class="custom-disabled"
              ></el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="随访记录">
          <el-input
            class="custom-disabled"
            type="textarea"
            disabled
            v-model="form.remark2"
          ></el-input>
        </el-form-item>
        <div class="headline">下次随访</div>
        <el-divider></el-divider>
        <el-row>
          <el-col :span="12">
            <el-form-item label="随访方式" prop="date1">
              <el-select
                v-model="form.visitType"
                filterable
                allow-create
                default-first-option
                @change="visitChange"
                placeholder="请选择随访方式"
              >
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="随访时间" prop="date1">
              <el-date-picker
                type="date"
                placeholder="选择日期"
                :picker-options="pickerOptions"
                align="right"
                v-model="form.date1"
              ></el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="随访方式" prop="resource">
          <el-radio-group v-model="form.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <!-- <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item> -->
        <el-form-item label="随访时间" prop="date1">
          <el-date-picker
            type="date"
            placeholder="选择日期"
            v-model="form.date1"
            style="width: 100%"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="随访记录">
          <el-input type="textarea" v-model="form.remark"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="warning" @click="dialogFormVisible = false"
          >取 æ¶ˆ</el-button
        >
        <el-button type="primary" @click="setupsubtask">确认创建服务</el-button>
      </div>
    </el-dialog>
@@ -607,8 +728,13 @@
  serviceSubtaskDetailadd,
  updatePersonVoices,
  addPersonVoices,
  query360PatInfo,
} from "@/api/AiCentre/index";
import { messagelistpatient, alterpatient } from "@/api/patient/homepage";
import {
  messagelistpatient,
  alterpatient,
  listcontactinformation,
} from "@/api/patient/homepage";
export default {
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
  data() {
@@ -620,23 +746,135 @@
      activeName: "wj",
      voice: "",
      templateid: "",
      again: "",
      zcform: {},
      form: {},
      tableDatatop: [], //题目表
      voiceDatatop: [], //题目表
      dynamicTags: [],
      zcrules: {
        date1: [
        resource: [
          { required: true, message: "请选择随访方式", trigger: "change" },
        ],
        resource: [
          { required: true, message: "请选择随访时间", trigger: "blur" },
        date1: [{ required: true, message: "请选择随访时间", trigger: "blur" }],
      },
      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      pickerOptions: {
        shortcuts: [
          {
            text: "七天后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
              picker.$emit("pick", date);
            },
          },
          {
            text: "15天后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 15);
              picker.$emit("pick", date);
            },
          },
          {
            text: "一个月后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 30);
              picker.$emit("pick", date);
            },
          },
          {
            text: "三个月后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 90);
              picker.$emit("pick", date);
            },
          },
          {
            text: "六个月后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 180);
              picker.$emit("pick", date);
            },
          },
          {
            text: "一年后",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() + 3600 * 1000 * 24 * 365);
              picker.$emit("pick", date);
            },
          },
        ],
      },
      options: [
        {
          value: "七天后",
          label: "七天后",
        },
        {
          value: "15天后",
          label: "15天后",
        },
        {
          value: "一个月后",
          label: "一个月后",
        },
        {
          value: "三个月后",
          label: "三个月后",
        },
        {
          value: "六个月后",
          label: "六个月后",
        },
        {
          value: "一年后",
          label: "一年后",
        },
      ],
      userform: {},
      Whetherall: false, //是否全部记录展示
      Whetherall: true, //是否全部记录展示
      dialogFormVisible: false,
      Voicetype: 0, //是否为语音服务
      visitCount: null,
      logsheetlist: [],
      topicobj: {},
      sendname: null,
@@ -652,10 +890,12 @@
    this.id = this.$route.query.id;
    this.sendname = this.$route.query.sendname;
    this.patid = this.$route.query.patid;
    this.again = this.$route.query.again;
    this.Voicetype = this.$route.query.Voicetype;
    this.visitCount = this.$route.query.visitCount;
    this.serviceType = this.$route.query.serviceType;
    this.getTaskservelist(this.id);
    this.getTaskservelist();
  },
  methods: {
@@ -668,10 +908,21 @@
        isFinish: false,
      }).then((res) => {
        if (res.code === 200) {
          this.tableDatatop = res.data.scriptResult.script;
          this.tableDatatop.forEach((item) => {
            console.log(item.scriptResultId, "scriptResultId");
          // é’ˆå¯¹å†æ¬¡éšè®¿æœåŠ¡è¿›è¡Œåˆ é™¤ç»“æžœèµ‹å€¼
          if (this.again && res.data.upScriptResult) {
            res.data.upScriptResult.forEach((itemA) => {
              const itemB = res.data.scriptResult.find(
                (item) => item.scriptContent === itemA.scriptContent
              );
              if (itemB) {
                itemB.scriptResult = itemA.scriptResult;
              }
            });
          }
          this.tableDatatop = res.data.scriptResult;
          this.tableDatatop.forEach((item) => {
            if (item.scriptType == 2) item.scriptResult = [];
            if (item.scriptResultId && item.scriptType != 2) {
              item.isoption = 3;
              item.scriptResult = item.scriptResult;
@@ -682,6 +933,22 @@
          });
          this.taskname = res.data.taskName;
          this.overdata();
        }
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
@@ -699,7 +966,33 @@
          // this.dynamicTags = response.rows[0].tagList.map(this.processElement);
        }
      });
      listcontactinformation({ patid: this.patid }).then((response) => {
        this.tableData = response.rows;
        if (this.tableData.length) {
          this.userform.relativetelcode = this.tableData[0].contactway;
          this.userform.relation = this.tableData[0].relation;
        }
      });
    },
    // å†æ¬¡éšè®¿æ—¶é—´é€‰å–
    visitChange(value) {
      // æ ¹æ®é€‰æ‹©çš„随访方式设置时间
      const now = new Date();
      if (value.includes("七天后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 7);
      } else if (value.includes("15天后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 15);
      } else if (value.includes("一个月后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 30);
      } else if (value.includes("三个月后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 90);
      } else if (value.includes("六个月后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 180);
      } else if (value.includes("一年后")) {
        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 365);
      }
    },
    // èŽ·å–è¯­éŸ³æ•°æ®
    getPersonVoices(id) {
      let obj = {
@@ -707,10 +1000,8 @@
        patid: this.patid,
        subId: id ? id : this.id,
      };
      console.log(this.voiceDatatop, "111");
      getPersonVoices(obj).then((res) => {
        console.log("222");
        if (res.code == 200) {
          this.voiceDatatop = res.data.serviceSubtaskDetails;
          this.voice = res.data.voice;
@@ -725,6 +1016,7 @@
              item.scriptResult = [];
            }
          });
          if (!this.tableDatatop.length) {
            this.puttaskid(this.templateid);
          }
@@ -752,7 +1044,6 @@
              item.scriptResult = [];
            }
          });
          console.log(this.tableDatatop, "this.tableDatatop");
        }
      });
    },
@@ -800,14 +1091,50 @@
            }
          });
          this.Editsingletasksonyic(6);
          this.$modal
            .confirm(
              '任务保存成功是否针对患者:"' + this.userform.name + '"再次随访?'
              '任务保存成功是否针对患者:"' +
                this.logsheetlist[0].sendname +
                '"再次随访?',
              "确认",
              {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                showCancelButton: true,
                dangerouslyUseHTMLString: true,
                confirmButtonClass: "custom-confirm-button", // è‡ªå®šä¹‰ç¡®è®¤æŒ‰é’®çš„类名
                cancelButtonClass: "custom-cancel-button", // è‡ªå®šä¹‰å–消按钮的类名
              }
            )
            .then(() => {
              document.querySelector("#app").scrollTo(0, 0);
              this.formtidy();
              this.dialogFormVisible = true;
            })
            .catch(() => {});
            .catch(() => {
              if (this.form.serviceType == 13) {
                if (this.visitCount) {
                  this.$router.push({
                    path: "/logisticsservice/zbAgain",
                  });
                } else {
                  this.$router.push({
                    path: "/logisticsservice/record",
                  });
                }
              } else if (form.serviceType == 2) {
                if (this.visitCount) {
                  this.$router.push({
                    path: "/followvisit/again",
                  });
                } else {
                  this.$router.push({
                    path: "/followvisit/discharge",
                  });
                }
              }
            });
        })
        .catch((error) => {
          // å¦‚果有任何一个异步操作失败,会进入这里
@@ -816,7 +1143,6 @@
    },
    yuyingetdetail() {
      this.tableDatatop.forEach((item, index) => {
        console.log(item.scriptResult, "scriptResult");
        item.scriptResult = item.scriptResult.join("&");
        item.templatequestionnum = index + 1;
        item.subId = this.id;
@@ -840,19 +1166,58 @@
          this.$modal.msgSuccess("服务保存成功");
          this.$modal
            .confirm(
              '任务保存成功是否针对患者:"' + this.userform.name + '"再次随访?'
              '任务保存成功是否针对患者:"' +
                this.userform.name +
                '"再次随访?',
              "确认",
              {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                showCancelButton: true,
                dangerouslyUseHTMLString: true,
                confirmButtonClass: "custom-confirm-button", // è‡ªå®šä¹‰ç¡®è®¤æŒ‰é’®çš„类名
                cancelButtonClass: "custom-cancel-button", // è‡ªå®šä¹‰å–消按钮的类名
              }
            )
            .then(() => {
              document.querySelector("#app").scrollTo(0, 0);
              this.formtidy();
              this.dialogFormVisible = true;
            })
            .catch(() => {});
            .catch(() => {
              if (this.form.serviceType == 13) {
                if (this.visitCount) {
                  this.$router.push({
                    path: "/logisticsservice/zbAgain",
                  });
                } else {
                  this.$router.push({
                    path: "/logisticsservice/record",
                  });
                }
              } else if (form.serviceType == 2) {
                if (this.visitCount) {
                  this.$router.push({
                    path: "/followvisit/again",
                  });
                } else {
                  this.$router.push({
                    path: "/followvisit/discharge",
                  });
                }
              }
            });
        }
      });
    },
    // å†æ¬¡éšè®¿æ•°æ®æ›´æ›¿
    formtidy() {
      this.form.visitType2 = this.form.visitType;
      this.form.date2 = this.form.longSendTime;
      this.form.remark2 = this.form.remark;
    },
    // èŽ·å–æ‚£è€…è®°å½•
    getTaskservelist(id) {
      this.id = id;
      if (id) {
        this.Whetherall = false;
      } else {
@@ -864,13 +1229,14 @@
        subId: id,
      }).then((res) => {
        if (res.code == 200) {
          this.form = res.rows[0].serviceSubtaskList[0];
          console.log(this.form, "this.form");
          this.form = res.rows[0].serviceSubtaskList.find(
            (item) => item.id == this.id
          );
          this.logsheetlist = res.rows[0].serviceSubtaskList;
          this.templateid = this.logsheetlist[0].templateid;
          const targetDate = new Date(this.form.longSendTime); // ç›®æ ‡æ—¥æœŸ
          const now = new Date(); // å½“前时间
          this.form.endtime = this.formatTime(this.form.endtime);
          if (now < targetDate && this.form.sendstate == 2) {
            this.$confirm("当前服务未到发送时间请谨慎修改", "提示", {
              confirmButtonText: "确定",
@@ -901,22 +1267,22 @@
          Editsingletaskson(objson).then((res) => {
            if (res.code) {
              this.$modal.msgSuccess("服务记录成功");
              this.getTaskservelist(this.id);
              this.getTaskservelist();
            }
          });
        }
      });
    },
    Editsingletasksonyic(sendstate) {
      console.log(sendstate,'sendstate');
      let objson = {};
      getTaskservelist({
        patid: this.patid,
        subId: this.id,
      }).then((res) => {
        if (res.code == 200) {
          objson = res.rows[0].serviceSubtaskList[0];
          objson = res.rows[0].serviceSubtaskList.find(
            (item) => item.id == this.id
          );
          objson.remark = this.form.remark;
          if (sendstate) objson.sendstate = sendstate;
          Editsingletaskson(objson).then((res) => {
@@ -929,14 +1295,24 @@
                  this.$modal.msgError("基础信息修改失败");
                }
              });
              this.getTaskservelist(this.id);
              this.getTaskservelist();
            }
          });
        }
      });
    },
    // å¼‚常列渲染
    tableRowClassName({ row, rowIndex }) {
      if (row.id == this.id) {
        return "warning-row";
      }
      return "";
    },
    // è°ƒèµ·å†æ¬¡å‘送
    sendAgain() {
      document.querySelector("#app").scrollTo(0, 0);
      // scrollTo(0, 0)
      this.formtidy();
      this.dialogFormVisible = true;
    },
    // æŸ¥çœ‹è¯¦æƒ…
@@ -949,19 +1325,27 @@
              this.Voicetype = 1;
            }
          }
          console.log(this.Voicetype, "this.Voicetype");
          this.taskid = row.taskid;
          this.id = row.id;
          this.patid = row.patid;
          this.serviceType = row.serviceType;
          this.getTaskservelist(this.id);
          this.getTaskservelist();
        })
        .catch(() => {});
    },
    handleOptionChange(a, b, c) {
      console.log(this.tableDatatop[b], "this.tableDatatop[b]");
      const result = c.find((item) => item.optioncontent == a);
      if (result.nextQuestion == 0) {
        this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => {
          acc.push(i > b ? { ...item, astrict: 1 } : item);
          return acc;
        }, []);
      } else {
        this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => {
          acc.push(i > b ? { ...item, astrict: 0 } : item);
          return acc;
        }, []);
      }
      if (this.Voicetype) {
        var obj = this.tableDatatop[b].ivrTaskScriptTargetoptionList.find(
          (item) => item.optioncontent == a
@@ -980,8 +1364,6 @@
    },
    overdata() {
      this.tableDatatop.forEach((item, index) => {
        console.log(item.svyLibTemplateTargetoptions);
        var obj = item.svyLibTemplateTargetoptions.find(
          (items) => items.optioncontent == item.scriptResult
        );
@@ -999,38 +1381,64 @@
    setupsubtask() {
      this.$refs["zcform"].validate((valid) => {
        if (valid) {
          this.form.remark =
            this.form.remark + "【" + this.getCurrentTime() + "】";
          let form = structuredClone(this.form);
          form.longSendTime = this.formatTime(form.date1);
          form.finishtime = "";
          if (form.resource) {
            if (form.resource == 2) {
              form.serviceType = 10;
              form.serviceType = 13;
              form.visitDeptCode = localStorage.getItem("deptCode");
              form.visitDeptName = "随访中心";
            } else {
              form.visitDeptCode = form.deptcode;
              form.visitDeptName = form.deptname;
            }
          } else {
            this.$modal.msgError("未选择随访方式");
            return;
          }
          form.id = null;
          // form.id = null;
          form.sendstate = 2;
          addserviceSubtask(form).then((res) => {
            if (res.code == 200) {
              this.$modal.msgSuccess("创建成功");
              if (form.serviceType == 13) {
                this.$router.push({
                  path: "/logisticsservice/again",
                });
              } else if (form.serviceType == 2) {
                this.$router.push({
                  path: "/logisticsservice/zbAgain",
                });
              }
            } else {
              this.$modal.msgError("创建失败");
            }
            document.querySelector("#app").scrollTo(0, 0);
            this.dialogFormVisible = false;
          });
        }
      });
    },
    updateScore(a, b, c) {
      console.log(a);
      console.log(b);
      console.log(c);
    getCurrentTime() {
      const now = new Date();
      const year = now.getFullYear();
      const month = String(now.getMonth() + 1).padStart(2, "0");
      const day = String(now.getDate()).padStart(2, "0");
      const hours = String(now.getHours()).padStart(2, "0");
      const minutes = String(now.getMinutes()).padStart(2, "0");
      const seconds = String(now.getSeconds()).padStart(2, "0");
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },
    updateScore(a, b, c) {},
  },
};
</script>
<style lang="scss" scoped>
<style lang="scss">
.Followupdetailspage {
  margin: 10px;
}
@@ -1053,6 +1461,9 @@
      margin-right: 20px;
    }
  }
}
::v-deep.el-table .warning-row {
  background: #c4e2ee;
}
.Followuserinfos {
  margin: 20px 10px;
@@ -1198,8 +1609,25 @@
::v-deep.el-link.el-link--default {
  color: #02a7f0 !important;
}
.el-message-box__btns button:nth-child(2) {
  margin-left: 10px;
  background-color: #f57676;
  border-color: #f57676;
}
.mulsz {
  font-size: 25px;
  margin-top: 20px;
}
.el-input.is-disabled .el-input__inner {
  background-color: #fff; /* èƒŒæ™¯é¢œè‰² */
  border-color: #dcdfe6; /* è¾¹æ¡†é¢œè‰² */
  color: #080808 !important; /* æ–‡å­—颜色 */
  cursor: not-allowed; /* é¼ æ ‡æ ·å¼ */
}
.el-textarea.is-disabled .el-textarea__inner {
  background-color: #fff; /* èƒŒæ™¯é¢œè‰² */
  border-color: #dcdfe6; /* è¾¹æ¡†é¢œè‰² */
  color: #080808 !important; /* æ–‡å­—颜色 */
  cursor: not-allowed; /* é¼ æ ‡æ ·å¼ */
}
</style>
src/views/followvisit/record/index.vue
copy from src/views/patient/ycquestionnaire/index.vue copy to src/views/followvisit/record/index.vue
Îļþ´Ó src/views/patient/ycquestionnaire/index.vue ¸´ÖÆ
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
                {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -119,6 +119,17 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="排序方式" prop="status">
          <el-select v-model="topqueryParams.sort" placeholder="请选择">
            <el-option
              v-for="item in topicoptionssort"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button
@@ -154,7 +165,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -188,11 +198,32 @@
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                plain
                size="medium"
                @click="buidegetTasklist()"
                >待办服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button type="success" size="medium" @click="onthatday()"
                >当日服务</el-button
              >
            </div>
          </div>
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -208,11 +239,24 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                gettoken360(scope.row.sfzh, scope.row.drcode, scope.row.drname)
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -221,32 +265,41 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
              placement="top-start"
            >
              <div v-if="scope.row.sendstate == 1">
                <el-tag type="primary" :disable-transitions="false"
                  >表单已领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 2">
                <el-tag type="primary" :disable-transitions="false"
                  >待随访</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 3">
                <el-tag type="success" :disable-transitions="false"
                  >表单已发送</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 4">
                <el-tag type="info" :disable-transitions="false">不执行</el-tag>
              </div>
              <div v-if="scope.row.sendstate == 5">
                <el-tag type="danger" :disable-transitions="false"
                  >发送失败</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="danger" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
            </el-tooltip>
          </template>
        </el-table-column>
        <!-- <el-table-column
@@ -258,7 +311,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -274,12 +327,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -361,7 +414,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -450,7 +503,7 @@
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              content="再次随访"
              placement="top"
            >
              <el-button
@@ -459,13 +512,15 @@
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
            </el-tooltip> -->
            <!-- <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
              class="item"
              effect="dark"
              content="停止"
              content="暂停服务"
              placement="top"
            >
              <el-button
@@ -473,8 +528,10 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
@@ -493,7 +550,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -536,7 +593,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -622,6 +679,50 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="form" :model="zcform" label-width="80px">
        <el-form-item label="患者名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="任务名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="随访方式">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item>
        <el-form-item label="随访时间" v-if="!zcform.delivery">
          <el-col :span="11">
            <el-date-picker
              type="date"
              placeholder="选择日期"
              v-model="zcform.date1"
              style="width: 100%"
            ></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker
              placeholder="选择时间"
              v-model="zcform.date2"
              style="width: 100%"
            ></el-time-picker>
          </el-col>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="dialogFormVisible = false"
          >ç¡® å®š</el-button
        >
      </div>
    </el-dialog>
  </div>
</template>
@@ -635,7 +736,11 @@
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import { getTaskservelist } from "@/api/AiCentre/index";
import {
  getTaskservelist,
  buidegetTasklist,
  query360PatInfo,
} from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -656,12 +761,13 @@
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      dialogFormVisible: false,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -677,19 +783,53 @@
      ruleForm: {
        type: [],
      },
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,10 +858,10 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -736,7 +876,7 @@
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -763,8 +903,10 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 13,
        searchscope: 3,
        sendstate: 2,
        sort: 2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -774,12 +916,16 @@
      topicoptions: [
        {
          value: null,
          label: "全部",
        },
        {
          value: 1,
          label: "表单已领取",
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -806,6 +952,24 @@
        {
          value: 0,
          label: "正常",
        },
      ],
      topicoptionssort: [
        {
          value: 0,
          label: "出院时间(正序)",
        },
        {
          value: 1,
          label: "出院时间(倒序)",
        },
        {
          value: 2,
          label: "发送时间(正序)",
        },
        {
          value: 3,
          label: "发送时间(倒序)",
        },
      ],
      errtype: "",
@@ -848,7 +1012,7 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
@@ -866,12 +1030,93 @@
        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
      }
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      if (
        this.topqueryParams.leavehospitaldistrictcodes[0] &&
        this.topqueryParams.leaveldeptcodes[0]
      ) {
        this.topqueryParams.deptOrDistrict = 2;
      } else {
        this.topqueryParams.deptOrDistrict = 1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      // æŽ¥å—异常跳转
      if (this.errtype) {
        this.topqueryParams.leavehospitaldistrictcodes.push(
          this.leavehospitaldistrictcode
        );
      }
      let obj = {
        pageNum: 1,
        pageSize: 10,
        leavehospitaldistrictcodes:
          this.topqueryParams.leavehospitaldistrictcodes,
        sendstates: [2, 3],
        leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
      };
      buidegetTasklist(obj).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
@@ -881,7 +1126,7 @@
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[4].value = response.rows[0].dsf;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
@@ -893,8 +1138,10 @@
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            item.preachform = idArray.map((value) => {
              // æŸ¥æ‰¾id对应的对象
@@ -927,7 +1174,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1005,8 +1252,13 @@
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 13,
        sort: 2,
        searchscope: 2,
        sendstate: 2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
      this.handleQuery(1);
    },
@@ -1027,6 +1279,15 @@
        this.$refs.saveTagInput.$refs.input.focus();
      });
    },
    onthatday() {
      this.topqueryParams.startSendDateTime = this.getCurrentDate();
      this.topqueryParams.endSendDateTime = this.getCurrentDate();
      this.getList(1);
    },
    getCurrentDate() {
      const now = new Date();
      return now.toISOString().slice(0, 10); // æˆªå–前10个字符,即 YYYY-MM-DD
    },
    //获取失去焦点触发
    handleInputConfirm() {
      let inputValue = this.inputValue;
@@ -1042,7 +1303,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 13,
        },
      });
    },
@@ -1158,8 +1419,44 @@
          patid: row.patid,
          id: row.id,
          Voicetype: type,
          again: 1,
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit() {
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = "服务暂停";
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
@@ -1176,7 +1473,8 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        // "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1324,7 +1622,7 @@
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  background-color: #b3a21f;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
src/views/followvisit/satisfaction/index.vue
@@ -155,6 +155,7 @@
        />
        <el-table-column
          label="姓名"
          width="100"
          align="center"
          sortable
          key="userName"
@@ -290,7 +291,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -333,7 +334,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -381,7 +382,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // éƒ¨é—¨åç§°
@@ -412,13 +413,13 @@
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -606,7 +607,7 @@
    });
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿åˆ—表 */
    /** æŸ¥è¯¢å½±åƒéšè®¿åˆ—表 */
    getList() {
      this.loading = true;
      listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then(
@@ -617,7 +618,7 @@
        }
      );
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -635,7 +636,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -723,7 +724,7 @@
      // getUser().then((response) => {
      //   this.postOptions = response.posts;
      //   this.roleOptions = response.roles;
      //   this.title = "新增门诊随访";
      //   this.title = "新增影像随访";
      //   this.form.password = this.initPassword;
      // });
    },
src/views/followvisit/tasklist/index.vue
@@ -23,7 +23,7 @@
            @keyup.enter.native="handleQuery"
          ></el-input>
        </el-form-item>
        <el-form-item label="创发送时间">
        <el-form-item label="发送时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
@@ -142,7 +142,6 @@
        <el-table-column
          label="任务名称"
          fixed
          width="120"
          align="center"
          key="taskName"
          prop="taskName"
@@ -150,7 +149,6 @@
        />
        <el-table-column
          label="任务描述"
          width="280"
          align="center"
          key="taskDesc"
          prop="taskDesc"
@@ -158,20 +156,26 @@
        />
        <el-table-column
          label="服务项目"
          width="120"
          align="center"
          key="templatename"
          prop="templatename"
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="待执行/总任务"
          label="总任务/已随访"
          align="center"
          key="nickName"
          width="120"
          prop="nickName"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
            <span
              >{{
                scope.row.wfs || scope.row.wfs == 0
                  ? scope.row.wfs + scope.row.yfs
                  : ""
              }}/{{ scope.row.yfs }}</span
            >
          </template>
        </el-table-column>
        <el-table-column
@@ -179,7 +183,6 @@
          align="center"
          key="longTask"
          prop="longTask"
          width="120"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.longTask ? "长期任务" : "非长期" }}</span>
@@ -191,7 +194,6 @@
          align="center"
          key="sendState"
          prop="sendState"
          width="120"
        >
          <template slot-scope="scope">
            <dict-tag
@@ -206,7 +208,6 @@
          align="center"
          key="createBy"
          prop="createBy"
          width="120"
          :show-overflow-tooltip="true"
        />
        <el-table-column
@@ -214,7 +215,6 @@
          sortable
          align="center"
          prop="createTime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.createTime) }}</span>
@@ -225,7 +225,7 @@
          label="操作"
          fixed="right"
          align="center"
          width="180"
          width="240"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
@@ -269,7 +269,7 @@
          label="任务详情"
          fixed="right"
          align="center"
          width="200"
          width="240"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
@@ -421,7 +421,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // éƒ¨é—¨åç§°
@@ -445,14 +445,14 @@
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      TaskOperation: {},
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -468,6 +468,10 @@
        {
          value: 3,
          label: "宣教关怀",
        },
        {
          value: 4,
          label: "消息通知",
        },
      ],
      taskoptions: [
@@ -491,21 +495,37 @@
          value: "5",
          label: "复诊管理",
        },
        {
          value: "6",
          label: "满意度调查",
        },
        // {
        //   value: "5",
        //   label: "满意度调查",
        // },
        {
          value: "7",
          label: "患者日常报告",
          label: "患者报告",
        },
        // {
        //   value: "8",
        //   label: "其他通知",
        // },
        {
          value: "9",
          label: "患者异常报告",
          label: "体检随访",
        },
        // {
        //   value: "10",
        //   label: "医技随访",
        // },
        {
          value: "11",
          label: "影像随访",
        },
        {
          value: "8",
          label: "其他通知",
          value: "12",
          label: "心电随访",
        },
        {
          value: "13",
          label: "专病随访",
        },
      ],
      tasktopic: "2", //新增类型
@@ -665,11 +685,11 @@
  },
  watch: {},
  created() {
    this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
    this.topqueryParams.leavehospitaldistrictcodes =
      store.getters.belongWards.map((obj) => obj.districtCode);
    // this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
    //   (obj) => obj.deptCode
    // );
    // this.topqueryParams.leavehospitaldistrictcodes =
    //   store.getters.belongWards.map((obj) => obj.districtCode);
    this.tasktopic = this.$route.query.tasktopic
      ? this.$route.query.tasktopic
      : this.tasktopic;
@@ -692,7 +712,6 @@
    /** æŸ¥è¯¢ä»»åŠ¡åˆ—è¡¨ */
    getList() {
      this.loading = true;
      console.log(this.topqueryParams.type);
      this.topqueryParams.serviceType = Number(this.tasktopic);
      if (
@@ -702,7 +721,7 @@
        this.tasktopic == 7 ||
        this.tasktopic == 6
      ) {
        if (!this.topqueryParams.type) this.topqueryParams.type = '2';
        if (!this.topqueryParams.type) this.topqueryParams.type = "2";
        this.longtermlist = [
          {
            value: 1,
@@ -714,7 +733,7 @@
          },
        ];
      } else if (this.tasktopic == 4 || this.tasktopic == 8) {
        if (!this.topqueryParams.type) this.topqueryParams.type = '3';
        if (!this.topqueryParams.type) this.topqueryParams.type = "3";
        this.longtermlist = [
          {
            value: 3,
@@ -722,7 +741,7 @@
          },
        ];
      } else if (this.tasktopic == 5) {
        if (!this.topqueryParams.type) this.topqueryParams.type = '1';
        if (!this.topqueryParams.type) this.topqueryParams.type = "1";
        this.longtermlist = [
          {
            value: 1,
@@ -738,8 +757,8 @@
      //   this.taskoptions,
      //   this.tasktopic
      // );
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
      this.topqueryParams.beginTime = this.dateRange[0];
      this.topqueryParams.endTime = this.dateRange[1];
      getTasklist(this.topqueryParams).then((response) => {
        this.userList = response.rows;
        this.total = response.total;
@@ -747,7 +766,7 @@
        this.loading = false;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -798,8 +817,15 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.topqueryParams.deptId = undefined;
      this.$refs.tree.setCurrentKey(null);
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        type: 2,
        userName: undefined,
        tagid: undefined,
        topic: undefined,
      };
      // this.$refs.tree.setCurrentKey(null);
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/followvisit/technology/index.vue
copy from src/views/patient/ycquestionnaire/index.vue copy to src/views/followvisit/technology/index.vue
Îļþ´Ó src/views/patient/ycquestionnaire/index.vue ¸´ÖÆ
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
                {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -154,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -188,11 +187,24 @@
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                plain
                size="medium"
                @click="buidegetTasklist()"
                >待办服务</el-button
              >
            </div>
          </div>
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -208,11 +220,24 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                gettoken360(scope.row.sfzh,scope.row.drcode,scope.row.drname)
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -221,32 +246,41 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
              placement="top-start"
            >
              <div v-if="scope.row.sendstate == 1">
                <el-tag type="primary" :disable-transitions="false"
                  >表单已领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 2">
                <el-tag type="primary" :disable-transitions="false"
                  >待随访</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 3">
                <el-tag type="success" :disable-transitions="false"
                  >表单已发送</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 4">
                <el-tag type="info" :disable-transitions="false">不执行</el-tag>
              </div>
              <div v-if="scope.row.sendstate == 5">
                <el-tag type="danger" :disable-transitions="false"
                  >发送失败</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="danger" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
            </el-tooltip>
          </template>
        </el-table-column>
        <!-- <el-table-column
@@ -258,7 +292,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -274,12 +308,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -361,7 +395,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -450,7 +484,7 @@
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              content="再次随访"
              placement="top"
            >
              <el-button
@@ -459,13 +493,15 @@
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
            </el-tooltip> -->
            <!-- <el-tooltip
            <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
              class="item"
              effect="dark"
              content="停止"
              content="暂停服务"
              placement="top"
            >
              <el-button
@@ -473,9 +509,11 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
            </el-tooltip> -->
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip>
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
@@ -493,7 +531,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -536,7 +574,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -622,6 +660,50 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="form" :model="zcform" label-width="80px">
        <el-form-item label="患者名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="任务名称">
          <el-input style="width: 400px" v-model="zcform.name"></el-input>
        </el-form-item>
        <el-form-item label="随访方式">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item>
        <el-form-item label="随访时间" v-if="!zcform.delivery">
          <el-col :span="11">
            <el-date-picker
              type="date"
              placeholder="选择日期"
              v-model="zcform.date1"
              style="width: 100%"
            ></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker
              placeholder="选择时间"
              v-model="zcform.date2"
              style="width: 100%"
            ></el-time-picker>
          </el-col>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="dialogFormVisible = false"
          >ç¡® å®š</el-button
        >
      </div>
    </el-dialog>
  </div>
</template>
@@ -635,7 +717,7 @@
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import { getTaskservelist } from "@/api/AiCentre/index";
import { getTaskservelist, buidegetTasklist,query360PatInfo } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -656,12 +738,13 @@
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      dialogFormVisible: false,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -677,19 +760,20 @@
      ruleForm: {
        type: [],
      },
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,10 +802,10 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -736,7 +820,7 @@
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -749,7 +833,39 @@
        //   value: 0,
        // },
      ],
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: '',
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      // è¡¨å•参数
      form: {
        phonenumber: "",
@@ -763,8 +879,9 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 10,
        searchscope: 3,
        sendstate:2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -779,7 +896,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -848,7 +965,7 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
@@ -877,12 +994,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -893,8 +1010,10 @@
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            item.preachform = idArray.map((value) => {
              // æŸ¥æ‰¾id对应的对象
@@ -908,6 +1027,85 @@
        });
        this.total = response.total;
      });
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      // æŽ¥å—异常跳转
      if (this.errtype) {
        this.topqueryParams.leavehospitaldistrictcodes.push(
          this.leavehospitaldistrictcode
        );
      }
      let obj = {
        pageNum: 1,
        pageSize: 10,
        leavehospitaldistrictcodes:
          this.topqueryParams.leavehospitaldistrictcodes,
        sendstates: [2, 3],
        leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
      };
      buidegetTasklist(obj).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dsf;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    //患者360跳转
    gettoken360(sfzh,drcode,drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC=='丽水市中医院') {
        this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728';
        this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY';
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
           window.open(res.data.url, '_blank');
          // this.linkUrl = res.data.url;
        }else{
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    Referencequestion(row) {
@@ -927,7 +1125,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1005,8 +1203,9 @@
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 10,
        searchscope: 2,
        sendstate:2,
      };
      this.handleQuery(1);
    },
@@ -1042,7 +1241,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 10,
        },
      });
    },
@@ -1161,6 +1360,41 @@
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit() {
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = "服务暂停";
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
      if (too == 1) {
@@ -1176,7 +1410,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1324,7 +1558,7 @@
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  background-color: #b3a21f;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
src/views/followvisit/zbAgain/index.vue
copy from src/views/patient/ycquestionnaire/index.vue copy to src/views/followvisit/zbAgain/index.vue
Îļþ´Ó src/views/patient/ycquestionnaire/index.vue ¸´ÖÆ
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
                {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -90,11 +90,28 @@
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="应随访时间">
          <el-date-picker
            v-model="dateRangefs"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="患者姓名" prop="sendname">
          <el-input
            v-model="topqueryParams.sendname"
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="诊断名称" prop="leavediagname">
          <el-input
            v-model="topqueryParams.leavediagname"
            placeholder="请输入诊断名称"
          ></el-input>
        </el-form-item>
@@ -119,6 +136,17 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="排序方式" prop="status">
          <el-select v-model="topqueryParams.sort" placeholder="请选择">
            <el-option
              v-for="item in topicoptionssort"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button
@@ -136,6 +164,20 @@
      <el-divider></el-divider>
      <el-row :gutter="10" class="mb8">
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
@@ -145,21 +187,7 @@
            >新增</el-button
          >
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                plain
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
@@ -188,11 +216,45 @@
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                plain
                size="medium"
                @click="buidegetTasklist()"
                >待办服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="primary"
                plain
                size="medium"
                @click="affiliation()"
                >本人所属服务</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button type="success" size="medium" @click="onthatday()"
                >当日服务</el-button
              >
            </div>
          </div>
        </el-col>
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -200,19 +262,33 @@
        <el-table-column
          label="任务名称"
          fixed
          width="150"
          show-overflow-tooltip
          align="center"
          key="taskName"
          prop="taskName"
          width="180"
        />
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                gettoken360(scope.row.sfzh, scope.row.drcode, scope.row.drname)
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -221,32 +297,41 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
              :content="scope.row.remark"
              placement="top-start"
            >
              <div v-if="scope.row.sendstate == 1">
                <el-tag type="primary" :disable-transitions="false"
                  >表单已领取</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 2">
                <el-tag type="primary" :disable-transitions="false"
                  >待随访</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 3">
                <el-tag type="success" :disable-transitions="false"
                  >表单已发送</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 4">
                <el-tag type="info" :disable-transitions="false">不执行</el-tag>
              </div>
              <div v-if="scope.row.sendstate == 5">
                <el-tag type="danger" :disable-transitions="false"
                  >发送失败</el-tag
                >
              </div>
              <div v-if="scope.row.sendstate == 6">
                <el-tag type="success" :disable-transitions="false"
                  >已完成</el-tag
                >
              </div>
            </el-tooltip>
          </template>
        </el-table-column>
        <!-- <el-table-column
@@ -258,7 +343,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -271,15 +356,9 @@
            />
          </template>
        </el-table-column>
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -312,6 +391,20 @@
          </template></el-table-column
        >
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <el-table-column
          label="随访人员"
          align="center"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="出院天数"
          width="120"
          align="center"
@@ -343,13 +436,6 @@
          key="nurseName"
          prop="nurseName"
        />
        <el-table-column
          label="主治医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
@@ -361,13 +447,21 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
          label="首次随访科室"
          align="center"
          key="deptname"
          prop="deptname"
          width="120"
        >
        </el-table-column>
        <el-table-column
          label="本次科室"
          align="center"
          key="visitDeptName"
          prop="visitDeptName"
          width="120"
        >
        </el-table-column>
@@ -380,15 +474,15 @@
        >
        </el-table-column>
        <!-- <el-table-column
          label="疾病名称"
        <el-table-column
          label="诊断名称"
          align="center"
          key="icdName"
          prop="icdName"
          key="leavediagname"
          prop="leavediagname"
          width="120"
          :show-overflow-tooltip="true"
        >
        </el-table-column> -->
        </el-table-column>
        <el-table-column
          label="出院随访模板名称"
@@ -425,47 +519,55 @@
        </el-table-column> -->
        <el-table-column
          label="任务结果说明"
          width="200"
          width="220"
          align="center"
          key="remark"
          prop="remark"
        >
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            <el-tooltip
              :content="scope.row.remark"
              placement="top"
              effect="dark"
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
              <el-tag
                type="warning"
                v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
                >{{ scope.row.remark }}</el-tag
              >
              <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
          fixed="right"
          width="200"
          width="300"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新随访"
              content="再次随访"
              placement="top"
            >
              <el-button
                size="medium"
                type="text"
                v-if="scope.row.isVisitAgain!=2"
                @click="followupvisit(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
              ></el-button>
            </el-tooltip> -->
            <!-- <el-tooltip
                  ><i class="el-icon-s-promotion"></i>再次随访</span
                ></el-button
              >
            </el-tooltip>
            <el-tooltip
              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
              class="item"
              effect="dark"
              content="停止"
              content="暂停服务"
              placement="top"
            >
              <el-button
@@ -473,12 +575,22 @@
                type="text"
                @click="handlestop(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
                ><span class="button-sc"
                  ><i class="el-icon-remove-outline"></i>暂停服务</span
                ></el-button
              >
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
              ></el-button
            >
            <el-button
              size="medium"
              type="text"
              @click="handleUpdate(scope.row)"
              ><span class="button-textxga"
                ><i class="el-icon-edit"></i>患者过滤</span
              ></el-button
            >
          </template>
@@ -493,58 +605,61 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
      width="700px"
      append-to-body
      :title="amendtag ? '修改患者信息' : '新增患者'"
      :visible.sync="Labelchange"
      width="900px"
    >
      <el-form ref="form" :model="form" label-width="100px">
        <el-row :gutter="20">
          <el-col :span="12"
            ><el-form-item label="任务名称">
              <el-input v-model="form.name"></el-input> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="所属科室">
              <el-select v-model="form.region" placeholder="请选择科室">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item></el-col
        ></el-row>
        <el-row :gutter="20">
          <el-col :span="24"
            ><el-form-item label="随访类型">
              <el-select v-model="form.region" placeholder="请选择随访类型">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select> </el-form-item
          ></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="服务模块">
              <el-select v-model="form.region" placeholder="请选择模块">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名" width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in sextype"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="年龄" prop="age">
              <el-input
                v-model="form.age"
                placeholder="请输入年龄"
                maxlength="30"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
        <el-row>
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            <el-form-item label="过滤原因">
              <el-input
                v-model="form.notrequiredreason"
                type="textarea"
                placeholder="请输入过滤原因"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">提 äº¤</el-button>
        <el-button @click="cancel">返 å›ž</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <!-- ä¿®æ”¹å‘送时间对话框 -->
@@ -622,20 +737,96 @@
        >
      </span>
    </el-dialog>
    <!-- å†æ¬¡éšè®¿ -->
    <el-dialog title="患者再次随访" :visible.sync="dialogFormVisible">
      <el-form ref="zcform" :rules="zcrules" :model="zcform" label-width="80px">
        <el-form-item label="任务名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.taskName"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者名称">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.sendname"
          ></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.age"
          ></el-input>
        </el-form-item>
        <el-form-item label="科室">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.deptname"
          ></el-input>
        </el-form-item>
        <el-form-item label="病区">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.leavehospitaldistrictname"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访方式" prop="resource">
          <el-radio-group v-model="zcform.resource">
            <el-radio label="1">本病区随访</el-radio>
            <el-radio label="2">随访中心随访</el-radio>
          </el-radio-group>
        </el-form-item>
        <!-- <el-form-item label="即刻发送">
          <el-switch v-model="zcform.delivery"></el-switch>
        </el-form-item> -->
        <el-form-item label="出院时间">
          <el-input
            style="width: 400px"
            disabled
            v-model="zcform.endtime"
          ></el-input>
        </el-form-item>
        <el-form-item label="随访完成时间" prop="date1">
          <el-date-picker
            type="date"
            placeholder="选择日期"
            v-model="zcform.date1"
            style="width: 100%"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="随访记录">
          <el-input type="textarea" v-model="zcform.remark"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="setupsubtask">确认创建服务</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import {
  listUser,
  getUser,
  delUser,
  addUser,
  updateUser,
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import { getTaskservelist } from "@/api/AiCentre/index";
import {
  getTaskservelist,
  buidegetTasklist,
  addserviceSubtask,
  query360PatInfo,
} from "@/api/AiCentre/index";
import { alterpatient, particularpatient } from "@/api/patient/homepage";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -656,12 +847,13 @@
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      dialogFormVisible: false,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -672,24 +864,27 @@
      initPassword: undefined,
      // æ—¥æœŸèŒƒå›´
      dateRange: [],
      dateRangefs: [],
      // å²—位选项
      postOptions: [],
      ruleForm: {
        type: [],
      },
      zcform: {},
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      Labelchange: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,25 +913,20 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
        },
        // {
        //   name: "异常",
        //   value: 0,
        // },
        {
          name: "发送失败",
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -749,7 +939,14 @@
        //   value: 0,
        // },
      ],
      zcrules: {
        date1: [
          { required: true, message: "请选择随访方式", trigger: "change" },
        ],
        resource: [
          { required: true, message: "请选择随访时间", trigger: "blur" },
        ],
      },
      // è¡¨å•参数
      form: {
        phonenumber: "",
@@ -759,14 +956,36 @@
        qystatus: "",
        btstatus: "",
      },
      topicoptionssort: [
        {
          value: 0,
          label: "出院时间(正序)",
        },
        {
          value: 1,
          label: "出院时间(倒序)",
        },
        {
          value: 2,
          label: "发送时间(正序)",
        },
        {
          value: 3,
          label: "发送时间(倒序)",
        },
      ],
      // æŸ¥è¯¢å‚æ•°
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        sendstate: 2,
        sort: 2, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 13,
        searchscope: 3,
        visitCount: 2,
        scopetype: [],
        leaveldeptcodes: [],
        visitDeptCodes: [],
        leaveldeptcodes:[],
        leavehospitaldistrictcodes: [],
      },
      propss: { multiple: true },
@@ -774,12 +993,16 @@
      topicoptions: [
        {
          value: null,
          label: "全部",
        },
        {
          value: 1,
          label: "表单已领取",
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -798,6 +1021,16 @@
          label: "已完成",
        },
      ],
      sextype: [
        {
          value: 1,
          label: "男",
        },
        {
          value: 2,
          label: "女",
        },
      ],
      topicoptionsyj: [
        {
          value: 1,
@@ -808,6 +1041,41 @@
          label: "正常",
        },
      ],
      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      amendtag: false,
      errtype: "",
      leavehospitaldistrictcode: "",
      serviceState: [],
@@ -848,10 +1116,14 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢éšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -866,12 +1138,95 @@
        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
      }
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      if (
        this.topqueryParams.leavehospitaldistrictcodes[0] &&
        this.topqueryParams.visitDeptCodes[0]&&this.topqueryParams.leaveldeptcodes[0]
      ) {
        this.topqueryParams.deptOrDistrict = 2;
      } else {
        this.topqueryParams.deptOrDistrict = 1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
      this.topqueryParams.startSendDateTime = this.getCurrentDate();
      this.topqueryParams.endSendDateTime = this.getCurrentDate();
      this.getList(1);
    },
    getCurrentDate() {
      const now = new Date();
      return now.toISOString().slice(0, 10); // æˆªå–前10个字符,即 YYYY-MM-DD
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
          this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      // æŽ¥å—异常跳转
      if (this.errtype) {
        this.topqueryParams.leavehospitaldistrictcodes.push(
          this.leavehospitaldistrictcode
        );
      }
      let obj = {
        pageNum: 1,
        pageSize: 10,
        leavehospitaldistrictcodes:
          this.topqueryParams.leavehospitaldistrictcodes,
        sendstates: [2, 3],
        visitDeptCodes: this.topqueryParams.visitDeptCodes,
        leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
      };
      buidegetTasklist(obj).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
@@ -881,7 +1236,7 @@
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[4].value = response.rows[0].dsf;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
@@ -893,8 +1248,10 @@
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            item.preachform = idArray.map((value) => {
              // æŸ¥æ‰¾id对应的对象
@@ -927,7 +1284,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -942,11 +1299,7 @@
          row.status = row.status === "0" ? "1" : "0";
        });
    },
    // å–消按钮
    cancel() {
      this.addalteropen = false;
      this.reset();
    },
    // è¡¨å•重置
    reset() {
      this.form = {
@@ -968,6 +1321,9 @@
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery(refresh) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.visitDeptCodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -977,7 +1333,9 @@
      this.topqueryParams.pageNum = 1;
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
      this.topqueryParams.startSendDateTime = this.dateRangefs[0];
      this.topqueryParams.endSendDateTime = this.dateRangefs[1];
      console.log("2");
      this.getList(refresh);
    },
    // æ‚£è€…范围处理
@@ -985,14 +1343,16 @@
      let type = value[0];
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.visitDeptCodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.visitDeptCodes.push(code);
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
        this.topqueryParams.searchscope = 1;
      } else if (type == 2) {
        this.topqueryParams.leavehospitaldistrictcodes.push(code);
        this.topqueryParams.visitDeptCodes = [];
        this.topqueryParams.leaveldeptcodes = [];
        this.topqueryParams.searchscope = 2;
      } else {
@@ -1002,11 +1362,19 @@
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.dateRangefs = [];
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        searchscope: 2,
        sendstate: 2,
        sort: 2, //0 å‡ºé™¢æ—¶é—´(正序)    1 å‡ºé™¢æ—¶é—´(倒序)   2 å‘送时间(正序)    3 å‘送时间(倒序)
        serviceType: 13,
        searchscope: 3,
        visitCount: 2,
        scopetype: [],
        visitDeptCodes: [],
        leaveldeptcodes:[],
        leavehospitaldistrictcodes: [],
      };
      this.handleQuery(1);
    },
@@ -1042,8 +1410,24 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 13,
        },
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
@@ -1063,24 +1447,28 @@
        })
        .catch(() => {});
    },
    // å–消按钮
    cancel() {
      this.Labelchange = false;
      this.reset();
    },
    /** æäº¤æŒ‰é’® */
    submitForm: function () {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          if (this.form.userId != undefined) {
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
          this.form.isoperation = 2;
          this.form.notrequiredFlag = 1;
          alterpatient(this.form)
            .then((response) => {
              console.log(response);
            })
            .then(() => {
              this.getList(1);
              this.$modal.msgSuccess("患者过滤成功");
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList(1);
            });
          }
          this.reset();
          this.Labelchange = false;
        }
      });
    },
@@ -1148,7 +1536,6 @@
      if (row.preachformson) {
        if (row.preachformson.includes("3")) {
          type = 1;
          console.log(type, "rwo");
        }
      }
      this.$router.push({
@@ -1158,8 +1545,54 @@
          patid: row.patid,
          id: row.id,
          Voicetype: type,
          visitCount: this.topqueryParams.visitCount,
        },
      });
    },
    // å†æ¬¡éšè®¿
    followupvisit(row) {
      this.zcform = row;
      this.zcform.endtime = this.formatTime(this.zcform.endtime);
      this.dialogFormVisible = true;
    },
    onSubmit() {},
    // æš‚停服务
    handlestop(row) {
      let objson = row;
      this.$modal
        .confirm(
          '是否确认暂停任务名称为"' +
            row.taskName +
            '患者名称为"' +
            row.sendname +
            '"的数据项?'
        )
        .then(() => {
          getTaskservelist({
            patid: row.patid,
            taskid: row.taskid,
          }).then((res) => {
            if (res.code == 200) {
              objson.sendstate = 4;
              objson.remark = "服务暂停";
              Editsingletaskson(objson).then((res) => {
                if (res.code) {
                  this.$modal.msgSuccess("记录成功");
                  this.getList(1);
                }
              });
            }
          });
        })
        .catch(() => {});
    },
    // æ‚£è€…过滤触发
    handleUpdate(row) {
      particularpatient(row.patid).then((response) => {
        this.form = response.data;
      });
      this.amendtag = true;
      this.Labelchange = true;
    },
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
@@ -1176,7 +1609,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
@@ -1189,6 +1622,48 @@
        return "warning-row";
      }
      return "";
    },
    // åˆ›å»ºå†æ¬¡éšè®¿æœåŠ¡
    setupsubtask() {
      this.$refs["zcform"].validate((valid) => {
        if (valid) {
          this.zcform.remark =
            this.zcform.remark + "【" + this.getCurrentTime() + "】";
          let form = structuredClone(this.zcform);
          form.longSendTime = this.formatTime(form.date1);
          form.finishtime = "";
          if (form.resource) {
            if (form.resource == 2) {
              form.serviceType = 13;
            }
          } else {
            this.$modal.msgError("未选择随访方式");
          }
          form.id = null;
          form.sendstate = 2;
          form.preachform = form.preachformson;
          form.longTask = 0;
          addserviceSubtask(form).then((res) => {
            if (res.code == 200) {
              this.$modal.msgSuccess("创建成功");
            } else {
              this.$modal.msgError("创建失败");
            }
            this.dialogFormVisible = false;
          });
        }
      });
    },
    getCurrentTime() {
      const now = new Date();
      const year = now.getFullYear();
      const month = String(now.getMonth() + 1).padStart(2, "0");
      const day = String(now.getDate()).padStart(2, "0");
      const hours = String(now.getHours()).padStart(2, "0");
      const minutes = String(now.getMinutes()).padStart(2, "0");
      const seconds = String(now.getSeconds()).padStart(2, "0");
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },
  },
};
@@ -1324,7 +1799,7 @@
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  background-color: #b3a21f;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
src/views/index.vue
@@ -7,49 +7,48 @@
          <!-- å°±è¯Šç»Ÿè®¡ç›’子 -->
          <div class="grid-content bg-purple headerBox bgc1">
            <div class="title">
              æ‚£è€…统计<span
              é—¨è¯ŠæœåŠ¡<span
                style="
                  font-size: 25px;
                  font-weight: 600;
                  text-shadow: 2px 4px 7px rgb(85 132 255 / 50%);
                  color: black;
                "
                >12322 (人)</span
              >
              ></span>
              <span>{{ endatd }} ~ {{ statd }}</span>
            </div>
            <el-row :gutter="20">
              <el-col :span="8">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p>{{ 11231 }}</p>
                  <p>{{ OutpatientData.rs }}</p>
                  <div class="text-color2">
                    <p>门诊总数(人)</p>
                    <p>门诊就诊量(人次)</p>
                  </div>
                </div>
              </el-col>
              <el-col :span="7">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p>{{ 9207 }}</p>
                  <p>{{ OutpatientData.rc }}</p>
                  <div class="text-color2">
                    <p>住院总数(人)</p>
                    <p>门诊服务量(人次)</p>
                  </div>
                </div>
              </el-col>
              <el-col :span="7">
              <!-- <el-col :span="7">
                <div class="home-user-task-stats">
                  <p>{{ 1209 }}</p>
                  <div class="text-color2">
                    <p>体检总数(人)</p>
                  </div>
                </div>
              </el-col>
              </el-col> -->
            </el-row>
          </div>
        </el-col>
        <el-col :span="9">
          <div class="grid-content bg-purple headerBox bgc2">
            <div class="title">
              é—¨è¯ŠæœåŠ¡æ€»æ•°
              å‡ºé™¢æœåŠ¡
              <span
                style="
                  font-size: 25px;
@@ -57,24 +56,23 @@
                  font-weight: 600;
                  color: red;
                "
                >12322 (人)</span
              >
              ></span>
              <span>{{ endatd }} ~ {{ statd }}</span>
            </div>
            <el-row :gutter="20">
              <el-col :span="12">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p style="color: red">{{ 3453 }}</p>
                  <p style="color: red">{{ DischargeData.rs }}</p>
                </div>
                <div class="text-color2">
                  <p>住院服务人数</p>
                  <p>出院就诊量(人次)</p>
                </div>
              </el-col>
              <el-col :span="12">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p style="color: red">{{ 4213 }}</p>
                  <p style="color: red">{{ DischargeData.rc }}</p>
                  <div class="text-color2">
                    <p>体检服务人数</p>
                    <p>出院服务量(人次)</p>
                  </div>
                </div>
              </el-col>
@@ -88,7 +86,7 @@
          <!-- echars数据可视化 -->
          <div class="grid-content bg-purple" style="min-height: 365px">
            <div class="title">
              å°±è¯Šç»Ÿè®¡
              æœåŠ¡ç»Ÿè®¡
              <span>{{ endatd }} ~ {{ statd }}</span>
              <el-radio-group
                v-model="radio1"
@@ -117,7 +115,7 @@
        <el-col :span="4" class="aside">
          <div class="grid-content bg-purple" style="margin-top: -180px">
            <div class="title">
              å¥åº·å®£æ•™
              ç§‘室服务量
              <span>{{ endatd }} ~ {{ statd }}</span>
            </div>
            <div style="max-height: 690px; width: 100%; overflow: auto">
@@ -130,13 +128,14 @@
                  type="index"
                ></el-table-column>
                <el-table-column
                  prop="skuName"
                  prop="deptname"
                  width="88"
                  class-name="name"
                ></el-table-column>
                <el-table-column prop="count" class-name="count">
                <el-table-column prop="rc" class-name="rc">
                  <template slot-scope="scope">
                    {{ scope.row.count }}次
                    {{ scope.row.rc }}次
                  </template>
                </el-table-column>
              </el-table>
@@ -146,7 +145,7 @@
      </el-row>
      <!-- åº•部一个 -->
      <el-row :gutter="20" style="margin-bottom: 20px">
        <el-col :span="15">
        <el-col :span="24">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
              å®£æ•™ç»Ÿè®¡
@@ -158,7 +157,7 @@
            </div>
          </div>
        </el-col>
        <el-col :span="9">
        <!-- <el-col :span="9">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
              å„项服务统计
@@ -220,7 +219,7 @@
                >
                <el-col :span="7">
                  <div style="display: flex">
                    <div class="subtitle">门诊随访</div>
                    <div class="subtitle">影像随访</div>
                    <div class="grid-contents bg-purple-light">0次</div>
                  </div>
                </el-col>
@@ -281,7 +280,7 @@
              </el-row>
            </div>
          </div>
        </el-col>
        </el-col> -->
      </el-row>
    </div>
  </div>
@@ -289,10 +288,12 @@
<script>
import {
  getoutpatientamount,
  getInhospital,
  getBarchart,
  getQtemplateobj,
  getEChartsPatMedOuthospCount,
  getechartsListCountdata,
  getechartsMedOuthospList,
  getechartsMedInhospList,
  getechartsandData,
  getDeptRanking,
} from "@/api/AiCentre/index";
import dayjs from "dayjs";
@@ -309,6 +310,14 @@
      lastHeight: window.innerHeight,
      radio1: "周",
      ticketStatistics: {},
      DischargeData: {
        rs: "",
        rc: "",
      },
      OutpatientData: {
        rs: "",
        rc: "",
      },
      order: "",
      Count: "",
      datatni: [],
@@ -339,9 +348,9 @@
    },
  },
  created() {
    // this.getoutpatientamount();
    // this.getInhospital();
    // this.getBarchart();
    this.getTopdata();
    this.getgraphdata();
    this.getranking();
    this.$nextTick(function () {
      this.getregionAmountCollect();
      this.getnodeCollect();
@@ -367,10 +376,10 @@
      } else {
        this.dyat = 360;
      }
      this.getgraphdata();
      this.getranking();
      this.getTopdata();
      this.getregionAmountCollect();
      // this.getoutpatientamount();
      // this.getInhospital();
      // this.getBarchart();
      this.getnodeCollect();
      this.getSkuTop();
    },
@@ -380,43 +389,86 @@
      // const res = await getnodeCollect();
      // this.nodeCollect = res.data;
      this.nodeCollect = [
        { name: "门诊随访", value: 1232 },
        { name: "影像随访", value: 1232 },
        { name: "出院随访", value: 342 },
      ];
      this.myPieChart();
    },
    // top排行
    async getSkuTop() {
      // const res = await getSkuTop(10, this.endatd, this.statd);
      // this.SkuTop = res.data;
      this.SkuTop = [
        { amount: 0, count: 123, skuId: "0", skuName: "心肺科" },
        { amount: 0, count: 122, skuId: "0", skuName: "肾脏科" },
        { amount: 0, count: 112, skuId: "0", skuName: "泌尿科" },
        { amount: 0, count: 111, skuId: "0", skuName: "男科" },
        { amount: 0, count: 102, skuId: "0", skuName: "妇产科" },
        { amount: 0, count: 98, skuId: "0", skuName: "外科" },
        { amount: 0, count: 89, skuId: "0", skuName: "急诊" },
        { amount: 0, count: 88, skuId: "0", skuName: "器械科" },
        { amount: 0, count: 87, skuId: "0", skuName: "骨科" },
        { amount: 0, count: 67, skuId: "0", skuName: "放射科" },
        { amount: 0, count: 89, skuId: "0", skuName: "急诊" },
        { amount: 0, count: 88, skuId: "0", skuName: "器械科" },
        { amount: 0, count: 87, skuId: "0", skuName: "骨科" },
        { amount: 0, count: 67, skuId: "0", skuName: "放射科" },
      ];
       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 = [
      //   { amount: 0, count: 123, skuId: "0", skuName: "心肺科" },
      //   { amount: 0, count: 122, skuId: "0", skuName: "肾脏科" },
      //   { amount: 0, count: 112, skuId: "0", skuName: "泌尿科" },
      //   { amount: 0, count: 111, skuId: "0", skuName: "男科" },
      //   { amount: 0, count: 102, skuId: "0", skuName: "妇产科" },
      //   { amount: 0, count: 98, skuId: "0", skuName: "外科" },
      //   { amount: 0, count: 89, skuId: "0", skuName: "急诊" },
      //   { amount: 0, count: 88, skuId: "0", skuName: "器械科" },
      //   { amount: 0, count: 87, skuId: "0", skuName: "骨科" },
      //   { amount: 0, count: 67, skuId: "0", skuName: "放射科" },
      //   { amount: 0, count: 89, skuId: "0", skuName: "急诊" },
      //   { amount: 0, count: 88, skuId: "0", skuName: "器械科" },
      //   { amount: 0, count: 87, skuId: "0", skuName: "骨科" },
      //   { amount: 0, count: 67, skuId: "0", skuName: "放射科1" },
      //   { amount: 0, count: 67, skuId: "0", skuName: "放射科2" },
      // ];
    },
    // èŽ·å–é—¨è¯ŠåŸºç¡€æ•°æ®
    getoutpatientamount() {
      getoutpatientamount().then((res) => {});
    // èŽ·å–å¤´éƒ¨æ•°æ®
    getTopdata() {
      let hospCountdata = {
        startDate: this.endatd,
        endDate: this.statd,
        cy: 1,
      };
      let Countdata = {
        startDate: this.endatd,
        endDate: this.statd,
        cy: 1,
      };
      // æŸ¥è¯¢é—¨è¯Šçœ‹ç—…人次和人数
      getEChartsPatMedOuthospCount(hospCountdata).then((res) => {
        if (res.code == 200) {
          this.OutpatientData = res.data;
        }
      });
      // æŸ¥è¯¢å‡ºã€å…¥é™¢çœ‹ç—…人次和人数
      getechartsListCountdata(Countdata).then((res) => {
        if (res.code == 200) {
          this.DischargeData = res.data;
        }
      });
    },
    // èŽ·å–å°±è¯Šæ•°é‡
    getBarchart() {
      getBarchart().then((res) => {});
    getranking() {
    },
    // èŽ·å–æ€»é‡æ•°é‡
    getInhospital() {
      getInhospital().then((res) => {});
    // èŽ·å–ä¸­éƒ¨çº¿æŸ±å›¾æ•°æ®
    getgraphdata() {
      let Outhospdata = {
        startDate: this.endatd,
        endDate: this.statd,
        cy: 1,
      };
      let Inhospdata = {
        startDate: this.endatd,
        endDate: this.statd,
        cy: 1,
      };
      getechartsMedOuthospList(Outhospdata).then((res) => {});
      getechartsMedInhospList(Inhospdata).then((res) => {});
    },
    // èŽ·å–çº¿çŠ¶å›¾æ—¶é—´
@@ -455,10 +507,10 @@
          data: [
            "出院随访量",
            "门诊随访量",
            "在院随访量",
            "门诊复诊通知",
            "出院复诊通知",
            "在院评估量",
            // "在院随访量",
            // "门诊复诊通知",
            "出院服务人次",
            "门诊服务人次",
          ],
        },
        xAxis: [
@@ -515,18 +567,18 @@
            },
            data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160],
          },
          // {
          //   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",
            tooltip: {
              valueFormatter: function (value) {
                return value + " äºº";
              },
            },
            data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
          },
          {
            name: "在院随访量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
@@ -536,20 +588,20 @@
            data: [145, 92, 178, 134, 167, 85, 199, 112, 156, 88, 120, 145],
          },
          // {
          //   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",
            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: "门诊复诊通知",
            name: "出院服务人次",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
@@ -561,7 +613,7 @@
            data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
          },
          {
            name: "在院评估量",
            name: "门诊服务人次",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
@@ -980,7 +1032,9 @@
  min-height: 36px;
  border-radius: 20px;
  padding: 0 10px;
  text-align: center;
}
.grid-contents {
  min-height: 36px;
  border-radius: 20px;
src/views/knowledge/education/compilequer/index.vue
@@ -24,6 +24,7 @@
      <!-- åŸºæœ¬ä¿¡æ¯ -->
      <div v-if="Editprogress == 1">
        <div class="leftvlue-jbxx">基本信息</div>
        <el-divider></el-divider>
        <el-form
          :model="ruleForm"
          :rules="rules"
@@ -258,6 +259,18 @@
          <el-col :span="4">
            <div class="leftvlue-jbxx">宣教内容</div>
          </el-col>
          <el-col :offset="16" :span="4">
            <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>
          </el-col>
        </el-row>
        <div>
@@ -268,7 +281,7 @@
            label-width="100px"
            class="demo-ruleForm"
          >
            <el-row :gutter="20">
            <!-- <el-row :gutter="20">
              <el-col :span="12">
                <el-form-item label="资料形式" prop="region">
                  <el-select
@@ -285,40 +298,14 @@
                  </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-col :span="12"> -->
            <!-- </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>
          <div id="quillEditorQiniu">
            <!-- åŸºäºŽelementUi的上传组件 el-upload begin-->
            <el-upload
              class="avatar-uploader"
              :action="uploadImgUrl"
@@ -330,7 +317,6 @@
              :headers="headers"
            >
            </el-upload>
            <!-- åŸºäºŽelementUi的上传组件 el-upload end-->
            <quill-editor
              class="editor"
              v-model="content"
@@ -342,6 +328,32 @@
            >
            </quill-editor>
          </div>
        </div> -->
        <!-- æ–°ç»„ä»¶ -->
        <div style="border: 1px solid #ccc; margin: 10px">
          <Toolbar
            style="border-bottom: 1px solid #ccc"
            :editor="editor"
            :defaultConfig="toolbarConfig"
            :mode="modes"
          />
          <Editor
            style="height: 500px; overflow-y: hidden"
            v-model="content"
            :defaultConfig="editorConfig"
            :mode="modes"
            @onCreated="onCreated"
          />
        </div>
        <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>
      </div>
    </div>
@@ -358,6 +370,7 @@
<script>
import { quillEditor } from "vue-quill-editor";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import axios from "axios";
import {
@@ -411,9 +424,80 @@
export default {
  name: "aEducationinfo",
  components: { OptionalForm },
  components: { OptionalForm, Editor, Toolbar },
  data() {
    return {
      editor: null,
      content: "<p>hello</p>",
      toolbarConfig: {},
      editorConfig: {
        placeholder: "请输入内容...",
        menus: [
          "head",
          "bold",
          "italic",
          "underline",
          "image",
          "link",
          "list",
          "undo",
          "redo",
          "file", // æ·»åŠ è‡ªå®šä¹‰æ–‡ä»¶ä¸Šä¼ èœå•
        ],
        uploadImgServer: process.env.VUE_APP_BASE_API + "/common/uploadSort", // å›¾ç‰‡ä¸Šä¼ æŽ¥å£
        uploadImgHeaders: {
          Authorization: "Bearer " + getToken(),
        }, // è‡ªå®šä¹‰ä¸Šä¼ çš„ headers
        uploadImgParams: { key: "value" }, // è‡ªå®šä¹‰ä¸Šä¼ çš„参数
        uploadImgMaxSize: 2 * 1024 * 1024, // å›¾ç‰‡æœ€å¤§å¤§å°ï¼Œå•位 Byte
        uploadImgMaxLength: 1, // ä¸€æ¬¡æœ€å¤šä¸Šä¼ å›¾ç‰‡æ•°é‡
        uploadImgTimeout: 3 * 60 * 1000, // è¶…时时间,单位 ms
        uploadImgHooks: {
          customInsert: (insertImgFn, result) => {
            const url = result.url; // èŽ·å–å›¾ç‰‡åœ°å€
            insertImgFn(url); // æ’入图片
          },
        },
        customMenus: {
          file: {
            tip: "上传文件",
            click: (editor) => {
              const input = document.createElement("input");
              input.type = "file";
              input.accept =
                "application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"; // æ”¯æŒçš„æ–‡ä»¶ç±»åž‹
              input.onchange = (e) => {
                const file = e.target.files[0];
                if (!file) return;
                const formData = new FormData();
                formData.append("file", file);
                // ç¡®ä¿ process.env.VUE_APP_BASE_API æ˜¯æ­£ç¡®çš„
                const uploadUrl =
                  process.env.VUE_APP_BASE_API + "/common/uploadSort";
                axios
                  .post(uploadUrl, formData, {
                    headers: {
                      Authorization: "Bearer " + getToken(),
                    },
                  })
                  .then((res) => {
                    const url = res.data.url; // èŽ·å–æ–‡ä»¶åœ°å€
                    // æ’入文件链接作为普通文本
                    editor.txt.append(url + " ");
                    // æˆ–者插入文件链接作为超链接
                    // editor.cmd.do('insertLink', { name: '文件链接', url: url });
                  })
                  .catch((err) => {
                    console.error("文件上传失败", err);
                  });
              };
              input.click();
            },
          },
        },
      },
      modes: "default", // or 'simple'
      headers: {
        Authorization: "Bearer " + getToken(),
      },
@@ -577,8 +661,17 @@
      console.log(oldVal, "B");
    },
  },
  beforeDestroy() {
    const editor = this.editor;
    if (editor == null) return;
    editor.destroy(); // ç»„件销毁时,及时销毁编辑器
  },
  methods: {
    onCreated(editor) {
      this.editor = Object.seal(editor); // ä¸€å®šè¦ç”¨ Object.seal(),否则会报错
    },
    // ---------------------------------
    processElement(element) {
      return { ...element, isoperation: null };
    },
@@ -943,7 +1036,7 @@
      // èŽ·å–å…‰æ ‡æ‰€åœ¨ä½ç½®
      let length = quill.getSelection().index;
      // æ’入图片||视频  res.info为服务器返回的图片地址
      if (type == "mp4" || type == "MP4"|| type == "avi"|| type == "AVI") {
      if (type == "mp4" || type == "MP4" || type == "avi" || type == "AVI") {
        window.jsValue = imgUrl;
        quill.insertEmbed(length, "video", imgUrl);
      } else {
@@ -1034,12 +1127,9 @@
  },
};
</script>
<style src="@wangeditor/editor/dist/css/style.css"></style>
<style src="@/assets/styles/global.css"></style>
<style lang="scss" scoped>
.Questionnairemanagement {
  // display: flex;
}
.sidecolumn {
  // width: 300px;
  // min-height: 100vh;
@@ -1070,8 +1160,10 @@
  }
  .leftvlue-jbxx {
    margin-bottom: 50px;
    font-size: 20px;
    font-size: 24px;
    height: 30px;
    border-left: 3px solid #41a1be;
    padding-left: 3px;
    span {
      position: absolute;
@@ -1225,95 +1317,5 @@
  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>
src/views/knowledge/education/index.vue
@@ -1,5 +1,6 @@
<template>
  <div class="educationmanagement">
    <!-- å·¦ä¾§æ  -->
    <div class="sidecolumn">
      <div class="sidecolumn-top">
@@ -365,7 +366,7 @@
      </div>
    </div>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
@@ -644,7 +645,7 @@
      // const res = await getnodeCollect();
      // this.nodeCollect = res.data;
      // this.nodeCollect = [
      //   { name: "门诊随访", value: 1232 },
      //   { name: "影像随访", value: 1232 },
      //   { name: "出院随访", value: 342 },
      // ];
      this.myPieChart();
src/views/knowledge/questionbank/index.vue
@@ -20,6 +20,7 @@
          :data="deptOptions"
          :props="defaultProps"
          :expand-on-click-node="false"
          :check-strictly="true"
          :filter-node-method="filterNode"
          ref="tree"
          node-key="id"
@@ -210,7 +211,6 @@
                :show-overflow-tooltip="true"
              />
              /><el-table-column
                label="适用方式"
                align="center"
@@ -289,7 +289,6 @@
                    size="medium"
                    type="text"
                    @click="compileUpdate(scope.row)"
                    ><span class="button-bji"
                      ><i class="el-icon-edit"></i>编辑</span
                    ></el-button
@@ -298,7 +297,6 @@
                    size="medium"
                    type="text"
                    @click="handleDelete(scope.row)"
                    ><span class="button-textsc"
                      ><i class="el-icon-delete-solid"></i>删除</span
                    ></el-button
@@ -307,7 +305,6 @@
                    size="medium"
                    type="text"
                    @click="topicpreview(scope.row)"
                    ><span class="button-text"
                      ><i class="el-icon-view"></i>预览</span
                    ></el-button
@@ -328,7 +325,7 @@
      </div>
    </div>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
@@ -495,7 +492,7 @@
      userList: [],
      // å¼¹å‡ºå±‚标题
      tag: "",
      title: "新增类别",
      title: "类别编辑",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // æ—¥æœŸèŒƒå›´
@@ -734,11 +731,11 @@
      this.classifyform = b;
      this.dialogFormVisible = true;
    },
    Newcategory(){
      this.classifyform= {}, //类别表单
      this.radio = "主分类";
     this.dialogFormVisible = true
     this.zifon = true;
    Newcategory() {
      (this.classifyform = {}), //类别表单
        (this.radio = "主分类");
      this.dialogFormVisible = true;
      this.zifon = true;
      this.zufon = true;
    },
@@ -748,6 +745,7 @@
      return data.name.indexOf(value) !== -1;
    },
    handleNodeClick(data) {
      if (data.svyLibScriptCategoryList) return;
      this.queryParams.categoryid = data.id;
      this.getList();
    },
@@ -825,7 +823,7 @@
  display: flex;
}
.sidecolumn {
  width: 300px;
  width: 400px;
  min-height: 100vh;
  text-align: center;
  //   display: flex;
src/views/knowledge/questionbank/particulars/index.vue
@@ -454,9 +454,9 @@
                        label="ABC等级"
                      >
                        <el-radio-group v-model="item.score">
                          <el-radio label="A">A</el-radio>
                          <el-radio label="B">B</el-radio>
                          <el-radio label="C">C</el-radio>
                          <el-radio :label="1">A</el-radio>
                          <el-radio :label="2">B</el-radio>
                          <el-radio :label="3">C</el-radio>
                        </el-radio-group>
                      </el-form-item>
                      <el-form-item
@@ -872,13 +872,14 @@
    // èŽ·å–æ•°æ®
    getissueinfo() {
      this.id = this.$route.query.id;
      if (this.$route.query.categoryid) {
        this.topicobj.categoryid = Number(this.$route.query.categoryid);
      }
      // åˆ†ç±»
      getissueclassify({}).then((res) => {
        this.classifylist = res.rows;
        if (this.$route.query.categoryid) {
        this.topicobj.categoryid = Number(this.$route.query.categoryid);
      }
      });
      if (!this.id) {
        return;
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -310,7 +310,7 @@
              >下一步</el-button
            >
            <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
            <el-button @click="Departmenttreatment('ruleForm')"
            <el-button @click="toExamine('ruleForm')"
              >保存问卷基础信息</el-button
            >
          </el-form-item>
@@ -634,9 +634,9 @@
                          label="ABC等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="A">A</el-radio>
                            <el-radio label="B">B</el-radio>
                            <el-radio label="C">C</el-radio>
                            <el-radio :label="1">A</el-radio>
                            <el-radio :label="2">B</el-radio>
                            <el-radio :label="3">C</el-radio>
                          </el-radio-group>
                        </el-form-item>
                        <el-form-item
@@ -749,7 +749,7 @@
        >
        <el-button type="primary" @click="laststep()">上一步</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button @click="Departmenttreatment('ruleForm')"
        <el-button @click="toExamine('ruleForm')"
          >保存问题数据</el-button
        >
      </div>
@@ -1148,9 +1148,9 @@
                          label="ABC等级"
                        >
                          <el-radio-group v-model="item.score">
                            <el-radio label="A">A</el-radio>
                            <el-radio label="B">B</el-radio>
                            <el-radio label="C">C</el-radio>
                            <el-radio :label="1">A</el-radio>
                            <el-radio :label="2">B</el-radio>
                            <el-radio :label="3">C</el-radio>
                          </el-radio-group>
                        </el-form-item>
                        <el-form-item
@@ -1640,6 +1640,44 @@
        });
      }
    },
    // é¢˜ç›®æ ¡éªŒ
    toExamine() {
      // éåŽ†é¢˜ç›®é›†åˆ
      for (let i = 0; i <  this.ruleForm.svyTemplateLibScripts.length; i++) {
        const question =  this.ruleForm.svyTemplateLibScripts[i];
        // å¦‚æžœ scriptType ä¸º 4,则跳过当前题目
        if (question.scriptType === 4) {
          continue;
        }
        // èŽ·å–å½“å‰é¢˜ç›®çš„é€‰é¡¹é›†åˆ
        const options = question.svyLibTemplateTargetoptions;
        // åˆ›å»ºä¸€ä¸ª Set æ¥å­˜å‚¨é€‰é¡¹åç§°ï¼Œç”¨äºŽæ£€æµ‹é‡å¤
        const optionNames = new Set();
        // éåŽ†é€‰é¡¹é›†åˆ
        for (let j = 0; j < options.length; j++) {
          const option = options[j];
          const optionContent = option.optioncontent;
          // å¦‚果选项名称已经存在于 Set ä¸­ï¼Œè¯´æ˜Žé‡å¤
          if (optionNames.has(optionContent)) {
            this.$message.error(
              `题目 ${question.id} çš„选项名称 "${optionContent}" é‡å¤`
            );
            return false; // è¿”回 false è¡¨ç¤ºæ ¡éªŒå¤±è´¥
          }
          // å°†é€‰é¡¹åç§°æ·»åŠ åˆ° Set ä¸­
          optionNames.add(optionContent);
        }
      }
      // å¦‚果所有题目都校验通过,返回 true
      console.log("所有题目校验通过,选项名称无重复");
       this.Departmenttreatment();
    },
    // ç§‘室/院区处理
    Departmenttreatment() {
      this.tempDetpRelevanceslist.forEach((item) => {
src/views/knowledge/questionnaire/index.vue
@@ -297,7 +297,7 @@
      </div>
    </div>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
@@ -512,7 +512,7 @@
      roleOptions: [],
      // è¡¨å•参数
      form: {},
      title: "新增类别",
      title: "类别编辑",
      sidecolumnform: {}, //添加类别表单
      goQRCodeVisible: false, //二维码弹框
      sidecolumnval: "", //类别搜索
@@ -830,6 +830,7 @@
      return data.name.indexOf(value) !== -1;
    },
    handleNodeClick(data) {
      if (data.svyLibTemplateCategoryList) return;
      this.queryParams.categoryid = data.id;
      this.getList();
    },
@@ -895,7 +896,7 @@
  display: flex;
}
.sidecolumn {
  width: 300px;
  width: 400px;
  min-height: 100vh;
  text-align: center;
  //   display: flex;
src/views/login.vue
@@ -6,7 +6,7 @@
      :rules="loginRules"
      class="login-form"
    >
      <h3 class="title">浙中医大二院智慧随访平台</h3>
      <h3 class="title">智慧随访系统</h3>
      <el-form-item prop="username">
        <el-input
          v-model="loginForm.username"
@@ -37,7 +37,7 @@
        </el-input>
      </el-form-item>
      <!-- ä¸½===================æ°´ -->
      <!-- <el-form-item prop="orgid">
      <el-form-item prop="orgid">
        <el-select style="width: 100%;" v-model="loginForm.orgid"  placeholder="请选择院区">
          <el-option
            v-for="item in options"
@@ -48,7 +48,7 @@
          </el-option>
          <i slot="prefix" class="el-icon-mobile"></i>
        </el-select>
      </el-form-item> -->
      </el-form-item>
      <!-- <el-form-item prop="code" v-if="captchaEnabled">
        <el-input
          v-model="loginForm.code"
@@ -112,11 +112,13 @@
        password: "",
        rememberMe: false,
        code: "",
        orgid:'1',
        orgid:'47255004333112711A1001',
      },
      options: [
        { value: "1", label: "景宁畲族自治县人民医院" },
        { value: "2", label: "丽水市中医院" },
        { value: "47255004333112711A1001", label: "景宁畲族自治县人民医院" },
        { value: "47231022633110211A2101", label: "丽水市中医院" },
        { value: "47246102433112211A2101", label: "缙云县中医医院 " },
        { value: "47240018433118111A2101", label: "龙泉市中医医院 " },
       ],
      loginRules: {
        username: [
@@ -125,7 +127,7 @@
        password: [
          { required: true, trigger: "blur", message: "请输入您的密码" },
        ],
        // orgid: [{ required: true, trigger: "blur", message: "请选择院区" }],
        orgid: [{ required: true, trigger: "blur", message: "请选择院区" }],
      },
      loading: false,
      // éªŒè¯ç å¼€å…³
@@ -190,12 +192,12 @@
            Cookies.remove("password");
            Cookies.remove("rememberMe");
          }
          this.loginForm.orgid = '1',
          // this.loginForm.orgid = '1',
          this.$store
            .dispatch("Login", this.loginForm)
            .then(() => {
              // this.$router.push({ path: this.redirect || "/" }).catch(() => {});
              this.$router.push({ path:"/patient/patient" }).catch(() => {});
              this.$router.push({ path:"/followvisit/discharge" }).catch(() => {});
            })
            .catch(() => {
              this.loading = false;
src/views/outsideChainnew.vue
@@ -8,7 +8,7 @@
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
src/views/outsideChainwt.vue
@@ -8,7 +8,7 @@
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
src/views/outsideChainwtnew.vue
@@ -8,7 +8,7 @@
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
src/views/outsideChainxj.vue
@@ -1,7 +1,7 @@
<template>
  <div class="questionnaire">
    <!-- <div class="CONTENT">
      <div class="title">浙中医大二院医护知识宣教</div>
      <div class="title">景宁人民医院医护知识宣教</div>
      <div class="preview-left">
        <div v-html="richText"></div>
      </div>
@@ -10,12 +10,12 @@
    <div class="CONTENT" >
      <div class="preview-left">
        <div class="toptitle">
          <div class="title">{{ taskname ? taskname : "浙中医大二院医护知识宣教" }}</div>
          <div class="title">{{ taskname ? taskname : ""+localStorage.getItem("orgname")+"医护知识宣教" }}</div>
          <div style="font-size: 22px; margin-bottom: 20px; line-height: 1.5">
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。"
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
src/views/outsideChainxjnew.vue
@@ -1,7 +1,7 @@
<template>
  <div class="questionnaire">
    <!-- <div class="CONTENT">
      <div class="title">浙中医大二院医护知识宣教</div>
      <div class="title">景宁人民医院医护知识宣教</div>
      <div class="preview-left">
        <div v-html="richText"></div>
      </div>
@@ -10,12 +10,12 @@
    <div class="CONTENT" >
      <div class="preview-left">
        <div class="toptitle">
          <div class="title">{{ taskname ? taskname : "浙中医大二院医护知识宣教" }}</div>
          <div class="title">{{ taskname ? taskname : ""+localStorage.getItem("orgname")+"医护知识宣教" }}</div>
          <div style="font-size: 22px; margin-bottom: 20px; line-height: 1.5">
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。"
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
src/views/patient/follow/index.vue
@@ -11,7 +11,8 @@
          v-show="showSearch"
          label-width="98px"
        >
          <el-form-item label="姓名" prop="name">
          <el-form-item label="姓名"
          width="100" prop="name">
            <el-input
              v-model="queryParams.name"
              placeholder="请输入姓名"
@@ -73,11 +74,12 @@
          <el-table-column
            fixed
            label="姓名"
          width="100"
            align="center"
            key="name"
            prop="name"
          />
          <el-table-column label="性别" align="center" key="sex" prop="sex">
          <el-table-column label="性别"width="100" align="center" key="sex" prop="sex">
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
@@ -219,7 +221,7 @@
import { delUser } from "@/api/system/user";
import {
  messagelistpatient,
  patarchivelist,
  alterpatient,
  addfiltration,
  particularpatient,
@@ -367,8 +369,7 @@
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      this.loading = true;
      messagelistpatient(this.queryParams).then((response) => {
      patarchivelist(this.queryParams).then((response) => {
        console.log(response);
        this.userList = response.rows;
        this.total = response.total;
@@ -436,9 +437,12 @@
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.$refs.tree.setCurrentKey(null);
      this.queryParams={
        pageNum: 1,
        pageSize: 10,
        allhosp: "1",
        notrequiredFlag: 1,
      },
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/patient/medtechnician/Compositeeditdetails.vue
@@ -26,6 +26,7 @@
            align="center"
            key="sendname"
            label="姓名"
          width="100"
          >
          </el-table-column>
          <el-table-column prop="sfz" align="center" key="sfz" label="身份证号">
@@ -358,15 +359,20 @@
            prop="templatename"
          />
          <el-table-column
            label="待执行/总任务"
            align="center"
            key="nickName"
            prop="nickName"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
            </template>
          </el-table-column>
          label="总任务/已随访"
          align="center"
          key="nickName"
          width="120"
          prop="nickName"
        >
          <template slot-scope="scope">
            <span
              >{{ scope.row.wfs ? scope.row.wfs + scope.row.yfs : "" }}/{{
                scope.row.yfs
              }}</span
            >
          </template>
        </el-table-column>
          <el-table-column
            label="创建人"
            align="center"
@@ -505,8 +511,9 @@
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="患者id"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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>
src/views/patient/medtechnician/PatientChart.vue
@@ -23,7 +23,7 @@
            @keyup.enter.native="handleQuery"
          ></el-input>
        </el-form-item>
        <el-form-item label="创发送时间">
        <el-form-item label="发送时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
@@ -158,13 +158,18 @@
          :show-overflow-tooltip="true"
        />
        <el-table-column
          label="待执行/总任务组"
          label="总任务/已随访"
          align="center"
          key="nickName"
          width="120"
          prop="nickName"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
            <span
              >{{ scope.row.wfs ? scope.row.wfs + scope.row.yfs : "" }}/{{
                scope.row.yfs
              }}</span
            >
          </template>
        </el-table-column>
        <el-table-column
@@ -414,7 +419,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // éƒ¨é—¨åç§°
@@ -438,14 +443,14 @@
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      TaskOperation: {},
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -461,6 +466,10 @@
        {
          value: 3,
          label: "宣教关怀",
        },
        {
          value: 4,
          label: "消息通知",
        },
      ],
      taskoptions: [
@@ -484,19 +493,38 @@
          value: "5",
          label: "复诊管理",
        },
        {
          value: "6",
          label: "满意度调查",
        },
        // {
        //   value: "5",
        //   label: "满意度调查",
        // },
        {
          value: "7",
          label: "患者报告",
        },
        // {
        //   value: "8",
        //   label: "其他通知",
        // },
        {
          value: "8",
          label: "其他通知",
          value: "9",
          label: "体检随访",
        },
        // {
        //   value: "10",
        //   label: "医技随访",
        // },
        {
          value: "11",
          label: "影像随访",
        },
        {
          value: "12",
          label: "心电随访",
        },
        // {
        //   value: "13",
        //   label: "专病随访",
        // },
      ],
      tasktopic: "2", //新增类型
      activname: "",
@@ -739,7 +767,7 @@
        this.loading = false;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -785,8 +813,14 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.topqueryParams.deptId = undefined;
      this.$refs.tree.setCurrentKey(null);
      this.topqueryParams= {
        pageNum: 1,
        pageSize: 10,
        type: 3,
        userName: undefined,
        tagid: undefined,
        topic: undefined,
      },
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/patient/medtechnician/SpecializedService.vue
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -60,18 +60,13 @@
          ></el-input>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-select
            v-model="topqueryParams.searchscope"
            placeholder="请选择患者范围"
          >
            <el-option
              v-for="item in source"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
          <el-cascader
            v-model="topqueryParams.scopetype"
            placeholder="默认全部"
            :options="sourcetype"
            :props="{ expandTrigger: 'hover' }"
            @change="handleChange"
          ></el-cascader>
        </el-form-item>
        <el-form-item label="任务组状态" prop="status">
@@ -120,7 +115,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -158,7 +152,7 @@
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -174,6 +168,7 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          width="100"
          fixed
          align="center"
          key="sendname"
@@ -194,7 +189,7 @@
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
@@ -224,7 +219,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -240,12 +235,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -329,7 +324,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -467,7 +462,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -510,7 +505,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -635,7 +630,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -651,16 +646,32 @@
      ruleForm: {
        type: [],
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -754,7 +765,11 @@
        pageNum: 1,
        pageSize: 10,
        serviceType: 2,
        sendstate:2,
        searchscope: 2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      propss: { multiple: true },
      options: [],
@@ -766,7 +781,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -805,7 +820,18 @@
  created() {
    this.serviceState = store.getters.serviceState;
    this.checkboxlist = store.getters.checkboxlist;
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.getList();
    this.getConfigKey("sys.user.initPassword").then((response) => {
      this.initPassword = response.msg;
@@ -815,7 +841,7 @@
    this.getList();
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList() {
      if (this.topqueryParams.searchscope == 1) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
@@ -834,7 +860,11 @@
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      this.loading = true;
      this.topqueryParams.deptOrDistrict=2;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.cardlist[0].value =
@@ -861,7 +891,7 @@
        this.loading = false;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -879,7 +909,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -898,6 +928,25 @@
    cancel() {
      this.addalteropen = false;
      this.reset();
    },
      // æ‚£è€…范围处理
      handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
        this.topqueryParams.searchscope = 1;
      } else if (type == 2) {
        this.topqueryParams.leavehospitaldistrictcodes.push(code);
        this.topqueryParams.leaveldeptcodes = [];
        this.topqueryParams.searchscope = 2;
      } else {
        this.topqueryParams.searchscope = 3;
      }
    },
    // è¡¨å•重置
    reset() {
@@ -949,6 +998,7 @@
        pageSize: 10,
        serviceType: 2,
        searchscope: 2,
        sendstate:2,
      };
      this.handleQuery();
    },
@@ -1102,8 +1152,10 @@
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
         this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "system/user/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
src/views/patient/patient/ExternalPatient.vue
@@ -108,7 +108,7 @@
            <el-table
              v-loading="loading"
              :data="userList"
              height="660"
              height="808"
              @selection-change="handleSelectionChange"
            >
              <el-table-column type="selection" width="50" align="center" />
@@ -122,11 +122,12 @@
              <el-table-column
                fixed
                label="姓名"
          width="100"
                align="center"
                key="name"
                prop="name"
              />
              <el-table-column label="性别" align="center" key="sex" prop="sex">
              <el-table-column label="性别"width="100" align="center" key="sex" prop="sex">
                <template slot-scope="scope">
                  <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
                </template>
@@ -262,15 +263,20 @@
            prop="templatename"
          />
          <el-table-column
            label="待执行/总任务"
            align="center"
            key="nickName"
            prop="nickName"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
            </template>
          </el-table-column>
          label="总任务/已随访"
          align="center"
          key="nickName"
          width="120"
          prop="nickName"
        >
          <template slot-scope="scope">
            <span
              >{{ scope.row.wfs ? scope.row.wfs + scope.row.yfs : "" }}/{{
                scope.row.yfs
              }}</span
            >
          </template>
        </el-table-column>
          <el-table-column
            label="创建人"
            align="center"
@@ -345,7 +351,8 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名" prop="name">
            <el-form-item label="姓名"
          width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
@@ -354,7 +361,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" prop="sex">
            <el-form-item label="性别"width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in sextype"
@@ -537,8 +544,9 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="患者id"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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>
@@ -572,8 +580,9 @@
      <div v-if="dractive == 3">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="序号"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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="certificatenum" label="证件号码">
          </el-table-column>
          <el-table-column prop="goday" label="出生日期"> </el-table-column>
src/views/patient/patient/authRole.vue
@@ -101,8 +101,8 @@
    /** æäº¤æŒ‰é’® */
    submitForm() {
      const userId = this.form.userId;
      const roleIds = this.roleIds.join(",");
      updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
      // const roleIds = this.roleIds.join(",");
      updateAuthRole({ userId: userId, roleIds: this.roleIds }).then((response) => {
        this.$modal.msgSuccess("授权成功");
        this.close();
      });
src/views/patient/patient/behospitalized.vue
@@ -19,39 +19,50 @@
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="住院号" prop="patid">
          <el-form-item label="主治医生" prop="name">
            <el-input
              v-model="queryParams.patid"
              v-model="queryParams.drname"
              placeholder="请输入姓名"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="责任护士" prop="name">
            <el-input
              v-model="queryParams.nurseName"
              placeholder="请输入姓名"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="住院号" prop="inhospno">
            <el-input
              v-model="queryParams.inhospno"
              placeholder="请输入患者编号"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="患者范围" prop="tagId">
            <el-select
                v-model="queryParams.searchscope"
                placeholder="请选择患者范围"
              >
                <el-option
                  v-for="item in source"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
          <el-form-item label="患者范围" prop="status">
            <el-cascader
              v-model="queryParams.scopetype"
              placeholder="默认全部科室"
              :options="sourcetype"
              :props="{ expandTrigger: 'hover' }"
              @change="handleChange"
            ></el-cascader>
          </el-form-item>
          <el-form-item label=" å…¥é™¢æ—¥æœŸ " prop="createTime">
            <el-date-picker
            v-model="dateRange"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
              v-model="dateRange"
              style="width: 240px"
              value-format="yyyy-MM-dd"
              type="daterange"
              range-separator="-"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            ></el-date-picker>
          </el-form-item>
          <el-row>
@@ -115,7 +126,7 @@
        <el-table
          v-loading="loading"
          :data="userList"
           height="660"
          height="808"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="50" align="center" />
@@ -141,17 +152,42 @@
          <el-table-column
            label="住院号"
            align="center"
            key="patno"
            prop="patno"
          width="120"
            key="inhospno"
            prop="inhospno"
            width="120"
          />
          <el-table-column
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
          />
          <el-table-column label="性别" align="center" key="sex" prop="sex">
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="
                  gettoken360(
                    scope.row.idcardno,
                    scope.row.drcode,
                    scope.row.drname
                  )
                "
                ><span class="button-textsc">{{
                  scope.row.patname
                }}</span></el-button
              >
            </template>
          </el-table-column>
          <el-table-column
            label="性别"
            width="100"
            align="center"
            key="sex"
            prop="sex"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
@@ -171,7 +207,6 @@
            width="120"
          />
          <el-table-column
            label="入院诊断"
            align="center"
@@ -180,20 +215,19 @@
            width="190"
          />
          <el-table-column
            label="科室"
            align="center"
            key="deptname"
            prop="deptname"
            width="120"
            width="180"
          />
          <el-table-column
            label="病区"
            align="center"
            key="leavehospitaldistrictname"
            prop="leavehospitaldistrictname"
            width="120"
            width="180"
          />
          <el-table-column
            label="床位号"
@@ -221,7 +255,6 @@
            label="操作"
            fixed="right"
            align="center"
            width="160"
            class-name="small-padding fixed-width"
          >
            <template slot-scope="scope">
@@ -301,8 +334,10 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="序号"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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="certificate" label="证件类型">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
@@ -347,19 +382,24 @@
import { delUser } from "@/api/system/user";
import formatTime from "@/filters/index";
import { listpatient } from "@/api/patient/record";
import {
  listpatient,
  particularpatient,
  messagelistpatient,
  alterpatient,
  addpatient,
  particularpatient,
  deletepatient,
  Exporterrorpatient,
  toleadpatient,
} from "@/api/patient/record";
} from "@/api/patient/homepage";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import { listDept } from "@/api/system/dept";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { query360PatInfo } from "@/api/AiCentre/index";
import store from "@/store";
export default {
@@ -413,6 +453,59 @@
        {
          value: 2,
          label: "病区患者",
        },
      ],
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部科室",
        },
        {
          value: 4,
          label: "全部病区",
        },
      ],
      // è¡¨å•参数
@@ -469,12 +562,10 @@
        pageNum: 1,
        pageSize: 10,
        cry: 0,
        searchscope:2,
        idcardno: undefined,
        name: undefined,
        status: undefined,
        tagIds: undefined,
        telcode: undefined,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      // è¡¨å•校验
      rules: {
@@ -531,7 +622,21 @@
    },
  },
  created() {
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
    this.getList();
    this.listDept();
    this.gettabList();
@@ -540,22 +645,6 @@
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      this.loading = true;
      if (this.queryParams.searchscope == 1) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes=null;
      } else if (this.queryParams.searchscope == 2) {
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
          this.queryParams.leaveldeptcodes=null;
      } else {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      listpatient(this.queryParams).then((response) => {
        console.log(response);
        this.userList = response.rows;
@@ -568,6 +657,30 @@
        this.deptList = res.data;
        console.log(this.deptList, "this.deptList");
      });
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.queryParams.leavehospitaldistrictcodes = [];
      this.queryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.queryParams.leaveldeptcodes.push(code);
        this.queryParams.leavehospitaldistrictcodes = [];
        this.queryParams.searchscope = 1;
      } else if (type == 3) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.searchscope = 3;
        this.queryParams.leavehospitaldistrictcodes = [];
      } else if (type == 4) {
        this.queryParams.leaveldeptcodes = [];
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
        this.queryParams.searchscope = 4;
      }
    },
    /** æŸ¥è¯¢æ ‡ç­¾åˆ—表 */
    gettabList() {
@@ -603,7 +716,22 @@
      this.queryParams.deptId = data.id;
      this.handleQuery();
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    // å–消按钮
    cancel() {
      this.Labelchange = false;
@@ -625,8 +753,13 @@
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.startInHospTime = this.dateRange[0];
      this.queryParams.endInHospTime = this.dateRange[1];
      if (this.dateRange) {
        this.queryParams.startInHospTime = this.dateRange[0];
        this.queryParams.endInHospTime = this.dateRange[1];
      } else {
        this.queryParams.startInHospTime = "";
        this.queryParams.endInHospTime = "";
      }
      this.queryParams.pageNum = 1;
      this.getList();
    },
@@ -634,7 +767,18 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.$refs.tree.setCurrentKey(null);
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        cry: 0,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
      this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/patient/patient/hospital.vue
@@ -20,9 +20,25 @@
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="住院号" prop="patid">
          <el-form-item label="主治医生" prop="name">
            <el-input
              v-model="queryParams.patid"
              v-model="queryParams.drname"
              placeholder="请输入姓名"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="责任护士" prop="name">
            <el-input
              v-model="queryParams.nurseName"
              placeholder="请输入姓名"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="住院号" prop="inhospno">
            <el-input
              v-model="queryParams.inhospno"
              placeholder="请输入患者编号"
              clearable
              style="width: 250px"
@@ -30,31 +46,25 @@
            />
          </el-form-item>
          <el-form-item label="患者范围" prop="tagId">
            <el-select
                v-model="queryParams.searchscope"
                placeholder="请选择患者范围"
              >
                <el-option
                  v-for="item in source"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
          <el-form-item label="患者范围" prop="status">
            <el-cascader
              v-model="queryParams.scopetype"
              placeholder="默认全部科室"
              :options="sourcetype"
              :props="{ expandTrigger: 'hover' }"
              @change="handleChange"
            ></el-cascader>
          </el-form-item>
          <el-form-item label=" å‡ºé™¢æ—¥æœŸ " prop="createTime">
            <el-date-picker
            v-model="dateRange"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
              v-model="dateRange"
              style="width: 240px"
              value-format="yyyy-MM-dd"
              type="daterange"
              range-separator="-"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            ></el-date-picker>
          </el-form-item>
          <el-row>
@@ -118,7 +128,7 @@
        <el-table
          v-loading="loading"
          :data="userList"
           height="660"
          height="808"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="50" align="center" />
@@ -144,17 +154,49 @@
          <el-table-column
            label="住院号"
            align="center"
            key="patno"
            prop="patno"
          width="120"
            key="inhospno"
            prop="inhospno"
            width="120"
          />
          <el-table-column
          <!-- <el-table-column
            label="姓名"
          width="100"
            align="center"
            key="patname"
            prop="patname"
          />
          <el-table-column label="性别" align="center" key="sex" prop="sex">
          /> -->
          <el-table-column
            fixed
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="
                  gettoken360(
                    scope.row.idcardno,
                    scope.row.drcode,
                    scope.row.drname
                  )
                "
                ><span class="button-textsc">{{
                  scope.row.patname
                }}</span></el-button
              >
            </template>
          </el-table-column>
          <el-table-column
            label="性别"
            width="100"
            align="center"
            key="sex"
            prop="sex"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
@@ -248,7 +290,6 @@
                    query: { id: scope.row.patid },
                  })
                "
                ><span class="button-textsc"
                  ><i class="el-icon-zoom-in"></i>查看</span
                ></el-button
@@ -316,8 +357,10 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="序号"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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="certificate" label="证件类型">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
@@ -361,19 +404,23 @@
<script>
import { delUser } from "@/api/system/user";
import { listpatient } from "@/api/patient/record";
import {
  listpatient,
  particularpatient,
  messagelistpatient,
  alterpatient,
  addpatient,
  particularpatient,
  deletepatient,
  Exporterrorpatient,
  toleadpatient,
} from "@/api/patient/record";
} from "@/api/patient/homepage";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import { listDept } from "@/api/system/dept";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { query360PatInfo } from "@/api/AiCentre/index";
import store from "@/store";
export default {
@@ -423,6 +470,39 @@
          label: "病区患者",
        },
      ],
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      paperstypes: [
        { papersname: "身份证" },
        { papersname: "护照" },
@@ -440,6 +520,26 @@
        idcardtype: "",
        relativetelcode: "",
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部科室",
        },
        {
          value: 4,
          label: "全部病区",
        },
      ],
      //导入进度
      dractive: 1,
      // å¯¼å…¥å±•示表单
@@ -483,17 +583,13 @@
        pageNum: 1,
        pageSize: 10,
        cry: 1,
        searchscope:2,
        idcardno: undefined,
        name: undefined,
        status: undefined,
        tagIds: undefined,
        telcode: undefined,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      // è¡¨å•校验
      rules: {
      },
      rules: {},
    };
  },
  watch: {
@@ -503,7 +599,21 @@
    },
  },
  created() {
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
    this.getList();
    this.listDept();
    this.gettabList();
@@ -511,22 +621,6 @@
  methods: {
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      if (this.queryParams.searchscope == 1) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes=null;
      } else if (this.queryParams.searchscope == 2) {
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
          this.queryParams.leaveldeptcodes=null;
      } else {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      this.loading = true;
      listpatient(this.queryParams).then((response) => {
        console.log(response);
@@ -539,6 +633,22 @@
      listDept(this.queryParams).then((res) => {
        this.deptList = res.data;
        console.log(this.deptList, "this.deptList");
      });
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    /** æŸ¥è¯¢æ ‡ç­¾åˆ—表 */
@@ -554,6 +664,34 @@
        console.log(response);
        this.optionstag = response.rows;
      });
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.queryParams.leavehospitaldistrictcodes = [];
      this.queryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.queryParams.leaveldeptcodes.push(code);
        this.queryParams.leavehospitaldistrictcodes = [];
        this.queryParams.searchscope = 1;
      } else if (type == 2) {
        this.queryParams.leavehospitaldistrictcodes.push(code);
        this.queryParams.leaveldeptcodes = [];
        this.queryParams.searchscope = 2;
      } else if (type == 3) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.searchscope = 3;
        this.queryParams.leavehospitaldistrictcodes = [];
      } else if (type == 4) {
        this.queryParams.leaveldeptcodes = [];
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
        this.queryParams.searchscope = 4;
      }
    },
    // æŸ¥è¯¢å¯¼å…¥å±•示列表
    geterryList() {
@@ -597,8 +735,13 @@
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.startOutHospTime = this.dateRange[0];
      this.queryParams.endOutHospTime = this.dateRange[1];
      if (this.dateRange) {
        this.queryParams.startOutHospTime = this.dateRange[0];
        this.queryParams.endOutHospTime = this.dateRange[1];
      } else {
        this.queryParams.startOutHospTime = "";
        this.queryParams.endOutHospTime = "";
      }
      this.queryParams.pageNum = 1;
      this.getList();
    },
@@ -606,7 +749,18 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.$refs.tree.setCurrentKey(null);
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        cry: 1,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
      this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/patient/patient/index.vue
@@ -1,7 +1,7 @@
<template>
  <div class="Questionnairemanagement">
    <!-- å·¦ä¾§æ  -->
    <div class="sidecolumn">
    <!-- <div class="sidecolumn">
      <div class="sidecolumn-top">
        <div class="top-wj">医院患者</div>
      </div>
@@ -12,13 +12,12 @@
          v-model="queryParams.allhosp"
          @tab-click="handleClick"
        >
          <!-- <el-tab-pane label="患者列表" name="0"></el-tab-pane> -->
          <el-tab-pane label="出入院患者" name="1"></el-tab-pane>
          <el-tab-pane label="门诊患者" name="2"></el-tab-pane>
          <el-tab-pane label="体检患者" name="3"></el-tab-pane>
        </el-tabs>
      </div>
    </div>
    </div> -->
    <!-- å³ä¾§æ•°æ® -->
    <div class="leftvlue">
@@ -93,7 +92,7 @@
                />
              </el-form-item>
              <el-form-item label="门诊编号" prop="visitno">
              <el-form-item label="患者档案号" prop="visitno">
                <el-input
                  v-model="queryParams.visitno"
                  placeholder="请输入编号"
@@ -109,7 +108,7 @@
                  @keyup.enter.native="handleQuery"
                />
              </el-form-item>
              <el-form-item label="患者范围" prop="tagId">
              <!-- <el-form-item label="患者范围" prop="tagId">
                <el-select
                  v-model="queryParams.searchscope"
                  placeholder="请选择患者范围"
@@ -122,7 +121,16 @@
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              </el-form-item> -->
              <!-- <el-form-item label="患者范围" prop="status">
                <el-cascader
                  v-model="queryParams.scopetype"
                  placeholder="默认全部"
                  :options="sourcetype"
                  :props="{ expandTrigger: 'hover' }"
                  @change="handleChange"
                ></el-cascader>
              </el-form-item> -->
              <el-form-item label="联系电话" prop="telcode">
                <el-input
                  v-model="queryParams.telcode"
@@ -215,7 +223,7 @@
            <el-table
              v-loading="loading"
              :data="userList"
              height="660"
              height="808"
              @selection-change="handleSelectionChange"
            >
              <el-table-column type="selection" width="50" align="center" />
@@ -227,8 +235,10 @@
                prop="id"
              /> -->
              <!-- <el-table-column
              <!-- <el-table-column
                fixed
                label="姓名"
          width="100"
          width="100"
                align="center"
                key="name"
@@ -426,13 +436,18 @@
            prop="templatename"
          />
          <el-table-column
            label="待随访/总任务"
            label="总任务/已随访"
            align="center"
            key="nickName"
            width="120"
            prop="nickName"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.wfs }}/{{ scope.row.yfs }}</span>
              <span
                >{{ scope.row.wfs ? scope.row.wfs + scope.row.yfs : "" }}/{{
                  scope.row.yfs
                }}</span
              >
            </template>
          </el-table-column>
          <el-table-column
@@ -509,8 +524,7 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="姓名"
          width="100" prop="name">
            <el-form-item label="姓名" width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
@@ -519,7 +533,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别"width="100" prop="sex">
            <el-form-item label="性别" width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in sextype"
@@ -702,9 +716,10 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" 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="name" label="姓名" width="100">
          </el-table-column>
          <el-table-column prop="sex" label="性别" width="100">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
          </el-table-column>
@@ -742,9 +757,10 @@
      <div v-if="dractive == 3">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" 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="name" label="姓名" width="100">
          </el-table-column>
          <el-table-column prop="sex" label="性别" width="100">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
          </el-table-column>
          <el-table-column prop="goday" label="出生日期"> </el-table-column>
@@ -832,11 +848,12 @@
  Exporterrorpatient,
  toleadpatient,
} from "@/api/patient/homepage";
import { getTasklist } from "@/api/AiCentre/index";
import { getTasklist,query360PatInfo } from "@/api/AiCentre/index";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
@@ -974,6 +991,39 @@
        idcardtype: "",
        relativetelcode: "",
      },
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      activeName: "first", //侧边选择
      //导入进度
      dractive: 1,
@@ -1006,16 +1056,30 @@
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        allhosp: "1",
        allhosp: "0",
        pageSize: 10,
        notrequiredFlag:0,
        notrequiredFlag: 0,
        searchscope: 2,
        idcardno: undefined,
        name: undefined,
        status: undefined,
        tagIds: undefined,
        telcode: undefined,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      // è¡¨å•校验
      rules: {
        name: [
@@ -1067,21 +1131,24 @@
    this.getList();
    this.gettabList();
    //获取已筛选后的可选任务类型
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.taskoptions = store.getters.Serviceauthority;
  },
  methods: {
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      if (this.queryParams.searchscope == 1) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes = null;
      } else if (this.queryParams.searchscope == 2) {
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
        this.queryParams.leaveldeptcodes = null;
      } else {
      if (this.queryParams.searchscope == 3) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -1116,6 +1183,22 @@
        this.optionstag = response.rows;
      });
    },
    //患者360跳转
    gettoken360(sfzh,drcode,drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC=='丽水市中医院') {
        this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728';
        this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY';
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    // æŸ¥è¯¢å¯¼å…¥å±•示列表
    geterryList() {
      this.loading = true;
@@ -1130,7 +1213,7 @@
    },
    RiskMarker(row) {
      this.RiskVisible = true;
      this.RiskObj=row;
      this.RiskObj = row;
    },
    // å–消按钮
@@ -1160,19 +1243,17 @@
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.queryParams= {
      this.queryParams = {
        pageNum: 1,
        allhosp: "1",
        allhosp: "0",
        pageSize: 10,
        notrequiredFlag:0,
        notrequiredFlag: 0,
        searchscope: 2,
        idcardno: undefined,
        name: undefined,
        status: undefined,
        tagIds: undefined,
        telcode: undefined,
      },
      this.handleQuery();
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
        this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
@@ -1229,7 +1310,25 @@
        }
      });
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.queryParams.leavehospitaldistrictcodes = [];
      this.queryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.queryParams.leaveldeptcodes.push(code);
        this.queryParams.leavehospitaldistrictcodes = [];
        this.queryParams.searchscope = 1;
      } else if (type == 2) {
        this.queryParams.leavehospitaldistrictcodes.push(code);
        this.queryParams.leaveldeptcodes = [];
        this.queryParams.searchscope = 2;
      } else {
        this.queryParams.searchscope = 3;
      }
    },
    /** åˆ é™¤æŒ‰é’®æ“ä½œ */
    handleDelete(row) {
      const userIds = row.userId || this.ids;
@@ -1252,14 +1351,13 @@
      });
    },
    RiskService() {
      this.RiskObj.visitFlag = this.Risklist.join(", ");
      this.RiskObj.visitType = this.Riskradio;
      alterpatient(this.RiskObj).then((res) => {
        if (res.code==200) {
        if (res.code == 200) {
          this.getList();
          this.Risklist=[];
          this.Riskradio=1;
          this.Risklist = [];
          this.Riskradio = 1;
          this.$modal.msgSuccess("异常记录成功");
        }
      });
@@ -1350,11 +1448,12 @@
<style lang="scss" scoped>
.Questionnairemanagement {
  display: flex;
  // display: flex;
}
.sidecolumn {
  width: 180px;
  min-height: 100vh;
  min-height: 80vh;
  position: fixed;
  text-align: center;
  //   display: flex;
  margin-top: 20px;
@@ -1431,7 +1530,8 @@
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
.leftvlue {
  width: 80%;
  // width: 100%;
  // margin-left: 220px;
  margin-top: 10px;
}
.leftvlue-bg {
src/views/patient/patient/indexls.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,349 @@
<template>
  <div class="iframe-container"><iframe :src="linkUrl" frameborder="0"></iframe></div>
</template>
<script>
import { gitzerotoken,query360PatInfo } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import axios from "axios";
export default {
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
  components: { Treeselect },
  data() {
    return {
      // é®ç½©å±‚
      loading: true,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•个禁用
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 0,
      linkUrl:'https://www.google.com/blank.html',
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊宣教",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
      modificationVisible: false,
      // éƒ¨é—¨åç§°
      deptName: undefined,
      // é»˜è®¤å¯†ç 
      initPassword: undefined,
      // æ—¥æœŸèŒƒå›´
      dateRange: [],
      // å²—位选项
      postOptions: [],
      ruleForm: {
        type: [],
      },
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
      previewVisible: false, //门诊宣教预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊宣教类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊宣教数量
      //预览门诊宣教信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
      value: [],
      list: [],
      source: [
        {
          value: 0,
          label: "所属患者",
        },
        {
          value: 1,
          label: "科室患者",
        },
        {
          value: 2,
          label: "病区患者",
        },
      ],
      loading: false,
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() > Date.now();
        },
        shortcuts: [
          {
            text: "今天",
            onClick(picker) {
              picker.$emit("pick", new Date());
            },
          },
          {
            text: "昨天",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit("pick", date);
            },
          },
          {
            text: "一周前",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", date);
            },
          },
        ],
      },
      // è¡¨å•参数
      form: {
        phonenumber: "",
        totagid: "",
        types: "",
        nickName: "",
        qystatus: "",
        btstatus: "",
      },
      // æŸ¥è¯¢å‚æ•°
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 4,
        searchscope: 2,
        sendstate:2,
      },
      propss: { multiple: true },
      options: [],
      topicoptions: [
        {
          value: 1,
          label: "被领取",
        },
        {
          value: 2,
          label: "待发送",
        },
        {
          value: 3,
          label: "已发送未领取",
        },
        {
          value: 4,
          label: "不执行",
        },
        {
          value: 5,
          label: "发送失败",
        },
        {
          value: 6,
          label: "已完成",
        },
      ],
      topicoptionsyj: [
        {
          value: 1,
          label: "异常",
        },
        {
          value: 0,
          label: "正常",
        },
      ],
      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: '',
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      serviceState: [],
      // è¡¨å•校验
      rules: {},
    };
  },
  watch: {},
  created() {
    // this.gettoken();
  },
  mounted() {
    this.gettoken();
  },
  activated() {},
  methods: {
    gettoken() {
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          this.linkUrl = res.data.url;
        }else{
          this.linkUrl='https://www.google.com/blank.html';
        }
      });
      // axios
      //   .post(this.url, this.postData)
      //   .then((response) => {
      //     // è¯·æ±‚成功
      //     this.linkUrl = response.data.data.url;
      //   })
      //   .catch((error) => {
      //     // è¯·æ±‚失败
      //     this.linkUrl='https://www.google.com/blank.html';
      //     if (error.response) {
      //       // æœåŠ¡å™¨è¿”å›žäº†é”™è¯¯å“åº”
      //       console.error("Status Code:", error.response.status);
      //       console.error("Response Data:", error.response.data);
      //     } else if (error.request) {
      //       // è¯·æ±‚已发出,但未收到响应
      //       console.error("No response received");
      //     } else {
      //       // åœ¨è®¾ç½®è¯·æ±‚时发生了一些事情,触发了一个错误
      //       console.error("Error Message:", error.message);
      //     }
      //   });
    },
  },
};
</script>
<style lang="scss" scoped>
.el-tag + .el-tag {
  margin-left: 10px;
}
.button-new-tag {
  margin-left: 10px;
  height: 32px;
  line-height: 30px;
  padding-top: 0;
  padding-bottom: 0;
}
.iframe-container {
  width: 100vw; /* è§†å£å®½åº¦ */
  height: 100vh; /* è§†å£é«˜åº¦ */
  overflow: hidden; /* éšè—è¶…出部分 */
}
iframe {
  width: 100%;
  height: 100%;
  border: none; /* ç§»é™¤è¾¹æ¡† */
}
.input-new-tag {
  width: 90px;
  margin-left: 10px;
  vertical-align: bottom;
}
.drexamine {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 30px;
  background: #daeaf5;
  img {
    width: 100px;
    height: 100px;
  }
}
.qrcode-dialo {
  // text-align: center;
  //   display: flex;
  margin: 20px;
  padding: 30px;
  background: #edf1f7;
  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;
    }
  }
}
.button-bb {
  font-weight: 500;
  background-color: #2ba05c;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
}
.button-xq {
  font-weight: 500;
  background-color: #409eff;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
}
.button-sc {
  font-weight: 500;
  background-color: #dd302a;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
}
.button-zx {
  background: #4fabe9;
  padding: 5px;
  border-radius: 1px;
  color: #ffffff;
}
::v-deep.el-radio-group {
  span {
    font-size: 24px;
  }
}
// é€‰é¡¹å­—体放大
// ::v-deep.el-checkbox-group {
//   span {
//     font-size: 24px;
//   }
// }
</style>
src/views/patient/patient/operation.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,748 @@
<template>
  <div class="app-container">
    <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="name">
            <el-input
              v-model="queryParams.paname"
              placeholder="请输入姓名"
              clearable
              style="width: 200px"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label=" æ‰‹æœ¯æ—¥æœŸ " prop="createTime">
            <el-date-picker
            v-model="dateRange"
            style="width: 240px"
            value-format="yyyy-MM-dd"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          ></el-date-picker>
          </el-form-item>
          <el-row>
            <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-row>
        </el-form>
        <el-row :gutter="10" class="mb8">
          <!-- <el-col :span="1.5">
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="medium"
              @click="handleAdd"
              v-hasPermi="['system:user:add']"
              >新增</el-button
            >
          </el-col> -->
          <!-- <el-col :span="1.5">
            <el-button
              type="success"
              plain
              icon="el-icon-edit"
              size="medium"
              :disabled="single"
              @click="handleUpdate"
              v-hasPermi="['system:user:edit']"
              >修改</el-button
            >
          </el-col> -->
          <!-- <el-col :span="1.5"> </el-col> -->
        </el-row>
        <el-table
          v-loading="loading"
          :data="userList"
           height="808"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="50" align="center" />
          <!-- <el-table-column
            label="序号"
            fixed
            align="center"
            key="id"
            prop="id"
          /> -->
          <el-table-column
            label="手术时间"
            align="center"
            key="operatortime"
            prop="operatortime"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.operatortime) }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="手术单号"
            align="center"
            key="opreqcode"
            prop="opreqcode"
          />
          <!-- <el-table-column
            label="姓名"
          width="100"
            align="center"
            key="paname"
            prop="paname"
          /> -->
          <el-table-column
              fixed
                label="姓名"
                align="center"
                key="paname"
                prop="paname"
              >
                <template slot-scope="scope">
                  <el-button
                    size="medium"
                    type="text"
                    @click="
                       $router.push({
                    path: '/patient/indexls/',
                    query: { sfzh: scope.row.idcardno },
                  })
                    "
                    ><span class="button-textsc"
                      >{{scope.row.paname}}</span
                    ></el-button
                  >
                </template>
              </el-table-column>
          <el-table-column label="性别"width="100" align="center" key="sex" prop="sex">
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="年龄"
            align="center"
            key="age"
            prop="age"
            width="80"
          />
          <el-table-column
            label="联系电话"
            align="center"
            key="telcode"
            prop="telcode"
            width="160"
          />
          <!-- <el-table-column
            label="入院诊断"
            align="center"
            key="diagname"
            prop="diagname"
            width="190"
          /> -->
          <el-table-column
            label="手术类别"
            align="center"
            key="optypename"
            prop="optypename"
            width="190"
          />
          <!-- <el-table-column
            label="主述"
            align="center"
            key="mainsuit"
            prop="mainsuit"
            width="120"
          /> -->
          <el-table-column
            label="科室"
            align="center"
            key="regdeptname"
            prop="regdeptname"
            width="150"
          />
          <el-table-column
            label="主刀医生"
            align="center"
            key="surgeonname"
            prop="surgeonname"
          />
          <el-table-column
            label="一助医生"
            align="center"
            key="firassname"
            prop="firassname"
          />
          <el-table-column
            label="二助医生"
            align="center"
            key="secassname"
            prop="secassname"
          />
          <el-table-column
            label="三助医生"
            align="center"
            key="thrassname"
            prop="thrassname"
          />
          <el-table-column
            label="备注"
            align="center"
            key="remark"
            prop="remark"
          />
          <!-- <el-table-column
            label="操作"
            fixed="right"
            align="center"
            width="160"
            class-name="small-padding fixed-width"
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="
                  $router.push({
                    path: '/patient/patient/profile/',
                    query: { id: scope.row.patid },
                  })
                "
                ><span class="button-textsc"
                  ><i class="el-icon-zoom-in"></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>
    <!-- ç”¨æˆ·å¯¼å…¥å¯¹è¯æ¡† -->
    <el-dialog
      :title="upload.title"
      :visible.sync="upload.open"
      width="70%"
      append-to-body
    >
      <el-steps :active="dractive" simple>
        <el-step title="上传导入文件" icon="el-icon-upload"></el-step>
        <el-step title="导入检查" icon="el-icon-picture"></el-step>
        <el-step title="导入结果" icon="el-icon-picture"></el-step>
      </el-steps>
      <!-- ä¸Šä¼ å¯¼å…¥æ–‡ä»¶ -->
      <div class="download" v-if="dractive == 1">
        <el-upload
          class="upload-demo"
          ref="upload"
          :limit="1"
          accept=".xlsx, .xls"
          :headers="upload.headers"
          :action="upload.url + '?updateSupport=' + upload.updateSupport"
          :disabled="upload.isUploading"
          :on-progress="handleFileUploadProgress"
          :on-success="handleFileSuccess"
          :auto-upload="false"
          drag
        >
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
          <div class="el-upload__tip text-center" slot="tip">
            <div class="el-upload__tip" slot="tip">
              <el-checkbox v-model="upload.updateSupport" />
              æ˜¯å¦æ›´æ–°å·²ç»å­˜åœ¨çš„用户数据
            </div>
            <span>仅允许导入xls、xlsx格式文件。</span>
            <el-link
              type="primary"
              :underline="false"
              style="font-size: 24px; vertical-align: baseline"
              @click="importTemplate"
              >下载模板</el-link
            >
          </div>
        </el-upload>
      </div>
      <!-- å¯¼å…¥æ£€æŸ¥ -->
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" 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="certificate" label="证件类型">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
          </el-table-column>
          <el-table-column prop="goday" label="出生日期"> </el-table-column>
          <el-table-column prop="menum" label="本人联系方式"> </el-table-column>
          <el-table-column prop="younum" label="亲属联系方式">
          </el-table-column>
          <el-table-column prop="tag" label="患者标签"> </el-table-column>
          <el-table-column prop="erry" label="错误原因"> </el-table-column>
        </el-table>
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="geterryList"
        />
      </div>
      <!-- å®Œæˆ -->
      <div class="drexamine" v-else-if="dractive == 3">
        <img
          src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
        />
        <p>导入患者成功!</p>
        <p>本次共计导入{{ ImportQuantity }}位患者</p>
      </div>
      <div slot="footer" class="dialog-footer" v-if="dractive == 3">
        <!-- <el-button type="primary" @click="submitFileForm">下一步</el-button> -->
        <el-button @click="submitclose">完成</el-button>
      </div>
      <div slot="footer" v-else>
        <el-button type="primary" @click="submitFileForm">下一步</el-button>
        <el-button @click="submitclose">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { delUser } from "@/api/system/user";
import {
  listoperation,
} from "@/api/patient/record";
import {
  messagelistpatient,
  alterpatient,
  addpatient,
  particularpatient,
  deletepatient,
  Exporterrorpatient,
  toleadpatient,
} from "@/api/patient/homepage";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import { listDept } from "@/api/system/dept";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import store from "@/store";
export default {
  name: "behospitalized",
  dicts: ["sys_normal_disable", "sys_user_sex", "nursinggrade"],
  components: { Treeselect },
  data() {
    return {
      // é®ç½©å±‚
      loading: true,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•个禁用
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 0,
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "",
      // éƒ¨é—¨æ ‘选项
      deptOptions: undefined,
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // éƒ¨é—¨åç§°
      deptName: undefined,
      // é»˜è®¤å¯†ç 
      initPassword: undefined,
      amendtag: false, //是否修改
      // æ—¥æœŸèŒƒå›´
      dateRange: [],
      source: [
        {
          value: 0,
          label: "所属患者",
        },
        {
          value: 1,
          label: "科室患者",
        },
        {
          value: 2,
          label: "病区患者",
        },
      ],
      paperstypes: [
        { papersname: "身份证" },
        { papersname: "护照" },
        { papersname: "中国港澳居民身份证" },
        { papersname: "中国台湾居民身份证" },
      ],
      // è¡¨å•参数
      form: {
        name: "",
        age: "",
        sex: "",
        tagList: [],
        idcardno: "",
        telcode: "",
        idcardtype: "",
        relativetelcode: "",
      },
      //导入进度
      dractive: 1,
      // å¯¼å…¥å±•示表单
      uploadingData: {},
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导入患者数量
      Labelchange: false, //修改新增弹窗
      propss: { multiple: true },
      optionstag: [], //标签列表
      Patientrange: [
        {
          name: "全部科室",
          id: 999,
        },
        {
          name: "当前科室",
          id: 1,
        },
      ],
      defaultProps: {
        children: "children",
        label: "label",
      },
      // ç”¨æˆ·å¯¼å…¥å‚æ•°
      upload: {
        // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚(用户导入)
        open: false,
        // å¼¹å‡ºå±‚标题(用户导入)
        title: "",
        // æ˜¯å¦ç¦ç”¨ä¸Šä¼ 
        isUploading: false,
        // æ˜¯å¦æ›´æ–°å·²ç»å­˜åœ¨çš„用户数据
        updateSupport: 0,
        // è®¾ç½®ä¸Šä¼ çš„请求头部
        headers: { Authorization: "Bearer " + getToken() },
        // ä¸Šä¼ çš„地址
        url: process.env.VUE_APP_BASE_API + "/system/user/importData",
      },
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        searchscope:2,
        idcardno: undefined,
        name: undefined,
        status: undefined,
        tagIds: undefined,
        telcode: undefined,
      },
      // è¡¨å•校验
      rules: {
      },
    };
  },
  watch: {
    // æ ¹æ®åç§°ç­›é€‰éƒ¨é—¨æ ‘
    deptName(val) {
      this.$refs.tree.filter(val);
    },
  },
  created() {
    this.getList();
    this.listDept();
    this.gettabList();
  },
  methods: {
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      if (this.queryParams.searchscope == 1) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes=null;
      } else if (this.queryParams.searchscope == 2) {
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
          this.queryParams.leaveldeptcodes=null;
      } else {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      this.loading = true;
      listoperation(this.queryParams).then((response) => {
        console.log(response);
        this.userList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    listDept() {
      listDept(this.queryParams).then((res) => {
        this.deptList = res.data;
        console.log(this.deptList, "this.deptList");
      });
    },
    /** æŸ¥è¯¢æ ‡ç­¾åˆ—表 */
    gettabList() {
      const tagqueryParams = {
        pageNum: 1,
        pageSize: 1000,
        tagname: undefined,
        tagdescription: undefined,
        tagcategoryid: "0",
      };
      listtag(tagqueryParams).then((response) => {
        console.log(response);
        this.optionstag = response.rows;
      });
    },
    // æŸ¥è¯¢å¯¼å…¥å±•示列表
    geterryList() {
      this.loading = true;
      listJob(this.queryParams).then((response) => {
        this.jobList = 1;
        this.total = 1;
        this.loading = false;
      });
    },
    // ç­›é€‰èŠ‚ç‚¹
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    // èŠ‚ç‚¹å•å‡»äº‹ä»¶
    handleNodeClick(data) {
      this.queryParams.deptId = data.id;
      this.handleQuery();
    },
    // å–消按钮
    cancel() {
      this.Labelchange = false;
      this.reset();
    },
    // è¡¨å•重置
    reset() {
      this.form = {
        name: "",
        age: "",
        sex: "",
        tagList: [],
        idcardno: "",
        telcode: "",
        idcardtype: "",
        relativetelcode: "",
      };
      // this.resetForm("form");
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.beginTime = this.dateRange[0];
      this.queryParams.endTime = this.dateRange[1];
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.queryParams= {
        pageNum: 1,
        pageSize: 10,
      },
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      this.ids = selection.map((item) => item.patid);
      this.single = selection.length != 1;
      this.multiple = !selection.length;
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.reset();
      this.Labelchange = true;
      this.amendtag = false;
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
      console.log(row);
      const userIds = row.patid || this.ids;
      particularpatient(userIds).then((response) => {
        console.log(response);
        this.form = response.data;
      });
      this.amendtag = true;
      this.Labelchange = true;
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download(
        "smartor/patarchive/export",
        {
          ...this.queryParams,
        },
        `user_${new Date().getTime()}.xlsx`
      );
    },
    /** å¯¼å…¥æŒ‰é’®æ“ä½œ */
    handleImport() {
      this.upload.title = "用户导入";
      this.upload.open = true;
    },
    /** ä¸‹è½½æ¨¡æ¿æ“ä½œ */
    importTemplate() {
      this.download(
        "smartor/import/getImportPatTemplate",
        {},
        `user_template_${new Date().getTime()}.xlsx`
      );
    },
    // æ–‡ä»¶ä¸Šä¼ ä¸­å¤„理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
    },
    // æ–‡ä»¶ä¸Šä¼ æˆåŠŸå¤„ç†
    handleFileSuccess(response, file, fileList) {
      this.upload.open = false;
      this.upload.isUploading = false;
      this.$refs.upload.clearFiles();
      this.$alert(
        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
          response.msg +
          "</div>",
        "导入结果",
        { dangerouslyUseHTMLString: true }
      );
      this.getList();
    },
    // æäº¤ä¸Šä¼ æ–‡ä»¶
    submitFileForm() {
      // ä¸Šä¼ 
      if (this.dractive == 1) {
        this.$refs.upload.submit();
        this.dractive++;
      } else {
        this.dractive++;
      }
    },
    submitclose() {
      this.upload.open = false;
      this.dractive = 1;
    },
  },
};
</script>
<style lang="scss" scoped>
.el-button--primary.is-plain {
  color: #ffffff;
  background: #409eff;
  border-color: #4fabe9;
}
.document {
  width: 100px;
  height: 50px;
}
.documentf {
  display: flex;
  justify-content: flex-end;
}
.download {
  text-align: center;
  .el-upload__tip {
    font-size: 23px;
  }
  .el-upload__text {
    font-size: 23px;
  }
}
.uploading {
  margin-top: 20px;
  margin: 20px;
  padding: 30px;
  background: #ffffff;
  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);
}
.drexamine {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 30px;
  background: #daeaf5;
  img {
    width: 100px;
    height: 100px;
  }
}
.button-textsc {
  color: #28cfe6;
}
</style>
src/views/patient/patient/outpatient.vue
@@ -11,7 +11,7 @@
          v-show="showSearch"
          label-width="98px"
        >
          <el-form-item label="姓名" prop="name">
          <el-form-item label="姓名" width="100" prop="name">
            <el-input
              v-model="queryParams.patname"
              placeholder="请输入姓名"
@@ -20,37 +20,55 @@
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="患者编号" prop="patid">
          <el-form-item label="病案号" prop="outhospno">
            <el-input
              v-model="queryParams.patid"
              placeholder="请输入患者编号"
              v-model="queryParams.outhospno"
              placeholder="请输入病案号"
              clearable
              style="width: 250px"
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="患者范围" prop="tagId">
            <el-select v-model="queryParams.Patientid" placeholder="请选择">
              <el-option
                v-for="item in Patientrange"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              >
              </el-option>
            </el-select>
          <el-form-item label="患者范围" prop="status">
            <el-cascader
              v-model="queryParams.scopetype"
              placeholder="默认全部"
              :options="sourcetype"
              :props="{ expandTrigger: 'hover' }"
              @change="handleChange"
            ></el-cascader>
          </el-form-item>
          <el-row>
            <el-form-item label=" å°±è¯Šæ—¥æœŸ " prop="createTime">
            <!-- <el-form-item label=" å°±è¯Šæ—¥æœŸ " prop="admitdate">
              <el-date-picker
                clearable
                v-model="queryParams.createTime"
                v-model="queryParams.admitdate"
                type="date"
                value-format="yyyy-MM-dd"
                placeholder="请选择 å°±è¯Šæ—¥æœŸ "
              >
              </el-date-picker>
            </el-form-item> -->
            <el-form-item label="就诊日期">
              <el-date-picker
                v-model="dateRange"
                style="width: 240px"
                value-format="yyyy-MM-dd"
                type="daterange"
                range-separator="-"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
              ></el-date-picker>
              <!-- <el-date-picker
                v-model="dateRange"
                type="datetimerange"
                value-format="yyyy-MM-dd HH:mm:ss"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                :default-time="['12:00:00']"
              >
              </el-date-picker> -->
            </el-form-item>
            <el-form-item>
              <el-button
@@ -151,28 +169,51 @@
          <el-table-column
            label="就诊时间"
            align="center"
            key="createTime"
            prop="createTime"
            key="admitdate"
            prop="admitdate"
            width="160"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.createTime) }}</span>
              <span>{{ formatTime(scope.row.admitdate) }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="门诊号"
          <!-- <el-table-column
            label="病案号"
            align="center"
            key="patid"
            prop="patid"
            key="patno"
            prop="patno"
          /> -->
          <el-table-column
            label="病案号"
            align="center"
            key="outhospno"
            prop="outhospno"
          />
          <el-table-column
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
          />
          <el-table-column label="性别" align="center" key="sex" prop="sex">
          >
            <template slot-scope="scope">
              <el-button
                size="medium"
                type="text"
                @click="gettoken360(scope.row.idcardno,scope.row.drcode,scope.row.drname)"
                ><span class="button-textsc">{{
                  scope.row.patname
                }}</span></el-button
              >
            </template>
          </el-table-column>
          <el-table-column
            label="性别"
            width="100"
            align="center"
            key="sex"
            prop="sex"
          >
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
@@ -318,8 +359,10 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="序号"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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="certificate" label="证件类型">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
@@ -370,10 +413,14 @@
  updatePatouthosp,
  delPatouthosp,
} from "@/api/smartor/patouthosp";
import { particularpatient } from "@/api/patient/homepage";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { query360PatInfo } from "@/api/AiCentre/index";
import store from "@/store";
export default {
  name: "Userhuanze",
@@ -444,10 +491,59 @@
          id: 1,
        },
      ],
      postData: {
        XiaoXiTou: {
          FaSongFCSJC: "ZJHES",
          FaSongJGID: localStorage.getItem("orgid"),
          FaSongJGMC: localStorage.getItem("orgname"),
          FaSongSJ: "2025-01-09 17:29:36",
          FaSongXTJC: "SUIFANGXT",
          FaSongXTMC: "随访系统",
          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
          XiaoXiLX: "SC_LC_360STCX",
          XiaoXiMC: "360 视图查询",
          ZuHuID: localStorage.getItem("ZuHuID"),
          ZuHuMC: localStorage.getItem("orgname"),
        },
        YeWuXX: {
          BingRenXX: {
            ZhengJianHM: "",
            ZhengJianLXDM: "01",
            ZhengJianLXMC: "居民身份证",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
          },
          YongHuXX: {
            XiTongID: "SUIFANGXT",
            XiTongMC: "随访系统",
            YongHuID: "1400466972205912064",
            YongHuXM: "JNRMYY",
            ZuZhiJGID: localStorage.getItem("orgid"),
            ZuZhiJGMC: localStorage.getItem("orgname"),
            idp: "lyra",
          },
        },
      },
      defaultProps: {
        children: "children",
        label: "label",
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      // ç”¨æˆ·å¯¼å…¥å‚æ•°
      upload: {
        // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚(用户导入)
@@ -467,6 +563,10 @@
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      // è¡¨å•校验
      rules: {
@@ -523,6 +623,18 @@
    },
  },
  created() {
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.getList();
    this.gettabList();
  },
@@ -530,8 +642,21 @@
    /** æŸ¥è¯¢æ‚£è€…列表 */
    getList() {
      this.loading = true;
      if (this.queryParams.searchscope == 3) {
        this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.queryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      if (this.dateRange) {
        this.queryParams.beginTime = this.dateRange[0];
        this.queryParams.endTime = this.dateRange[1];
      }else{
        this.queryParams.beginTime = '';
        this.queryParams.endTime = '';
      }
      listPatouthosp(this.queryParams).then((response) => {
        console.log(response);
        this.userList = response.rows;
        this.total = response.total;
        this.loading = false;
@@ -551,6 +676,25 @@
        this.optionstag = response.rows;
      });
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.queryParams.leavehospitaldistrictcodes = [];
      this.queryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.queryParams.leaveldeptcodes.push(code);
        this.queryParams.leavehospitaldistrictcodes = [];
        this.queryParams.searchscope = 1;
      } else if (type == 2) {
        this.queryParams.leavehospitaldistrictcodes.push(code);
        this.queryParams.leaveldeptcodes = [];
        this.queryParams.searchscope = 2;
      } else {
        this.queryParams.searchscope = 3;
      }
    },
    // æŸ¥è¯¢å¯¼å…¥å±•示列表
    geterryList() {
      this.loading = true;
@@ -560,7 +704,23 @@
        this.loading = false;
      });
    },
    //患者360跳转
    gettoken360(sfzh,drcode,drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC=='丽水市中医院') {
        this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728';
        this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY';
      }
      query360PatInfo(this.postData).then((res) => {
        if (res.data.url) {
          window.open(res.data.url, "_blank");
          // this.linkUrl = res.data.url;
        } else {
          this.$modal.msgWarning("360查询无结果");
        }
      });
    },
    // ç­›é€‰èŠ‚ç‚¹
    filterNode(value, data) {
      if (!value) return true;
@@ -600,8 +760,15 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.$refs.tree.setCurrentKey(null);
      this.handleQuery();
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        searchscope: 3,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
        this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
src/views/patient/patient/physical.vue
@@ -11,7 +11,8 @@
          v-show="showSearch"
          label-width="98px"
        >
          <el-form-item label="姓名" prop="name">
          <el-form-item label="姓名"
          width="100" prop="name">
            <el-input
              v-model="queryParams.name"
              placeholder="请输入姓名"
@@ -167,14 +168,15 @@
            key="id"
            prop="id"
          />
          <el-table-column label="姓名" fixed align="center" key="patname" prop="patname" />
          <el-table-column label="姓名"
          width="100" fixed align="center" key="patname" prop="patname" />
          <el-table-column
            label="体检编号"
            align="center"
            key="projectcode"
            prop="projectcode"
          />
          <el-table-column label="性别" align="center" key="sex" prop="sex">
          <el-table-column label="性别"width="100" align="center" key="sex" prop="sex">
            <template slot-scope="scope">
              <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
            </template>
@@ -252,12 +254,12 @@
          <el-table-column
            label="就诊时间"
            align="center"
            key="createTime"
            prop="createTime"
            key="admitdate"
            prop="admitdate"
            width="160"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.createTime) }}</span>
              <span>{{ formatTime(scope.row.admitdate) }}</span>
            </template>
          </el-table-column>
          <el-table-column
@@ -267,7 +269,7 @@
            width="160"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.createTime) }}</span>
              <span>{{ formatTime(scope.row.updateTime) }}</span>
            </template>
          </el-table-column>
          <el-table-column
@@ -324,7 +326,8 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="姓名" prop="name">
            <el-form-item label="姓名"
          width="100" prop="name">
              <el-input
                v-model="form.name"
                placeholder="请输入姓名"
@@ -333,7 +336,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="性别" prop="sex">
            <el-form-item label="性别"width="100" prop="sex">
              <el-select v-model="form.sex" placeholder="请选择性别">
                <el-option
                  v-for="dict in dict.type.sys_user_sex"
@@ -483,8 +486,9 @@
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="序号"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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="certificate" label="证件类型">
          </el-table-column>
          <el-table-column prop="certificatenum" label="证件号码">
@@ -537,6 +541,9 @@
  Exporterrorpatient,
  toleadpatient,
} from "@/api/smartor/patphysical";
import {
  particularpatient,
} from "@/api/patient/homepage";
import { listtag } from "@/api/system/label";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
@@ -772,7 +779,10 @@
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.$refs.tree.setCurrentKey(null);
      this.queryParams= {
        pageNum: 1,
        pageSize: 10,
      },
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
src/views/patient/patient/profile/index.vue
@@ -111,7 +111,7 @@
            ref="userform"
            :model="userform"
            :rules="rules"
            label-width="100px"
            label-width="150px"
          >
            <el-row :gutter="20">
              <el-col :span="12">
@@ -122,6 +122,8 @@
                    maxlength="30"
                  ></el-input> </el-form-item
              ></el-col>
            </el-row>
            <el-row >
              <el-col :span="12"
                ><el-form-item label="联系方式" prop="telcode">
                  <el-input
@@ -129,6 +131,14 @@
                    placeholder="请输入联系方式"
                    maxlength="30"
                  /> </el-form-item
              ></el-col>
              <el-col :span="12">
                <el-form-item label="亲属联系方式"  prop="name">
                  <el-input
                    v-model="userform.telcodewx"
                    placeholder="请输入姓名"
                    maxlength="30"
                  ></el-input> </el-form-item
              ></el-col>
            </el-row>
            <el-row :gutter="20">
@@ -198,7 +208,7 @@
          </el-form>
        </div>
      </div>
      <div class="top-message">
      <!-- <div class="top-message">
        <div class="headline">病史</div>
        <div class="detailed">
          <el-form :model="form" label-width="100px">
@@ -306,7 +316,7 @@
            </el-row>
          </el-form>
        </div>
      </div>
      </div> -->
      <!-- è”系电话 -->
      <div class="bottom-message">
        <div class="headline">
@@ -321,7 +331,7 @@
          >
            <el-table-column prop="id" label="序号" width="180">
            </el-table-column>
            <el-table-column prop="contactname" label="姓名" width="180">
            <el-table-column prop="contactname" label="姓名" width="100">
            </el-table-column>
            <el-table-column prop="contactway" label="联系方式" width="180">
            </el-table-column>
@@ -363,23 +373,24 @@
          <el-table-column
            label="就诊时间"
            align="center"
            key="createTime"
            prop="createTime"
            key="admitdate"
            prop="admitdate"
            width="160"
          >
            <template slot-scope="scope">
              <span>{{ formatTime(scope.row.createTime) }}</span>
              <span>{{ formatTime(scope.row.admitdate) }}</span>
            </template>
          </el-table-column>
          <el-table-column
            label="门诊号"
            label="病案号"
            align="center"
            key="patid"
            prop="patid"
            key="outhospno"
            prop="outhospno"
          />
          <el-table-column
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
@@ -451,12 +462,13 @@
          <el-table-column
            label="住院号"
            align="center"
            key="patno"
            prop="patno"
            key="inhospno"
            prop="inhospno"
            width="180"
          />
          <el-table-column
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
@@ -519,7 +531,6 @@
            prop="bedNo"
            width="120"
          />
        </el-table>
      </div>
      <!-- å‡ºé™¢ -->
@@ -528,12 +539,13 @@
          <el-table-column
            label="住院号"
            align="center"
            key="patno"
            prop="patno"
            key="inhospno"
            prop="inhospno"
            width="120"
          />
          <el-table-column
            label="姓名"
            width="100"
            align="center"
            key="patname"
            prop="patname"
@@ -597,7 +609,6 @@
            prop="bedNo"
            width="120"
          />
        </el-table>
      </div>
    </div>
@@ -618,26 +629,22 @@
              border-left: 4px solid rgb(190, 65, 134);
            "
          >
          <span v-if="item.serviceType==2">出院随访</span>
          <span v-if="item.serviceType==1">监测评估</span>
          <span v-if="item.serviceType==3">门诊随访</span>
          <span v-if="item.serviceType==4">宣教关怀</span>
            <span v-if="item.serviceType == 2">出院随访</span>
            <span v-if="item.serviceType == 1">心电随访</span>
            <span v-if="item.serviceType == 3">影像随访</span>
            <span v-if="item.serviceType == 4">宣教关怀</span>
          </div>
          <el-divider></el-divider>
          <div style="margin-top: 10px">
            æœåŠ¡åç§°ï¼š<span style="color: #2775b6"
              >{{ item.templatename }}</span
            >
            æœåŠ¡åç§°ï¼š<span style="color: #2775b6">{{
              item.templatename
            }}</span>
          </div>
          <div style="margin-top: 10px">
            åˆ›å»ºæ—¶é—´ï¼š<span style="color: #2775b6"
              >{{item.createTime}}</span
            >
            åˆ›å»ºæ—¶é—´ï¼š<span style="color: #2775b6">{{ item.createTime }}</span>
          </div>
          <div style="margin-top: 10px">
            å®Œæˆæ—¶é—´ï¼š<span style="color: #2775b6"
              >{{ item.finishtime }}</span
            >
            å®Œæˆæ—¶é—´ï¼š<span style="color: #2775b6">{{ item.finishtime }}</span>
          </div>
          <div style="margin-top: 10px">
            <el-row :gutter="20">
@@ -647,9 +654,10 @@
              >
              <el-col :span="12"
                >病区:
                <span style="color: #2775b6">{{ item.leavehospitaldistrictname }}</span></el-col
                <span style="color: #2775b6">{{
                  item.leavehospitaldistrictname
                }}</span></el-col
              >
            </el-row>
          </div>
@@ -674,15 +682,15 @@
                <span style="color: #2775b6">{{ item.drname }}</span></el-col
              >
              <el-col :span="6"
                >责任护士 <span style="color: #2775b6">{{ item.nurseName }}</span></el-col
                >责任护士
                <span style="color: #2775b6">{{ item.nurseName }}</span></el-col
              >
            </el-row>
          </div>
          <div style="margin-top: 10px">
            ç»“果状态:
            <span style="color: #2775b6" v-if="item.excep==0">服务正常</span>
            <span style="color: #B55E54" v-if="item.excep==1">异常</span>
            <span style="color: #2775b6" v-if="item.excep == 0">服务正常</span>
            <span style="color: #b55e54" v-if="item.excep == 1">异常</span>
          </div>
          <!-- <div style="margin-top: 10px">
            å¤‡æ³¨ï¼š
@@ -799,7 +807,7 @@
    <el-dialog :title="titletb" :visible.sync="AddanumberVisible">
      <el-form :model="numberform" label-width="100px">
        <el-form-item label="姓名">
        <el-form-item label="姓名" width="100">
          <el-input v-model="numberform.contactname"></el-input>
        </el-form-item>
        <el-form-item label="联系电话">
@@ -838,10 +846,7 @@
  Patientclinic,
} from "@/api/patient/homepage";
import {
  getsearchrResults,
  getTaskservelist,
} from "@/api/AiCentre/index";
import { getsearchrResults, getTaskservelist } from "@/api/AiCentre/index";
import { listPatouthosp } from "@/api/smartor/patouthosp";
import { listpatient } from "@/api/patient/record";
@@ -872,29 +877,29 @@
      record: [
        {
          name: "宣教任务",
          serviceType:'4',
          templatename:'管饲宣教一期',
          createTime:'2024-11-10',
          finishtime:'2024-11-12',
          createBy:'王政',
          drname:'刘明',
          nurseName:'张淑琴',
          excep:'0',
          deptname:'呼吸科',
          leavehospitaldistrictname:'五病区',
          serviceType: "4",
          templatename: "管饲宣教一期",
          createTime: "2024-11-10",
          finishtime: "2024-11-12",
          createBy: "王政",
          drname: "刘明",
          nurseName: "张淑琴",
          excep: "0",
          deptname: "呼吸科",
          leavehospitaldistrictname: "五病区",
        },
        {
          name: "随访任务",
          serviceType:'2',
          templatename:'心血管随访一期',
          createTime:'2024-11-11',
          finishtime:'2024-11-14',
          createBy:'章程',
          drname:'刘明',
          nurseName:'李丽',
          excep:'0',
          deptname:'呼吸科',
          leavehospitaldistrictname:'五病区',
          serviceType: "2",
          templatename: "心血管随访一期",
          createTime: "2024-11-11",
          finishtime: "2024-11-14",
          createBy: "章程",
          drname: "刘明",
          nurseName: "李丽",
          excep: "0",
          deptname: "呼吸科",
          leavehospitaldistrictname: "五病区",
        },
        // {
        //   name: "问卷调查",
@@ -1049,8 +1054,8 @@
        // é—¨è¯Šè®°å½•
        listPatouthosp({ patid: this.id }).then((response) => {
          if (response.code == 200) {
            // this.serviceData = response.rows;
            this.serviceData = [];
            this.serviceData = response.rows;
            // this.serviceData = [];
          }
        });
      } else if (type == 1) {
@@ -1064,7 +1069,7 @@
          if (response.code == 200) {
            this.serviceDatacy = response.rows;
            console.log(this.serviceDatacy);
            this.$forceUpdate()
            this.$forceUpdate();
          }
        });
      }
@@ -1072,6 +1077,9 @@
    getcontactlist() {
      listcontactinformation({ patid: this.id }).then((response) => {
        this.tableData = response.rows;
        if (this.tableData.length) {
          this.userform.telcodewx = this.tableData[0].contactway;
        }
      });
    },
    processElement(element) {
@@ -1089,7 +1097,7 @@
        this.userform = response.rows[0];
        // this.dynamicTags = response.rows[0].tagList;
        this.dynamicTags = response.rows[0].tagList.map(this.processElement);
        console.log(this.dynamicTags);
        this.getcontactlist();
      });
      // ç—…史信息
      getmedicalhistory({ pid: this.id }).then((res) => {
@@ -1098,7 +1106,6 @@
        }
      });
      // è”系信息
      this.getcontactlist();
    },
    // ä¿å­˜æ‚£è€…档案
    savefile() {
@@ -1226,8 +1233,8 @@
    handleClick(tab, event) {
      if (tab.index == "1") {
        this.getList(1);
      }else if (tab.index == "2") {
this.handleClickfw();
      } else if (tab.index == "2") {
        this.handleClickfw();
      }
    },
    handleClickson(tab, event) {
@@ -1235,7 +1242,7 @@
      this.getList(tab.index);
    },
    // æŸ¥è¯¢æœåŠ¡è®°å½•
    handleClickfw(){
    handleClickfw() {
      getTaskservelist({
        patid: this.id,
        deptOrDistrict:2,
src/views/patient/patient/profile/userInfo.vue
@@ -2,14 +2,14 @@
  <el-form ref="form" :model="user" :rules="rules" label-width="80px">
    <el-form-item label="用户昵称" prop="nickName">
      <el-input v-model="user.nickName" maxlength="30" />
    </el-form-item>
    </el-form-item>
    <el-form-item label="手机号码" prop="phonenumber">
      <el-input v-model="user.phonenumber" maxlength="11" />
    </el-form-item>
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="user.email" maxlength="50" />
    </el-form-item>
    <el-form-item label="性别">
    <el-form-item label="性别"width="100">
      <el-radio-group v-model="user.sex">
        <el-radio label="0">男</el-radio>
        <el-radio label="1">女</el-radio>
src/views/patient/physical/index.vue
@@ -17,12 +17,12 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
        </el-col>
        <el-col :span="2.5">
        <!-- <el-col :span="2.5">
          <div class="ysfleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
@@ -40,7 +40,7 @@
              </div>
            </el-card>
          </div>
        </el-col>
        </el-col> -->
        <el-col :span="2.5">
          <div class="errleftvlue">
            <el-card shadow="hover">
@@ -79,7 +79,7 @@
          ></el-input>
        </el-form-item>
        <el-form-item label="出院时间">
        <el-form-item label="心电时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
@@ -154,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -205,7 +204,7 @@
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -221,11 +220,27 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                  $router.push({
                    path: '/patient/indexls/',
                    query: { sfzh: scope.row.idcardno },
                  })
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="任务状态"
          align="center"
@@ -234,6 +249,32 @@
          width="120"
        >
          <template slot-scope="scope">
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
            <el-tooltip
              class="item"
              effect="dark"
@@ -280,7 +321,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -296,12 +337,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -323,7 +364,7 @@
          </template></el-table-column
        >
        <el-table-column
          label="出院天数"
          label="已检查天数"
          width="120"
          align="center"
          key="endDay"
@@ -347,15 +388,15 @@
          key="phone"
          prop="phone"
        />
        <el-table-column
        <!-- <el-table-column
          label="责任护士"
          width="120"
          align="center"
          key="nurseName"
          prop="nurseName"
        />
        /> -->
        <el-table-column
          label="主治医生"
          label="检查医生"
          width="120"
          align="center"
          key="drname"
@@ -372,7 +413,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -401,8 +442,8 @@
        >
        </el-table-column> -->
        <el-table-column
          label="出院随访模板名称"
        <!-- <el-table-column
          label="心电随访模板名称"
          align="center"
          key="templatename"
          prop="templatename"
@@ -419,7 +460,7 @@
          <template slot-scope="scope">
            <span v-for="item in scope.row.preachform">{{ item }}、 </span>
          </template>
        </el-table-column>
        </el-table-column> -->
        <!-- <el-table-column
          label="任务发送流程"
          align="center"
@@ -434,22 +475,7 @@
            </span>
          </template>
        </el-table-column> -->
        <el-table-column
          label="任务结果说明"
          width="200"
          align="center"
          key="remark"
          prop="remark"
        >
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
@@ -504,7 +530,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -547,7 +573,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -672,7 +698,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -694,13 +720,13 @@
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -726,13 +752,13 @@
      loading: false,
      cardlist: [
        {
          name: "出院服务总量",
          name: "心电服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -742,16 +768,16 @@
        //   name: "异常",
        //   value: 0,
        // },
        // {
        //   name: "发送失败",
        //   value: 0,
        // },
        {
          name: "发送失败",
          name: "待随访",
          value: 0,
        },
        {
          name: "待执行",
          value: 0,
        },
        {
          name: "已发送",
          name: "已随访",
          value: 0,
        },
@@ -774,11 +800,10 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 1,
        searchscope: 3,
        serviceType: 12,
        sendstate:2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      },
      propss: { multiple: true },
      options: [],
@@ -790,7 +815,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -859,9 +884,51 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      // æŽ¥å—异常跳转
      this.loading = true;
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.preachform) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            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;
      });
    },
    buidegetTasklist(type) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
@@ -882,6 +949,8 @@
      }else{
        this.topqueryParams.deptOrDistrict=1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
@@ -946,12 +1015,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          // this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          // this.cardlist[3].value = response.rows[0].fssb;
          // this.cardlist[4].value = response.rows[0].dsf;
          // this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -980,7 +1049,7 @@
        this.total = response.total;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -998,7 +1067,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1038,13 +1107,7 @@
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery(refresh) {
      if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
      }
      this.topqueryParams.pageNum = 1;
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
@@ -1055,20 +1118,9 @@
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
        this.topqueryParams.searchscope = 1;
      } else if (type == 2) {
        this.topqueryParams.leavehospitaldistrictcodes.push(code);
        this.topqueryParams.leaveldeptcodes = [];
        this.topqueryParams.searchscope = 2;
      } else {
        this.topqueryParams.searchscope = 3;
      }
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
@@ -1113,7 +1165,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 1,
          serviceType: 12,
        },
      });
    },
@@ -1247,7 +1299,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
src/views/patient/propaganda/Missioncreation.vue
@@ -590,8 +590,9 @@
        <el-table :data="uploadingData" style="width: 100%">
          <el-table-column prop="serial" label="患者id"> </el-table-column>
          <el-table-column prop="name" label="姓名"> </el-table-column>
          <el-table-column prop="sex" 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>
@@ -921,7 +922,7 @@
        templatename: "",
        templateid: null,
        libtemplateid: null,
        kcb: "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。",
        kcb: "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。",
        jsy: "生活上要劳逸结合,注意休息和营养,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次宣教内容就到这里,祝您身体健康!",
      },
      taskoptions: [
@@ -1350,7 +1351,7 @@
        templateid: null,
        libtemplateid: null,
        serviceType: Number(this.$route.query.serviceType),
        kcb: "亲爱的患者-家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。",
        kcb: "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。",
        jsy: "生活上要劳逸结合,注意休息和营养,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
      };
src/views/patient/propaganda/Missionotice.vue
@@ -136,6 +136,7 @@
        <el-table-column fixed label="序号" align="center" key="id" prop="id" />
        <el-table-column
          label="姓名"
          width="100"
          fixed
          align="center"
          key="sendname"
@@ -198,8 +199,8 @@
        <el-table-column
          label="就诊时间"
          align="center"
          key="visitTime"
          prop="visitTime"
          key="admitdate"
          prop="admitdate"
          width="160"
        >
        </el-table-column>
@@ -452,6 +453,12 @@
    /** æŸ¥è¯¢é—¨è¯Šé€šçŸ¥åˆ—表 */
    getList() {
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
      }else{
        this.topqueryParams.deptOrDistrict=1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows;
        this.total = response.total;
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -196,7 +196,15 @@
                    </div>
                  </div>
                </el-form-item>
                <el-row>
                <el-form-item label="任务关联" prop="longTask">
                  <el-radio-group v-model="form.appltype">
                    <el-radio label="1">科室关联</el-radio>
                    <el-radio label="2">病区关联</el-radio>
                    <el-radio label="3">疾病关联</el-radio>
                    <el-radio label="4">手术关联</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-row v-if="form.appltype == 1">
                  <el-col :span="20"
                    ><el-form-item label="适用科室" prop="region">
                      <el-select
@@ -211,7 +219,6 @@
                        <el-option
                          class="ruleFormaa"
                          v-for="item in belongDepts"
                          :key="item.deptCode"
                          :label="item.deptName"
                          :value="item.deptCode"
                        >
@@ -219,7 +226,7 @@
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-row>
                <el-row v-if="form.appltype == 2">
                  <el-col :span="20"
                    ><el-form-item label="适用病区" prop="region">
                      <el-select
@@ -234,9 +241,88 @@
                        <el-option
                          class="ruleFormaa"
                          v-for="item in belongWards"
                          :key="item.districtCode"
                          :label="item.districtName"
                          :value="item.districtCode"
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-row v-if="form.appltype == 3">
                  <!-- <el-col :span="20"
                    ><el-form-item label="适用疾病" prop="region">
                      <el-select
                        v-model="illnesscodes"
                        style="width: 400px"
                        @remove-tag="removediagg"
                        size="medium"
                        :remote-method="remotedonor"
                        multiple
                        filterable
                        remote
                        placeholder="请选择病区"
                      >
                        <el-option
                          class="ruleFormaa"
                          v-for="item in donorchargeList"
                          :key="item.icdcode"
                          :label="item.icdname"
                          :value="item.icdcode"
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col> -->
                  <div class="xinz-infs">
                    <el-form-item>
                      <template #label>
                        <el-tooltip
                          class="item"
                          effect="light"
                          content="选择好适用疾病后,可以方便您通过疾病诊断查找到对应的病人!"
                          placement="top-start"
                        >
                          <i class="el-icon-warning-outline"></i>
                        </el-tooltip>
                      </template>
                      <div style="margin-bottom: 10px">
                        <el-button
                          type="warning"
                          @click="$refs.child.handleAddpatient()"
                          >添加疾病诊断</el-button
                        >
                      </div>
                      <el-tag
                        v-for="tag in diagglist"
                        @close="removediagg(tag.icd10code)"
                        type="warning"
                        closable
                        :disable-transitions="false"
                      >
                        {{ tag.icdname }}
                      </el-tag>
                      <!-- <el-tag v-if="hasMore" type="info">+{{ remaining }} more</el-tag> -->
                    </el-form-item>
                  </div>
                </el-row>
                <el-row v-if="form.appltype == 4">
                  <el-col :span="20"
                    ><el-form-item label="适用手术" prop="region">
                      <el-select
                        v-model="operationcodes"
                        style="width: 400px"
                        @remove-tag="removeopera"
                        size="medium"
                        :remote-method="remoteopcode"
                        multiple
                        filterable
                        remote
                        placeholder="请选择手术"
                      >
                        <el-option
                          class="ruleFormaa"
                          v-for="item in baseoperaList"
                          :label="item.opdesc"
                          :value="item.opcode"
                        >
                        </el-option>
                      </el-select> </el-form-item
@@ -278,6 +364,10 @@
                      placeholder="请点击右侧选择"
                    />
                    <el-button
                      v-if="
                        (form.templateid && form.sendState == 1) ||
                        !form.templateid
                      "
                      style="margin-left: 10px"
                      type="primary"
                      icon="el-icon-edit"
@@ -286,7 +376,7 @@
                    ></el-button>
                    <el-button
                      v-if="form.templatename"
                      v-if="form.templateid"
                      type="success"
                      icon="el-icon-search"
                      @click="previewfnmb"
@@ -457,6 +547,12 @@
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="患者诊断:">
                <el-input
                  v-model="patientqueryParams.leavediagname"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-select
                v-model="patientqueryParams.searchscope"
                placeholder="请选择患者范围"
@@ -489,7 +585,6 @@
            <!-- é€‰æ‹©æ‚£è€…列表 -->
            <SFtable
              ref="multipleTable"
              @handleSelectionChange="handleSelectionChange"
              :currentList="patientuserList"
              :tableLabel="tableLabelhz"
@@ -502,6 +597,8 @@
          <pagination
            v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
            :total="patienttotal"
            :page.sync="patientqueryParams.pageNum"
            :limit.sync="patientqueryParams.pageSize"
            @pagination="handleAddpatient"
          />
        </div>
@@ -588,31 +685,6 @@
                </div>
              </el-form-item>
              <div class="xinz-infs">
                <el-form-item>
                  <template #label>
                    é€‚用疾病
                    <el-tooltip
                      class="item"
                      effect="light"
                      content="选择好适用疾病后,可以方便您通过疾病诊断查找到对应的病人!"
                      placement="top-start"
                    >
                      <i class="el-icon-warning-outline"></i>
                    </el-tooltip>
                  </template>
                  <el-tag
                    v-for="tag in illnesslist"
                    :key="tag.icdid"
                    type="warning"
                    :disable-transitions="false"
                  >
                    {{ tag.icdname }}
                  </el-tag>
                  <!-- <el-tag v-if="hasMore" type="info">+{{ remaining }} more</el-tag> -->
                </el-form-item>
              </div>
              <el-form-item label="问卷描述" prop="description">
                <el-input
                  type="textarea"
@@ -667,7 +739,7 @@
                  {{ item.sort }}、[多选]<span>{{ item.scriptContent }}</span>
                </div>
                <div class="dev-xx">
                  <el-checkbox-group v-model="qremark">
                  <el-checkbox-group v-model="item.qremark">
                    <el-checkbox
                      v-for="(items, index) in item.svyLibTemplateTargetoptions"
                      :key="index"
@@ -701,11 +773,26 @@
      </el-tabs>
      <span slot="footer" class="dialog-footer">
        <!-- <el-button @click="previewGo">保存模板详情修改</el-button> -->
        <el-button @click="previewGo">保存模板详情修改</el-button>
        <el-button type="primary" @click="Departmenttreatment"
          >保存使用</el-button
        >
      </span>
      <!-- <span slot="footer" class="dialog-footer">
        <el-button
          v-if="(form.templateid && form.sendState == 1) || !form.templateid"
          type="primary"
          @click="Departmenttreatment"
          >{{ form.templateid ? "替换使用" : "选择使用" }}</el-button
        >
        <el-button
          :type="previewtftype ? 'success' : 'warning'"
          @click="previewGo"
          >{{
            previewtftype ? "前往修改已选择模板" : "新增保存并前往修改"
          }}</el-button
        >
      </span> -->
    </el-dialog>
    <el-drawer
      title="问卷内容列表"
@@ -728,7 +815,10 @@
              label-width="98px"
            >
              <el-form-item label="问卷名称">
                <el-input v-model="topqueryParams.svyname"></el-input>
                <el-input
                  v-model="topqueryParams.svyname"
                  @keyup.enter.native="handleQuerymb"
                ></el-input>
              </el-form-item>
              <!-- <el-form-item label="适用形式" prop="status">
                <el-select v-model="topqueryParams.topica" placeholder="请选择">
@@ -752,7 +842,7 @@
                <el-button
                  icon="el-icon-refresh"
                  size="medium"
                  @click="resetQuery"
                  @click="resetQuerymb"
                  >重置</el-button
                >
              </el-form-item>
@@ -779,6 +869,13 @@
        </div>
      </div>
    </el-drawer>
    <Optional-Form
      ref="child"
      :dialogVisiblepatient="dialogVisiblepatientjb"
      :overallCase="diagglist"
      @addoption="dialogVisiblepatientjb = false"
      @kkoption="dialogVisiblepatientjb = true"
    />
  </div>
</template>
@@ -787,7 +884,10 @@
import store from "@/store";
import {
  getTaskpatientQC,
  getlibrarylist,
  taskoperhospgetsondel,
  taskdiaghospgetsondel,
  getillnesslist,
  getbaseopera,
  Externallist,
  getQtemplatelist,
  getQtemplateobj,
@@ -799,13 +899,14 @@
  getillness,
  Editsingletask,
  getQtemplateclassify,
  depthospgetsonlist,
  taskdepthospgetsondel,
  taskdepthospgetsonlist,
  taskdiaggetlist,
  taskopergetlist,
} from "@/api/AiCentre/index";
import OptionalForm from "@/components/OptionalForm"; //正则组件
import SFtable from "@/components/SFtable"; //表格组件
import {  MessageBox,  } from "element-ui";
import { MessageBox } from "element-ui";
export default {
  name: "ServiceDetails",
@@ -830,13 +931,19 @@
      previewtf: false, //预览
      loading: false, // é®ç½©å±‚
      patientloading: false, // é®ç½©å±‚
      previewtftype: 0, //预览情况0新模板预览1已选择模板修改
      dialogVisiblepatient: false, //添加患者弹框
      dialogVisiblepatientjb: false, //添加疾病弹框
      deptcodesWards: [], //科室数据
      leavehospitaldistrictcodes: [], //病区数据
      operationcodes: [], //手术数据
      illnesscodes: [], //疾病数据
      radio: 1,
      checkboxlist: [],
      tableLabel: [],
      questionList: [],
      donorchargeList: [],
      baseoperaList: [],
      usable: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" },
@@ -851,6 +958,7 @@
      tableLabelhz: [
        { label: "出院日期", width: "150", prop: "inhosptime" },
        { label: "患者", width: "", prop: "name" },
        { label: "患者诊断", width: "", prop: "leavediagname" },
        { label: "身份证", width: "200", prop: "idcardno" },
        { label: "性别", width: "", prop: "sex" },
        { label: "年龄", width: "", prop: "age" },
@@ -863,6 +971,7 @@
      tableLabelhzwb: [
        { label: "出院日期", width: "150", prop: "endtime" },
        { label: "患者", width: "", prop: "name" },
        { label: "患者诊断", width: "", prop: "diagname" },
        { label: "身份证", width: "200", prop: "sfzh" },
        { label: "性别", width: "", prop: "sex" },
        { label: "年龄", width: "", prop: "age" },
@@ -992,7 +1101,10 @@
        templatename: "",
        templateid: null,
        libtemplateid: null,
        kcb: "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。",
        kcb:
          "亲爱的患者/家属,我们是" +
          localStorage.getItem("orgname") +
          "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,观看这份宣教资讯。",
        jsy: "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次宣教内容就到这里,祝您身体健康!",
      },
      taskoptions: [
@@ -1015,6 +1127,10 @@
        {
          value: "6",
          label: "院外患者",
        },
        {
          value: "5",
          label: "手术病人",
        },
      ],
      source: [
@@ -1053,28 +1169,45 @@
          value: 5,
          label: "复诊管理",
        },
        {
          value: 6,
          label: "满意度调查",
        },
        // {
        //   value: 5,
        //   label: "满意度调查",
        // },
        {
          value: 7,
          label: "患者日常报告",
          label: "患者报告",
        },
        // {
        //   value: 8,
        //   label: "其他通知",
        // },
        {
          value: 9,
          label: "患者异常报告",
          label: "体检随访",
        },
        // {
        //   value: 1",
        //   label: "医技随访",
        // },
        {
          value: 8,
          label: "其他通知",
          value: 11,
          label: "影像随访",
        },
        {
          value: 12,
          label: "心电随访",
        },
        // {
        //   value: "13",
        //   label: "专病随访",
        // },
      ],
      // ç§‘室/病区
      belongWards: [],
      deptlist: [],
      hosplist: [],
      diagglist: [],
      operlist: [],
      tempDetpRelevanceslist: [], //科室数据
      tempDetpRelevanceslistform: [], //科室数据
      tempbelongWards: [], //病区数据
@@ -1099,14 +1232,14 @@
        //   { required: true, message: "适用病区不能为空", trigger: "blur" },
        // ],
      },
      belongDepts:[],
      belongDepts: [],
      // ç§‘室院区查询入参
      queryParamsdept: {},
      quote: false,
      serviceType: null,
    };
  },
  components: { SFtable },
  components: { SFtable, OptionalForm },
  created() {
    this.appraiselist = store.getters.appraiselist;
@@ -1120,6 +1253,7 @@
    this.serviceType = Number(this.$route.query.serviceType);
    this.form.serviceType = Number(this.$route.query.serviceType);
    this.Acquisitiontype();
    this.getillnesslist();
    this.Getdetails();
    this.getQtemplateclassify();
  },
@@ -1130,13 +1264,21 @@
      this.getQtemplateclassify();
    }
  },
  computed: {
    displayedTags() {
      // è¿”回前10个tag
      return this.illnesslist.slice(0, 10);
    },
    hasMore() {
      // åˆ¤æ–­æ˜¯å¦æœ‰æ›´å¤šçš„tag
      return this.illnesslist.length > 10;
    },
    remaining() {
      // è®¡ç®—剩余的tag数量
      return this.illnesslist.length - 10;
    },
  },
  methods: {
    // {
    //   å§“名: { "${name}": "龙傲天" },
    //   åœ°å€: { "${dzz}": "龙宫" },
    //   ç”µè¯: { "${dhh}": "八个八" },
    // }
    // å˜é‡è½¬æ¢å¯¹è±¡è½¬æ•°ç»„
    convertFormat1ToFormat2(data) {
      let result = [];
@@ -1215,7 +1357,15 @@
          //   label: "智能机器人",
          // },
        ];
      } else if (this.form.serviceType == 7 || this.form.serviceType == 9) {
      } else if (
        this.form.serviceType == 7 ||
        this.form.serviceType == 10 ||
        this.form.serviceType == 11 ||
        this.form.serviceType == 8 ||
        this.form.serviceType == 12 ||
        this.form.serviceType == 13 ||
        this.form.serviceType == 9
      ) {
        this.checkboxlist = [
          {
            value: "1",
@@ -1240,6 +1390,10 @@
          {
            value: "6",
            label: "微信小程序",
          },
          {
            value: "7",
            label: "术后随访",
          },
        ];
      } else if (
@@ -1303,15 +1457,40 @@
          xh: 1,
        },
      ];
      if (this.form.appltype == 1) {
        this.leavehospitaldistrictcodes = [];
        this.operationcodes = [];
        this.illnesscodes = [];
      } else if (this.form.appltype == 2) {
        this.deptcodesWards = [];
        this.operationcodes = [];
        this.illnesscodes = [];
      } else if (this.form.appltype == 3) {
        this.deptcodesWards = [];
        this.leavehospitaldistrictcodes = [];
        this.operationcodes = [];
      } else if (this.form.appltype == 4) {
        this.deptcodesWards = [];
        this.illnesscodes = [];
        this.leavehospitaldistrictcodes = [];
      }
      if (this.checkList) {
        this.form.preachform = this.checkList;
      } else {
        this.$modal.msgError("请选择服务类型");
        return;
      }
      if (this.deptcodesWards[0]||this.leavehospitaldistrictcodes[0]) {
      console.log(this.operationcodes[0]);
      console.log(this.operationcodes);
      if (
        this.deptcodesWards[0] ||
        this.leavehospitaldistrictcodes[0] ||
        this.diagglist[0] ||
        this.operationcodes[0]
      ) {
      } else {
        this.$modal.msgError("请选择科室或病区");
        this.$modal.msgError("请选择任务关联条件");
        return;
      }
@@ -1350,7 +1529,10 @@
      this.form.deptcode = this.deptcodesWards.join(",");
      this.form.leavehospitaldistrictcode =
        this.leavehospitaldistrictcodes.join(",");
      this.form.opcode = this.operationcodes.join(",");
      this.form.icd10code = this.diagglist
        .map((item) => item.icdcode)
        .join(",");
      Editsingletask(this.form).then((res) => {
        if (res.code == 200) {
          if (this.form.taskid) {
@@ -1385,11 +1567,13 @@
            this.tempbelongWards = [];
            this.objyl.suitway = this.objyl.suitway.split(",");
            this.questionList = res.rows[0].svyTemplateLibScripts;
            this.questionList.forEach((item) => {
              item.qremark = [];
            });
            this.getillness(row.svyid);
            this.previewtf = true;
          }
        });
        console.log(row.svyTemplateLibScripts);
        this.previewid = row.svyid;
        this.Variablehandling(row.svyTemplateLibScripts, 1);
      } else if (type == 2) {
@@ -1411,6 +1595,10 @@
          getQtemplateobj({ svyid: this.form.libtemplateid }).then((res) => {
            if (res.code == 200) {
              this.questionList = res.rows[0].svyTemplateLibScripts;
              this.questionList.forEach((item) => {
                item.qremark = [];
              });
              this.previewtftype = 1;
              this.objyl.svyTemplateLibScripts =
                res.rows[0].svyTemplateLibScripts;
            }
@@ -1425,6 +1613,44 @@
          this.illnesslist.forEach((item) => {
            item.icdname = item.icd10name;
          });
        });
      }
    },
    getillnesslist() {
      getillnesslist({
        pageNum: 1,
        pageSize: 1000,
      }).then((res) => {
        this.donorchargeList = res.rows;
      });
      getbaseopera({
        pageNum: 1,
        pageSize: 1000,
      }).then((res) => {
        this.baseoperaList = res.rows;
      });
    },
    // æ‰‹æœ¯æŸ¥è¯¢
    remoteopcode(name) {
      if (name) {
        getbaseopera({
          pageNum: 1,
          pageSize: 1000,
          opdesc: name,
        }).then((res) => {
          this.baseoperaList = res.rows;
        });
      }
    },
    // ç–¾ç—…查询
    remotedonor(name) {
      if (name) {
        getbaseopera({
          pageNum: 1,
          pageSize: 1000,
          opdesc: name,
        }).then((res) => {
          this.baseoperaList = res.rows;
        });
      }
    },
@@ -1470,6 +1696,7 @@
          // { label: "入院日期", width: "170", prop: "starttime" },
          { label: "出院日期", width: "150", prop: "endtime" },
          { label: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
@@ -1483,6 +1710,7 @@
        this.tableLabelhz = [
          { label: "入院日期", width: "150", prop: "starttime" },
          { label: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
@@ -1555,9 +1783,10 @@
          item.deptCode = item.deptcode;
          item.deptName = item.dept;
          item.admindate = item.inhosptime;
          item.diagname = item.leavediagname;
          item.sfzh = item.idcardno;
          if (this.patientqueryParams.allhosp==6) {
          item.patfrom = 1;
          if (this.patientqueryParams.allhosp == 6) {
            item.patfrom = 1;
          }
          this.overallCase.push(item);
          this.form.patTaskRelevances.push(item);
@@ -1664,7 +1893,20 @@
      });
    },
    resetQuery() {},
    resetQuerymb() {
      this.topqueryParams = { svyname: "" };
      this.handleQuerymb();
    },
    resetQuery() {
      this.patientqueryParams = {
        pageNum: 1, //
        pageSize: 10,
        topica: 1, //0全部1科室2病区
        leavehospitaldistrictcodes: [],
        leaveldeptcodes: [],
      };
      this.handleQuery();
    },
    handleQuerymb() {
      getQtemplatelist(this.topqueryParams).then((response) => {
        this.userList = response.rows;
@@ -1696,7 +1938,10 @@
        templatename: "",
        templateid: null,
        libtemplateid: null,
        kcb: "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。",
        kcb:
          "亲爱的患者/家属,我们是" +
          localStorage.getItem("orgname") +
          "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。",
        jsy: "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
      };
@@ -1761,7 +2006,7 @@
      this.time3 = ""; //晚上时间段
      this.time4 = ""; //晚上时间段
    },
    // èŽ·å–ä»»åŠ¡ç§‘å®¤åˆ—è¡¨
    // èŽ·å–å„ç±»
    listDept() {
      this.leavehospitaldistrictcodes = [];
      this.deptcodesWards = [];
@@ -1780,6 +2025,29 @@
          });
        }
      });
      taskdiaggetlist(this.queryParamsdept).then((res) => {
        if (res.code == 200) {
          let arr = res.rows;
          arr.forEach((item) => {
            getillnesslist({
              icdcode: item.icd10code,
            }).then((res) => {
              item.icdname = res.rows[0].icdname;
              this.diagglist.push(item);
            });
            this.illnesscodes.push(item.icd10code);
          });
        }
      });
      taskopergetlist(this.queryParamsdept).then((res) => {
        if (res.code == 200) {
          let arr = res.rows;
          arr.forEach((item) => {
            this.operlist.push(item);
            this.operationcodes.push(item.opcode);
          });
        }
      });
    },
    // ä»»åŠ¡ç§‘å®¤åˆ é™¤è§¦å‘
    removetag(row) {
@@ -1790,6 +2058,7 @@
      if (result.length) {
        taskdepthospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
@@ -1802,10 +2071,41 @@
      if (result.length) {
        taskdepthospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
    },
    // æ‰‹æœ¯åˆ é™¤è§¦å‘
    removeopera(row) {
      let result = this.operlist
        .filter((item) => item.opcode == row)
        .map((item) => item.id);
      if (result.length) {
        taskoperhospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
    },
    // ç–¾ç—…删除触发
    removediagg(row) {
      let result = this.diagglist
        .filter((item) => item.icd10code == row)
        .map((item) => item.id);
      if (result.length) {
        taskdiaghospgetsondel(result).then((res) => {
          if (res.code) {
            this.diagglist = this.diagglist.filter(
              (item) => item.icd10code != row
            );
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
    },
    getQtemplateclassify() {
      getQtemplateclassify({}).then((res) => {
        this.optionsclass = res.rows;
@@ -1897,9 +2197,13 @@
    },
    // æŸ¥çœ‹æ¨¡æ¿
    previewGo() {
      this.$router.push({
        path: "/knowledge/tpuconfigurat/",
        query: { id: this.previewid, task: true, data: this.form },
      this.$modal.confirm("是否前往修改任务模板详细内容?").then(() => {
        this.drawermb = false; //选择模板弹窗
        this.previewtf = false; //预览
        this.$router.push({
          path: "/knowledge/tpuconfigurat/",
          query: { id: this.previewid, task: true, data: this.form },
        });
      });
    },
    // ä¿å­˜/更新任务模板
@@ -1962,10 +2266,10 @@
      if (!this.form.taskid) {
        this.templateor = true;
        MessageBox.confirm(
          "当前为新增任务未保存不可关联模板,是否先保存任务?",
          "当前为新增任务未保存不可关联模板,是否先暂存模板保存任务后生效?",
          "功能提示",
          {
            confirmButtonText: "保存任务",
            confirmButtonText: "暂存模板",
            cancelButtonText: "取消",
            type: "warning",
          }
@@ -1977,11 +2281,18 @@
            this.objyl.templateid = this.objyl.svyid;
            this.form.libtemplateid = this.objyl.svyid;
            this.objyl.isoperation = 1;
            this.objyl.svyTaskTemplateScriptVOS = this.objyl.svyTemplateLibScripts;
            this.form.svyTaskTemplateVO=this.objyl;
            this.submitForm();
            this.objyl.svyTaskTemplateScriptVOS =
              this.objyl.svyTemplateLibScripts;
            this.form.svyTaskTemplateVO = this.objyl;
            this.form.templatename = this.objyl.svyname;
            this.$modal.msgSuccess("暂存成功保存任务后模板失效");
            this.drawermb = false;
            this.previewtf = false;
          })
          .catch(() => {});
          .catch(() => {
            this.drawermb = false;
            this.previewtf = false;
          });
      } else {
        setTimeout(() => {
          this.previewFn();
src/views/patient/propaganda/index.vue
@@ -51,6 +51,15 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-cascader
            v-model="topqueryParams.scopetype"
            placeholder="默认全部"
            :options="sourcetype"
            :props="{ expandTrigger: 'hover' }"
            @change="handleChange"
          ></el-cascader>
        </el-form-item>
        <el-form-item label="宣教状态" prop="status">
          <el-select v-model="topqueryParams.sendstate" placeholder="请选择">
@@ -108,7 +117,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -149,7 +157,6 @@
        height="560"
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="50" align="center" />
        <el-table-column
          label="任务名称"
          fixed
@@ -161,6 +168,7 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          width="100"
          fixed
          align="center"
          key="sendname"
@@ -181,7 +189,7 @@
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
@@ -267,9 +275,7 @@
          prop="endDay"
        >
          <template slot-scope="scope">
            <span>{{
              scope.row.endDay ? scope.row.endDay + "天" : ""
            }}</span>
            <span>{{ scope.row.endDay ? scope.row.endDay + "天" : "" }}</span>
          </template>
        </el-table-column>
        <el-table-column
@@ -294,7 +300,6 @@
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
          align="center"
@@ -305,7 +310,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -367,20 +372,28 @@
          </template>
        </el-table-column> -->
        <el-table-column
        fixed="right"
          fixed="right"
          label="任务结果记录"
          width="120"
          align="center"
          key="remark"
          prop="remark"
        >
        <template slot-scope="scope" v-if="scope.row.remark">
          <el-tag type="success" v-if="scope.row.sendstate!=5&&scope.row.sendstate!=4&&scope.row.remark">{{ scope.row.remark }}</el-tag>
          <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
        </template>
      </el-table-column>
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="success"
              v-if="
                scope.row.sendstate != 5 &&
                scope.row.sendstate != 4 &&
                scope.row.remark
              "
              >{{ scope.row.remark }}</el-tag
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column
        fixed="right"
          fixed="right"
          label="宣教时间"
          sortable
          align="center"
@@ -598,6 +611,22 @@
      ruleForm: {
        type: [],
      },
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      inputValue: "",
@@ -724,6 +753,7 @@
        pageSize: 10,
        serviceType: 4,
        searchscope: 2,
        sendstate: 2,
      },
      propss: { multiple: true },
      options: [],
@@ -735,7 +765,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -772,6 +802,19 @@
  watch: {},
  created() {
    this.serviceState = store.getters.serviceState;
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    this.getList();
    this.getConfigKey("sys.user.initPassword").then((response) => {
      this.initPassword = response.msg;
@@ -789,16 +832,7 @@
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šå®£æ•™æœåŠ¡åˆ—è¡¨ */
    getList() {
      if (this.topqueryParams.searchscope == 1) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
        this.topqueryParams.leavehospitaldistrictcodes = null;
      } else if (this.topqueryParams.searchscope == 2) {
        this.topqueryParams.leavehospitaldistrictcodes =
          store.getters.belongWards.map((obj) => obj.districtCode);
        this.topqueryParams.leaveldeptcodes = null;
      } else {
       if (this.topqueryParams.searchscope == 3) {
        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
@@ -839,6 +873,24 @@
        }, 200);
      } else {
        this.options = [];
      }
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
      this.topqueryParams.leavehospitaldistrictcodes = [];
      this.topqueryParams.leaveldeptcodes = [];
      if (type == 1) {
        this.topqueryParams.leaveldeptcodes.push(code);
        this.topqueryParams.leavehospitaldistrictcodes = [];
        this.topqueryParams.searchscope = 1;
      } else if (type == 2) {
        this.topqueryParams.leavehospitaldistrictcodes.push(code);
        this.topqueryParams.leaveldeptcodes = [];
        this.topqueryParams.searchscope = 2;
      } else {
        this.topqueryParams.searchscope = 3;
      }
    },
    // é—¨è¯Šå®£æ•™çŠ¶æ€ä¿®æ”¹
@@ -910,6 +962,7 @@
        pageNum: 1,
        pageSize: 10,
        serviceType: 4,
        sendstate: 2,
      };
      this.handleQuery();
    },
@@ -1016,7 +1069,7 @@
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download(
        "system/user/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
src/views/patient/propaganda/particty.vue
@@ -214,7 +214,15 @@
                    </div>
                  </div>
                </el-form-item>
                <el-row>
                <el-form-item label="任务关联" prop="longTask">
                  <el-radio-group v-model="form.appltype">
                    <el-radio label="1">科室关联</el-radio>
                    <el-radio label="2">病区关联</el-radio>
                    <el-radio label="3">疾病关联</el-radio>
                    <el-radio label="4">手术关联</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-row v-if="form.appltype == 1">
                  <el-col :span="20"
                    ><el-form-item label="适用科室" prop="region">
                      <el-select
@@ -222,8 +230,8 @@
                        @remove-tag="removetag"
                        style="width: 400px"
                        size="medium"
                        filterable
                        multiple
                        filterable
                        placeholder="请选择科室"
                      >
                        <el-option
@@ -237,7 +245,7 @@
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-row>
                <el-row v-if="form.appltype == 2">
                  <el-col :span="20"
                    ><el-form-item label="适用病区" prop="region">
                      <el-select
@@ -245,8 +253,8 @@
                        style="width: 400px"
                        @remove-tag="removehpsp"
                        size="medium"
                        filterable
                        multiple
                        filterable
                        placeholder="请选择病区"
                      >
                        <el-option
@@ -255,6 +263,65 @@
                          :key="item.districtCode"
                          :label="item.districtName"
                          :value="item.districtCode"
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col>
                </el-row>
                <el-row v-if="form.appltype == 3">
                  <div class="xinz-infs">
                    <el-form-item>
                      <template #label>
                        <el-tooltip
                          class="item"
                          effect="light"
                          content="选择好适用疾病后,可以方便您通过疾病诊断查找到对应的病人!"
                          placement="top-start"
                        >
                          <i class="el-icon-warning-outline"></i>
                        </el-tooltip>
                      </template>
                      <div style="margin-bottom: 10px">
                        <el-button
                          type="warning"
                          @click="$refs.child.handleAddpatient()"
                          >添加疾病诊断</el-button
                        >
                      </div>
                      <el-tag
                        v-for="tag in diagglist"
                        :key="tag.icdcode"
                        @close="removediagg(tag.icd10code)"
                        type="warning"
                        closable
                        :disable-transitions="false"
                      >
                        {{ tag.icdname }}
                      </el-tag>
                      <!-- <el-tag v-if="hasMore" type="info">+{{ remaining }} more</el-tag> -->
                    </el-form-item>
                  </div>
                </el-row>
                <el-row v-if="form.appltype == 4">
                  <el-col :span="20"
                    ><el-form-item label="适用手术" prop="region">
                      <el-select
                        v-model="operationcodes"
                        style="width: 400px"
                        @remove-tag="removeopera"
                        :remote-method="remoteopcode"
                        size="medium"
                        multiple
                        filterable
                        remote
                        placeholder="请选择手术"
                      >
                        <el-option
                          class="ruleFormaa"
                          v-for="item in baseoperaList"
                          :key="item.icdcode"
                          :label="item.icdname"
                          :value="item.icdcode"
                        >
                        </el-option>
                      </el-select> </el-form-item
@@ -308,7 +375,7 @@
                    ></el-button>
                    <el-button
                      v-if="form.templatename"
                      v-if="form.templateid"
                      type="success"
                      icon="el-icon-search"
                      @click="previewfnmb()"
@@ -473,6 +540,12 @@
              v-show="showSearch"
              label-width="98px"
            >
              <el-form-item label="主治医生:">
                <el-input
                  v-model="patientqueryParams.drname"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="患者:">
                <el-input
                  v-model="patientqueryParams.name"
@@ -719,13 +792,13 @@
          @click="Departmenttreatment"
          >{{ form.templateid ? "替换使用" : "选择使用" }}</el-button
        >
        <!-- <el-button
        <el-button
          :type="previewtftype ? 'success' : 'warning'"
          @click="Modifytemplate"
          >{{
            previewtftype ? "前往修改已选择模板" : "新增保存并前往修改"
          }}</el-button
        > -->
        >
      </span>
    </el-dialog>
    <el-drawer
@@ -800,6 +873,13 @@
        </div>
      </div>
    </el-drawer>
    <Optional-Form
      ref="child"
      :dialogVisiblepatient="dialogVisiblepatientjb"
      :overallCase="diagglist"
      @addoption="dialogVisiblepatientjb = false"
      @kkoption="dialogVisiblepatientjb = true"
    />
  </div>
</template>
@@ -808,7 +888,8 @@
import store from "@/store";
import {
  getTaskpatient,
  getlibrarylist,
  getillnesslist,
  getbaseopera,
  getFollowuplist,
  getvFollowup,
  Taskparticty,
@@ -821,9 +902,13 @@
  getFollowupclassify,
  taskdepthospgetsonlist,
  taskdepthospgetsondel,
  depthospgetsonlist,
  taskoperhospgetsondel,
  taskdiaghospgetsondel,
  taskdiaggetlist,
  taskopergetlist,
} from "@/api/AiCentre/index";
import { deptTreeSelect } from "@/api/system/user";
import OptionalForm from "@/components/OptionalForm";
import { MessageBox } from "element-ui";
import SFtable from "@/components/SFtable"; //表格组件
@@ -854,13 +939,18 @@
      loading: false, // é®ç½©å±‚
      patientloading: false, // é®ç½©å±‚
      dialogVisiblepatient: false, //添加患者弹框
      dialogVisiblepatientjb: false,
      deptcodesWards: [], //科室数据
      leavehospitaldistrictcodes: [], //病区数据
      operationcodes: [], //手术数据
      illnesscodes: [], //疾病数据
      radio: 1,
      checkboxlist: [],
      tableLabel: [],
      questionList: [],
      skip: false,
      donorchargeList: [],
      baseoperaList: [],
      usable: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" },
@@ -1024,7 +1114,10 @@
        templatename: "",
        templateid: null,
        libtemplateid: null,
        kcb: "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,进行本次回访服务。",
        kcb:
          "亲爱的患者/家属,您好!我们是" +
          localStorage.getItem("orgname") +
          "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,进行本次回访服务。",
        jsy: "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访内容就到这里,祝您身体健康!",
      },
      taskoptions: [
@@ -1044,6 +1137,10 @@
          value: "3",
          label: "体检病人",
        },
        {
          value: "5",
          label: "手术病人",
        },
      ],
      source: [
        {
@@ -1062,43 +1159,64 @@
      tasktypes: [
        {
          value: 1,
          value: "1",
          label: "监测评估",
        },
        {
          value: 2,
          value: "2",
          label: "出院随访",
        },
        {
          value: 3,
          value: "3",
          label: "门诊随访",
        },
        {
          value: 4,
          value: "4",
          label: "宣教关怀",
        },
        {
          value: 5,
          value: "5",
          label: "复诊管理",
        },
        // {
        //   value: "5",
        //   label: "满意度调查",
        // },
        {
          value: 6,
          label: "满意度调查",
        },
        {
          value: 7,
          value: "7",
          label: "患者报告",
        },
        // {
        //   value: "8",
        //   label: "其他通知",
        // },
        {
          value: 8,
          label: "其他通知",
          value: "9",
          label: "体检随访",
        },
        // {
        //   value: "10",
        //   label: "医技随访",
        // },
        {
          value: "11",
          label: "影像随访",
        },
        {
          value: "12",
          label: "心电随访",
        },
        // {
        //   value: "13",
        //   label: "专病随访",
        // },
      ],
      // ç§‘室/病区
      belongWards: [],
      deptlist: [],
      hosplist: [],
      diagglist: [],
      operlist: [],
      tempDetpRelevanceslist: [], //科室数据
      tempDetpRelevanceslistform: [], //科室数据
      tempbelongWards: [], //病区数据
@@ -1133,7 +1251,7 @@
      serviceType: null,
    };
  },
  components: { SFtable },
  components: { SFtable, OptionalForm },
  created() {
    this.appraiselist = store.getters.appraiselist;
@@ -1147,7 +1265,10 @@
    this.form.typename = this.$route.query.typename;
    this.serviceType = Number(this.$route.query.serviceType);
    this.form.serviceType = Number(this.$route.query.serviceType);
    console.log(localStorage.getItem("orgid"), "orgid");
    this.Acquisitiontype();
    this.getillnesslist();
    this.Getdetails();
    this.getFollowupclassify();
  },
@@ -1264,7 +1385,15 @@
          //   label: "智能机器人",
          // },
        ];
      } else if (this.form.serviceType == 7 || this.form.serviceType == 5) {
      } else if (
        this.form.serviceType == 7 ||
        this.form.serviceType == 5 ||
        this.form.serviceType == 8 ||
        this.form.serviceType == 9 ||
        this.form.serviceType == 11 ||
        this.form.serviceType == 12 ||
        this.form.serviceType == 10
      ) {
        this.checkboxlist = [
          {
            value: "1",
@@ -1290,8 +1419,16 @@
            value: "6",
            label: "微信小程序",
          },
          {
            value: "7",
            label: "术后随访",
          },
        ];
      } else if (this.form.serviceType == 2 || this.form.serviceType == 3) {
      } else if (
        this.form.serviceType == 2 ||
        this.form.serviceType == 3 ||
        this.form.serviceType == 4
      ) {
        this.checkboxlist = [
          {
            value: "1",
@@ -1348,7 +1485,23 @@
          xh: 1,
        },
      ];
      if (this.form.appltype == 1) {
        this.leavehospitaldistrictcodes = [];
        this.operationcodes = [];
        this.illnesscodes = [];
      } else if (this.form.appltype == 2) {
        this.deptcodesWards = [];
        this.operationcodes = [];
        this.illnesscodes = [];
      } else if (this.form.appltype == 3) {
        this.deptcodesWards = [];
        this.leavehospitaldistrictcodes = [];
        this.operationcodes = [];
      } else if (this.form.appltype == 4) {
        this.deptcodesWards = [];
        this.illnesscodes = [];
        this.leavehospitaldistrictcodes = [];
      }
      if (this.checkList) {
        this.form.preachform = this.checkList;
      } else {
@@ -1356,9 +1509,14 @@
        return;
      }
      if (this.deptcodesWards[0] || this.leavehospitaldistrictcodes[0]) {
      if (
        this.deptcodesWards[0] ||
        this.leavehospitaldistrictcodes[0] ||
        this.diagglist[0] ||
        this.operationcodes[0]
      ) {
      } else {
        this.$modal.msgError("请选择科室或病区");
        this.$modal.msgError("请选择任务关联条件");
        return;
      }
      if (!this.form.patTaskRelevances[0] && !this.form.longTask) {
@@ -1396,6 +1554,10 @@
      this.form.deptcode = this.deptcodesWards.join(",");
      this.form.leavehospitaldistrictcode =
        this.leavehospitaldistrictcodes.join(",");
      this.form.opcode = this.operationcodes.join(",");
      this.form.icd10code = this.diagglist
        .map((item) => item.icdcode)
        .join(",");
      Editsingletask(this.form).then((res) => {
        if (res.code == 200) {
          if (this.form.taskid) {
@@ -1604,8 +1766,8 @@
          item.deptName = item.dept;
          item.admindate = item.inhosptime;
          item.sfzh = item.idcardno;
          if (this.patientqueryParams.allhosp==6) {
          item.patfrom = 1;
          if (this.patientqueryParams.allhosp == 6) {
            item.patfrom = 1;
          }
          this.overallCase.push(item);
          this.form.patTaskRelevances.push(item);
@@ -1678,7 +1840,20 @@
        this.patientqueryParams.leaveldeptcodes = null;
      this.handleAddpatient();
    },
    resetQuery() {},
    resetQuerymb() {
      this.topqueryParams = { svyname: "" };
      this.handleQuerymb();
    },
    resetQuery() {
      this.patientqueryParams = {
        pageNum: 1, //
        pageSize: 10,
        topica: 1, //0全部1科室2病区
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
      };
      this.handleQuery();
    },
    handleQuerymb() {
      getFollowuplist(this.topqueryParams).then((response) => {
        this.userList = response.rows;
@@ -1710,7 +1885,10 @@
        templatename: "",
        templateid: null,
        libtemplateid: null,
        kcb: "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
        kcb:
          "亲爱的患者/家属,您好!我们是" +
          localStorage.getItem("orgname") +
          "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,进行本次回访服务。",
        jsy: "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
      };
@@ -1753,7 +1931,6 @@
          } else {
            this.$modal.msgError(res.code);
          }
          if (this.newadd) {
            this.neWaddfn();
          }
@@ -1794,7 +1971,57 @@
          });
        }
      });
      taskdiaggetlist(this.queryParamsdept).then((res) => {
        if (res.code == 200) {
          let arr = res.rows;
          arr.forEach((item) => {
            getillnesslist({
              icdcode: item.icd10code,
            }).then((res) => {
              item.icdname = res.rows[0].icdname;
              this.diagglist.push(item);
            });
            this.illnesscodes.push(item.icd10code);
          });
        }
      });
      taskopergetlist(this.queryParamsdept).then((res) => {
        if (res.code == 200) {
          let arr = res.rows;
          arr.forEach((item) => {
            this.operlist.push(item);
            this.operationcodes.push(item.opcode);
          });
        }
      });
    },
    getillnesslist() {
      getillnesslist({
        pageNum: 1,
        pageSize: 1000,
      }).then((row) => {
        this.donorchargeList = res.rows;
      });
      getbaseopera({
        pageNum: 1,
        pageSize: 1000,
      }).then((row) => {
        this.baseoperaList = res.rows;
      });
    },
    // æ‰‹æœ¯æŸ¥è¯¢
    remoteopcode(name) {
      if (name) {
        getbaseopera({
          pageNum: 1,
          pageSize: 1000,
          opdesc: name,
        }).then((res) => {
          this.baseoperaList = res.rows;
        });
      }
    },
    // ä»»åŠ¡ç§‘å®¤åˆ é™¤è§¦å‘
    removetag(row) {
      let result = this.deptlist
@@ -1804,6 +2031,7 @@
      if (result.length) {
        taskdepthospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
@@ -1816,6 +2044,36 @@
      if (result.length) {
        taskdepthospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
    },
    // æ‰‹æœ¯åˆ é™¤è§¦å‘
    removeopera(row) {
      let result = this.operlist
        .filter((item) => item.opcode == row)
        .map((item) => item.id);
      if (result.length) {
        taskoperhospgetsondel(result).then((res) => {
          if (res.code) {
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
    },
    // ç–¾ç—…删除触发
    removediagg(row) {
      let result = this.diagglist
        .filter((item) => item.icd10code == row)
        .map((item) => item.id);
      if (result.length) {
        taskdiaghospgetsondel(result).then((res) => {
          if (res.code) {
            this.diagglist = this.diagglist.filter(
              (item) => item.icd10code != row
            );
            this.$modal.msgSuccess("删除成功");
          }
        });
      }
@@ -2011,10 +2269,10 @@
      if (!this.form.taskid) {
        this.templateor = true;
        MessageBox.confirm(
          "当前为新增任务未保存不可关联模板,是否先保存任务?",
          "当前为新增任务未保存不可关联模板,是否先暂存模板保存任务后生效?",
          "功能提示",
          {
            confirmButtonText: "保存任务",
            confirmButtonText: "暂存模板",
            cancelButtonText: "取消",
            type: "warning",
          }
@@ -2032,10 +2290,15 @@
            this.objyl.ivrTaskTemplateScriptVOList =
              this.objyl.ivrLibaTemplateScriptVOList;
            this.form.ivrTaskTemplateVO = this.objyl;
            this.submitForm();
            this.form.templatename = this.objyl.templateName;
            this.$modal.msgSuccess("暂存成功保存任务后模板失效");
            this.drawermb = false;
            this.previewtf = false;
          })
          .catch(() => {});
          .catch(() => {
            this.drawermb = false;
            this.previewtf = false;
          });
      } else {
        setTimeout(() => {
          this.previewFn();
src/views/patient/questionnaire/index.vue
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -154,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -192,7 +191,7 @@
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -208,6 +207,7 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          width="100"
          fixed
          align="center"
          key="sendname"
@@ -228,7 +228,7 @@
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
@@ -258,7 +258,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -274,12 +274,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -361,7 +361,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -493,7 +493,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -536,7 +536,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -661,7 +661,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -686,10 +686,10 @@
      previewVisible: false, //门诊随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,10 +718,10 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -736,7 +736,7 @@
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -765,6 +765,7 @@
        pageSize: 10,
        serviceType: 7,
        searchscope: 3,
        sendstate:2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -779,7 +780,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -877,12 +878,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -909,7 +910,7 @@
        this.total = response.total;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -927,7 +928,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1007,6 +1008,7 @@
        pageSize: 10,
        serviceType: 7,
        searchscope: 2,
        sendstate:2,
      };
      this.handleQuery(1);
    },
@@ -1176,7 +1178,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
src/views/patient/shadow/index.vue
ÎļþÃû´Ó src/views/patient/ycquestionnaire/index.vue ÐÞ¸Ä
@@ -17,7 +17,7 @@
                  font-weight: 600;
                "
              >
                {{ item.value }}
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
@@ -154,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -192,7 +191,7 @@
      <el-table
        v-loading="loading"
        :data="userList"
        height="660"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
@@ -208,6 +207,7 @@
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          width="100"
          fixed
          align="center"
          key="sendname"
@@ -228,7 +228,7 @@
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待执行</el-tag
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
@@ -258,7 +258,7 @@
        />
        <el-table-column
          label="人工处理意见"
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
@@ -274,12 +274,12 @@
        <el-table-column
          label="随访人员"
          align="center"
          key="createBy"
          prop="createBy"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访时间"
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
@@ -361,7 +361,7 @@
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
@@ -493,7 +493,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -536,7 +536,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -661,7 +661,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -683,13 +683,13 @@
      yfsvalue: "",
      inputValue: "",
      preachform: "",
      previewVisible: false, //门诊随访预览弹框
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
@@ -718,10 +718,10 @@
          name: "出院服务总量",
          value: 0,
        },
        {
          name: "患者过滤",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
@@ -736,7 +736,7 @@
          value: 0,
        },
        {
          name: "待执行",
          name: "待随访",
          value: 0,
        },
        {
@@ -763,8 +763,9 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 11,
        searchscope: 3,
        sendstate:2,
        scopetype: [],
        leaveldeptcodes: [],
        leavehospitaldistrictcodes: [],
@@ -779,7 +780,7 @@
        },
        {
          value: 2,
          label: "待执行",
          label: "待随访",
        },
        {
          value: 3,
@@ -848,7 +849,7 @@
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿æœåŠ¡åˆ—è¡¨ */
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      if (this.topqueryParams.searchscope == 3) {
@@ -877,12 +878,12 @@
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[2].value = response.rows[0].ysf;
          // this.cardlist[1].value = response.rows[0].wzx;
          this.cardlist[1].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          this.cardlist[3].value = response.rows[0].fssb;
          this.cardlist[4].value = response.rows[0].dfs;
          this.cardlist[5].value = response.rows[0].yfs2;
          this.cardlist[2].value = response.rows[0].fssb;
          this.cardlist[3].value = response.rows[0].dsf;
          this.cardlist[4].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
@@ -909,7 +910,7 @@
        this.total = response.total;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -927,7 +928,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -1005,8 +1006,9 @@
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        serviceType: 11,
        searchscope: 2,
        sendstate:2,
      };
      this.handleQuery(1);
    },
@@ -1042,7 +1044,7 @@
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 2,
          serviceType: 9,
          serviceType: 11,
        },
      });
    },
@@ -1176,7 +1178,7 @@
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "smartor/serviceSubtask/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
src/views/patient/subsequent/index.vue
@@ -1,8 +1,69 @@
<template>
  <div class="app-container">
    <div class="leftvlue" style="margin-bottom: 20px">
      <el-row :gutter="10">
        <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
          <el-card
            shadow="hover"
            :body-style="item.router ? ' cursor: pointer' : 'cursor: default'"
          >
            <div style="padding: 8px" @click="$router.push(item.router)">
              <span>{{ item.name }}</span>
              <div
                style="
                  text-align: center;
                  font-size: 18px;
                  margin-top: 10px;
                  font-weight: 600;
                "
              >
              {{ item.value ? item.value : 0 }}
              </div>
            </div>
          </el-card>
        </el-col>
        <!-- <el-col :span="2.5">
          <div class="ysfleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
                <span>表单已发送</span>
                <div
                  style="
                    text-align: center;
                    font-size: 18px;
                    margin-top: 10px;
                    font-weight: 600;
                  "
                >
                  {{ yfsvalue }}
                </div>
              </div>
            </el-card>
          </div>
        </el-col> -->
        <el-col :span="2.5">
          <div class="errleftvlue">
            <el-card shadow="hover">
              <div style="padding: 8px">
                <span>异常</span>
                <div
                  style="
                    text-align: center;
                    font-size: 18px;
                    margin-top: 10px;
                    font-weight: 600;
                  "
                >
                  {{ ycvalue }}
                </div>
              </div>
            </el-card>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-row :gutter="20">
      <!--用户数据-->
      <el-form
        :model="topqueryParams"
        ref="queryForm"
@@ -12,12 +73,13 @@
        label-width="98px"
      >
        <el-form-item label="任务名称">
          <el-input v-model="topqueryParams.name"></el-input>
          <el-input
            v-model="topqueryParams.taskName"
            placeholder="请选择任务名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="审核人">
          <el-input v-model="topqueryParams.name"></el-input>
        </el-form-item>
        <el-form-item label="审核时间">
        <el-form-item label="体检时间">
          <el-date-picker
            v-model="dateRange"
            style="width: 240px"
@@ -28,8 +90,26 @@
            end-placeholder="结束日期"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="复诊类型" prop="status">
          <el-select v-model="topqueryParams.topic" placeholder="请选择">
        <el-form-item label="患者姓名" prop="sendname">
          <el-input
            v-model="topqueryParams.sendname"
            placeholder="请输入患者姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="患者范围" prop="status">
          <el-cascader
            v-model="topqueryParams.scopetype"
            placeholder="默认全部"
            :options="sourcetype"
            :props="{ expandTrigger: 'hover' }"
            @change="handleChange"
          ></el-cascader>
        </el-form-item>
        <el-form-item label="任务状态" prop="status">
          <el-select v-model="topqueryParams.sendstate" placeholder="请选择">
            <el-option
              v-for="item in topicoptions"
              :key="item.value"
@@ -39,34 +119,13 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="模板" prop="status">
          <el-select v-model="topqueryParams.topic" placeholder="请选择">
            <el-option
              v-for="item in topicoptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="复诊状态" prop="status">
          <el-select v-model="topqueryParams.topic" placeholder="请选择">
            <el-option
              v-for="item in topicoptions"
              :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"
            @click="handleQuery(1)"
            >搜索</el-button
          >
          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
@@ -83,7 +142,6 @@
            icon="el-icon-plus"
            size="medium"
            @click="handleAdd"
            v-hasPermi="['system:user:add']"
            >新增</el-button
          >
        </el-col>
@@ -96,7 +154,6 @@
                icon="el-icon-upload2"
                size="medium"
                @click="handleExport"
                v-hasPermi="['system:user:export']"
                >导出</el-button
              >
            </div>
@@ -106,40 +163,12 @@
          <div class="documentf">
            <div class="document">
              <el-button
                type="info"
                icon="el-icon-refresh"
                size="medium"
                @click="TaskReset"
                v-hasPermi="['system:user:export']"
                >任务重置</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="success"
                icon="el-icon-position"
                size="medium"
                @click="AllStarted"
                v-hasPermi="['system:user:export']"
                >全部开始</el-button
              >
            </div>
          </div>
        </el-col>
        <el-col :span="1.5">
          <div class="documentf">
            <div class="document">
              <el-button
                type="warning"
                icon="el-icon-remove"
                plain
                icon="el-icon-warning-outline"
                size="medium"
                @click="AllStop"
                v-hasPermi="['system:user:export']"
                >全部停止</el-button
                @click="toleadExport(1)"
                >执行失败</el-button
              >
            </div>
          </div>
@@ -148,149 +177,296 @@
          <div class="documentf">
            <div class="document">
              <el-button
                type="primary"
                icon="el-icon-remove"
                type="danger"
                plain
                icon="el-icon-warning"
                size="medium"
                @click="Sendtimesetting"
                v-hasPermi="['system:user:export']"
                >发送时间设置</el-button
                @click="toleadExport(2)"
                >结果异常</el-button
              >
            </div>
          </div>
        </el-col>
        <!-- <el-col :span="1.5"> </el-col> -->
      </el-row>
      <el-table
        v-loading="loading"
        :data="userList"
        height="808"
        :row-class-name="tableRowClassName"
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="50" align="center" />
        <el-table-column label="序号" fixed align="center" key="id" prop="id" />
        <el-table-column
          label="任务名称"
          fixed
          align="center"
          key="taskName"
          prop="taskName"
          width="180"
        />
        <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> -->
        <el-table-column
          label="姓名"
          fixed
          width="100"
          align="center"
          key="sendname"
          prop="sendname"
        />
        >
          <template slot-scope="scope">
            <el-button
              size="medium"
              type="text"
              @click="
                  $router.push({
                    path: '/patient/indexls/',
                    query: { sfzh: scope.row.idcardno },
                  })
              "
              ><span class="button-textsc">{{
                scope.row.sendname
              }}</span></el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          label="就诊号"
          label="任务状态"
          align="center"
          sortable
          key="hospno"
          prop="hospno"
          width="120"
        />
        <el-table-column label="年龄" align="center" key="age" prop="age" />
        <el-table-column label="床号" align="center" key="bedNo" prop="bedNo" />
        <el-table-column
          label="科室/病区"
          align="center"
          key="phonenumber"
          prop="phonenumber"
          key="sendstate"
          prop="sendstate"
          width="120"
        >
          <template slot-scope="scope">
            <div>外科门诊</div>
            <div v-if="scope.row.sendstate == 1">
              <el-tag type="primary" :disable-transitions="false"
                >表单已领取</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 2">
              <el-tag type="primary" :disable-transitions="false"
                >待随访</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 3">
              <el-tag type="success" :disable-transitions="false"
                >表单已发送</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 4">
              <el-tag type="info" :disable-transitions="false">不执行</el-tag>
            </div>
            <div v-if="scope.row.sendstate == 5">
              <el-tag type="danger" :disable-transitions="false"
                >发送失败</el-tag
              >
            </div>
            <div v-if="scope.row.sendstate == 6">
              <el-tag type="danger" :disable-transitions="false">已完成</el-tag>
            </div>
          </template>
        </el-table-column>
        <!-- <el-table-column
          label="任务异常说明"
          width="120"
          align="center"
          key="remark"
          prop="remark" -->
        />
        <el-table-column
          label="处理意见"
          align="center"
          key="suggest"
          prop="suggest"
          width="120"
        >
          <template slot-scope="scope">
            <dict-tag
              :options="dict.type.sys_suggest"
              :value="scope.row.suggest"
            />
          </template>
        </el-table-column>
        <el-table-column
          label="随访人员"
          align="center"
          key="updateBy"
          prop="updateBy"
          width="120"
        />
        <el-table-column
          label="随访完成时间"
          sortable
          align="center"
          prop="finishtime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.finishtime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="随访结果"
          width="200"
          align="center"
          key="remark"
          prop="remark"
        >
          <template slot-scope="scope" v-if="scope.row.remark">
            <el-tag
              type="warning"
              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
              >{{ scope.row.remark }}</el-tag
            >
            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="检查日期"
          width="200"
          align="center"
          key="endtime"
          prop="endtime"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.endtime) }}</span>
          </template></el-table-column
        >
        <el-table-column
          label="应随访日期"
          width="200"
          align="center"
          key="longSendTime"
          prop="longSendTime"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.longSendTime) }}</span>
          </template></el-table-column
        >
        <el-table-column
          label="已检查天数"
          width="120"
          align="center"
          key="endDay"
          prop="endDay"
        >
          <template slot-scope="scope">
            <span>{{ scope.row.endDay ? scope.row.endDay + "天" : "" }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="身份证号码"
          width="200"
          align="center"
          key="sfzh"
          prop="sfzh"
        />
        <el-table-column
          label="联系电话"
          width="200"
          align="center"
          key="phone"
          prop="phone"
        />
        <!-- <el-table-column
          label="责任护士"
          width="120"
          align="center"
          key="nurseName"
          prop="nurseName"
        /> -->
        <el-table-column
          label="检查医生"
          width="120"
          align="center"
          key="drname"
          prop="drname"
        />
        <!-- <el-table-column
          label="病历号"
          align="center"
          sortable
          key="medicalRecordNo"
          prop="medicalRecordNo"
          width="120"
        /> -->
        <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> -->
        <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> -->
        <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> -->
        <el-table-column
          label="科室"
          align="center"
          key="deptname"
          prop="deptname"
          width="120"
        >
        </el-table-column>
        <el-table-column
          label="病区"
          align="center"
          key="leavehospitaldistrictname"
          prop="leavehospitaldistrictname"
          width="120"
        >
        </el-table-column>
        <!-- <el-table-column
          label="疾病名称"
          align="center"
          key="topicnumber"
          prop="topicnumber"
          key="icdName"
          prop="icdName"
          width="120"
          :show-overflow-tooltip="true"
        >
          <template slot-scope="scope">
            <div>轻度骨裂</div>
          </template>
        </el-table-column>
        <el-table-column
          label="通知内容"
          align="center"
          key="topicnumberaa"
          prop="topicnumberaa"
          width="120"
        />
        <el-table-column
          label="通知方式"
          align="center"
          key="topicnumberaa"
          prop="topicnumberaa"
          width="120"
        />
        <el-table-column
          label="通知人员"
          align="center"
          key="topicnumberaa"
          prop="topicnumberaa"
          width="120"
        />
        </el-table-column> -->
        <el-table-column
          label="就诊时间"
          sortable
        <!-- <el-table-column
          label="体检随访模板名称"
          align="center"
          prop="createTime"
          key="templatename"
          prop="templatename"
          width="200"
        />
        <el-table-column
          label="任务执行方式"
          align="center"
          key="preachform"
          prop="preachform"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="通知时间"
          sortable
          align="center"
          prop="createTime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="回复时间"
          sortable
          align="center"
          prop="createTime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{ formatTime(scope.row.createTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="随访状态"
          fixed="right"
          align="center"
          key="topicnumber"
          prop="topicnumber"
          width="120"
          :show-overflow-tooltip="true"
        >
          <template slot-scope="scope">
            <div>未完成</div>
            <span v-for="item in scope.row.preachform">{{ item }}、 </span>
          </template>
        </el-table-column>
        </el-table-column> -->
        <!-- <el-table-column
          label="任务发送流程"
          align="center"
          key="serviceSubtaskRecordList"
          prop="serviceSubtaskRecordList"
          width="160"
          :show-overflow-tooltip="true"
        >
          <template slot-scope="scope">
            <span v-for="item in scope.row.serviceSubtaskRecordList"
              >{{ item.remark }}、
            </span>
          </template>
        </el-table-column> -->
        <el-table-column
          label="操作"
          fixed="right"
          align="center"
          fixed="right"
          width="200"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <el-tooltip
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="重新通知"
              content="重新随访"
              placement="top"
            >
              <el-button
@@ -300,10 +476,9 @@
                v-hasPermi="['system:user:edit']"
                ><span class="button-bb"
                  ><i class="el-icon-s-promotion"></i></span
                ></el-button
              >
            </el-tooltip>
            <el-tooltip
              ></el-button>
            </el-tooltip> -->
            <!-- <el-tooltip
              class="item"
              effect="dark"
              content="停止"
@@ -316,21 +491,12 @@
                v-hasPermi="['system:user:edit']"
                ><span class="button-sc"><i class="el-icon-delete"></i></span
              ></el-button>
            </el-tooltip>
            <el-tooltip
              class="item"
              effect="dark"
              content="查看任务详情"
              placement="top"
            </el-tooltip> -->
            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
              ><span class="button-zx"
                ><i class="el-icon-s-order"></i>查看详情</span
              ></el-button
            >
              <el-button
                size="medium"
                type="text"
                @click="Seedetails(scope.row)"
                v-hasPermi="['system:user:edit']"
                ><span class="button-zx"><i class="el-icon-s-order"></i></span
              ></el-button>
            </el-tooltip>
          </template>
        </el-table-column>
      </el-table>
@@ -343,7 +509,7 @@
        @pagination="getList"
      />
    </el-row>
    <!-- æ·»åŠ æˆ–ä¿®æ”¹é—¨è¯Šéšè®¿å¯¹è¯æ¡† -->
    <!-- æ·»åŠ æˆ–ä¿®æ”¹å½±åƒéšè®¿å¯¹è¯æ¡† -->
    <el-dialog
      :title="title"
      :visible.sync="addalteropen"
@@ -386,7 +552,7 @@
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="门诊随访要求">
            <el-form-item label="影像随访要求">
              <el-input type="textarea" v-model="form.desc"></el-input>
            </el-form-item>
          </el-col>
@@ -485,14 +651,14 @@
  resetUserPwd,
  changeUserStatus,
} from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import { getTaskservelist } from "@/api/AiCentre/index";
import Treeselect from "@riophae/vue-treeselect";
import store from "@/store";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
  name: "User",
  dicts: ["sys_normal_disable", "sys_user_sex"],
  name: "Discharge",
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
  components: { Treeselect },
  data() {
    return {
@@ -511,7 +677,7 @@
      // ç”¨æˆ·è¡¨æ ¼æ•°æ®
      userList: null,
      // å¼¹å‡ºå±‚标题
      title: "新增门诊随访",
      title: "新增影像随访",
      // æ˜¯å¦æ˜¾ç¤ºä¿®æ”¹ã€æ·»åŠ å¼¹å‡ºå±‚
      addalteropen: false,
      // ä¿®æ”¹å‘送时间对话框
@@ -529,76 +695,77 @@
      },
      dynamicTags: ["选项一", "选项二", "选项三"], //选项
      inputVisible: false,
      ycvalue: "",
      yfsvalue: "",
      inputValue: "",
      previewVisible: false, //门诊随访预览弹框
      preachform: "",
      previewVisible: false, //影像随访预览弹框
      radio: "",
      radios: [],
      previewtype: 2, //预览门诊随访类型
      previewtype: 2, //预览影像随访类型
      total: 0, // æ€»æ¡æ•°
      ImportQuantity: 999, //导门诊随访数量
      //预览门诊随访信息
      ImportQuantity: 999, //导影像随访数量
      //预览影像随访信息
      previewvalue: {
        username: "这个医生对你怎么样",
      },
      value: [],
      list: [],
      loading: false,
      states: [
        "Alabama",
        "Nebraska",
        "Nevada",
        "New Hampshire",
        "New Jersey",
        "New Mexico",
        "New York",
        "North Carolina",
        "North Dakota",
        "Ohio",
        "Oklahoma",
        "Oregon",
        "Pennsylvania",
        "Rhode Island",
        "South Carolina",
        "South Dakota",
        "Tennessee",
        "Texas",
        "Utah",
        "Vermont",
        "Virginia",
        "Washington",
        "West Virginia",
        "Wisconsin",
        "Wyoming",
      ],
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() > Date.now();
      sourcetype: [
        {
          value: 1,
          label: "科室",
          children: [],
        },
        shortcuts: [
          {
            text: "今天",
            onClick(picker) {
              picker.$emit("pick", new Date());
            },
          },
          {
            text: "昨天",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit("pick", date);
            },
          },
          {
            text: "一周前",
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", date);
            },
          },
        ],
      },
        {
          value: 2,
          label: "病区",
          children: [],
        },
        {
          value: 3,
          label: "全部",
        },
      ],
      loading: false,
      cardlist: [
        {
          name: "体检服务总量",
          value: 0,
        },
        // {
        //   name: "患者过滤",
        //   value: 0,
        // },
        {
          name: "应随访",
          value: 0,
        },
        // {
        //   name: "异常",
        //   value: 0,
        // },
        // {
        //   name: "发送失败",
        //   value: 0,
        // },
        {
          name: "待随访",
          value: 0,
        },
        {
          name: "已随访",
          value: 0,
        },
        // {
        //   name: "表单已发送",
        //   value: 0,
        // },
      ],
      // è¡¨å•参数
      form: {
        phonenumber: "",
@@ -612,9 +779,10 @@
      topqueryParams: {
        pageNum: 1,
        pageSize: 10,
        userName: undefined,
        tagid: undefined,
        topic: undefined,
        serviceType: 9,
        sendstate:2,
        scopetype: [],
      },
      propss: { multiple: true },
      options: [],
@@ -622,85 +790,85 @@
      topicoptions: [
        {
          value: 1,
          label: "待审核",
          label: "表单已领取",
        },
        {
          value: 2,
          label: "执行中",
          label: "待随访",
        },
        {
          value: 3,
          label: "执行完成",
          label: "表单已发送",
        },
        {
          value: 4,
          label: "已停止",
          label: "不执行",
        },
        {
          value: 5,
          label: "发送失败",
        },
        {
          value: 6,
          label: "已完成",
        },
      ],
      topicoptionsyj: [
        {
          value: 1,
          label: "异常",
        },
        {
          value: 0,
          label: "正常",
        },
      ],
      errtype: "",
      leavehospitaldistrictcode: "",
      serviceState: [],
      checkboxlist: [],
      // è¡¨å•校验
      rules: {
        userName: [
          { required: true, message: "用户名称不能为空", trigger: "blur" },
          {
            min: 2,
            max: 20,
            message: "用户名称长度必须介于 2 å’Œ 20 ä¹‹é—´",
            trigger: "blur",
          },
        ],
        nickName: [
          { required: true, message: "用户昵称不能为空", trigger: "blur" },
        ],
        password: [
          { required: true, message: "用户密码不能为空", trigger: "blur" },
          {
            min: 5,
            max: 20,
            message: "用户密码长度必须介于 5 å’Œ 20 ä¹‹é—´",
            trigger: "blur",
          },
        ],
        email: [
          {
            type: "email",
            message: "请输入正确的邮箱地址",
            trigger: ["blur", "change"],
          },
        ],
        phonenumber: [
          {
            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
            message: "请输入正确的手机号码",
            trigger: "blur",
          },
        ],
        IDnumber: [
          {
            pattern:
              /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/,
            message: "请输入正确的身份证号码",
            trigger: "blur",
          },
        ],
      },
      rules: {},
    };
  },
  watch: {},
  created() {
    this.getList();
    this.serviceState = store.getters.serviceState;
    this.checkboxlist = store.getters.checkboxlist;
    this.errtype = this.$route.query.errtype;
    this.leavehospitaldistrictcode =
      this.$route.query.leavehospitaldistrictcode;
    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
      return {
        label: dept.deptName,
        value: dept.deptCode,
      };
    });
    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
      return {
        label: dept.districtName,
        value: dept.districtCode,
      };
    });
    if (this.errtype) {
      this.toleadExport(2);
    } else {
      this.getList(1);
    }
    this.getConfigKey("sys.user.initPassword").then((response) => {
      this.initPassword = response.msg;
    });
  },
  // æœç´¢
  mounted() {
    this.list = this.states.map((item) => {
      return { value: `value:${item}`, label: `label:${item}` };
    });
  activated() {
    this.getList(1);
  },
  methods: {
    /** æŸ¥è¯¢é—¨è¯Šéšè®¿åˆ—表 */
    getList() {
    /** æŸ¥è¯¢å½±åƒéšè®¿æœåŠ¡åˆ—è¡¨ */
    getList(refresh) {
      // é»˜è®¤å…¨éƒ¨
      // æŽ¥å—异常跳转
      this.loading = true;
      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
        this.topqueryParams.deptOrDistrict=2;
@@ -708,12 +876,46 @@
        this.topqueryParams.deptOrDistrict=1;
      }
      getTaskservelist(this.topqueryParams).then((response) => {
        this.userList = response.rows;
        this.userList = response.rows[0].serviceSubtaskList;
        this.total = response.total;
        if (refresh) {
          this.cardlist[0].value =
            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
          // this.cardlist[1].value = response.rows[0].wzx;
          // this.cardlist[2].value = response.rows[0].ysf;
          this.ycvalue = response.rows[0].yc;
          // this.cardlist[3].value = response.rows[0].fssb;
          // this.cardlist[4].value = response.rows[0].dsf;
          // this.cardlist[5].value = response.rows[0].yfs2;
          this.yfsvalue = response.rows[0].yfs;
        }
        this.loading = false;
        this.userList.forEach((item) => {
          let idArray = null;
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
          if (item.preachform) {
            if (item.endtime) {
              item.preachformson = item.preachform;
              idArray = item.preachform.split(",");
            }
            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;
      });
    },
    // æŸ¥çœ‹é—¨è¯Šéšè®¿è¯¦æƒ…
    // æŸ¥çœ‹å½±åƒéšè®¿è¯¦æƒ…
    Referencequestion(row) {
      this.previewVisible = true;
    },
@@ -731,7 +933,7 @@
        this.options = [];
      }
    },
    // é—¨è¯Šéšè®¿çŠ¶æ€ä¿®æ”¹
    // å½±åƒéšè®¿çŠ¶æ€ä¿®æ”¹
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      this.$modal
@@ -770,17 +972,32 @@
      this.resetForm("form");
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
    handleQuery(refresh) {
      this.topqueryParams.pageNum = 1;
      this.getList();
      this.topqueryParams.startOutHospTime = this.dateRange[0];
      this.topqueryParams.endOutHospTime = this.dateRange[1];
      this.getList(refresh);
    },
    // æ‚£è€…范围处理
    handleChange(value) {
      let type = value[0];
      let code = value.slice(-1)[0];
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.topqueryParams.deptId = undefined;
      this.$refs.tree.setCurrentKey(null);
      this.handleQuery();
      this.topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 9,
        sendstate:2,
      };
      this.handleQuery(1);
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
@@ -811,10 +1028,10 @@
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.$router.push({
        path: "/followvisit/particty",
        path: "/followvisit/QuestionnaireTask",
        query: {
          type: 3,
          serviceType: 5,
          type: 2,
          serviceType: 9,
        },
      });
    },
@@ -844,13 +1061,13 @@
            updateUser(this.form).then((response) => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
              this.getList(1);
            });
          } else {
            addUser(this.form).then((response) => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
              this.getList(1);
            });
          }
        }
@@ -865,7 +1082,7 @@
          return delUser(userIds);
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
@@ -878,7 +1095,7 @@
          return console.log("停止成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgWarning("停止成功");
        })
        .catch(() => {});
@@ -891,7 +1108,7 @@
          return console.log("开启成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("开启成功");
        })
        .catch(() => {});
@@ -904,7 +1121,7 @@
          return console.log("选中成功");
        })
        .then(() => {
          this.getList();
          this.getList(1);
          this.$modal.msgSuccess("重置成功");
        })
        .catch(() => {});
@@ -914,23 +1131,53 @@
      this.modificationVisible = true;
    },
    // è·³è½¬è¯¦æƒ…页
    Seedetails() {
    Seedetails(row) {
      let type = "";
      console.log(row, "rwo");
      if (row.preachformson) {
        if (row.preachformson.includes("3")) {
          type = 1;
          console.log(type, "rwo");
        }
      }
      this.$router.push({
        path: "/followvisit/record/detailpage/",
        query: { id: "1" },
        query: {
          taskid: row.taskid,
          patid: row.patid,
          id: row.id,
          Voicetype: type,
        },
      });
    },
    // å¯¼å…¥æŒ‰é’®
    toleadExport() {},
    // ä¾¿æ·æŒ‰é’®
    toleadExport(too) {
      if (too == 1) {
        this.topqueryParams.sendstate = 4;
        this.topqueryParams.excep = null;
      } else if (too == 2) {
        this.topqueryParams.excep = 1;
      }
      this.handleQuery();
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.topqueryParams.pageNum = null;
      this.topqueryParams.pageSize = null;
      this.download(
        "system/user/export",
        "smartor/serviceSubtask/patItemExport",
        {
          ...this.topqueryParams,
        },
        `user_${new Date().getTime()}.xlsx`
      );
    },
    // å¼‚常列渲染
    tableRowClassName({ row, rowIndex }) {
      if (row.excep == 1) {
        return "warning-row";
      }
      return "";
    },
  },
};
@@ -946,6 +1193,9 @@
.document {
  // width: 100px;
  height: 50px;
}
::v-deep.el-table .warning-row {
  background: #eec4c4;
}
.documentf {
@@ -1025,6 +1275,28 @@
    }
  }
}
::v-deep.leftvlue .el-card__body {
  background: #d0e9fd;
}
::v-deep.leftvlue .el-card__body:hover {
  background: #8dc8f8;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
::v-deep.errleftvlue .el-card__body {
  background: #fdd0d7;
}
::v-deep.errleftvlue .el-card__body:hover {
  background: #f88d96;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
::v-deep.ysfleftvlue .el-card__body {
  background: #d0fdd8;
}
::v-deep.ysfleftvlue .el-card__body:hover {
  background: #8df8a4;
  cursor: pointer; /* é¼ æ ‡æ‚¬æµ®æ—¶å˜ä¸ºæ‰‹å½¢ */
}
.button-bb {
  font-weight: 500;
  background-color: #2ba05c;
src/views/register.vue
@@ -6,7 +6,7 @@
      :rules="registerRules"
      class="register-form"
    >
      <h3 class="title">浙中医大二院智慧随访平台</h3>
      <h3 class="title">智慧随访系统</h3>
      <el-form-item prop="username">
        <el-input
          v-model="registerForm.username"
src/views/repositoryai/general/index.vue
@@ -251,7 +251,7 @@
    </div>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
src/views/repositoryai/intention/index.vue
@@ -655,7 +655,7 @@
      </span>
    </el-dialog>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
src/views/repositoryai/matching/index.vue
@@ -137,6 +137,7 @@
          <el-table-column
            label="姓名"
          width="100"
            align="center"
            key="userName"
            prop="userName"
src/views/repositoryai/templateku/configurat/index.vue
@@ -1510,7 +1510,7 @@
      ruleForm: {
        templateName: "",
        revisitBefore:
          "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
          "亲爱的患者/家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
        revisitAfter:
          "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
        ivrLibaTemplateTagList: [],
src/views/repositoryai/templateku/configurat/taskub.vue
@@ -1508,7 +1508,7 @@
      ruleForm: {
        templateName: "",
        revisitBefore:
          "亲爱的患者/家属,您好!我们是浙中医大二院的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
          "亲爱的患者/家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
        revisitAfter:
          "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
        ivrLibaTemplateTagList: [],
src/views/repositoryai/templateku/index.vue
@@ -530,7 +530,7 @@
      // è¡¨æ ¼æ•°æ®
      userList: [],
      // å¼¹å‡ºå±‚标题
      title: "新增类别",
      title: "类别编辑",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // æ—¥æœŸèŒƒå›´
src/views/repositoryai/verbaltrick/index.vue
@@ -527,7 +527,7 @@
        },
      ],
      // å¼¹å‡ºå±‚标题
      title: "新增类别",
      title: "类别编辑",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // æ—¥æœŸèŒƒå›´
src/views/sfstatistics/percentage/index.vue
@@ -55,8 +55,27 @@
                  </el-option>
                </el-select>
              </el-form-item> -->
              <el-form-item label="出院病区" prop="userName">
                <!-- <el-select v-model="queryParams.leavehospitaldistrictcodes" placeholder="请选择">
              <el-form-item label="统计类型" prop="userName">
                <el-select
                  v-model="queryParams.statisticaltype"
                  placeholder="请选择统计类型"
                >
                  <el-option
                    v-for="item in Statisticallist"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
                <el-select
                  v-if="queryParams.statisticaltype == 1"
                  v-model="queryParams.leavehospitaldistrictCode"
                  size="medium"
                  multiple
                  filterable
                  placeholder="请选择病区"
                >
                  <el-option
                    v-for="item in flatArray"
                    :key="item.deptCode"
@@ -64,16 +83,16 @@
                    :value="item.deptCode"
                  >
                  </el-option>
                </el-select> -->
                </el-select>
                <el-select
                  v-model="queryParams.leavehospitaldistrictcodes"
                  v-else-if="queryParams.statisticaltype == 2"
                  v-model="queryParams.deptCode"
                  size="medium"
                  multiple
                  filterable
                  placeholder="请选择病区"
                  placeholder="请选择科室"
                >
                <el-option
                  <el-option
                    v-for="item in flatArray"
                    :key="item.deptCode"
                    :label="item.label"
@@ -82,8 +101,13 @@
                  </el-option>
                </el-select>
              </el-form-item>
              <!-- <el-form-item label="管理方案" prop="userName">
                <el-select v-model="queryParams.value3" placeholder="请选择">
              <el-form-item label="统计类型" prop="userName">
                <el-select
                  v-model="queryParams.serviceType"
                  multiple
                  placeholder="请选择"
                >
                  <el-option
                    v-for="item in options"
                    :key="item.value"
@@ -92,18 +116,12 @@
                  >
                  </el-option>
                </el-select>
              </el-form-item> -->
              <!-- <el-form-item label="出院日期" prop="userName">
                <el-date-picker
                  v-model="queryParams.valuetime1"
                  align="right"
                  type="date"
                  placeholder="选择日期"
                  :picker-options="pickerOptionsa"
                >
                </el-date-picker>
              </el-form-item> -->
              <el-form-item label="统计日期" prop="userName">
              </el-form-item>
              <el-form-item
                label-width="200"
                label="应随访时间范围"
                prop="userName"
              >
                <el-date-picker
                  v-model="queryParams.dateRange"
                  type="daterange"
@@ -185,254 +203,169 @@
              :border="true"
              @selection-change="handleSelectionChange"
            >
              <el-table-column type="selection" width="50" align="center" />
              <!-- <el-table-column
                fixed
                label="序号"
                align="center"
                key="tagid"
                prop="tagid"
                width="50"
              /> -->
              <el-table-column
                fixed
                label="出院病区"
                align="center"
                key="leavehospitaldistrictname"
                prop="leavehospitaldistrictname"
                width="100"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="服务总量"
                label="出院人次"
                align="center"
                key="serviceCount"
                prop="serviceCount"
                key="dischargeCount"
                prop="dischargeCount"
              >
                <template slot-scope="scope">
                  <span
                    >{{ scope.row.updateBy }}
                    <p>{{ scope.row.serviceCount }}</p></span
                  >
                </template>
              </el-table-column>
              <el-table-column
                label="患者过滤数量"
                align="center"
                width="120"
                key="bzxCount"
                prop="bzxCount"
              >
              </el-table-column>
              <el-table-column
                label="应随访量"
                align="center"
                key="ysfCount"
                prop="ysfCount"
              >
              </el-table-column
              ><el-table-column
                label="发送失败"
                align="center"
                key="fssbCount"
                prop="fssbCount"
              >
              </el-table-column
              ><el-table-column
                label="待执行"
                align="center"
                key="dfsCount"
                prop="dfsCount"
              >
              </el-table-column
              ><el-table-column
                label="已发送"
                align="center"
                key="yfsCount"
                prop="yfsCount"
              >
              </el-table-column>
              <el-table-column
                label="已完成"
                align="center"
                key="ywcCount"
                prop="ywcCount"
              >
              </el-table-column>
              <el-table-column
                label="随访完成率"
                align="center"
                width="120"
                key="sfwcl"
                prop="sfwcl"
              >
              <template slot-scope="scope">
                  <span>{{ (Number(scope.row.sfwcl)*100).toFixed(2) }}%</span>
                </template>
              </el-table-column>
              <!-- <el-table-column
                label="公众号发送次数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="公众号随访完成数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="公众号随访完成率"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column> -->
              <!-- <el-table-column
                label="短信发送次数"
                align="center"
                width="120"
                key="dxfscs"
                prop="dxfscs"
              >
              </el-table-column>
              <el-table-column
                label="短信随访完成数"
                align="center"
                width="120"
                key="dxsfwccs"
                prop="dxsfwccs"
              >
              </el-table-column>
              <el-table-column
                label="短信随访完成率"
                align="center"
                width="120"
                key="dxsfwcl"
                prop="dxsfwcl"
              >
              </el-table-column> -->
              <!-- <el-table-column
                label="人工随访次数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="人工随访完成数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="人工随访完成率"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column> -->
              <!-- <el-table-column
                label="失访数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="失访率"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column>
              <el-table-column
                label="失访率"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              > -->
              <!-- </el-table-column> -->
              <el-table-column
                label="异常总数"
                align="center"
                key="yczs"
                prop="yczs"
              >
                <template slot-scope="scope">
                  <el-button
                    size="medium"
                    type="danger"
                    plain
                    @click="routerErr(scope.row)"
                    ><span class="button-zx"
                      >{{scope.row.yczs}}</span
                    ></el-button
                  >
                </template>
              </el-table-column>
              <!-- <el-table-column
                label="总异常率"
                align="center"
                key="tagdescription"
                prop="tagdescription"
              >
              </el-table-column> -->
              <el-table-column
                label="回复异常数"
                label="无需随访人次"
                align="center"
                width="100"
                key="hfycs"
                prop="hfycs"
              >
              </el-table-column>
              <!-- <el-table-column
                label="回复异常及时处理数"
                align="center"
                key="tagdescription"
                prop="tagdescription"
                key="nonFollowUp"
                prop="nonFollowUp"
              >
              </el-table-column>
              <el-table-column
                label="回复异常及时处理率"
                label="应随访人次"
                align="center"
                key="tagdescription"
                prop="tagdescription"
                width="100"
                key="followUpNeeded"
                prop="followUpNeeded"
              >
              </el-table-column> -->
              <!-- <el-table-column
                label="操作"
                align="center"
                width="300"
                class-name="small-padding fixed-width"
              >
                <template slot-scope="scope">
                  <el-button
                    size="medium"
                    type="text"
                    @click="handleUpdate(scope.row)"
                    v-hasPermi="['system:user:edit']"
                    ><span class="button-textxg"
                      ><i class="el-icon-edit"></i>修改</span
                    ></el-button
                  >
                  <el-button
                    size="medium"
                    type="text"
                    @click="handleDelete(scope.row)"
                    v-hasPermi="['system:user:remove']"
                    ><span class="button-textsc"
                      ><i class="el-icon-delete"></i>删除</span
                    ></el-button
                  >
                </template>
              </el-table-column> -->
              </el-table-column>
              <el-table-column align="center" label="首次出院随访">
                <el-table-column
                  label="应随访"
                  align="center"
                  key="needFollowUp"
                  prop="needFollowUp"
                >
                </el-table-column>
                <el-table-column
                  label="待随访"
                  align="center"
                  key="pendingFollowUp"
                  prop="pendingFollowUp"
                >
                </el-table-column>
                <el-table-column
                  label="随访成功"
                  align="center"
                  key="followUpSuccess"
                  prop="followUpSuccess"
                >
                </el-table-column>
                <el-table-column
                  label="随访失败"
                  align="center"
                  key="followUpFail"
                  prop="followUpFail"
                >
                </el-table-column>
                <el-table-column
                  label="随访率"
                  align="center"
                  width="120"
                  key="followUpRate"
                  prop="followUpRate"
                >
                  <!-- <template slot-scope="scope">
                    <span
                      >{{
                        (Number(scope.row.followUpRate) * 100).toFixed(2)
                      }}%</span
                    >
                  </template> -->
                </el-table-column>
                <el-table-column
                  label="人工"
                  align="center"
                  key="manual"
                  prop="manual"
                >
                </el-table-column>
                <el-table-column
                  label="短信"
                  align="center"
                  key="sms"
                  prop="sms"
                >
                </el-table-column>
                <el-table-column
                  label="微信"
                  align="center"
                  key="weChat"
                  prop="weChat"
                >
                </el-table-column>
              </el-table-column>
              <el-table-column align="center" label="再次出院随访">
                <el-table-column
                  label="应随访"
                  align="center"
                  key="needFollowUpAgain"
                  prop="needFollowUpAgain"
                >
                </el-table-column>
                <el-table-column
                  label="待随访"
                  align="center"
                  key="pendingFollowUpAgain"
                  prop="pendingFollowUpAgain"
                >
                </el-table-column>
                <el-table-column
                  label="随访成功"
                  align="center"
                  key="followUpSuccessAgain"
                  prop="followUpSuccessAgain"
                >
                </el-table-column>
                <el-table-column
                  label="随访失败"
                  align="center"
                  key="followUpFailAgain"
                  prop="followUpFailAgain"
                >
                </el-table-column>
                <el-table-column
                  label="随访率"
                  align="center"
                  width="120"
                  key="followUpRateAgain"
                  prop="followUpRateAgain"
                >
                  <!-- <template slot-scope="scope">
                    <span
                      >{{
                        (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
                      }}%</span
                    >
                  </template> -->
                </el-table-column>
                <el-table-column
                  label="人工"
                  align="center"
                  key="manualAgain"
                  prop="manualAgain"
                >
                </el-table-column>
                <el-table-column
                  label="短信"
                  align="center"
                  key="smsAgain"
                  prop="smsAgain"
                >
                </el-table-column>
                <el-table-column
                  label="微信"
                  align="center"
                  key="weChatAgain"
                  prop="weChatAgain"
                >
                </el-table-column>
              </el-table-column>
            </el-table>
            <!-- <pagination
@@ -462,9 +395,7 @@
  listtag,
  tagclassifylist,
} from "@/api/system/label";
import {
  getSfStatistics,deptTreeSelect
} from "@/api/system/user";
import { getSfStatistics, deptTreeSelect } from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -513,7 +444,19 @@
      idds: "", //分类id
      // æ€»æ¡æ•°
      total: 0,
      flatArray:[],
      flatArray: [],
      deptflatArray: [],
      Statisticallist: [
        {
          label: "病区统计",
          value: 1,
        },
        {
          label: "科室统计",
          value: 2,
        },
      ],
      amendtag: false, //是否修改类别
      lstamendtag: false, //是否修改标签
      scavisible: false, //删除弹框
@@ -556,19 +499,46 @@
      options: [
        {
          value: 1,
          label: "东南",
          label: "监测评估",
        },
        {
          value: 2,
          label: "西北",
          label: "出院随访",
        },
        {
          value: 3,
          label: "仨仨仨",
          label: "门诊随访",
        },
        {
          value: 4,
          label: "六飒飒飒",
          label: "宣教关怀",
        },
        {
          value: 5,
          label: "复诊管理",
        },
        {
          value: 7,
          label: "患者报告",
        },
        {
          value: 9,
          label: "体检随访",
        },
        {
          value: 11,
          label: "影像随访",
        },
        {
          value: 12,
          label: "心电随访",
        },
        {
          value: 13,
          label: "专病随访",
        },
      ],
      pickerOptions: {
@@ -587,8 +557,9 @@
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        serviceType:[2],
        serviceType: [2],
        dateRange: [],
        statisticaltype: 1,
      },
      // åˆ—信息
      columns: [
@@ -605,7 +576,7 @@
  watch: {},
  created() {
    this.getList();
this.getDeptTree();
    this.getDeptTree();
  },
  methods: {
@@ -635,10 +606,10 @@
      // ç§‘室列表
      deptTreeSelect().then((response) => {
        this.deptOptions = response.data;
        console.log( this.deptOptions,' this.deptOptions');
        console.log(this.deptOptions, " this.deptOptions");
        this.flatArray = this.flattenArray(response.data);
        console.log(this.flatArray,'this.flatArray');
        console.log(this.flatArray, "this.flatArray");
      });
    },
    flattenArray(multiArray) {
@@ -693,7 +664,7 @@
      };
    },
    routerErr(row) {
      console.log(row,'跳转异常');
      console.log(row, "跳转异常");
      this.$router.push({
        path: "/followvisit/discharge",
        query: {
@@ -741,14 +712,16 @@
    handleQuery() {
      this.queryParams.pageNum = 1;
      console.log();
      this.queryParams.startTime = this.parseTime(this.queryParams.dateRange[0]);
      this.queryParams.startTime = this.parseTime(
        this.queryParams.dateRange[0]
      );
      this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1]);
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.queryParams.dateRange = [];
      this.queryParams.leavehospitaldistrictcodes=[];
      this.queryParams.leavehospitaldistrictcodes = [];
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
@@ -782,7 +755,7 @@
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download(
        "base/tag/export",
        "smartor/serviceSubtask/getSfStatisticsExport",
        {
          ...this.queryParams,
        },
src/views/sfstatistics/propaganda/index.vue
@@ -419,7 +419,7 @@
        <div>
          <el-table :data="tableData" style="width: 100%">
            <el-table-column prop="date" label="患者姓名"> </el-table-column>
            <el-table-column prop="namea" label="性别"> </el-table-column>
            <el-table-column prop="namea" label="性别"width="100"> </el-table-column>
            <el-table-column prop="namec" label="年龄"> </el-table-column>
            <el-table-column prop="named" label="联系方式"> </el-table-column>
            <el-table-column prop="namee" label="计划执行时间" width="120">
src/views/sfstatistics/statement/index.vue
@@ -420,7 +420,7 @@
        <div>
          <el-table :data="tableData" style="width: 100%">
            <el-table-column prop="date" label="患者姓名"> </el-table-column>
            <el-table-column prop="namea" label="性别"> </el-table-column>
            <el-table-column prop="namea" label="性别"width="100"> </el-table-column>
            <el-table-column prop="namec" label="年龄"> </el-table-column>
            <el-table-column prop="named" label="联系方式"> </el-table-column>
            <el-table-column prop="namee" label="计划执行时间" width="120">
src/views/shortmessage/communication/index.vue
@@ -702,9 +702,7 @@
    },
    // èŽ·å–è”ç³»äººä¿¡æ¯æˆ–æ»šåŠ¨åˆ°é¡¶éƒ¨è§¦å‘
    handlePullMessages(contact, next, instance) {
      console.log(contact, "获取联系人信息A");
      console.log(instance, "获取联系人信息B");
      console.log(next, "获取联系人信息C");
      const otheruser = {
        id: contact.id,
        displayName: contact.displayName,
src/views/shortmessage/healthinformation/index.vue
@@ -350,7 +350,7 @@
      </div>
    </div>
    <!-- æ·»åŠ ç±»åˆ«å¼¹æ¡† -->
    <el-dialog title="新增类别" width="30%" :visible.sync="dialogFormVisible">
    <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>
src/views/shortmessage/messagebank/index.vue
@@ -37,7 +37,7 @@
          :class="classestag == 4 ? 'state-lines' : 'state-line'"
          @click="awaitfn"
        >
          <div class="value-left"><i class="el-icon-s-help" />待执行</div>
          <div class="value-left"><i class="el-icon-s-help" />待随访</div>
          <div class="quantityd">22</div>
        </div>
      </div>
@@ -770,7 +770,7 @@
    losefn() {
      this.classestag = 3;
    },
    // åˆ‡æ¢å¾…执行类别
    // åˆ‡æ¢å¾…随访类别
    awaitfn() {
      this.classestag = 4;
    },
src/views/system/user/authRole.vue
@@ -101,8 +101,8 @@
    /** æäº¤æŒ‰é’® */
    submitForm() {
      const userId = this.form.userId;
      const roleIds = this.roleIds.join(",");
      updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => {
      // const roleIds = this.roleIds.join(",");
      updateAuthRole({ userId: userId, roleIds: this.roleIds }).then((response) => {
        this.$modal.msgSuccess("授权成功");
        this.close();
      });
src/views/system/user/index.vue
@@ -2,7 +2,7 @@
  <div class="app-container">
    <el-row :gutter="20">
      <!--部门数据-->
      <el-col :span="4" :xs="24">
      <!-- <el-col :span="4" :xs="24">
        <div class="head-container">
          <el-input
            v-model="deptName"
@@ -26,9 +26,9 @@
            @node-click="handleNodeClick"
          />
        </div>
      </el-col>
      </el-col> -->
      <!--用户数据-->
      <el-col :span="20" :xs="24">
      <el-col :span="24" :xs="24">
        <el-form
          :model="queryParams"
          ref="queryForm"
@@ -332,36 +332,36 @@
          </el-col>
        </el-row>
        <el-form-item label="适用科室" prop="region">
          <el-cascader
            style="width: 478px"
            v-model="form.deptCodes"
            @remove-tag="removehpsp"
            :options="deptOptions"
            :props="props"
            :show-all-levels="false"
            clearable
          >
            <template slot-scope="{ node, data }">
              <span>{{ data.label }}</span>
              <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
            </template>
          </el-cascader>
            <el-cascader
              style="width: 478px"
              v-model="form.deptCodes"
              @remove-tag="removehpsp"
              :options="deptOptionsks"
              :props="props"
              filterable
              clearable
            >
              <template slot-scope="{ node, data }">
                <span>{{ data.label }}</span>
                <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
              </template>
            </el-cascader>
        </el-form-item>
        <el-form-item label="适用病区" prop="region">
          <el-cascader
            style="width: 478px"
            @remove-tag="removehpsp"
            v-model="form.wardCodes"
            :options="deptOptions"
            :props="props"
            :show-all-levels="false"
            clearable
          >
            <template slot-scope="{ node, data }">
              <span>{{ data.label }}</span>
              <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
            </template>
          </el-cascader>
            <el-cascader
              style="width: 478px"
              @remove-tag="removehpsp"
              v-model="form.wardCodes"
              :options="deptOptionsbq"
              :props="props"
              filterable
              clearable
            >
              <template slot-scope="{ node, data }">
                <span>{{ data.label }}</span>
                <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
              </template>
            </el-cascader>
        </el-form-item>
        <el-row>
          <el-col :span="12">
@@ -579,7 +579,8 @@
      // å¼¹å‡ºå±‚标题
      title: "",
      // éƒ¨é—¨æ ‘选项
      deptOptions: undefined,
      deptOptionsks: undefined,
      deptOptionsbq: undefined,
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // éƒ¨é—¨åç§°
@@ -694,6 +695,14 @@
      this.initPassword = response.msg;
    });
  },
  mounted() {
    this.$nextTick(() => {
      const menuWrap = document.querySelector('.el-cascader-menu__wrap');
      if (menuWrap) {
        menuWrap.style.height = '404px';
      }
    });
  },
  methods: {
    /** æŸ¥è¯¢ç”¨æˆ·åˆ—表 */
    getList() {
@@ -710,8 +719,11 @@
    /** æŸ¥è¯¢éƒ¨é—¨ä¸‹æ‹‰æ ‘结构 */
    getDeptTree() {
      // ç§‘室列表
      deptTreeSelect().then((response) => {
        this.deptOptions = response.data;
      deptTreeSelect(1).then((response) => {
        this.deptOptionsks = response.data;
      });
      deptTreeSelect(2).then((response) => {
        this.deptOptionsbq = response.data;
      });
      // é™¢åŒºåˆ—表
      //  deptTreeSelect().then((response) => {
@@ -763,8 +775,8 @@
        remark: undefined,
        postIds: [],
        roleIds: [],
        deptCodes:[],
        wardCodes:[],
        deptCodes: [],
        wardCodes: [],
      };
      this.resetForm("form");
    },
@@ -822,14 +834,14 @@
        this.form = response.data;
        this.belongDepts = response.belongDepts;
        this.belongWards = response.belongWards;
        if (this.form.hospInfo){
        if (this.form.hospInfo) {
          this.form.deptCodes = JSON.parse(this.form.hospInfo);
        }else{
        } else {
          this.form.deptCodes = [];
        }
        if (this.form.deptInfo){
        if (this.form.deptInfo) {
          this.form.wardCodes = JSON.parse(this.form.deptInfo);
        }else{
        } else {
          this.form.wardCodes = [];
        }
        console.log(this.form.wardCodes, "wardCodes");
@@ -846,10 +858,10 @@
    },
    // åˆ é™¤ç§‘室
    removehpsp(valueArray) {
      console.log(valueArray,'删除科室');
      console.log(this.form.userId,'删除');
     let code=valueArray[valueArray.length-1];
      removeusertd(this.form.userId,code).then((res) => {
      console.log(valueArray, "删除科室");
      console.log(this.form.userId, "删除");
      let code = valueArray[valueArray.length - 1];
      removeusertd(this.form.userId, code).then((res) => {
        if (res.code) {
        }
      });
@@ -880,13 +892,13 @@
      this.form.hospInfo = JSON.stringify(this.form.deptCodes);
      this.form.deptInfo = JSON.stringify(this.form.wardCodes);
      if (this.form.deptCodes.length)
      this.form.deptCodes = this.form.deptCodes.map(
        (subArr) => subArr[subArr.length - 1]
      );
        this.form.deptCodes = this.form.deptCodes.map(
          (subArr) => subArr[subArr.length - 1]
        );
      if (this.form.wardCodes.length)
      this.form.wardCodes = this.form.wardCodes.map(
        (subArr) => subArr[subArr.length - 1]
      );
        this.form.wardCodes = this.form.wardCodes.map(
          (subArr) => subArr[subArr.length - 1]
        );
      console.log(this.form.wardCodes, "wardCodes");
      console.log(this.form.deptCodes, "deptCodes");
@@ -1017,3 +1029,12 @@
  },
};
</script>
<style lang="scss" >
// ::v-deep .el-cascader-menu__wrap{
//   min-height: 404px ;
// }
// ::v-deep.el-cascader-panel .el-cascader-menu__wrap {
//   height: 404px !important;
// }
</style>
src/views/system/user/profile/userInfo.vue
@@ -2,14 +2,14 @@
  <el-form ref="form" :model="user" :rules="rules" label-width="80px">
    <el-form-item label="用户昵称" prop="nickName">
      <el-input v-model="user.nickName" maxlength="30" />
    </el-form-item>
    </el-form-item>
    <el-form-item label="手机号码" prop="phonenumber">
      <el-input v-model="user.phonenumber" maxlength="11" />
    </el-form-item>
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="user.email" maxlength="50" />
    </el-form-item>
    <el-form-item label="性别">
    <el-form-item label="性别"width="100">
      <el-radio-group v-model="user.sex">
        <el-radio label="0">男</el-radio>
        <el-radio label="1">女</el-radio>
src/views/tool/build/index.vue
@@ -3,7 +3,7 @@
    <div class="left-board">
      <div class="logo-wrapper">
        <div class="logo">
          <img :src="logo" alt="logo"> Form Generator
          <!-- <img :src="logo" alt="logo"> Form Generator -->
        </div>
      </div>
      <el-scrollbar class="left-scrollbar">
vue.config.js
@@ -7,7 +7,7 @@
const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '浙中医大二院智慧随访平台' // ç½‘页标题
const name = process.env.VUE_APP_TITLE || '景宁人民医院智慧随访平台' // ç½‘页标题
const port = process.env.port || process.env.npm_config_port || 8093 // ç«¯å£
@@ -35,13 +35,13 @@
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        // target: `http://192.168.168.60:8095`,
        // target: `https://www.health-y.cn/lssf`,
        // target: `http://10.202.20.185:8095`,
        // target: `http://192.168.100.184:8095`,
        target:`http://localhost:8095`,
        // target: `http://192.168.101.135:8095`,
        // target: `http://192.168.101.166:8093`,
        // target: `http://192.168.191.181:8095`,
        target: `http://192.168.191.181:8095`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''