Browse Source

测试提交

zf 1 month ago
parent
commit
5b62495f7e

+ 23 - 23
public/config.js

@@ -1,43 +1,43 @@
 window.GLOBAL_CONFIG = {
 
-    API_ETL: 'http://172.18.84.102:8080/api/wbmd1s', 
-    API_DOCTOR: 'http://172.18.84.102:8080/api/wbmd3h', 
+    API_ETL: 'http://172.18.84.102:8080/api/wbmd1s',
+    API_DOCTOR: 'http://172.18.84.102:8080/api/wbmd3h',
     API_DATA: 'http://172.18.84.102:8080/api/wbmd3h',
     API_AI: 'http://172.18.84.102:8080/',
 
       //一人一码 医院内网
-    // API_ETL: 'http://172.17.111.99/sync', 
-    // API_DOCTOR: 'http://172.17.111.99/health', 
+    // API_ETL: 'http://172.17.111.99/sync',
+    // API_DOCTOR: 'http://172.17.111.99/health',
     // API_DATA: 'http://172.17.111.99/health',
     // API_AI: 'http://172.17.111.99/',
 
 
 
-    // 外网访问加密地址 
-    // API_ETL: 'http://dh.xxjkhealth.com:7600/api/wbmd1s', 
-    // API_DOCTOR: 'http://dh.xxjkhealth.com:7600/api/wbmd3h', 
+    // 外网访问加密地址
+    // API_ETL: 'http://dh.xxjkhealth.com:7600/api/wbmd1s',
+    // API_DOCTOR: 'http://dh.xxjkhealth.com:7600/api/wbmd3h',
     // API_DATA: 'http://dh.xxjkhealth.com:7600/api/wbmd3h',
     // API_AI: 'http://dh.xxjkhealth.com:7600',
 
 
-    // API_ETL: 'http://172.18.84.102:8080/api/wbmd1s', 
-    //   API_DOCTOR: 'http://172.18.84.102:8080/api/wbmd3hp', 
+    // API_ETL: 'http://172.18.84.102:8080/api/wbmd1s',
+    //   API_DOCTOR: 'http://172.18.84.102:8080/api/wbmd3hp',
     // API_DATA: 'http://172.18.84.102:8080/api/wbmd3h',
 
-  
 
 
-    API_DOCTOR: 'http://slife.bydsfy.com/api/wbmd3h',
-    API_DATA: 'http://slife.bydsfy.com/api/wbmd3h',
-    API_ETL: 'http://slife.bydsfy.com/api/wbmd1s', 
-    API_AI: 'https://slife.bydsfy.com/',
 
-    
+    // API_DOCTOR: 'http://slife.bydsfy.com/api/wbmd3h',
+    // API_DATA: 'http://slife.bydsfy.com/api/wbmd3h',
+    // API_ETL: 'http://slife.bydsfy.com/api/wbmd1s',
+    // API_AI: 'https://slife.bydsfy.com/',
+
+
 
     // 测试生产地址
     // API_DOCTOR: 'https://slife.bydsfy.com/api/wbmd3hd',
     // API_DATA: 'https://slife.bydsfy.com/api/wbmd3hd',
-    // API_ETL: 'https://slife.bydsfy.com/api/wbmd3hd', 
+    // API_ETL: 'https://slife.bydsfy.com/api/wbmd3hd',
     // API_AI: 'https://slife.bydsfy.com/',
 
     // 老王测试地址
@@ -46,17 +46,17 @@ window.GLOBAL_CONFIG = {
     // 大胖测试地址
     // API_DOCTOR: 'http://117.72.46.114/api/doctor',
     // API_DATA: 'http://117.72.46.114/api/doctor',
-    // API_ETL: 'http://117.72.46.114/api/doctor', 
+    // API_ETL: 'http://117.72.46.114/api/doctor',
     // API_AI: 'http://117.72.46.114/',
 
 
-    
 
 
-    // API_DOCTOR: 'https://dev1.cloud-seal.com/hipo-business/', 
-    // API_DATA: 'https://dev1.cloud-seal.com/hipo-business/', 
-    // API_DOCTOR: 'https://dev1.cloud-seal.com/healthy-doctor/', 
-    //HPV报告拉回来。 
+
+    // API_DOCTOR: 'https://dev1.cloud-seal.com/hipo-business/',
+    // API_DATA: 'https://dev1.cloud-seal.com/hipo-business/',
+    // API_DOCTOR: 'https://dev1.cloud-seal.com/healthy-doctor/',
+    //HPV报告拉回来。
     //周一拉回来。
     //管理情况、效果监管。
     //标记,样本。
@@ -64,7 +64,7 @@ window.GLOBAL_CONFIG = {
     //数据维度
     //码用还是科室、医生
     //排班内、替换人员、时间、会诊发言、日志记录、插入档案、过程记录。
-    //报告同步字段@王冲老师 
+    //报告同步字段@王冲老师
     //统计模版
 }
 

+ 2 - 2
src/components/medical/labs/detail.vue

@@ -56,7 +56,7 @@
                 <span v-if="scope.row.abnormalIndicator == '升高' ||  scope.row.abnormalIndicator == '高' ||  scope.row.abnormalIndicator == '高于极限' " style="color: #f56c6c">
                   ↑</span>
                 <span v-else-if="scope.row.abnormalIndicator == '降低'  ||  scope.row.abnormalIndicator == '低' ||  scope.row.abnormalIndicator == '低于极限' " style="color: #f56c6c"> ↓</span>
-               
+
               </span>
               <span v-else>
                 {{
@@ -88,7 +88,7 @@
         <LabsLine :data="chartData" />
       </div>
     </el-dialog>
-    
+
   </div>
 </template>
 

+ 127 - 115
src/components/ronin-user-list/index.vue

@@ -1,138 +1,150 @@
 <template>
-    <div>
-        <el-drawer title="人员列表" :visible.sync="showUser" size="80%" direction="rtl">
+  <div>
+    <el-drawer
+      title="人员列表"
+      :visible.sync="showUser"
+      size="80%"
+      direction="rtl"
+    >
+      <el-form
+        :inline="true"
+        size="medium"
+        :model="req"
+        style="padding-left: 20px"
+      >
+        <el-form-item label="姓名:">
+          <el-input v-model="req.patientName" placeholder="请输入姓名" />
+        </el-form-item>
+
+        <!-- <el-form-item label="电话:">
 
-            <el-form :inline="true" size="medium" :model="req" style="padding-left: 20px;">
-                <el-form-item label="姓名:">
-                    <el-input v-model="req.patientName" placeholder="请输入姓名" />
-                </el-form-item>
-                
-                <!-- <el-form-item label="电话:">
-                  
                     <el-input
                         v-model="req.patientPhone"
                         placeholder="请输入"
                     />
-               
-                 
-                </el-form-item> -->
-                <el-form-item>
-                    <el-button type="primary" @click="onSubmit">查询</el-button>
-                    <el-button @click="onReset">重置</el-button>
-                </el-form-item>
-            </el-form>
-            <div class="user-content">
-                <el-table :data="tableUserData" style="width: 100%">
-
-                    <el-table-column prop="patientName" label="姓名" />
-                    <el-table-column prop="age" label="年龄">
-                        <template slot-scope="scope">
-                            {{ scope.row.age }}
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="patientGenderStandard" label="性别" >
-                        <template slot-scope="scope">
-                            {{ scope.row.patientGenderStandard == 'W'?'女':'男' }}
-                        </template>
-
-                    </el-table-column>
-
-                    <el-table-column prop="patientId" label="患者卡号" />
-
-                    <el-table-column prop="phone" label="电话" />
-                    <el-table-column prop="sparePhone" label="电话2" />
 
-                    <el-table-column fixed="right" label="操作" width="180">
-                        <template slot-scope="scope">
-                            <el-button type="text" @click="handleClick(scope.row)">查看档案</el-button>
 
-                        </template>
-                    </el-table-column>
-                </el-table>
-                <!-- <span @click="handleClick({})">1111</span> -->
-                <pagination :total="total" :page.sync="req.page" :limit.sync="req.rows" @pagination="getList" />
-            </div>
-
-        </el-drawer>
-
-
-        <RoninArchive ref="roninArchive"></RoninArchive>
-    </div>
+                </el-form-item> -->
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">查询</el-button>
+          <el-button @click="onReset">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="user-content">
+        <el-table :data="tableUserData" style="width: 100%">
+          <el-table-column prop="patientName" label="姓名" />
+          <el-table-column prop="age" label="年龄">
+            <template slot-scope="scope">
+              {{ scope.row.age }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="patientGenderStandard" label="性别">
+            <template slot-scope="scope">
+              {{ scope.row.patientGenderStandard == "W" ? "女" : "男" }}
+            </template>
+          </el-table-column>
+
+          <el-table-column prop="patientId" label="患者卡号" />
+
+          <el-table-column prop="phone" label="电话" />
+          <el-table-column prop="sparePhone" label="电话2" />
+
+          <el-table-column fixed="right" label="操作" width="180">
+            <template slot-scope="scope">
+              <el-button type="text" @click="handleClick(scope.row)"
+                >查看档案</el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+        <!-- <span @click="handleClick({})">1111</span> -->
+        <pagination
+          :total="total"
+          :page.sync="req.page"
+          :limit.sync="req.rows"
+          @pagination="getList"
+        />
+      </div>
+    </el-drawer>
+
+    <RoninArchive ref="roninArchive"></RoninArchive>
+  </div>
 </template>
 
 <script>
-import RoninArchive from "@/ronin/archive/index"
-import {
-    statisticPatient,
-} from '@/api/dashboard'
+import RoninArchive from "@/ronin/archive/index";
+import { statisticPatient } from "@/api/dashboard";
 export default {
-    props: {
-        type: {
-            default: 'Y'
-        }
+  props: {
+    type: {
+      default: "Y",
     },
-    components: { RoninArchive },
-    data() {
-        return {
-            tableUserData: [],
-            userType: '',
-            showUser: false,
-            total: 0,
-            req: {
-                labelStatDimensionType: '',
-                page: 1,
-                rows: 10,
-                patientName: '',
-                patientPhone:''
-            }
-        }
+  },
+  components: { RoninArchive },
+  data() {
+    return {
+      tableUserData: [],
+      userType: "",
+      showUser: false,
+      total: 0,
+      req: {
+        labelStatDimensionType: "",
+        page: 1,
+        rows: 10,
+        patientName: "",
+        patientPhone: "",
+      },
+    };
+  },
+
+  methods: {
+    init(e, id) {
+      this.showUser = true;
+      this.req.labelStatDimensionType = e;
+      this.req.page = 1;
+      this.req.rows = 10;
+      this.req.diseaseId = id;
+      this.tableUserData = [];
+      this.req.isNowLabel = this.type;
+      this.getList();
     },
 
-    methods: {
-        init(e,id) {
-            this.showUser = true
-            this.req.labelStatDimensionType = e
-            this.req.page = 1
-            this.req.rows = 10
-            this.req.diseaseId = id
-            this.tableUserData = []
-            this.req.isNowLabel = this.type
-            this.getList()
-
-        },
-
-        getList() {
-            statisticPatient(this.req).then(res => {
-                if (res.code == '0' && res.data) {
-                    this.total = res.data.total
-                    this.tableUserData = res.data.list
-                }
-            })
-        },
-        onSubmit() {
-            this.getList()
-        },
+    getList() {
+      statisticPatient(this.req).then((res) => {
+        if (res.code == "0" && res.data) {
+          this.total = res.data.total;
+          this.tableUserData = res.data.list;
+        }
+      });
+    },
+    onSubmit() {
+      this.getList();
+    },
 
-        onReset() {
-            this.req.patientName = ''
-            this.req.patientPhone = ''
-            this.getList()
-        },
+    onReset() {
+      this.req.patientName = "";
+      this.req.patientPhone = "";
+      this.getList();
+    },
 
-        handleClick(data) {
-            console.log(data, '显示数据')
-            // ronin修改档案
-            // this.$router.push(`/user/health-document/index?type=record&id=${data.patientId}`)
-            // this.$refs.roninArchive.init(data.patientId,data.patientGenderStandard,data.phone)
-            this.$refs.roninArchive.init(data.patientId,data.patientName,data.phone,data.patientGenderStandard)
-     
-        },
+    handleClick(data) {
+      console.log(data, "显示数据")
+      // ronin修改档案
+      // this.$router.push(`/user/health-document/index?type=record&id=${data.patientId}`)
+      // this.$refs.roninArchive.init(data.patientId,data.patientGenderStandard,data.phone)
+      this.$refs.roninArchive.init(
+        data.patientId,
+        data.patientName,
+        data.phone,
+        data.patientGenderStandard
+      )
     }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
-.user-content{
-    padding: 20px;
+.user-content {
+  padding: 20px;
 }
-</style>
+</style>

+ 17 - 5
src/router/index1.js

@@ -256,8 +256,20 @@ export const asyncRoutes = [
         component: () => import('@/views/user/reason'),
         name: 'reason',
         meta: { title: '个案管理分析', icon: 'user', affix: true, roles: ['admin', 'doctor'] }
+      },
+      {
+        path: 'operational-assistant',
+        component: () => import('@/views/user/operational-assistant/index.vue'),
+        name: 'operationalAssistant',
+        meta: { title: '运营助理', icon: 'user', affix: true }
+      },
+      {
+        path: 'operational-manage',
+        component: () => import('@/views/user/operational-assistant/manage.vue'),
+        name: 'operationalManage',
+        hidden: true,
+        meta: { title: '多标签管理', icon: 'user', affix: false }
       }
-
     ]
   },
 
@@ -480,7 +492,7 @@ export const asyncRoutes = [
         name: 'statistics',
         meta: { title: 'MDT会诊统计', icon: 'dashboard', affix: true, noCache: true, roles: ['admin'] }
       },
-    
+
       {
         path: 'rewards',
         component: () => import('@/views/mdt/rewards'),
@@ -499,7 +511,7 @@ export const asyncRoutes = [
         name: 'rewards',
         meta: { title: '测试推送服务', icon: 'el-icon-s-claim', affix: true, roles: ['admin'] }
       },
-      
+
     ]
   },
   {
@@ -575,7 +587,7 @@ export const asyncRoutes = [
         name: 'dept',
         meta: { title: '科室配置', icon: 'dashboard', affix: true, noCache: true, roles: ['admin'] }
       },
-      
+
       {
         path: 'therapyNotes',
         component: () => import('@/views/diagnosis/therapyNotes'),
@@ -588,7 +600,7 @@ export const asyncRoutes = [
         name: 'incident',
         meta: { title: '诊中配置', icon: 'dashboard', affix: true, noCache: true, roles: ['admin'] }
       }
-    
+
     ]
   },
 

+ 7 - 7
src/utils/request.js

@@ -32,23 +32,23 @@ const service = axios.create({
 // request interceptor
 service.interceptors.request.use(
   config => {
-    
-    // 加密前 
+
+    // 加密前
 
     let aesRsaReq = JSON.parse(localStorage.getItem('aesRsa'))
     let data = {}
-   
+
     if (url.indexOf(config.url) == -1) {
-     
+
       data = config.data
     } else {
-      
+
       if (aesRsaReq) {
         data = encrypt(config.data, dataUUid, aesRsaReq.reqKey, aesRsaReq.version)
       }
     }
     config.data = data
-    // 加密前 结束 
+    // 加密前 结束
     if (store.getters.token) {
       config.headers['token'] = getToken()
     }
@@ -153,4 +153,4 @@ service.interceptors.response.use(
   }
 )
 
-export default service
+export default service

+ 4 - 3
src/views/database/components/tableDataList.vue

@@ -21,9 +21,9 @@
                 </el-table-column>
                 <el-table-column :prop="item.code" :label="item.name" v-for="(item, index) of propsData"
                   :key="'items' + index + '_' + item.code" :width="getItemWidth(item)"  @click="showContent(item)">
-                
+
                 </el-table-column>
-               
+
                 <!-- <el-table-column fixed="right" label="操作" width="200">
                 <template slot-scope="scope">
                   <el-button @click="onTapDetail(scope.row)" type="text"
@@ -169,6 +169,7 @@ export default {
           if (res.data?.data?.records) {
             this.total = res.data.data.total
             this.tableData = res.data.data.records;
+            console.log(this.tableData, 'propsData')
           }
         } else {
           this.total = 0;
@@ -269,4 +270,4 @@ export default {
 .ronin-table-box {
   height: calc(100vh - 200px);
 }
-</style>
+</style>

+ 6 - 6
src/views/database/components/tableLogList.vue

@@ -29,7 +29,7 @@
             ></el-input>
           </el-form-item>
 
-        
+
 
           <el-form-item>
             <el-button type="primary" @click="onSubmit">查询</el-button>
@@ -49,7 +49,7 @@
                     <el-tag>普通</el-tag>
                     </template>
               </el-table-column>
-          
+
 
               <el-table-column prop="p_sex" label="内容" >
                 <template>
@@ -57,7 +57,7 @@
                 </template>
               </el-table-column>
 
-             
+
 
               <el-table-column fixed="right" label="操作" width="200">
                 <template slot-scope="scope">
@@ -73,7 +73,7 @@
     </div>
   </div>
 </template>
-  
+
   <script>
 import TableDataList from "../components/tableDataList.vue";
 export default {
@@ -118,7 +118,7 @@ export default {
   },
 };
 </script>
-  
+
   <style lang="scss" scoped>
 .table-box {
   background: #fff;
@@ -221,4 +221,4 @@ export default {
 .ronin-table-box{
   height: calc(100vh - 200px);
 }
-</style>
+</style>

+ 9 - 11
src/views/diagnosis/article.vue

@@ -56,11 +56,11 @@
       width="450px"
     >
       <el-form ref="form" :model="popForm" label-width="100px">
-       
+
           <el-form-item label="选择病种:">
             <IllbessSelect v-model="popForm.diseaseId"  />
           </el-form-item>
-       
+
         <el-form-item label="文章:">
           <el-select v-model="popForm.articleId" filterable remote  :remote-method="getArticle" placeholder="请选择文章">
             <el-option
@@ -73,7 +73,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="科室:">
-          <el-select v-model="popForm.deptId" filterable remote  :remote-method="getDept" placeholder="请选择科室">
+          <el-select v-model="popForm.deptId" filterable placeholder="请选择科室">
             <el-option
               v-for="item in deptArrList"
               :label="item.name"
@@ -100,7 +100,7 @@
     </el-dialog>
   </div>
 </template>
-  
+
   <script>
 import {
   articleConfigQuery,
@@ -212,13 +212,11 @@ export default {
     },
     getDept(val,id) {
       console.log('111111111111111111111111')
-      deptList({
-        name:val?val:'',
-        id:id?id:''
-      }).then((res) => {
+      deptList({ page: 1, rows: 1000 }).then((res) => {
         if (res.code == "0") {
-           console.log(res,'111111111111111111111111')
+          console.log(res,'111111111111111111111111')
           this.deptArrList = res.data.list
+          console.log(this.deptArrList, 'deptArrList')
         }
       });
     },
@@ -238,7 +236,7 @@ export default {
   },
 };
 </script>
-  
+
   <style lang="scss" scoped>
 .app-box {
   margin-right: 14px;
@@ -342,4 +340,4 @@ export default {
 .drawer-content {
   padding: 20px;
 }
-</style>
+</style>

+ 3 - 3
src/views/diagnosis/config.vue

@@ -129,7 +129,7 @@ export default {
   },
   methods: {
     getDept() {
-      deptList({}).then((res) => {
+      deptList({ page: 1, rows: 1000 }).then((res) => {
         console.log(2);
         if (res.code == "0" && res.data) {
           this.deptDataList = res.data.list;
@@ -152,7 +152,7 @@ export default {
                this.listBottom.push(e)
             }
           })
-         
+
           this.listQuery.type = res.data.list[0].id;
           this.getDetails();
         }
@@ -189,7 +189,7 @@ export default {
       }else{
          this.detailsArr.splice(index, 1);
       }
-     
+
     },
     onLeftItem(data) {
       this.listQuery.type = data.id;

+ 81 - 38
src/views/sick-person/target.vue

@@ -62,10 +62,18 @@
     </div>
     <div class="target-content">
       <div class="target-type">
-        <div class="target-type-head">快速筛选</div>
-
+        <div class="target-type-head">
+          <span>快速筛选:</span>
+          <el-input
+            placeholder="请输入疾病类型"
+            style="width: 200px"
+            v-model="searchText"
+            @change="handleInputChange"
+            clearable
+          ></el-input>
+        </div>
         <div
-          v-for="(e, eIndex) in countList"
+          v-for="(e, eIndex) in filterList"
           :key="eIndex + 'ronn124'"
           class="target-type-box"
         >
@@ -221,9 +229,7 @@
                   >个案管理</el-button
                 >
 
-                <el-button
-                  type="text"
-                  @click="handleHzClick(scope.row)"
+                <el-button type="text" @click="handleHzClick(scope.row)"
                   >会诊记录</el-button
                 >
                 <el-button
@@ -328,10 +334,7 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item
-        
-          label="是否加入随访计划:"
-        >
+        <el-form-item label="是否加入随访计划:">
           <el-select
             v-model="form.addFollowUp"
             style="width: 100%"
@@ -346,7 +349,7 @@
           <el-date-picker
             v-model="form.limitDt"
             type="date"
-             style="width: 100%"
+            style="width: 100%"
             placeholder="选择开始日期"
             value-format="yyyy-MM-dd"
           >
@@ -510,7 +513,11 @@
       </div>
     </el-dialog>
 
-     <el-dialog title="申请会诊列表" :visible.sync="dialogHzListVisible" width="80%">
+    <el-dialog
+      title="申请会诊列表"
+      :visible.sync="dialogHzListVisible"
+      width="80%"
+    >
       <!-- <div class=""><el-button type="primary" @click="addNewHz()">申请会诊</el-button></div> -->
       <div class="">
         <el-table :data="tableHzData" style="width: 100%" highlight-current-row>
@@ -547,7 +554,9 @@
           <el-table-column fixed="right" label="操作" width="320">
             <template slot-scope="scope">
               <!-- <el-button type="text" @click="handleEditHZ(scope.row)">编辑</el-button> -->
-              <el-button type="text" @click="handleAlertHz(scope.row)">提醒</el-button>
+              <el-button type="text" @click="handleAlertHz(scope.row)"
+                >提醒</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -579,7 +588,7 @@ import {
   saveFollowup,
   saveApplyForm,
   queryDoctorUsers,
-  queryMzApplyByUser
+  queryMzApplyByUser,
 } from "@/api/patient";
 import {
   queryUserByLabelId,
@@ -588,9 +597,14 @@ import {
   getTagsLogById,
   addCrmRemark,
 } from "@/api/tag";
-import { queryExamsReportsByIds ,queryLabsReportsByIds,queryOperationRecordItem} from "@/api/patient";
+import {
+  queryExamsReportsByIds,
+  queryLabsReportsByIds,
+  queryOperationRecordItem,
+} from "@/api/patient";
 import CCITTreeSelect from "@/components/CCIT-treeSelect";
 import { deptTree } from "@/api/user";
+import { debounce } from 'lodash'
 export default {
   components: { RoninArchive, PositiveDoc, IllbessSelect, CCITTreeSelect },
   filters: {
@@ -676,11 +690,31 @@ export default {
       launchDoctorOptions: [],
       groupType: "", //目标类型
 
-      currUser:{},
-      dialogHzListVisible:false,
-      tableHzData:[]
+      currUser: {},
+      dialogHzListVisible: false,
+      tableHzData: [],
+      searchText: "",
+      filterList: [], // 新增过滤后的列表
     };
   },
+  watch: {
+    searchText: {
+      handler: debounce(function (newVal) {
+        this.filterList = this.countList.map(category => {
+          const filteredItems = category.statisticLabelList.filter(item =>
+            item.name.toLowerCase().includes(newVal.toLowerCase())
+          );
+          return {
+            ...category,
+            statisticLabelList: filteredItems
+          };
+        }).filter(category =>
+          newVal ? category.statisticLabelList.length > 0 : true
+        );
+      }, 300),
+      immediate: true
+    }
+  },
   mounted() {
     this.getDeptTree();
     this.form.doctorId = getUserID();
@@ -690,21 +724,22 @@ export default {
     this.getPatientCount();
   },
   methods: {
-   // 会诊单独(可能作废)
+    // 会诊单独(可能作废)
     handleHzClick(data) {
       console.log(data);
-      this.dialogHzListVisible = true
-      this.currUser = data
-      this.getMzList(data)
-     
+      this.dialogHzListVisible = true;
+      this.currUser = data;
+      this.getMzList(data);
     },
 
-     getMzList(data) {
-      queryMzApplyByUser({ patientId: this.currUser.patientInfo.patientId }).then(res => {
+    getMzList(data) {
+      queryMzApplyByUser({
+        patientId: this.currUser.patientInfo.patientId,
+      }).then((res) => {
         if (res.code === 0 && res.data.list) {
-          this.tableHzData = res.data.list
+          this.tableHzData = res.data.list;
         }
-      })
+      });
     },
     onClickGroupChange(data) {
       this.groupType = data.conditionType;
@@ -871,7 +906,10 @@ export default {
     },
     // 目标列表
     targetList() {
-      phaseConfigList({ diseaseIds: [this.form.diseaseId],state:'normal' }).then((res) => {
+      phaseConfigList({
+        diseaseIds: [this.form.diseaseId],
+        state: "normal",
+      }).then((res) => {
         if (res.code == "0" && res.data) {
           this.options = res.data;
 
@@ -906,6 +944,7 @@ export default {
       }).then((res) => {
         if (res.code == 0 && res.data) {
           this.countList = res.data;
+          this.filterList = res.data
           const item = res.data[0];
           this.checkLabelId = item.statisticLabelList[0].id;
           // this.targetList()
@@ -1006,12 +1045,12 @@ export default {
           console.log(arr, "显示数据123");
           const examsList = [];
           const labsList = [];
-          const operationList = []
+          const operationList = [];
 
           for (const v of arr) {
             if (v.data && v.data.length > 0) {
               for (const k of v.data) {
-                if (k.value?.type === "examine_project" ) {
+                if (k.value?.type === "examine_project") {
                   // k.value.mdv.type = k.value.type;
                   examsList.push(k.value.mdv.id);
                 }
@@ -1021,15 +1060,15 @@ export default {
                   labsList.push(k.value.mdv.id);
                 }
 
-                if(k.value?.type === "operation_apply"){
-                  operationList.push(k.value.mdv.id)
+                if (k.value?.type === "operation_apply") {
+                  operationList.push(k.value.mdv.id);
                 }
 
                 //  k.value?.type === "operation_apply"  手术申请等大胖加
               }
             }
           }
-          console.log(examsList,labsList,operationList,'11111111')
+          console.log(examsList, labsList, operationList, "11111111");
           if (examsList.length > 0) {
             this.queryExamsReports(examsList);
           }
@@ -1038,8 +1077,8 @@ export default {
             this.queryLabsReports(labsList);
           }
 
-          if(operationList.length>0){
-              this.queryOperationList(operationList);
+          if (operationList.length > 0) {
+            this.queryOperationList(operationList);
           }
         }
       });
@@ -1079,8 +1118,8 @@ export default {
         }
       });
     },
-    queryOperationList(list){
-        if (!list || list.length == 0) {
+    queryOperationList(list) {
+      if (!list || list.length == 0) {
         return;
       }
       const params = {
@@ -1118,7 +1157,7 @@ export default {
       this.$forceUpdate();
       this.form.patientId = data.patientId;
       this.form.sourceObjId = data.id;
-       this.groupType = ''
+      this.groupType = "";
       this.form.sourceType = "patient_label";
       this.addUser = true;
     },
@@ -1194,6 +1233,10 @@ export default {
       }
       return sex === "W" ? "女" : "男";
     },
+    // 快速筛选
+    handleInputChange() {
+      console.log("eee");
+    },
   },
 };
 </script>

+ 0 - 2
src/views/statistics/plan.vue

@@ -71,7 +71,6 @@
 
                     <div class="app-bodyer-detail-data-list">
                         <el-table :data="tableData" style="width: 100%">
-
                             <el-table-column prop="deptName" label="科室" />
                             <el-table-column prop="doctorName" label="医生" width="120" />
                             <el-table-column prop="diseaseName" label="个案管理病种" />
@@ -445,4 +444,3 @@ export default {
     }
 }
 </style>
-  

+ 10 - 9
src/views/tag/detail.vue

@@ -75,10 +75,10 @@
             <el-table-column prop="patientName" label="姓名" width="80"  />
             <el-table-column prop="flow" label="已加入管理" width="120" align="center">
               <template slot-scope="scope">
-               
+
                    <span v-if="scope.row.managePatientInfo">加入个案管理</span>
-               
-               
+
+
               </template>
             </el-table-column>
             <el-table-column prop="age" label="年龄" width="60" />
@@ -95,7 +95,7 @@
 
             <el-table-column prop="phone" label="电话" width="120" />
             <el-table-column prop="sparePhone" label="电话2" width="120" />
-            
+
             <el-table-column prop="patientId" label="患者编号" width="120" />
             <!-- <el-table-column prop="doctorBehaviorDataCount" label="浏览次数">
             </el-table-column> -->
@@ -492,7 +492,7 @@
 
         <!-- 会诊 -->
         <template v-if="joinForm.opSubType === 'meeting'">
-          
+
           <el-form-item label="参加会诊部门" >
             <CCIT-TreeSelect v-model="joinForm.joinDept" multiple :options="deptData" placeholder="选择" />
           </el-form-item>
@@ -615,7 +615,7 @@ export default {
         { id: '8', name: '其他原因,请在备注描述' },
         { id: '9', name: '已在本科室就诊/住院' },
         { id: '10', name: '该患者已纳入个案管理' }
-        
+
 
       ],
       adminWaysOptions: [
@@ -730,7 +730,7 @@ export default {
                 if(res.code == '0' && res.data){
                     this.deptData = res.data
                 }
-               
+
             })
         },
     onRmoveUser() {
@@ -755,7 +755,7 @@ export default {
       if (this.joinForm.opSubType && this.joinForm.opSubType === '') {
         return
       }
-      
+
       this.joinForm.opType = 'join'
       this.joinForm.opContent = '1'
       this.joinForm.remark = '1'
@@ -763,7 +763,7 @@ export default {
       this.joinForm.consultationLabelId = this.currUser.labelId
 
       savePatientManage(this.joinForm).then(res => {
-       
+
         if (res.code === 0 && res.data) {
           this.joinForm.manageId = res.data.id
           if (this.joinForm.opSubType === 'followUp') {
@@ -1253,6 +1253,7 @@ export default {
       this.listQuery.labelId = this.tagid
 
       queryUserByLabelId(this.listQuery).then((res) => {
+        console.log(res, 'res///...')
         if (res.code === 0 && res.data?.list) {
           const list = res.data.list
           for (let v of res.data.list) {

+ 387 - 0
src/views/user/operational-assistant/index.vue

@@ -0,0 +1,387 @@
+<template>
+  <div class="operational-assistant">
+    <div class="app-bodyer-detail">
+      <el-row>
+        <el-col :span="24">
+          <el-form :inline="true" size="medium">
+            <el-form-item label="姓名">
+              <el-input placeholder="请输入姓名"></el-input>
+            </el-form-item>
+            <el-form-item label="开始时间">
+              <el-date-picker placeholder="请选择开始时间"></el-date-picker>
+            </el-form-item>
+            <el-form-item label="结束时间">
+              <el-date-picker placeholder="请选择结束时间"></el-date-picker>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary">查询</el-button>
+              <el-button>重置</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-row>
+      <div class="tableData">
+        <el-table
+          :data="tableData"
+          style="width: 100%"
+          highlight-current-row
+          stripe
+        >
+          <el-table-column label="今日新增潜在患者">
+            <el-table-column width="90" label="状态" prop=""></el-table-column>
+            <el-table-column width="90" label="姓名" prop=""></el-table-column>
+            <el-table-column width="90" label="年龄" prop=""></el-table-column>
+            <el-table-column width="90" label="性别" prop=""></el-table-column>
+            <el-table-column label="手机1" prop=""></el-table-column>
+            <el-table-column
+              label="最后就诊时间"
+              prop=""
+              width="120"
+            ></el-table-column>
+            <el-table-column
+              label="标签发现时间"
+              prop=""
+              width="120"
+            ></el-table-column>
+            <el-table-column label="推理依据" prop=""></el-table-column>
+            <el-table-column label="查看病例" prop=""></el-table-column>
+            <el-table-column label="其他标签" prop="tag" width="170">
+              <template slot-scope="scope">
+                <el-select v-model="scope.row.tag" @change="handleTagSelect(scope.row, scope.$index)">
+                  <el-option
+                    v-for="item in otherTags"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"></el-option>
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="220" fixed="right">
+              <template slot-scope="scope">
+                <el-button type="text">加入会诊</el-button>
+                <el-button type="text" @click="handleAddManagement(scope.row)">加入管理</el-button>
+                <el-button type="text">排除</el-button>
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+        <!-- <el-table :data="FollowTableData" style="width: 100%; margin-top: 40px">
+          <el-table-column label="今日待随访患者">
+            <el-table-column width="90" label="状态" prop="a"></el-table-column>
+            <el-table-column
+              width="90"
+              label="随访类型"
+              prop="b"
+            ></el-table-column>
+            <el-table-column width="90" label="姓名" prop="c"></el-table-column>
+            <el-table-column width="90" label="年龄" prop="d"></el-table-column>
+            <el-table-column width="90" label="性别" prop=""></el-table-column>
+            <el-table-column label="手机1" prop="e"></el-table-column>
+            <el-table-column label="其他标签" prop="g"></el-table-column>
+            <el-table-column label="目标科室" prop="f"></el-table-column>
+            <el-table-column label="就诊计划" prop=""></el-table-column>
+            <el-table-column label="随访概述" prop="i"></el-table-column>
+            <el-table-column label="下次随访时间" prop="j"></el-table-column>
+          </el-table-column>
+        </el-table> -->
+        <el-table
+          ref="treeTable"
+          :data="treeTableData"
+          row-key="id"
+          border
+          :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+          style="width: 100%; margin-top: 40px;"
+          :header-cell-style="{ background: '#f5f7fa' }"
+        >
+          <!-- 类型列 -->
+          <el-table-column
+            label="随访类型"
+            prop="label"
+            width="180"
+            class="flex-column"
+          >
+            <template slot-scope="scope">
+              <div v-if="scope.row.children" class="type-node" style="display: flex;">
+                {{ scope.row.label }}
+                <el-tag size="mini" type="info" style="margin-left: 4px;">{{ scope.row.children.length }}</el-tag>
+              </div>
+            </template>
+          </el-table-column>
+
+          <!-- 基础信息列 -->
+          <el-table-column label="姓名" prop="name" width="100"></el-table-column>
+          <el-table-column label="年龄" prop="age" width="80"></el-table-column>
+          <el-table-column label="性别" prop="gender" width="80"></el-table-column>
+          <el-table-column label="手机1" prop="phone" width="120"></el-table-column>
+          <el-table-column label="其他标签" prop="tags" width="120"></el-table-column>
+          <el-table-column label="目标科室" prop="department"></el-table-column>
+          <el-table-column label="就诊计划" prop="plan"></el-table-column>
+          <el-table-column label="随访结论" prop="" width="140">
+            <template slot-scope="scope" v-if="!scope.row.children">
+              <el-select
+                v-model="scope.row.conclusion"
+                @change="handleSelect(scope.row, scope.$index)"
+              >
+                <el-option
+                  v-for="item in selectData"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </template>
+          </el-table-column>
+          <el-table-column label="随访概述" prop="" width="200">
+            <template slot-scope="scope" v-if="!scope.row.children">
+              <el-input
+                v-model="scope.row.i"
+                type="textarea"
+                :rows="3"
+                placeholder="请输入随访概述"
+              ></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column label="下次随访时间" prop="" width="200" fixed="right">
+            <template slot-scope="scope" v-if="!scope.row.children">
+              <!-- {{ scope.row }} -->
+                <el-date-picker v-if="['2', '3'].includes(scope.row.conclusion)" v-model="scope.row.nextTime"></el-date-picker>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" prop="" width="80" fixed="right">
+            <template slot-scope="scope" v-if="!scope.row.children">
+              <!-- {{ scope.row }} -->
+              <!-- <el-button type="text" :disabled="!['2', '3'].includes(scope.row.conclusion)">发送</el-button> -->
+              <el-button type="text" :disabled="scope.row.conclusion !== '1'">发送</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+
+export default {
+  data() {
+    return {
+      tableData: [
+        {
+          tag: ''
+        }
+      ],
+      FollowTableData: [
+        {
+          a: "测试状态",
+          b: "测试类型",
+          c: "测试姓名",
+          d: "3",
+          e: "18500516707",
+          f: "测试科室",
+          g: "测试标签",
+          h: "考虑中",
+          i: "测试情况",
+          j: "2025-04-01",
+        },
+      ],
+      rowData: [
+        { type: '出院后随访', name: '张三', age: 35 },
+        { type: '门诊随访', name: '李四', age: 28 }
+      ],
+      rawData: [
+        {
+          id: 1,
+          followType: '出院后随访',
+          name: '张三',
+          age: 35,
+          gender: '男',
+          phone: '13800001111',
+          status: 1,
+          conclusion: '1', // 随访结论
+          department: '心内科',
+          plan: '术后复查',
+          nextTime: '',
+          tags: '市内领导'
+        },
+        {
+          id: 111,
+          followType: '出院后随访',
+          name: '张一',
+          age: 35,
+          gender: '男',
+          phone: '13800001111',
+          status: 1,
+          conclusion: '2', // 随访结论
+          department: '心内科',
+          plan: '术后复查',
+          nextTime: '',
+          tags: '离休干部'
+        },
+        {
+          id: 111222,
+          followType: '出院后随访',
+          name: '张二',
+          age: 35,
+          gender: '男',
+          phone: '13800001111',
+          status: 1,
+          conclusion: '3', // 随访结论
+          department: '心内科',
+          plan: '术后复查',
+          nextTime: '',
+          tags: '忠诚客户'
+        },
+        {
+          id: 2,
+          followType: '门诊随访',
+          name: '李四',
+          age: 28,
+          gender: '女',
+          phone: '13900002222',
+          status: 2,
+          conclusion: '4', // 随访结论
+          department: '呼吸科',
+          plan: 'CT复查',
+          nextTime: '',
+          tags: '本院职工及家属'
+        },
+        {
+          id: 3,
+          followType: '多标签患者',
+          name: '李哥',
+          age: 28,
+          gender: '女',
+          phone: '13900002222',
+          status: 2,
+          conclusion: '5', // 随访结论
+          department: '呼吸科',
+          plan: 'CT复查',
+          nextTime: '',
+          tags: '高净值客户'
+        }
+      ],
+      followTypes: [
+        '出院后随访',
+        '门诊随访',
+        '潜在风险随访',
+        '流失患者随访',
+        '会诊随访',
+        '多标签患者'
+      ],
+      otherTags: [
+        {
+          label: '本院职工及家属',
+          value: 1
+        },
+        {
+          label: '市内领导',
+          value: 2
+        },
+        {
+          label: '离休干部',
+          value: 3
+        },
+        {
+          label: '纠纷患者',
+          value: 4
+        },
+        {
+          label: '忠诚客户',
+          value: 5
+        },
+        {
+          label: '高净值客户',
+          value: 6
+        }
+      ],
+      selectData: [
+        {
+          label: "计划就诊(时间)",
+          value: '1',
+        },
+        {
+          label: "考虑中",
+          value: '2',
+        },
+        {
+          label: "外院就诊",
+          value: '3',
+        },
+        {
+          label: "排除",
+          value: '4',
+        },
+        {
+          label: "失访",
+          value: '5'
+        }
+      ]
+    }
+  },
+  computed: {
+    treeTableData() {
+      return this.followTypes.map(type => ({
+        id: type,
+        label: type,
+        children: this.rawData
+          .filter(item => item.followType === type)
+          .map(item => ({
+            ...item,
+            id: item.id.toString()
+          }))
+      }))
+    }
+  },
+  methods: {
+    handleSelect(row, index) {
+      console.log(row, index, "index")
+    },
+    // 选择标签
+    handleTagSelect(row, index) {
+      console.log(row, index, "index")
+    },
+    // 加入管理
+    handleAddManagement(row) {
+      this.$router.push({ path: 'operational-manage' })
+      console.log(row, "加入管理")
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.operational-assistant {
+  padding: 20px;
+  margin: 0 14px;
+  border-radius: 20px;
+  background-color: #ffffff;
+  min-height: calc(100vh - 80px);
+}
+
+::v-deep .el-table thead.is-group th.el-table__cell {
+  background-color: #ffffff;
+  border-left: none;
+  border-right: none;
+}
+
+::v-deep td {
+  border: none !important;
+}
+
+.el-table {
+  border: none;
+}
+
+::v-deep .el-table th.el-table__cell {
+  border-right: none !important;
+}
+
+::v-deep tr {
+  border: none !important;
+}
+
+::v-deep .cell {
+  display: flex !important;
+  // align-items: center !important;
+}
+</style>

+ 237 - 0
src/views/user/operational-assistant/manage.vue

@@ -0,0 +1,237 @@
+<template>
+  <div class="manage-container">
+    <!-- 患者信息卡片 -->
+    <el-card class="info-card">
+      <template #header>
+        <div style="display: flex; align-items: center; justify-content: space-between;">
+          <div class="card-title">患者信息</div>
+          <div>
+            <el-button type="primary" size="small" style="margin-left: 20px;" @click="handleClick">查看档案</el-button>
+            <el-button size="small" @click="goBack">返回</el-button>
+          </div>
+        </div>
+      </template>
+      <el-table
+        :data="tableData"
+        border
+        stripe
+        :header-cell-style="{ background: '#f5f7fa' }"
+      >
+        <el-table-column label="标签" prop="biaoqian" width="200">
+          <template #default="{ row }">
+            <el-tag type="primary">{{ row.biaoqian }}</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="首诊06医生" prop="doctor" width="150" />
+        <el-table-column
+          label="建议随访时间"
+          prop="suggestionTime"
+          width="180"
+        />
+      </el-table>
+    </el-card>
+
+    <!-- 随访计划表单 -->
+    <el-card class="form-card">
+      <template #header>
+        <span class="card-title">制定随访计划</span>
+      </template>
+      <el-form
+        :model="formData"
+        label-width="120px"
+        class="followup-form"
+        :rules="formRules"
+        ref="form"
+      >
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="随访计划" prop="followUpPlan">
+              <el-input
+                v-model="formData.followUpPlan"
+                type="textarea"
+                :rows="3"
+                placeholder="请输入随访计划"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :sm="24" :md="12">
+            <el-form-item label="下次随访时间" prop="nextFollowTime">
+              <el-date-picker
+                v-model="formData.nextFollowTime"
+                type="date"
+                placeholder="选择日期"
+                style="width: 100%"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :sm="24" :md="12">
+            <el-form-item label="随访医生" prop="followUpDoctor">
+              <el-autocomplete
+                v-model="formData.followUpDoctor"
+                :fetch-suggestions="queryDoctors"
+                placeholder="请输入医生姓名"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="必检项目" prop="requiredItems">
+              <el-select
+                v-model="formData.requiredItems"
+                multiple
+                filterable
+                collapse-tags
+                placeholder="请选择检查项目"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in optionData"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item>
+          <el-button type="primary" @click="submitForm">提交计划</el-button>
+          <el-button @click="resetForm">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <RoninArchive ref="roninArchive"></RoninArchive>
+  </div>
+</template>
+
+<script>
+import RoninArchive from "@/ronin/archive/index"
+
+export default {
+  components: { RoninArchive },
+  data() {
+    return {
+      tableData: [
+        {
+          biaoqian: "冠心病-潜在人群",
+          doctor: "王主任",
+          suggestionTime: "2025-04-12",
+        },
+        {
+          biaoqian: "肺占位-CT异常人群",
+          doctor: "张医生",
+          suggestionTime: "2025-04-12",
+        },
+      ],
+      optionData: Array.from({ length: 9 }, (_, i) => ({
+        label: `检查项目${i + 1}`,
+        value: i + 1,
+      })),
+      formData: {
+        followUpPlan: "",
+        nextFollowTime: "",
+        followUpDoctor: "",
+        requiredItems: [],
+      },
+      formRules: {
+        followUpPlan: [
+          { required: true, message: "请输入随访计划", trigger: "blur" },
+        ],
+        nextFollowTime: [
+          { required: true, message: "请选择随访时间", trigger: "change" },
+        ],
+        followUpDoctor: [
+          { required: true, message: "请输入医生姓名", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  methods: {
+    queryDoctors(queryString, cb) {
+      const doctors = ["王主任", "张医生", "李教授", "陈医师"].map((name) => ({
+        value: name,
+      }));
+      cb(
+        queryString
+          ? doctors.filter((d) => d.value.includes(queryString))
+          : doctors
+      );
+    },
+    submitForm() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.$message.success("提交成功")
+          this.resetForm()
+        }
+      })
+    },
+    resetForm() {
+      this.formData = {
+        followUpPlan: "",
+        nextFollowTime: "",
+        followUpDoctor: "",
+        requiredItems: [],
+      }
+    },
+    // 查看档案
+    handleClick() {
+      this.$refs.roninArchive.init()
+    },
+    // 返回
+    goBack() {
+      this.$router.back()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.manage-container {
+  padding: 24px;
+  background-color: #f0f2f5;
+  min-height: 100vh;
+}
+
+.card-title {
+  font-size: 16px;
+  font-weight: 600;
+  color: #303133;
+}
+
+.info-card {
+  margin-bottom: 20px;
+  border-radius: 12px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+
+  ::v-deep .el-table {
+    .el-table__header-wrapper {
+      th {
+        background-color: #f5f7fa !important;
+      }
+    }
+  }
+}
+
+.form-card {
+  border-radius: 12px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+
+  .followup-form {
+    padding: 0 20px;
+
+    .el-form-item__content {
+      .el-textarea {
+        font-family: "Monaco", monospace;
+      }
+    }
+  }
+}
+
+@media (max-width: 768px) {
+  .el-form {
+    .el-col {
+      margin-bottom: 15px;
+    }
+  }
+}
+</style>