瀏覽代碼

统计跳转:体重,血压,指标控制

zhengchengwu 6 年之前
父節點
當前提交
505e8cf041

+ 24 - 1
src/api/qcd.js 查看文件

@@ -76,4 +76,27 @@ export function GetPersonLapsetoData(params) {
76 76
     method: 'get',
77 77
     params: params
78 78
   })
79
-}
79
+}
80
+export function GetPersonWeightData(params) {
81
+  return request({
82
+    url: '/api/qcd/papersonweightdata',
83
+    method: 'get',
84
+    params: params
85
+  })
86
+}
87
+export function GetPersonBloodPressureData(params) {
88
+  return request({
89
+    url: '/api/qcd/papersonbloodpressuredata',
90
+    method: 'get',
91
+    params: params
92
+  })
93
+}
94
+
95
+export function GetPersonICData(params) {
96
+  return request({
97
+    url: '/api/qcd/papersonicdata',
98
+    method: 'get',
99
+    params: params
100
+  })
101
+}
102
+

文件差異過大導致無法顯示
+ 492 - 482
src/router/index.js


+ 7 - 1
src/xt_pages/dialysis/details/index.vue 查看文件

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
 <div class="main-contain">
3 3
   <div class="position">
4
-       <bread-crumb></bread-crumb>
4
+       <bread-crumb :crumbs='crumbs'></bread-crumb>
5 5
        <div class="print" style="float:left;"  >
6 6
             <!-- <el-button type="primary" @click="dialogFormVisible = true">长期医嘱</el-button> -->
7 7
             <!-- <el-button type="primary" @click="orders = true">临时医嘱</el-button> -->
@@ -248,6 +248,12 @@ export default {
248 248
   },
249 249
   data() {
250 250
     return {
251
+      crumbs:[
252
+        {path:false, name:'科室质控'},
253
+        {path:false, name:'透析管理'},
254
+        {path:false, name:'透析记录'},
255
+        {path:false, name:'透析单'},
256
+      ],
251 257
       dialogFormVisible: false,
252 258
       orders: false,
253 259
       loading: false,

+ 152 - 0
src/xt_pages/qcd/components/LineChart.vue 查看文件

@@ -0,0 +1,152 @@
1
+<template>
2
+  <div :class="className" :style="{height:height,width:width}"></div>
3
+</template>
4
+
5
+<script>
6
+import echarts from 'echarts'
7
+require('echarts/theme/macarons') // echarts theme
8
+import { debounce } from '@/utils'
9
+
10
+export default {
11
+  props: {
12
+    className: {
13
+      type: String,
14
+      default: 'chart'
15
+    },
16
+    width: {
17
+      type: String,
18
+      default: '100%'
19
+    },
20
+    height: {
21
+      type: String,
22
+      default: '350px'
23
+    },
24
+    autoResize: {
25
+      type: Boolean,
26
+      default: true
27
+    },
28
+    chartData: {
29
+      type: Object
30
+    },
31
+    title:{
32
+      type: String,
33
+      default: 'chart'
34
+    },
35
+    options:{
36
+      type:Object,
37
+      default:function(){
38
+        return {}
39
+      }
40
+    }
41
+  },
42
+  data() {
43
+    return {
44
+      chart: null,
45
+      chartOptions:{
46
+        xAxis:[],
47
+        legend:[],
48
+        series:[],
49
+      },
50
+      
51
+    }
52
+  },
53
+  mounted() {
54
+    this.initChart()
55
+    if (this.autoResize) {
56
+      this.__resizeHanlder = debounce(() => {
57
+        if (this.chart) {
58
+          this.chart.resize()
59
+        }
60
+      }, 100)
61
+      window.addEventListener('resize', this.__resizeHanlder)
62
+    }
63
+
64
+    // 监听侧边栏的变化
65
+    const sidebarElm = document.getElementsByClassName('sidebar-container')[0]
66
+    sidebarElm.addEventListener('transitionend', this.__resizeHanlder)
67
+  },
68
+  beforeDestroy() {
69
+    if (!this.chart) {
70
+      return
71
+    }
72
+    if (this.autoResize) {
73
+      window.removeEventListener('resize', this.__resizeHanlder)
74
+    }
75
+
76
+    const sidebarElm = document.getElementsByClassName('sidebar-container')[0]
77
+    sidebarElm.removeEventListener('transitionend', this.__resizeHanlder)
78
+
79
+    this.chart.dispose()
80
+    this.chart = null
81
+  },
82
+  watch: {
83
+    
84
+    "options":function(){
85
+      this.chartOptions = this.options;
86
+      this.initChart()
87
+      this.__resizeHanlder = debounce(() => {
88
+        if (this.chart) {
89
+          this.chart.resize() 
90
+        }
91
+      }, 100)
92
+      window.addEventListener('resize', this.__resizeHanlder)
93
+    },
94
+    
95
+
96
+    chartData: {
97
+      deep: true,
98
+      handler(val) {
99
+        this.setOptions(val)
100
+      }
101
+    }
102
+  },
103
+  created(){
104
+    this.chartOptions = this.options;
105
+    console.log("this.chartOptions", this.chartOptions, this.options);
106
+  },
107
+  methods: {
108
+    setOptions({ expectedData, actualData } = {}) {
109
+      this.chart.setOption({
110
+        title: {
111
+            text: this.title,
112
+        },
113
+        xAxis: {
114
+          data: this.chartOptions.xAxis,
115
+          boundaryGap: false,
116
+          axisTick: {
117
+            show: false
118
+          }
119
+        },
120
+        grid: {
121
+          left: 50,
122
+          right: 50,
123
+          bottom: 20,
124
+          top: 30,
125
+          containLabel: true
126
+        },
127
+        tooltip: {
128
+          trigger: 'axis',
129
+          axisPointer: {
130
+            type: 'cross'
131
+          },
132
+          padding: [5, 10]
133
+        },
134
+        yAxis: {
135
+          axisTick: {
136
+            show: false
137
+          }
138
+        },
139
+        legend: {
140
+          data: this.chartOptions.legend,
141
+        },
142
+        series: this.chartOptions.series,
143
+      })
144
+    },
145
+    initChart() {
146
+      this.chart = echarts.init(this.$el, 'macarons')
147
+      this.chart.clear();
148
+      this.setOptions(this.chartData)
149
+    }
150
+  }
151
+}
152
+</script>

+ 55 - 119
src/xt_pages/qcd/dialysisTotal.vue 查看文件

@@ -75,8 +75,7 @@
75 75
         </el-select>
76 76
       </div>
77 77
 
78
-      <h4 class="hui">统计图</h4>
79
-      <hr class="huixiao">
78
+      <div class="cqd-dataTitle">统计图</div>
80 79
       <el-row :gutter="32">
81 80
         <el-col :xs="24" :sm="24" :lg="24">
82 81
           <div class="chart-wrapper">
@@ -84,128 +83,33 @@
84 83
           </div>
85 84
         </el-col>
86 85
       </el-row>
87
-
88
-      <h4 class="hui">统计表</h4>
89
-      <hr class="huixiao">
86
+      <div style="height:20px">&nbsp;</div>
87
+      <div class="cqd-dataTitle">统计表</div>
90 88
       <el-table
91 89
         ref="multipleTable"
92 90
         :data="tableData"
91
+        id="qcddt"
93 92
         border
94 93
         fit
95 94
         highlight-current-row
96 95
         style="width: 100%;margin-top: 10px;"
97 96
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
98 97
       >
99
-        <el-table-column label="日期" min-width="80" property="date" align="center"></el-table-column>
100
-        <el-table-column
101
-          :label="modeOptions[1].name"
102
-          v-if="listQuery.mode_id==1||listQuery.mode_id==''"
103
-          property="data[1].number"
104
-          align="center"
105
-        ></el-table-column>
106
-        <el-table-column
107
-          :label="modeOptions[2].name"
108
-          v-if="listQuery.mode_id==2||listQuery.mode_id==''"
109
-          property="data[2].number"
110
-          align="center"
111
-        ></el-table-column>
112
-        <el-table-column
113
-          :label="modeOptions[3].name"
114
-          v-if="listQuery.mode_id==3||listQuery.mode_id==''"
115
-          property="data[3].number"
116
-          align="center"
117
-        ></el-table-column>
118
-        <el-table-column
119
-          :label="modeOptions[4].name"
120
-          v-if="listQuery.mode_id==4||listQuery.mode_id==''"
121
-          property="data[4].number"
122
-          align="center"
123
-        ></el-table-column>
124
-        <el-table-column
125
-          :label="modeOptions[5].name"
126
-          v-if="listQuery.mode_id==5||listQuery.mode_id==''"
127
-          property="data[5].number"
128
-          align="center"
129
-        ></el-table-column>
130
-        <el-table-column
131
-          :label="modeOptions[6].name"
132
-          v-if="listQuery.mode_id==6||listQuery.mode_id==''"
133
-          property="data[6].number"
134
-          align="center"
135
-        ></el-table-column>
136
-        <el-table-column
137
-          :label="modeOptions[7].name"
138
-          v-if="listQuery.mode_id==7||listQuery.mode_id==''"
139
-          property="data[7].number"
140
-          align="center"
141
-        ></el-table-column>
142
-        <el-table-column
143
-          :label="modeOptions[8].name"
144
-          v-if="listQuery.mode_id==8||listQuery.mode_id==''"
145
-          property="data[8].number"
146
-          align="center"
147
-        ></el-table-column>
148
-        <el-table-column
149
-          :label="modeOptions[9].name"
150
-          v-if="listQuery.mode_id==9||listQuery.mode_id==''"
151
-          property="data[9].number"
152
-          align="center"
153
-        ></el-table-column>
154
-        <el-table-column
155
-          :label="modeOptions[10].name"
156
-          v-if="listQuery.mode_id==10||listQuery.mode_id==''"
157
-          property="data[10].number"
158
-          align="center"
159
-        ></el-table-column>
98
+        <el-table-column fixed label="日期" width="100" property="date" align="center"></el-table-column>
160 99
         <el-table-column
161
-          :label="modeOptions[11].name"
162
-          v-if="listQuery.mode_id==11||listQuery.mode_id==''"
163
-          property="data[11].number"
100
+          :label="modeItem.name"
101
+          property="number"
164 102
           align="center"
165
-        ></el-table-column>
166
-        <el-table-column
167
-          :label="modeOptions[12].name"
168
-          v-if="listQuery.mode_id==12||listQuery.mode_id==''"
169
-          property="data[12].number"
170
-          align="center"
171
-        ></el-table-column>
172
-        <el-table-column
173
-          :label="modeOptions[13].name"
174
-          v-if="listQuery.mode_id==13||listQuery.mode_id==''"
175
-          property="data[13].number"
176
-          align="center"
177
-        ></el-table-column>
178
-        <el-table-column
179
-          :label="modeOptions[14].name"
180
-          v-if="listQuery.mode_id==14||listQuery.mode_id==''"
181
-          property="data[14].number"
182
-          align="center"
183
-        ></el-table-column>
184
-        <el-table-column
185
-          :label="modeOptions[15].name"
186
-          v-if="listQuery.mode_id==15||listQuery.mode_id==''"
187
-          property="data[15].number"
188
-          align="center"
189
-        ></el-table-column>
190
-        <el-table-column
191
-          :label="modeOptions[16].name"
192
-          v-if="listQuery.mode_id==16||listQuery.mode_id==''"
193
-          property="data[16].number"
194
-          align="center"
195
-        ></el-table-column>
196
-        <el-table-column
197
-          :label="modeOptions[17].name"
198
-          v-if="listQuery.mode_id==17||listQuery.mode_id==''"
199
-          property="data[17].number"
200
-          align="center"
201
-        ></el-table-column>
202
-        <el-table-column
203
-          :label="modeOptions[18].name"
204
-          v-if="listQuery.mode_id==18||listQuery.mode_id==''"
205
-          property="data[18].number"
206
-          align="center"
207
-        ></el-table-column>
208
-        <el-table-column label="总数" min-width="80" property="total" align="center"></el-table-column>
103
+          min-width="100" 
104
+          v-for="(modeItem, index) in activeModes"
105
+          :key="index"
106
+        >
107
+          <template slot-scope="scope">
108
+            {{scope.row.data[modeItem.id].number?scope.row.data[modeItem.id].number:''}}
109
+          </template>
110
+        </el-table-column>
111
+
112
+        <el-table-column fixed='right' label="总数" width="80" property="total" align="center"></el-table-column>
209 113
       </el-table>
210 114
 
211 115
       <!-- <pagi-nation title="分页"></pagi-nation> -->
@@ -322,7 +226,12 @@ export default {
322 226
             for (const mkey in this.modeOptions) {
323 227
               if (mkey in dd[key]) {
324 228
                 dd[key][mkey].mode = this.modeOptions[mkey].name;
325
-                total += parseInt(dd[key][mkey].number);
229
+                var number = parseInt(dd[key][mkey].number);
230
+                if (isNaN(number) || number==0) {
231
+                  dd[key][mkey].number = ''
232
+                  number = 0;
233
+                }
234
+                total += number;
326 235
               } else {
327 236
                 dd[key][mkey] = {
328 237
                   mode: this.modeOptions[mkey].name,
@@ -394,6 +303,17 @@ export default {
394 303
       this.getList();
395 304
     }
396 305
   },
306
+  computed:{
307
+    activeModes:function(){
308
+      var modes = [];
309
+      for (const key in this.modeOptions) {
310
+        if(this.listQuery.mode_id == key || this.listQuery.mode_id=='') {
311
+          modes.push(this.modeOptions[key]);
312
+        }
313
+      }
314
+      return modes;
315
+    }
316
+  },
397 317
   components: {
398 318
     BarChart,
399 319
     BreadCrumb
@@ -401,6 +321,11 @@ export default {
401 321
 };
402 322
 </script>
403 323
 
324
+<style>
325
+#qcddt ::-webkit-scrollbar {
326
+  height: 15px;
327
+}
328
+</style>
404 329
 <style rel="stylesheet/scss" lang="scss" scoped>
405 330
 .app-container {
406 331
 //   margin: 20px;
@@ -408,12 +333,23 @@ export default {
408 333
   .filter-container {
409 334
     padding-bottom: 5px;
410 335
   }
411
-  .hui {
412
-    color: #909399;
413
-    margin-bottom: 5px;
336
+  .cqd-dataTitle{
337
+    color: #303133;
338
+    font-size: 14px;
339
+    border-bottom: 2px #E4E7ED solid;
340
+    height: 36px;
341
+    line-height: 36px;
342
+    margin: 0 0 25px 0;
343
+    position: relative;
414 344
   }
415
-  .huixiao {
416
-    border: solid 1px #ebeef5;
345
+  .cqd-dataTitle::before {
346
+      position: absolute;
347
+      left: 0;
348
+      bottom: -2px;
349
+      content: "";
350
+      width: 42px;
351
+      height: 2px;
352
+      background: #409eff;
417 353
   }
418 354
   .search-component {
419 355
     width: 500px;

+ 31 - 10
src/xt_pages/qcd/outcomeIndicators/control.vue 查看文件

@@ -88,8 +88,7 @@
88 88
         </el-select>
89 89
       </div>
90 90
 
91
-      <h4 class="hui">统计图</h4>
92
-      <hr class="huixiao">
91
+      <div class="cqd-dataTitle">统计图</div>
93 92
       <el-row :gutter="32">
94 93
         <el-col :xs="24" :sm="24" :lg="24">
95 94
           <div class="chart-wrapper">
@@ -98,8 +97,8 @@
98 97
         </el-col>
99 98
       </el-row>
100 99
 
101
-      <h4 class="hui">统计表</h4>
102
-      <hr class="huixiao">
100
+      <div style="height:20px">&nbsp;</div>
101
+      <div class="cqd-dataTitle">统计表</div>
103 102
       <el-table
104 103
         ref="multipleTable"
105 104
         :data="tableData"
@@ -121,7 +120,7 @@
121 120
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
122 121
         </el-table-column>
123 122
         
124
-        <el-table-column :label="reference.item_name+'//'+reference.unit" min-width="120" align="center" v-if="showTableColumn(reference)" v-for="(reference, index) in references" :key="index"  :render-header="renderheader">
123
+        <el-table-column :label="reference.item_name+'//'+reference.unit" min-width="210" align="center" v-for="(reference, index) in activeReferences" :key="index"  :render-header="renderheader">
125 124
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
126 125
         </el-table-column>
127 126
       </el-table>
@@ -368,6 +367,17 @@ export default {
368 367
 
369 368
     }
370 369
   },
370
+  computed:{
371
+    activeReferences:function(){
372
+      var references = [];
373
+      for (const index in this.references) {
374
+        if (this.listQuery.project_id == '' || (this.listQuery.item_id == '' && this.references[index].project_id == this.listQuery.project_id) || this.references[index].id == this.listQuery.item_id) {
375
+          references.push(this.references[index]);
376
+        }
377
+      }
378
+      return references;
379
+    }
380
+  },
371 381
   components: {
372 382
     PieChart,
373 383
     BreadCrumb
@@ -388,12 +398,23 @@ export default {
388 398
   .filter-container {
389 399
     padding-bottom: 5px;
390 400
   }
391
-  .hui {
392
-    color: #909399;
393
-    margin-bottom: 5px;
401
+  .cqd-dataTitle{
402
+    color: #303133;
403
+    font-size: 14px;
404
+    border-bottom: 2px #E4E7ED solid;
405
+    height: 36px;
406
+    line-height: 36px;
407
+    margin: 0 0 25px 0;
408
+    position: relative;
394 409
   }
395
-  .huixiao {
396
-    border: solid 1px #ebeef5;
410
+  .cqd-dataTitle::before {
411
+      position: absolute;
412
+      left: 0;
413
+      bottom: -2px;
414
+      content: "";
415
+      width: 42px;
416
+      height: 2px;
417
+      background: #409eff;
397 418
   }
398 419
   .search-component {
399 420
     width: 500px;

+ 29 - 8
src/xt_pages/qcd/outcomeIndicators/query.vue 查看文件

@@ -59,8 +59,7 @@
59 59
         </el-select>
60 60
       </div>
61 61
 
62
-      <h4 class="hui">统计表</h4>
63
-      <hr class="huixiao">
62
+      <div class="cqd-dataTitle">统计表</div>
64 63
       <el-table
65 64
         ref="multipleTable"
66 65
         :data="tableData"
@@ -86,7 +85,7 @@
86 85
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
87 86
         </el-table-column>
88 87
         
89
-        <el-table-column :label="reference.item_name+'//'+reference.unit" min-width="120" align="center" v-if="showTableColumn(reference)" v-for="(reference, index) in references" :key="index"  :render-header="renderheader">
88
+        <el-table-column :label="reference.item_name+'//'+reference.unit" min-width="210" align="center"  v-for="(reference, index) in activeReferences" :key="index"  :render-header="renderheader">
90 89
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
91 90
         </el-table-column>
92 91
       </el-table>
@@ -293,6 +292,17 @@ export default {
293 292
 
294 293
     }
295 294
   },
295
+  computed:{
296
+    activeReferences:function(){
297
+      var references = [];
298
+      for (const index in this.references) {
299
+        if (this.listQuery.project_id == '' || (this.references[index].project_id == this.listQuery.project_id && (this.listQuery.project_id!=1 || this.references[index].id in this.routineBloodShowItem) )) {
300
+          references.push(this.references[index]);
301
+        }
302
+      }
303
+      return references;
304
+    }
305
+  },
296 306
   components: {
297 307
     BreadCrumb
298 308
   }
@@ -315,12 +325,23 @@ export default {
315 325
   .filter-container {
316 326
     padding-bottom: 5px;
317 327
   }
318
-  .hui {
319
-    color: #909399;
320
-    margin-bottom: 5px;
328
+  .cqd-dataTitle{
329
+    color: #303133;
330
+    font-size: 14px;
331
+    border-bottom: 2px #E4E7ED solid;
332
+    height: 36px;
333
+    line-height: 36px;
334
+    margin: 0 0 25px 0;
335
+    position: relative;
321 336
   }
322
-  .huixiao {
323
-    border: solid 1px #ebeef5;
337
+  .cqd-dataTitle::before {
338
+      position: absolute;
339
+      left: 0;
340
+      bottom: -2px;
341
+      content: "";
342
+      width: 42px;
343
+      height: 2px;
344
+      background: #409eff;
324 345
   }
325 346
   .search-component {
326 347
     width: 500px;

+ 20 - 11
src/xt_pages/qcd/patientAnalysis/bloodPressure.vue 查看文件

@@ -69,18 +69,17 @@
69 69
       </div>
70 70
 
71 71
 
72
-      <h4 class="hui">统计图</h4>
73
-      <hr class="huixiao">
72
+      <div class="cqd-dataTitle">统计图</div>
74 73
       <el-row :gutter="32">
75 74
         <el-col :xs="24" :sm="24" :lg="24">
76 75
           <div class="chart-wrapper">
77
-              <pie-chart title="血压(次)" :options="CompletionOptions"/>
76
+              <pie-chart title="血压(次)" :options="CompletionOptions"/>
78 77
           </div>
79 78
         </el-col>
80 79
       </el-row>
81 80
 
82
-      <h4 class="hui">统计表</h4>
83
-      <hr class="huixiao">
81
+      <div style="height:20px">&nbsp;</div>
82
+      <div class="cqd-dataTitle">统计表</div>
84 83
       <el-table
85 84
         ref="multipleTable"
86 85
         :data="tableData"
@@ -91,7 +90,6 @@
91 90
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
92 91
       >
93 92
         
94
-        
95 93
         <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
96 94
           <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
97 95
         </el-table-column>
@@ -412,12 +410,23 @@ export default {
412 410
   .filter-container {
413 411
     padding-bottom: 5px;
414 412
   }
415
-  .hui {
416
-    color: #909399;
417
-    margin-bottom: 5px;
413
+  .cqd-dataTitle{
414
+    color: #303133;
415
+    font-size: 14px;
416
+    border-bottom: 2px #E4E7ED solid;
417
+    height: 36px;
418
+    line-height: 36px;
419
+    margin: 0 0 25px 0;
420
+    position: relative;
418 421
   }
419
-  .huixiao {
420
-    border: solid 1px #ebeef5;
422
+  .cqd-dataTitle::before {
423
+      position: absolute;
424
+      left: 0;
425
+      bottom: -2px;
426
+      content: "";
427
+      width: 42px;
428
+      height: 2px;
429
+      background: #409eff;
421 430
   }
422 431
   .search-component {
423 432
     width: 500px;

+ 19 - 11
src/xt_pages/qcd/patientAnalysis/complication.vue 查看文件

@@ -67,9 +67,7 @@
67 67
         </div>
68 68
       </div>
69 69
 
70
-
71
-      <h4 class="hui">统计图</h4>
72
-      <hr class="huixiao">
70
+      <div class="cqd-dataTitle">统计图</div>
73 71
       <el-row :gutter="32">
74 72
         <el-col :xs="24" :sm="24" :lg="24">
75 73
           <div class="chart-wrapper">
@@ -78,9 +76,8 @@
78 76
           </div>
79 77
         </el-col>
80 78
       </el-row>
81
-
82
-      <h4 class="hui">统计表</h4>
83
-      <hr class="huixiao">
79
+      <div style="height:20px">&nbsp;</div>
80
+      <div class="cqd-dataTitle">统计表</div>
84 81
       <el-table
85 82
         ref="multipleTable"
86 83
         :data="tableData"
@@ -346,12 +343,23 @@ export default {
346 343
   .filter-container {
347 344
     padding-bottom: 5px;
348 345
   }
349
-  .hui {
350
-    color: #909399;
351
-    margin-bottom: 5px;
346
+  .cqd-dataTitle{
347
+    color: #303133;
348
+    font-size: 14px;
349
+    border-bottom: 2px #E4E7ED solid;
350
+    height: 36px;
351
+    line-height: 36px;
352
+    margin: 0 0 25px 0;
353
+    position: relative;
352 354
   }
353
-  .huixiao {
354
-    border: solid 1px #ebeef5;
355
+  .cqd-dataTitle::before {
356
+      position: absolute;
357
+      left: 0;
358
+      bottom: -2px;
359
+      content: "";
360
+      width: 42px;
361
+      height: 2px;
362
+      background: #409eff;
355 363
   }
356 364
   .search-component {
357 365
     width: 500px;

+ 19 - 10
src/xt_pages/qcd/patientAnalysis/dialysisAge.vue 查看文件

@@ -82,9 +82,7 @@
82 82
         </div>
83 83
       </div>
84 84
 
85
-
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
85
+      <div class="cqd-dataTitle">统计图</div>
88 86
       <el-row :gutter="32">
89 87
         <el-col :xs="24" :sm="24" :lg="24">
90 88
           <div class="chart-wrapper">
@@ -93,8 +91,8 @@
93 91
         </el-col>
94 92
       </el-row>
95 93
 
96
-      <h4 class="hui">统计表</h4>
97
-      <hr class="huixiao">
94
+      <div style="height:20px">&nbsp;</div>
95
+      <div class="cqd-dataTitle">统计表</div>
98 96
       <el-table
99 97
         ref="multipleTable"
100 98
         :data="tableData"
@@ -376,12 +374,23 @@ export default {
376 374
   .filter-container {
377 375
     padding-bottom: 5px;
378 376
   }
379
-  .hui {
380
-    color: #909399;
381
-    margin-bottom: 5px;
377
+  .cqd-dataTitle{
378
+    color: #303133;
379
+    font-size: 14px;
380
+    border-bottom: 2px #E4E7ED solid;
381
+    height: 36px;
382
+    line-height: 36px;
383
+    margin: 0 0 25px 0;
384
+    position: relative;
382 385
   }
383
-  .huixiao {
384
-    border: solid 1px #ebeef5;
386
+  .cqd-dataTitle::before {
387
+      position: absolute;
388
+      left: 0;
389
+      bottom: -2px;
390
+      content: "";
391
+      width: 42px;
392
+      height: 2px;
393
+      background: #409eff;
385 394
   }
386 395
   .search-component {
387 396
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/patientAnalysis/infectiousDiseases.vue 查看文件

@@ -83,8 +83,7 @@
83 83
         </div>
84 84
       </div>
85 85
 
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
86
+      <div class="cqd-dataTitle">统计图</div>
88 87
       <el-row :gutter="32">
89 88
         <el-col :xs="24" :sm="24" :lg="8">
90 89
           <div class="chart-wrapper">
@@ -104,8 +103,8 @@
104 103
         </el-col>
105 104
       </el-row>
106 105
 
107
-      <h4 class="hui">统计表</h4>
108
-      <hr class="huixiao">
106
+      <div style="height:20px">&nbsp;</div>
107
+      <div class="cqd-dataTitle">统计表</div>
109 108
       <el-table
110 109
         ref="multipleTable"
111 110
         :data="tableData"
@@ -405,12 +404,23 @@ export default {
405 404
   .filter-container {
406 405
     padding-bottom: 5px;
407 406
   }
408
-  .hui {
409
-    color: #909399;
410
-    margin-bottom: 5px;
407
+  .cqd-dataTitle{
408
+    color: #303133;
409
+    font-size: 14px;
410
+    border-bottom: 2px #E4E7ED solid;
411
+    height: 36px;
412
+    line-height: 36px;
413
+    margin: 0 0 25px 0;
414
+    position: relative;
411 415
   }
412
-  .huixiao {
413
-    border: solid 1px #ebeef5;
416
+  .cqd-dataTitle::before {
417
+      position: absolute;
418
+      left: 0;
419
+      bottom: -2px;
420
+      content: "";
421
+      width: 42px;
422
+      height: 2px;
423
+      background: #409eff;
414 424
   }
415 425
   .search-component {
416 426
     width: 500px;

+ 19 - 10
src/xt_pages/qcd/patientAnalysis/lapseto.vue 查看文件

@@ -82,9 +82,7 @@
82 82
         </div>
83 83
       </div>
84 84
 
85
-
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
85
+      <div class="cqd-dataTitle">统计图</div>
88 86
       <el-row :gutter="32">
89 87
         <el-col :xs="24" :sm="24" :lg="24">
90 88
           <div class="chart-wrapper">
@@ -93,8 +91,8 @@
93 91
         </el-col>
94 92
       </el-row>
95 93
 
96
-      <h4 class="hui">统计表</h4>
97
-      <hr class="huixiao">
94
+      <div style="height:20px">&nbsp;</div>
95
+      <div class="cqd-dataTitle">统计表</div>
98 96
       <el-table
99 97
         ref="multipleTable"
100 98
         :data="tableData"
@@ -368,12 +366,23 @@ export default {
368 366
   .filter-container {
369 367
     padding-bottom: 5px;
370 368
   }
371
-  .hui {
372
-    color: #909399;
373
-    margin-bottom: 5px;
369
+  .cqd-dataTitle{
370
+    color: #303133;
371
+    font-size: 14px;
372
+    border-bottom: 2px #E4E7ED solid;
373
+    height: 36px;
374
+    line-height: 36px;
375
+    margin: 0 0 25px 0;
376
+    position: relative;
374 377
   }
375
-  .huixiao {
376
-    border: solid 1px #ebeef5;
378
+  .cqd-dataTitle::before {
379
+      position: absolute;
380
+      left: 0;
381
+      bottom: -2px;
382
+      content: "";
383
+      width: 42px;
384
+      height: 2px;
385
+      background: #409eff;
377 386
   }
378 387
   .search-component {
379 388
     width: 500px;

+ 534 - 0
src/xt_pages/qcd/patientAnalysis/person/bloodPressure.vue 查看文件

@@ -0,0 +1,534 @@
1
+<template>
2
+ <div class="main-contain">
3
+    <div class="position">
4
+      <bread-crumb :crumbs='crumbs'></bread-crumb>
5
+    </div>
6
+    <div class="app-container" id="outcome-indicators-query">
7
+      <person-info :patient="patientInfo"></person-info>
8
+      <person-nav activeName="bloodpressure" :patientID="patientID"></person-nav>
9
+
10
+      
11
+      <div class="cell clearfix">
12
+        <label class="title">
13
+          <span class="name">日期查询</span> :
14
+        </label>
15
+        <el-date-picker
16
+          v-model="listQuery.start_time"
17
+          prefix-icon="el-icon-date"
18
+          @change="changeTime"
19
+          :editable="false"
20
+          style="width: 196px;"
21
+          type="date"
22
+          placeholder="选择日期时间"
23
+          align="right"
24
+          format="yyyy-MM-dd"
25
+          value-format="yyyy-MM-dd"
26
+        ></el-date-picker>
27
+        <span class>-</span>
28
+        <el-date-picker
29
+          v-model="listQuery.end_time"
30
+          prefix-icon="el-icon-date"
31
+          @change="changeTime"
32
+          :editable="false"
33
+          style="width: 196px;"
34
+          type="date"
35
+          placeholder="选择日期时间"
36
+          align="right"
37
+          format="yyyy-MM-dd"
38
+          value-format="yyyy-MM-dd"
39
+        ></el-date-picker>
40
+      </div>
41
+      
42
+      <div class="cell clearfix">
43
+        <label class="title">
44
+          <span class="name">曲线图</span> :
45
+        </label>
46
+        <div class="time">
47
+          <ul class>
48
+            <li
49
+              :class="item.value==diagramType?'active':''"
50
+              @click="selectDiagramType( item.value)"
51
+              v-for="item in diagramTypeOptions"
52
+              :key="item.value"
53
+            >{{item.label}}</li>
54
+          </ul>
55
+        </div>
56
+      </div>
57
+      
58
+      <div class="cqd-dataTitle">统计图</div>
59
+      <el-row :gutter="32">
60
+        <el-col :xs="24" :sm="24" :lg="24">
61
+          <div class="chart-wrapper">
62
+              <line-chart title="曲线图(mmHg)" :options="CompletionOptions" />
63
+          </div>
64
+        </el-col>
65
+      </el-row>
66
+
67
+      <div style="height:20px">&nbsp;</div>
68
+      <div class="cqd-dataTitle">统计表</div>
69
+      <el-table
70
+        ref="multipleTable"
71
+        :data="tableData"
72
+        border
73
+        fit
74
+        highlight-current-row
75
+        style="width: 100%;margin-top: 10px;"
76
+        :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
77
+      >
78
+        
79
+        <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
80
+          <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
81
+        </el-table-column>
82
+        <el-table-column  label="透前血压//mmHg" min-width="80" property="assessment_before_dislysis" align="center" :render-header="renderheader">
83
+          <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis&&scope.row.assessment_before_dislysis.systolic_blood_pressure&&scope.row.assessment_before_dislysis.diastolic_blood_pressure? scope.row.assessment_before_dislysis.systolic_blood_pressure +'/'+scope.row.assessment_before_dislysis.diastolic_blood_pressure:'--'}}</span></template>
84
+        </el-table-column>
85
+        <el-table-column  label="透析中最低血压//mmHg" min-width="80" property="monitor_records" align="center" :render-header="renderheader">
86
+          <template slot-scope="scope"><span>{{minBloodPressure(scope.row.monitor_records)}}</span></template>
87
+        </el-table-column>
88
+        <el-table-column  label="透析中最高血压//mmHg" min-width="80" property="monitor_records" align="center" :render-header="renderheader">
89
+          <template slot-scope="scope"><span>{{maxBloodPressure(scope.row.monitor_records)}}</span></template>
90
+        </el-table-column>
91
+        <el-table-column  label="透后血压//mmHg" min-width="80" property="assessment_after_dislysis" align="center" :render-header="renderheader">
92
+          <template slot-scope="scope"><span>{{scope.row.assessment_after_dislysis&&scope.row.assessment_after_dislysis.systolic_blood_pressure&&scope.row.assessment_after_dislysis.diastolic_blood_pressure? scope.row.assessment_after_dislysis.systolic_blood_pressure +'/'+scope.row.assessment_after_dislysis.diastolic_blood_pressure:'--'}}</span></template>
93
+        </el-table-column>
94
+        
95
+      </el-table>
96
+
97
+      <!-- <pagi-nation title="分页"></pagi-nation> -->
98
+
99
+      <el-pagination
100
+      align="right"
101
+        @size-change="handleSizeChange"
102
+        @current-change="handleCurrentChange"
103
+        :current-page="listQuery.pate"
104
+        :page-sizes="[10, 20, 50, 100]"
105
+        :page-size="10"
106
+        background
107
+        style="margin-top:20px;"
108
+        layout="total, sizes, prev, pager, next, jumper"
109
+        :total="total"
110
+      ></el-pagination>
111
+    </div>
112
+  </div>
113
+</template>
114
+
115
+
116
+<script>
117
+import { GetPersonBloodPressureData  } from "@/api/qcd";
118
+import {jsGetAge, uParseTime} from "@/utils/tools";
119
+import personNav from './components/personNav'
120
+import personInfo from './components/personInfo'
121
+import BreadCrumb from "@/xt_pages/components/bread-crumb";
122
+import LineChart from "../../components/LineChart";
123
+export default {
124
+  name: "totalAnalysis",
125
+  data() {
126
+    return {
127
+      crumbs:[
128
+        {path:false, name:'科室质控'},
129
+        {path:false, name:'患者分析'},
130
+        {path:false, name:'统计'},
131
+        {path:false, name:'血压'},
132
+      ],
133
+      total: 0,
134
+      patientMap:{},
135
+      listQuery: {
136
+        start_time: "",
137
+        end_time: "",
138
+        page: 1,
139
+        limit: 10,
140
+      },
141
+      CompletionOptions:{
142
+          xAxis:[],
143
+          legend:[],
144
+          series:[],
145
+      },
146
+      tableData: [],
147
+      pieData:[],
148
+      patientInfo:null,
149
+      patientID:0,
150
+      diagramType:1,
151
+      diagramTypeOptions: [
152
+        { value: 1, label: "透前血压",  },
153
+        { value: 2, label: "透析中最低血压", },
154
+        { value: 3, label: "透析中最高血压", },
155
+        { value: 4, label: "透后血压", },
156
+      ],
157
+    };
158
+  },
159
+  created() {
160
+    var patientID = this.$route.query && this.$route.query.id;
161
+    if(typeof(patientID) == 'undefined' || !patientID || patientID<=0) {
162
+      this.$message.error('参数错误,无法请求');
163
+      return false;
164
+    }
165
+    patientID = parseInt(patientID);
166
+    this.patientID = patientID;
167
+    this.listQuery.patient_id = patientID;
168
+
169
+    var nowDate = new Date();
170
+    var nowYear = nowDate.getFullYear();
171
+    var nowMonth = nowDate.getMonth() + 1;
172
+    var nowDay = nowDate.getDate();
173
+    this.listQuery.end_time =
174
+      nowYear +
175
+      "-" +
176
+      (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
177
+      "-" +
178
+      (nowDay < 10 ? "0" + nowDay : nowDay);
179
+    nowDate.setMonth(nowDate.getMonth() - 3);
180
+    nowYear = nowDate.getFullYear();
181
+    nowMonth = nowDate.getMonth() + 1;
182
+    nowDay = nowDate.getDate();
183
+    this.listQuery.start_time =
184
+      nowYear +
185
+      "-" +
186
+      (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
187
+      "-" +
188
+      (nowDay < 10 ? "0" + nowDay : nowDay);
189
+    
190
+    this.getList();
191
+  },
192
+  methods: {
193
+    getList() {
194
+      GetPersonBloodPressureData(this.listQuery).then(response => {
195
+        if (response.data.state == 0) {
196
+          this.$message.error(response.data.msg);
197
+          return false;
198
+        } else {
199
+            this.tableData = [];
200
+            this.total = response.data.data.total;
201
+            this.patientInfo = response.data.data.patient;
202
+            var bps = response.data.data.bps;
203
+            for (const index in bps) {
204
+                this.tableData.push(bps[index]);
205
+            }
206
+            var pieData = response.data.data.lines;
207
+            for (const index in pieData) {
208
+                this.pieData.push(pieData[index]);
209
+            }
210
+        }
211
+      });
212
+    },
213
+    changeTime() {
214
+      this.getList();
215
+    },
216
+    onSearch(){
217
+      this.getList();
218
+    },
219
+    changeModel() {
220
+      this.getList();
221
+    },
222
+    handleSizeChange(val) {
223
+      this.listQuery.limit = val;
224
+      this.getList();
225
+    },
226
+    handleCurrentChange(val) {
227
+      this.listQuery.page = val;
228
+      this.getList();
229
+    },
230
+    getTime(value, temp) {
231
+        if (value != undefined) {
232
+          return uParseTime(value, temp)
233
+        }
234
+        return ""
235
+    },
236
+    getProjectName(id) {
237
+      return (id in this.projectOptions) ? this.projectOptions[id].project_name:'';
238
+    },
239
+    getPatientName(id) {
240
+      return (id in this.patientMap) ? this.patientMap[id].name:'';
241
+    },
242
+    getPatientLapseto(lapseto) {
243
+      if(lapseto==1) {
244
+        return '留治';
245
+      }else if(lapseto == 2) {
246
+        return '转出';
247
+      }
248
+      return '--';
249
+    },
250
+    getPatientSource(srouce){
251
+      if(srouce==1) {
252
+        return '门诊';
253
+      }else if(srouce == 2) {
254
+        return '住院';
255
+      }
256
+      return '其他';
257
+    },
258
+    getPatientGender(gender) {
259
+      if (gender == 1) {
260
+        return '男';
261
+      } else if(gender == 2) {
262
+        return '女';
263
+      }
264
+      return '';
265
+    },
266
+    tranAge(birthday) {
267
+        var birth = uParseTime(birthday, '{y}-{m}-{d}');
268
+        return jsGetAge(birth, '-');
269
+    },
270
+    getPatientDialysisNo(id) {
271
+      return (id in this.patientMap) ? this.patientMap[id].dialysis_no:'';
272
+    },
273
+    getItemVulue(project_id, item_id, row) {
274
+        var key = project_id + '_' + item_id;
275
+        return (typeof(row.items) !== 'undefined' && (key in row.items)) ? row.items[key].inspect_value:'';
276
+    },
277
+    renderheader(h, { column, $index }) {
278
+        return h('span', {}, [
279
+            h('span', {}, column.label.split('//')[0]),
280
+            h('br'),
281
+            h('span', {}, column.label.split('//')[1])
282
+        ])
283
+    },
284
+    maxBloodPressure(records){
285
+      if (typeof(records) == "undefined" || !records || records.length == 0) {
286
+        return '--';
287
+      }
288
+      var arr = [];
289
+      for (const key in records) {
290
+        arr.push(records[key]);
291
+      }
292
+      if(arr.length == 0) {
293
+        return '--';
294
+      }
295
+
296
+      var sortData = this.selectionSort(arr);
297
+      arr = [];
298
+      for (const key in sortData) {
299
+        arr.push(sortData[key]);
300
+      }
301
+      var index = arr.length - 1;
302
+      return arr[index].systolic_blood_pressure + '/' + arr[index].diastolic_blood_pressure
303
+    },
304
+    maxLineBloodPressure(records){
305
+      if (typeof(records) == "undefined" || !records || records.length == 0) {
306
+        return [0, 0];
307
+      }
308
+      var arr = [];
309
+      for (const key in records) {
310
+        arr.push(records[key]);
311
+      }
312
+      if(arr.length == 0) {
313
+        return [0, 0];
314
+      }
315
+
316
+      var sortData = this.selectionSort(arr);
317
+      arr = [];
318
+      for (const key in sortData) {
319
+        arr.push(sortData[key]);
320
+      }
321
+      var index = arr.length - 1;
322
+      return [arr[index].systolic_blood_pressure,arr[index].diastolic_blood_pressure];
323
+    },
324
+    minLineBloodPressure(records){
325
+      if (typeof(records) == "undefined" || !records || records.length == 0) {
326
+        return [0, 0];
327
+      }
328
+      var arr = [];
329
+      for (const key in records) {
330
+        arr.push(records[key]);
331
+      }
332
+      if(arr.length == 0) {
333
+        return [0, 0];
334
+      }
335
+
336
+      var sortData = this.selectionSort(arr);
337
+      arr = [];
338
+      for (const key in sortData) {
339
+        arr.push(sortData[key]);
340
+      }
341
+      var index = 0;
342
+      return [arr[index].systolic_blood_pressure,arr[index].diastolic_blood_pressure];
343
+    },
344
+    minBloodPressure(records){
345
+      
346
+      if (typeof(records) == "undefined" || !records || records.length == 0) {
347
+        return '--';
348
+      }
349
+      var arr = [];
350
+      for (const key in records) {
351
+        arr.push(records[key]);
352
+      }
353
+      if(arr.length == 0) {
354
+        return '--';
355
+      }
356
+
357
+      var sortData = this.selectionSort(arr);
358
+      arr = [];
359
+      for (const key in sortData) {
360
+        arr.push(sortData[key]);
361
+      }
362
+      var index = 0;
363
+      return arr[index].systolic_blood_pressure + '/' + arr[index].diastolic_blood_pressure
364
+    },
365
+    selectionSort(arr) {
366
+      var len = arr.length;
367
+      var minIndex, temp;
368
+      for (var i = 0; i < len - 1; i++) {
369
+          minIndex = i;
370
+          for (var j = i + 1; j < len; j++) {
371
+              if (arr[j].systolic_blood_pressure < arr[minIndex].systolic_blood_pressure || (arr[j].systolic_blood_pressure == arr[minIndex].systolic_blood_pressure && arr[j].diastolic_blood_pressure < arr[minIndex].diastolic_blood_pressure)) {     //寻找最小的数
372
+                  minIndex = j;                 //将最小数的索引保存
373
+              }
374
+          }
375
+          temp = arr[i];
376
+          arr[i] = arr[minIndex];
377
+          arr[minIndex] = temp;
378
+      }
379
+      return arr;
380
+    },
381
+    selectDiagramType(type) {
382
+      this.diagramType = type;
383
+      this.listQuery.diagram_type = type;
384
+      // this.getList();
385
+    },
386
+    drawPie(){
387
+      this.CompletionOptions = {
388
+          xAxis:[],
389
+          legend:[],
390
+          series:[],
391
+      };
392
+
393
+
394
+      if(this.diagramType < 1 || this.diagramType >4) {
395
+        return false;
396
+      }
397
+
398
+      this.CompletionOptions.legend = ['收缩压', '舒张压'];
399
+      this.CompletionOptions.series = [
400
+        { name:'收缩压', type:'line', data:[] },
401
+        { name:'舒张压', type:'line', data:[] },
402
+      ];
403
+
404
+
405
+      for (const index in this.pieData) {
406
+        var dateDay = uParseTime(this.pieData[index].schedule_date, '{y}-{m}-{d}');
407
+        this.CompletionOptions.xAxis.push(dateDay);
408
+        if (this.diagramType == 1) {
409
+          if (this.pieData[index].assessment_before_dislysis) {
410
+            this.CompletionOptions.series[0].data.push(this.pieData[index].assessment_before_dislysis.systolic_blood_pressure);
411
+            this.CompletionOptions.series[1].data.push(this.pieData[index].assessment_before_dislysis.diastolic_blood_pressure);
412
+          } else {
413
+            this.CompletionOptions.series[0].data.push(0);
414
+            this.CompletionOptions.series[1].data.push(0);
415
+          }
416
+        } else if (this.diagramType == 2){
417
+          var item = this.minLineBloodPressure(this.pieData[index].monitor_records);
418
+          this.CompletionOptions.series[0].data.push(item[0]);
419
+          this.CompletionOptions.series[1].data.push(item[1]);
420
+          
421
+        }else if (this.diagramType == 3){
422
+          var item = this.maxLineBloodPressure(this.pieData[index].monitor_records);
423
+          this.CompletionOptions.series[0].data.push(item[0]);
424
+          this.CompletionOptions.series[1].data.push(item[1]);
425
+          
426
+        }else{
427
+          if (this.pieData[index].assessment_after_dislysis) {
428
+            this.CompletionOptions.series[0].data.push(this.pieData[index].assessment_after_dislysis.systolic_blood_pressure);
429
+            this.CompletionOptions.series[1].data.push(this.pieData[index].assessment_after_dislysis.diastolic_blood_pressure);
430
+          } else {
431
+            this.CompletionOptions.series[0].data.push(0);
432
+            this.CompletionOptions.series[1].data.push(0);
433
+          }
434
+        }
435
+      }
436
+    },
437
+  },
438
+  components: {
439
+      personNav,
440
+      BreadCrumb,
441
+      personInfo,
442
+      LineChart
443
+  },
444
+  watch:{
445
+    "diagramType":function(){
446
+      this.drawPie();
447
+    },
448
+    "pieData":function (){
449
+      this.drawPie();
450
+    },
451
+  }
452
+};
453
+</script>
454
+<style>
455
+#oictable ::-webkit-scrollbar {
456
+  height: 15px;
457
+}
458
+#outcome-indicators-query .el-form-item {
459
+    margin-bottom: 0px !important;
460
+}
461
+</style>
462
+
463
+
464
+<style rel="stylesheet/scss" lang="scss" scoped>
465
+.app-container {
466
+//   margin: 20px;
467
+  font-size: 15px;
468
+  .filter-container {
469
+    padding-bottom: 5px;
470
+  }
471
+  .cqd-dataTitle{
472
+    color: #303133;
473
+    font-size: 14px;
474
+    border-bottom: 2px #E4E7ED solid;
475
+    height: 36px;
476
+    line-height: 36px;
477
+    margin: 0 0 25px 0;
478
+    position: relative;
479
+  }
480
+  .cqd-dataTitle::before {
481
+      position: absolute;
482
+      left: 0;
483
+      bottom: -2px;
484
+      content: "";
485
+      width: 42px;
486
+      height: 2px;
487
+      background: #409eff;
488
+  }
489
+  .search-component {
490
+    width: 500px;
491
+    .searchBox {
492
+      width: 300px;
493
+      height: 36px;
494
+      line-height: 36px;
495
+      padding-left: 15px;
496
+      border: 1px #dcdfe6 solid;
497
+      border-right: none;
498
+      outline: none;
499
+      float: left;
500
+      border-radius: 6px 0 0 6px;
501
+      font-size: 14px;
502
+      color: #333;
503
+      background: #fff;
504
+      box-shadow: 3px 3px 4px rgba(135, 135, 135, 0.05);
505
+    }
506
+    .searchBtn {
507
+      background-color: #409eff;
508
+      color: #fff;
509
+      font-size: 15px;
510
+      text-align: center;
511
+      height: 36px;
512
+      line-height: 36px;
513
+      float: left;
514
+      outline: none;
515
+      width: 70px;
516
+      border: none;
517
+      border-radius: 0 6px 6px 0;
518
+      font-family: "Microsoft Yahei";
519
+      cursor: pointer;
520
+    }
521
+  }
522
+  .amount {
523
+    font-weight: normal;
524
+    padding: 10px 0 0 0;
525
+    color: #606266;
526
+    font-size: 14px;
527
+    span {
528
+      color: #ef2525;
529
+      font-family: "Arial";
530
+      padding: 0 2px;
531
+    }
532
+  }
533
+}
534
+</style>

+ 14 - 3
src/xt_pages/qcd/patientAnalysis/person/components/personNav.vue 查看文件

@@ -1,6 +1,9 @@
1 1
 <template>
2 2
     <el-tabs v-model="tabActiveName" @tab-click="handleTabClick">
3 3
         <el-tab-pane label="转归" name="lapseto"></el-tab-pane>
4
+        <el-tab-pane label="体重" name="weight"></el-tab-pane>
5
+        <el-tab-pane label="血压" name="bloodpressure"></el-tab-pane>
6
+        <el-tab-pane label="指标控制" name="indicators"></el-tab-pane>
4 7
     </el-tabs>
5 8
 </template>
6 9
 <script>
@@ -9,16 +12,24 @@ export default {
9 12
         activeName:{
10 13
             type:String,
11 14
             default: 'total'
12
-        }
15
+        },
16
+        patientID:{
17
+            type:Number,
18
+            default:0,
19
+        },
13 20
     },
14 21
     data(){
15 22
         return{
16
-            tabActiveName:'total',
23
+            tabActiveName:'lapseto',
17 24
         }
18 25
     }, 
19 26
     methods:{
20 27
         handleTabClick(tab, event) {
21
-            this.$router.push({ path: "/qcd/patientanalysis/"+this.tabActiveName });
28
+            if(typeof(this.patientID) == "undefined" || !this.patientID || this.patientID <=0) {
29
+                this.$message.error('参数错误,无法请求');
30
+                return false;
31
+            }
32
+            this.$router.push({ path: "/qcd/pa/person/"+this.tabActiveName +'?id='+this.patientID });
22 33
         }
23 34
     },
24 35
     created(){

+ 313 - 0
src/xt_pages/qcd/patientAnalysis/person/indicators.vue 查看文件

@@ -0,0 +1,313 @@
1
+<template>
2
+ <div class="main-contain">
3
+    <div class="position">
4
+      <bread-crumb :crumbs='crumbs'></bread-crumb>
5
+    </div>
6
+    <div class="app-container" id="outcome-indicators-query">
7
+      <person-info :patient="patientInfo"></person-info>
8
+      <person-nav activeName="indicators" :patientID="patientID"></person-nav>
9
+
10
+      <div class="cqd-dataTitle">统计表</div>
11
+      <el-table
12
+        ref="multipleTable"
13
+        :data="tableData"
14
+        id="personictable"
15
+        border
16
+        fit
17
+        highlight-current-row
18
+        style="width: 100%;margin-top: 10px;"
19
+        :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
20
+      >
21
+        
22
+        <el-table-column fixed label="检查日期" width="100" property="inspect_date" align="center">
23
+          <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
24
+        </el-table-column>
25
+        
26
+        <el-table-column :label="reference.item_name+'//'+reference.unit" min-width="120" align="center"  v-for="(reference, index) in activeReferences" :key="index"  :render-header="renderheader">
27
+          <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
28
+        </el-table-column>
29
+        
30
+      </el-table>
31
+
32
+      <!-- <pagi-nation title="分页"></pagi-nation> -->
33
+
34
+      <el-pagination
35
+      align="right"
36
+        @size-change="handleSizeChange"
37
+        @current-change="handleCurrentChange"
38
+        :current-page="listQuery.pate"
39
+        :page-sizes="[10, 20, 50, 100]"
40
+        :page-size="10"
41
+        background
42
+        style="margin-top:20px;"
43
+        layout="total, sizes, prev, pager, next, jumper"
44
+        :total="total"
45
+      ></el-pagination>
46
+    </div>
47
+  </div>
48
+</template>
49
+
50
+
51
+<script>
52
+import { GetPersonICData  } from "@/api/qcd";
53
+import {jsGetAge, uParseTime} from "@/utils/tools";
54
+import personNav from './components/personNav'
55
+import personInfo from './components/personInfo'
56
+import BreadCrumb from "@/xt_pages/components/bread-crumb";
57
+export default {
58
+  name: "totalAnalysis",
59
+  data() {
60
+    return {
61
+      crumbs:[
62
+        {path:false, name:'科室质控'},
63
+        {path:false, name:'患者分析'},
64
+        {path:false, name:'统计'},
65
+        {path:false, name:'指标控制'},
66
+      ],
67
+      total: 0,
68
+      patientMap:{},
69
+      listQuery: {
70
+        page: 1,
71
+        limit: 10,
72
+      },
73
+      CompletionOptions:{
74
+        legend:[],
75
+        series:[],
76
+      },
77
+      tableData: [],
78
+      patientInfo:null,
79
+      patientID:0,
80
+      references:[],
81
+      projectOptions:{},
82
+    };
83
+  },
84
+  created() {
85
+    var patientID = this.$route.query && this.$route.query.id
86
+    console.log(this.patientID);
87
+    if(typeof(patientID) == 'undefined' || !patientID || patientID<=0) {
88
+      this.$message.error('参数错误,无法请求');
89
+      return false;
90
+    }
91
+    patientID = parseInt(patientID);
92
+    this.patientID = patientID;
93
+    this.listQuery.patient_id = patientID;
94
+    // if (this.patientID==0)
95
+    this.getList();
96
+  },
97
+  methods: {
98
+    getList() {
99
+      GetPersonICData(this.listQuery).then(response => {
100
+        if (response.data.state == 0) {
101
+          this.$message.error(response.data.msg);
102
+          return false;
103
+        } else {
104
+            this.tableData = [];
105
+            this.total = response.data.data.total;
106
+            this.patientInfo = response.data.data.patient;
107
+            
108
+            var references = response.data.data.references;
109
+            this.references = response.data.data.references;
110
+
111
+            
112
+            this.projectOptions = {};
113
+            for (const index in references) {
114
+              if (!(references[index].project_id in this.projectOptions)) {
115
+                this.$set(this.projectOptions, references[index].project_id, {project_id:references[index].project_id, project_name:references[index].project_name}); 
116
+              }
117
+              if (!('children' in this.projectOptions[references[index].project_id])) {
118
+                  this.projectOptions[references[index].project_id]['children'] = [];
119
+              }
120
+              this.projectOptions[references[index].project_id]['children'].push(references[index]);
121
+            }
122
+            var temInspections = {};
123
+            var inspections = response.data.data.inspections;
124
+            
125
+            for (const index in inspections) {
126
+              var key = inspections[index].inspect_date + '_' + inspections[index].patient_id;
127
+              if (!(key in temInspections)) {
128
+                temInspections[key] = {patient_id:inspections[index].patient_id, inspect_date:inspections[index].inspect_date, items:{}};
129
+              }
130
+              var itemKey = inspections[index].project_id + '_' + inspections[index].item_id;
131
+              
132
+              temInspections[key].items[itemKey] = inspections[index];
133
+            }
134
+            for (const key in temInspections) {
135
+                this.tableData.push(temInspections[key]);
136
+            }
137
+
138
+          
139
+        }
140
+      });
141
+    },
142
+    changeTime() {
143
+      this.getList();
144
+    },
145
+    onSearch(){
146
+      this.getList();
147
+    },
148
+    changeModel() {
149
+      this.getList();
150
+    },
151
+    handleSizeChange(val) {
152
+      this.listQuery.limit = val;
153
+      this.getList();
154
+    },
155
+    handleCurrentChange(val) {
156
+      this.listQuery.page = val;
157
+      this.getList();
158
+    },
159
+    getTime(value, temp) {
160
+        if (value != undefined) {
161
+          return uParseTime(value, temp)
162
+        }
163
+        return ""
164
+    },
165
+    getProjectName(id) {
166
+      return (id in this.projectOptions) ? this.projectOptions[id].project_name:'';
167
+    },
168
+    getPatientName(id) {
169
+      return (id in this.patientMap) ? this.patientMap[id].name:'';
170
+    },
171
+    getPatientLapseto(lapseto) {
172
+      if(lapseto==1) {
173
+        return '留治';
174
+      }else if(lapseto == 2) {
175
+        return '转出';
176
+      }
177
+      return '--';
178
+    },
179
+    getPatientSource(srouce){
180
+      if(srouce==1) {
181
+        return '门诊';
182
+      }else if(srouce == 2) {
183
+        return '住院';
184
+      }
185
+      return '其他';
186
+    },
187
+    getPatientGender(gender) {
188
+      if (gender == 1) {
189
+        return '男';
190
+      } else if(gender == 2) {
191
+        return '女';
192
+      }
193
+      return '';
194
+    },
195
+    tranAge(birthday) {
196
+        var birth = uParseTime(birthday, '{y}-{m}-{d}');
197
+        return jsGetAge(birth, '-');
198
+    },
199
+    getPatientDialysisNo(id) {
200
+      return (id in this.patientMap) ? this.patientMap[id].dialysis_no:'';
201
+    },
202
+    getItemVulue(project_id, item_id, row) {
203
+        var key = project_id + '_' + item_id;
204
+        return (typeof(row.items) !== 'undefined' && (key in row.items)) ? row.items[key].inspect_value:'';
205
+    },
206
+    renderheader(h, { column, $index }) {
207
+        return h('span', {}, [
208
+            h('span', {}, column.label.split('//')[0]),
209
+            h('br'),
210
+            h('span', {}, column.label.split('//')[1])
211
+        ])
212
+    },
213
+  },
214
+  computed:{
215
+    activeReferences:function(){
216
+      var routineBloodShowItem = {17:17,35:35,36:36,37:37,51:51,46:46};
217
+      var references = [];
218
+      for (const index in this.references) {
219
+        if (this.references[index].id in routineBloodShowItem) {
220
+          references.push(this.references[index]);
221
+        }
222
+      }
223
+      return references;
224
+    }
225
+  },
226
+  components: {
227
+      personNav,
228
+      BreadCrumb,
229
+      personInfo
230
+  }
231
+};
232
+</script>
233
+<style>
234
+#personictable ::-webkit-scrollbar {
235
+  height: 15px;
236
+}
237
+#outcome-indicators-query .el-form-item {
238
+    margin-bottom: 0px !important;
239
+}
240
+</style>
241
+
242
+
243
+<style rel="stylesheet/scss" lang="scss" scoped>
244
+.app-container {
245
+//   margin: 20px;
246
+  font-size: 15px;
247
+  .filter-container {
248
+    padding-bottom: 5px;
249
+  }
250
+  .cqd-dataTitle{
251
+    color: #303133;
252
+    font-size: 14px;
253
+    border-bottom: 2px #E4E7ED solid;
254
+    height: 36px;
255
+    line-height: 36px;
256
+    margin: 0 0 25px 0;
257
+    position: relative;
258
+  }
259
+  .cqd-dataTitle::before {
260
+      position: absolute;
261
+      left: 0;
262
+      bottom: -2px;
263
+      content: "";
264
+      width: 42px;
265
+      height: 2px;
266
+      background: #409eff;
267
+  }
268
+  .search-component {
269
+    width: 500px;
270
+    .searchBox {
271
+      width: 300px;
272
+      height: 36px;
273
+      line-height: 36px;
274
+      padding-left: 15px;
275
+      border: 1px #dcdfe6 solid;
276
+      border-right: none;
277
+      outline: none;
278
+      float: left;
279
+      border-radius: 6px 0 0 6px;
280
+      font-size: 14px;
281
+      color: #333;
282
+      background: #fff;
283
+      box-shadow: 3px 3px 4px rgba(135, 135, 135, 0.05);
284
+    }
285
+    .searchBtn {
286
+      background-color: #409eff;
287
+      color: #fff;
288
+      font-size: 15px;
289
+      text-align: center;
290
+      height: 36px;
291
+      line-height: 36px;
292
+      float: left;
293
+      outline: none;
294
+      width: 70px;
295
+      border: none;
296
+      border-radius: 0 6px 6px 0;
297
+      font-family: "Microsoft Yahei";
298
+      cursor: pointer;
299
+    }
300
+  }
301
+  .amount {
302
+    font-weight: normal;
303
+    padding: 10px 0 0 0;
304
+    color: #606266;
305
+    font-size: 14px;
306
+    span {
307
+      color: #ef2525;
308
+      font-family: "Arial";
309
+      padding: 0 2px;
310
+    }
311
+  }
312
+}
313
+</style>

+ 19 - 8
src/xt_pages/qcd/patientAnalysis/person/lapseto.vue 查看文件

@@ -5,10 +5,9 @@
5 5
     </div>
6 6
     <div class="app-container" id="outcome-indicators-query">
7 7
       <person-info :patient="patientInfo"></person-info>
8
-      <person-nav activeName="lapseto"></person-nav>
8
+      <person-nav activeName="lapseto" :patientID="patientID"></person-nav>
9 9
 
10
-      <h4 class="hui">统计表</h4>
11
-      <hr class="huixiao">
10
+      <div class="cqd-dataTitle">统计表</div>
12 11
       <el-table
13 12
         ref="multipleTable"
14 13
         :data="tableData"
@@ -85,6 +84,7 @@ export default {
85 84
       this.$message.error('参数错误,无法请求');
86 85
       return false;
87 86
     }
87
+    patientID = parseInt(patientID);
88 88
     this.patientID = patientID;
89 89
     this.listQuery.patient_id = patientID;
90 90
     // if (this.patientID==0)
@@ -203,12 +203,23 @@ export default {
203 203
   .filter-container {
204 204
     padding-bottom: 5px;
205 205
   }
206
-  .hui {
207
-    color: #909399;
208
-    margin-bottom: 5px;
206
+  .cqd-dataTitle{
207
+    color: #303133;
208
+    font-size: 14px;
209
+    border-bottom: 2px #E4E7ED solid;
210
+    height: 36px;
211
+    line-height: 36px;
212
+    margin: 0 0 25px 0;
213
+    position: relative;
209 214
   }
210
-  .huixiao {
211
-    border: solid 1px #ebeef5;
215
+  .cqd-dataTitle::before {
216
+      position: absolute;
217
+      left: 0;
218
+      bottom: -2px;
219
+      content: "";
220
+      width: 42px;
221
+      height: 2px;
222
+      background: #409eff;
212 223
   }
213 224
   .search-component {
214 225
     width: 500px;

+ 441 - 0
src/xt_pages/qcd/patientAnalysis/person/weight.vue 查看文件

@@ -0,0 +1,441 @@
1
+<template>
2
+ <div class="main-contain">
3
+    <div class="position">
4
+      <bread-crumb :crumbs='crumbs'></bread-crumb>
5
+    </div>
6
+    <div class="app-container" id="outcome-indicators-query">
7
+      <person-info :patient="patientInfo"></person-info>
8
+      <person-nav activeName="weight" :patientID="patientID"></person-nav>
9
+
10
+      
11
+      <div class="cell clearfix">
12
+        <label class="title">
13
+          <span class="name">日期查询</span> :
14
+        </label>
15
+        <el-date-picker
16
+          v-model="listQuery.start_time"
17
+          prefix-icon="el-icon-date"
18
+          @change="changeTime"
19
+          :editable="false"
20
+          style="width: 196px;"
21
+          type="date"
22
+          placeholder="选择日期时间"
23
+          align="right"
24
+          format="yyyy-MM-dd"
25
+          value-format="yyyy-MM-dd"
26
+        ></el-date-picker>
27
+        <span class>-</span>
28
+        <el-date-picker
29
+          v-model="listQuery.end_time"
30
+          prefix-icon="el-icon-date"
31
+          @change="changeTime"
32
+          :editable="false"
33
+          style="width: 196px;"
34
+          type="date"
35
+          placeholder="选择日期时间"
36
+          align="right"
37
+          format="yyyy-MM-dd"
38
+          value-format="yyyy-MM-dd"
39
+        ></el-date-picker>
40
+      </div>
41
+      
42
+      <div class="cell clearfix">
43
+        <label class="title">
44
+          <span class="name">曲线图</span> :
45
+        </label>
46
+        <div class="time">
47
+          <ul class>
48
+            <li
49
+              :class="item.value==diagramType?'active':''"
50
+              @click="selectDiagramType( item.value)"
51
+              v-for="item in diagramTypeOptions"
52
+              :key="item.value"
53
+            >{{item.label}}</li>
54
+          </ul>
55
+        </div>
56
+      </div>
57
+      
58
+      <div class="cqd-dataTitle">统计图</div>
59
+      <el-row :gutter="32">
60
+        <el-col :xs="24" :sm="24" :lg="24">
61
+          <div class="chart-wrapper">
62
+              <line-chart title="曲线图(Kg)" :options="CompletionOptions" />
63
+          </div>
64
+        </el-col>
65
+      </el-row>
66
+
67
+      <div style="height:20px">&nbsp;</div>
68
+      <div class="cqd-dataTitle">统计表</div>
69
+      <el-table
70
+        ref="multipleTable"
71
+        :data="tableData"
72
+        border
73
+        fit
74
+        highlight-current-row
75
+        style="width: 100%;margin-top: 10px;"
76
+        :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
77
+      >
78
+        
79
+        <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
80
+          <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
81
+        </el-table-column>
82
+        <el-table-column  label="干体重" min-width="80" property="assessment_before_dislysis" align="center">
83
+          <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.dry_weight + 'Kg':'--'}}</span></template>
84
+        </el-table-column>
85
+        <el-table-column  label="透前体重" min-width="80" property="assessment_before_dislysis" align="center">
86
+          <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.weight_before + 'Kg':'--'}}</span></template>
87
+        </el-table-column>
88
+        <el-table-column  label="体重增加" min-width="80" property="assessment_before_dislysis" align="center">
89
+          <template slot-scope="scope"><span>{{scope.row.assessment_before_dislysis?scope.row.assessment_before_dislysis.weight_before - scope.row.assessment_before_dislysis.dry_weight + 'Kg':'--'}}</span></template>
90
+        </el-table-column>
91
+        <el-table-column  label="透后体重" min-width="80" property="assessment_after_dislysis" align="center">
92
+          <template slot-scope="scope"><span>{{scope.row.assessment_after_dislysis?scope.row.assessment_after_dislysis.weight_after+ 'Kg':'--'}}</span></template>
93
+        </el-table-column>
94
+        
95
+      </el-table>
96
+
97
+      <!-- <pagi-nation title="分页"></pagi-nation> -->
98
+
99
+      <el-pagination
100
+      align="right"
101
+        @size-change="handleSizeChange"
102
+        @current-change="handleCurrentChange"
103
+        :current-page="listQuery.pate"
104
+        :page-sizes="[10, 20, 50, 100]"
105
+        :page-size="10"
106
+        background
107
+        style="margin-top:20px;"
108
+        layout="total, sizes, prev, pager, next, jumper"
109
+        :total="total"
110
+      ></el-pagination>
111
+    </div>
112
+  </div>
113
+</template>
114
+
115
+
116
+<script>
117
+import { GetPersonWeightData  } from "@/api/qcd";
118
+import {jsGetAge, uParseTime} from "@/utils/tools";
119
+import personNav from './components/personNav'
120
+import personInfo from './components/personInfo'
121
+import BreadCrumb from "@/xt_pages/components/bread-crumb";
122
+import LineChart from "../../components/LineChart";
123
+export default {
124
+  name: "totalAnalysis",
125
+  data() {
126
+    return {
127
+      crumbs:[
128
+        {path:false, name:'科室质控'},
129
+        {path:false, name:'患者分析'},
130
+        {path:false, name:'统计'},
131
+        {path:false, name:'体重'},
132
+      ],
133
+      total: 0,
134
+      patientMap:{},
135
+      listQuery: {
136
+        start_time: "",
137
+        end_time: "",
138
+        page: 1,
139
+        limit: 10,
140
+      },
141
+      CompletionOptions:{
142
+          xAxis:[],
143
+          legend:[],
144
+          series:[],
145
+      },
146
+      tableData: [],
147
+      pieData:[],
148
+      patientInfo:null,
149
+      patientID:0,
150
+      diagramType:1,
151
+      diagramTypeOptions: [
152
+        { value: 1, label: "体重变化趋势",  },
153
+        { value: 2, label: "体重增加", }
154
+      ],
155
+    };
156
+  },
157
+  created() {
158
+    var patientID = this.$route.query && this.$route.query.id;
159
+    if(typeof(patientID) == 'undefined' || !patientID || patientID<=0) {
160
+      this.$message.error('参数错误,无法请求');
161
+      return false;
162
+    }
163
+    patientID = parseInt(patientID);
164
+    this.patientID = patientID;
165
+    this.listQuery.patient_id = patientID;
166
+
167
+    var nowDate = new Date();
168
+    var nowYear = nowDate.getFullYear();
169
+    var nowMonth = nowDate.getMonth() + 1;
170
+    var nowDay = nowDate.getDate();
171
+    this.listQuery.end_time =
172
+      nowYear +
173
+      "-" +
174
+      (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
175
+      "-" +
176
+      (nowDay < 10 ? "0" + nowDay : nowDay);
177
+    nowDate.setMonth(nowDate.getMonth() - 3);
178
+    nowYear = nowDate.getFullYear();
179
+    nowMonth = nowDate.getMonth() + 1;
180
+    nowDay = nowDate.getDate();
181
+    this.listQuery.start_time =
182
+      nowYear +
183
+      "-" +
184
+      (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
185
+      "-" +
186
+      (nowDay < 10 ? "0" + nowDay : nowDay);
187
+    
188
+    this.getList();
189
+  },
190
+  methods: {
191
+    getList() {
192
+      GetPersonWeightData(this.listQuery).then(response => {
193
+        if (response.data.state == 0) {
194
+          this.$message.error(response.data.msg);
195
+          return false;
196
+        } else {
197
+            this.tableData = [];
198
+            this.total = response.data.data.total;
199
+            this.patientInfo = response.data.data.patient;
200
+            var weight = response.data.data.weight;
201
+            for (const index in weight) {
202
+                this.tableData.push(weight[index]);
203
+            }
204
+            var pieData = response.data.data.pie;
205
+            for (const index in pieData) {
206
+                this.pieData.push(pieData[index]);
207
+            }
208
+        }
209
+      });
210
+    },
211
+    changeTime() {
212
+      this.getList();
213
+    },
214
+    onSearch(){
215
+      this.getList();
216
+    },
217
+    changeModel() {
218
+      this.getList();
219
+    },
220
+    handleSizeChange(val) {
221
+      this.listQuery.limit = val;
222
+      this.getList();
223
+    },
224
+    handleCurrentChange(val) {
225
+      this.listQuery.page = val;
226
+      this.getList();
227
+    },
228
+    getTime(value, temp) {
229
+        if (value != undefined) {
230
+          return uParseTime(value, temp)
231
+        }
232
+        return ""
233
+    },
234
+    getProjectName(id) {
235
+      return (id in this.projectOptions) ? this.projectOptions[id].project_name:'';
236
+    },
237
+    getPatientName(id) {
238
+      return (id in this.patientMap) ? this.patientMap[id].name:'';
239
+    },
240
+    getPatientLapseto(lapseto) {
241
+      if(lapseto==1) {
242
+        return '留治';
243
+      }else if(lapseto == 2) {
244
+        return '转出';
245
+      }
246
+      return '--';
247
+    },
248
+    getPatientSource(srouce){
249
+      if(srouce==1) {
250
+        return '门诊';
251
+      }else if(srouce == 2) {
252
+        return '住院';
253
+      }
254
+      return '其他';
255
+    },
256
+    getPatientGender(gender) {
257
+      if (gender == 1) {
258
+        return '男';
259
+      } else if(gender == 2) {
260
+        return '女';
261
+      }
262
+      return '';
263
+    },
264
+    tranAge(birthday) {
265
+        var birth = uParseTime(birthday, '{y}-{m}-{d}');
266
+        return jsGetAge(birth, '-');
267
+    },
268
+    getPatientDialysisNo(id) {
269
+      return (id in this.patientMap) ? this.patientMap[id].dialysis_no:'';
270
+    },
271
+    getItemVulue(project_id, item_id, row) {
272
+        var key = project_id + '_' + item_id;
273
+        return (typeof(row.items) !== 'undefined' && (key in row.items)) ? row.items[key].inspect_value:'';
274
+    },
275
+    renderheader(h, { column, $index }) {
276
+        return h('span', {}, [
277
+            h('span', {}, column.label.split('//')[0]),
278
+            h('br'),
279
+            h('span', {}, column.label.split('//')[1])
280
+        ])
281
+    },
282
+    selectDiagramType(type) {
283
+      this.diagramType = type;
284
+      this.listQuery.diagram_type = type;
285
+      // this.getList();
286
+    },
287
+    drawPie(){
288
+      this.CompletionOptions = {
289
+          xAxis:[],
290
+          legend:[],
291
+          series:[],
292
+      };
293
+
294
+
295
+      if(this.diagramType !== 1 && this.diagramType !== 2) {
296
+        return false;
297
+      }
298
+
299
+      if (this.diagramType == 1) {
300
+        this.CompletionOptions.legend = ['透前体重', '透后体重', '干体重'];
301
+        this.CompletionOptions.series = [
302
+          { name:'透前体重', type:'line', data:[] },
303
+          { name:'透后体重', type:'line', data:[] },
304
+          { name:'干体重', type:'line', data:[] },
305
+        ];
306
+      }else {
307
+        this.CompletionOptions.legend = ['体重增加'];
308
+        this.CompletionOptions.series = [
309
+          // { name:'透前体重', type:'line', data:[] },
310
+          { name:'体重增加', type:'line', data:[] },
311
+          // { name:'干体重', type:'line', data:[] },
312
+        ];
313
+      }
314
+      for (const index in this.pieData) {
315
+
316
+        var dateDay = uParseTime(this.pieData[index].schedule_date, '{y}-{m}-{d}');
317
+        if (this.diagramType == 1) {
318
+          this.CompletionOptions.xAxis.push(dateDay);
319
+          if (this.pieData[index].assessment_after_dislysis) {
320
+            this.CompletionOptions.series[1].data.push(this.pieData[index].assessment_after_dislysis.weight_after);
321
+          } else {
322
+            this.CompletionOptions.series[1].data.push(0);
323
+          }
324
+          if (this.pieData[index].assessment_before_dislysis) {
325
+            this.CompletionOptions.series[0].data.push(this.pieData[index].assessment_before_dislysis.weight_before);
326
+            this.CompletionOptions.series[2].data.push(this.pieData[index].assessment_before_dislysis.dry_weight);
327
+          } else {
328
+            this.CompletionOptions.series[0].data.push(0);
329
+            this.CompletionOptions.series[2].data.push(0);
330
+          }
331
+        } else {
332
+          this.CompletionOptions.xAxis.push(dateDay);
333
+          if (this.pieData[index].assessment_before_dislysis) {
334
+            var weightTem = this.pieData[index].assessment_before_dislysis.weight_before - this.pieData[index].assessment_before_dislysis.dry_weight;
335
+            // this.CompletionOptions.series[0].data.push(this.pieData[index].assessment_before_dislysis.weight_before);
336
+            this.CompletionOptions.series[0].data.push(weightTem);
337
+            // this.CompletionOptions.series[2].data.push(this.pieData[index].assessment_before_dislysis.dry_weight);
338
+          } else {
339
+            this.CompletionOptions.series[0].data.push(0);
340
+          }
341
+        }
342
+      }
343
+    },
344
+  },
345
+  components: {
346
+      personNav,
347
+      BreadCrumb,
348
+      personInfo,
349
+      LineChart
350
+  },
351
+  watch:{
352
+    "diagramType":function(){
353
+      this.drawPie();
354
+    },
355
+    "pieData":function (){
356
+      this.drawPie();
357
+    },
358
+  }
359
+};
360
+</script>
361
+<style>
362
+#oictable ::-webkit-scrollbar {
363
+  height: 15px;
364
+}
365
+#outcome-indicators-query .el-form-item {
366
+    margin-bottom: 0px !important;
367
+}
368
+</style>
369
+
370
+
371
+<style rel="stylesheet/scss" lang="scss" scoped>
372
+.app-container {
373
+//   margin: 20px;
374
+  font-size: 15px;
375
+  .filter-container {
376
+    padding-bottom: 5px;
377
+  }
378
+  .cqd-dataTitle{
379
+    color: #303133;
380
+    font-size: 14px;
381
+    border-bottom: 2px #E4E7ED solid;
382
+    height: 36px;
383
+    line-height: 36px;
384
+    margin: 0 0 25px 0;
385
+    position: relative;
386
+  }
387
+  .cqd-dataTitle::before {
388
+      position: absolute;
389
+      left: 0;
390
+      bottom: -2px;
391
+      content: "";
392
+      width: 42px;
393
+      height: 2px;
394
+      background: #409eff;
395
+  }
396
+  .search-component {
397
+    width: 500px;
398
+    .searchBox {
399
+      width: 300px;
400
+      height: 36px;
401
+      line-height: 36px;
402
+      padding-left: 15px;
403
+      border: 1px #dcdfe6 solid;
404
+      border-right: none;
405
+      outline: none;
406
+      float: left;
407
+      border-radius: 6px 0 0 6px;
408
+      font-size: 14px;
409
+      color: #333;
410
+      background: #fff;
411
+      box-shadow: 3px 3px 4px rgba(135, 135, 135, 0.05);
412
+    }
413
+    .searchBtn {
414
+      background-color: #409eff;
415
+      color: #fff;
416
+      font-size: 15px;
417
+      text-align: center;
418
+      height: 36px;
419
+      line-height: 36px;
420
+      float: left;
421
+      outline: none;
422
+      width: 70px;
423
+      border: none;
424
+      border-radius: 0 6px 6px 0;
425
+      font-family: "Microsoft Yahei";
426
+      cursor: pointer;
427
+    }
428
+  }
429
+  .amount {
430
+    font-weight: normal;
431
+    padding: 10px 0 0 0;
432
+    color: #606266;
433
+    font-size: 14px;
434
+    span {
435
+      color: #ef2525;
436
+      font-family: "Arial";
437
+      padding: 0 2px;
438
+    }
439
+  }
440
+}
441
+</style>

+ 19 - 11
src/xt_pages/qcd/patientAnalysis/total.vue 查看文件

@@ -76,10 +76,7 @@
76 76
           </ul>
77 77
         </div>
78 78
       </div>
79
-
80
-
81
-      <h4 class="hui">统计图</h4>
82
-      <hr class="huixiao">
79
+      <div class="cqd-dataTitle">统计图</div>
83 80
       <el-row :gutter="32">
84 81
         <el-col :xs="24" :sm="24" :lg="24">
85 82
           <div class="chart-wrapper">
@@ -88,8 +85,8 @@
88 85
         </el-col>
89 86
       </el-row>
90 87
 
91
-      <h4 class="hui">统计表</h4>
92
-      <hr class="huixiao">
88
+      <div style="height:20px">&nbsp;</div>
89
+      <div class="cqd-dataTitle">统计表</div>
93 90
       <el-table
94 91
         ref="multipleTable"
95 92
         :data="tableData"
@@ -321,12 +318,23 @@ export default {
321 318
   .filter-container {
322 319
     padding-bottom: 5px;
323 320
   }
324
-  .hui {
325
-    color: #909399;
326
-    margin-bottom: 5px;
321
+  .cqd-dataTitle{
322
+    color: #303133;
323
+    font-size: 14px;
324
+    border-bottom: 2px #E4E7ED solid;
325
+    height: 36px;
326
+    line-height: 36px;
327
+    margin: 0 0 25px 0;
328
+    position: relative;
327 329
   }
328
-  .huixiao {
329
-    border: solid 1px #ebeef5;
330
+  .cqd-dataTitle::before {
331
+      position: absolute;
332
+      left: 0;
333
+      bottom: -2px;
334
+      content: "";
335
+      width: 42px;
336
+      height: 2px;
337
+      background: #409eff;
330 338
   }
331 339
   .search-component {
332 340
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/patientAnalysis/weight.vue 查看文件

@@ -68,8 +68,7 @@
68 68
       </div>
69 69
 
70 70
 
71
-      <h4 class="hui">统计图</h4>
72
-      <hr class="huixiao">
71
+      <div class="cqd-dataTitle">统计图</div>
73 72
       <el-row :gutter="32">
74 73
         <el-col :xs="24" :sm="24" :lg="8">
75 74
           <div class="chart-wrapper">
@@ -88,8 +87,8 @@
88 87
         </el-col>
89 88
       </el-row>
90 89
 
91
-      <h4 class="hui">统计表</h4>
92
-      <hr class="huixiao">
90
+      <div style="height:20px">&nbsp;</div>
91
+      <div class="cqd-dataTitle">统计表</div>
93 92
       <el-table
94 93
         ref="multipleTable"
95 94
         :data="tableData"
@@ -453,12 +452,23 @@ export default {
453 452
   .filter-container {
454 453
     padding-bottom: 5px;
455 454
   }
456
-  .hui {
457
-    color: #909399;
458
-    margin-bottom: 5px;
455
+  .cqd-dataTitle{
456
+    color: #303133;
457
+    font-size: 14px;
458
+    border-bottom: 2px #E4E7ED solid;
459
+    height: 36px;
460
+    line-height: 36px;
461
+    margin: 0 0 25px 0;
462
+    position: relative;
459 463
   }
460
-  .huixiao {
461
-    border: solid 1px #ebeef5;
464
+  .cqd-dataTitle::before {
465
+      position: absolute;
466
+      left: 0;
467
+      bottom: -2px;
468
+      content: "";
469
+      width: 42px;
470
+      height: 2px;
471
+      background: #409eff;
462 472
   }
463 473
   .search-component {
464 474
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/processIndicators.vue 查看文件

@@ -75,8 +75,7 @@
75 75
         </el-select>
76 76
       </div>
77 77
 
78
-      <h4 class="hui">统计图</h4>
79
-      <hr class="huixiao">
78
+      <div class="cqd-dataTitle">统计图</div>
80 79
       <el-row :gutter="32">
81 80
         <el-col :xs="24" :sm="24" :lg="24">
82 81
           <div class="chart-wrapper">
@@ -85,8 +84,8 @@
85 84
         </el-col>
86 85
       </el-row>
87 86
 
88
-      <h4 class="hui">统计表</h4>
89
-      <hr class="huixiao">
87
+      <div style="height:20px">&nbsp;</div>
88
+      <div class="cqd-dataTitle">统计表</div>
90 89
       <el-table
91 90
         ref="multipleTable"
92 91
         :data="tableData"
@@ -338,12 +337,23 @@ export default {
338 337
   .filter-container {
339 338
     padding-bottom: 5px;
340 339
   }
341
-  .hui {
342
-    color: #909399;
343
-    margin-bottom: 5px;
340
+  .cqd-dataTitle{
341
+    color: #303133;
342
+    font-size: 14px;
343
+    border-bottom: 2px #E4E7ED solid;
344
+    height: 36px;
345
+    line-height: 36px;
346
+    margin: 0 0 25px 0;
347
+    position: relative;
344 348
   }
345
-  .huixiao {
346
-    border: solid 1px #ebeef5;
349
+  .cqd-dataTitle::before {
350
+      position: absolute;
351
+      left: 0;
352
+      bottom: -2px;
353
+      content: "";
354
+      width: 42px;
355
+      height: 2px;
356
+      background: #409eff;
347 357
   }
348 358
   .search-component {
349 359
     width: 500px;

+ 1 - 1
src/xt_pages/statistics/index.vue 查看文件

@@ -114,8 +114,8 @@ export default {
114 114
   data() {
115 115
     return {
116 116
       crumbs: [
117
+        { path: 'statistics', name: '科室质控' },
117 118
         { path: 'statistics', name: '统计分析' },
118
-
119 119
       ],
120 120
         pageLoad:true,
121 121
         patientCount:0,

+ 0 - 5
src/xt_pages/user/components/PatientForm.vue 查看文件

@@ -59,13 +59,8 @@
59 59
               </el-col>
60 60
               <el-col :span="8" >
61 61
                 <el-form-item label="透析号 : " class="is-required" prop="dialysisNo" >
62
-<<<<<<< .mine
63
-                    <el-input v-model="form.dialysisNo" placeholder="填写或自动生成" style="width:62%;float:left;margin-right: 2%;" ></el-input> 
64
-                    <el-button style="width:36%;padding:10px 0;" :disabled="$store.getters.xt_user.subscibe.state==3||!subscibeFlag?true:false" type="primary" @click="generatedialysisno">自动生成</el-button>
65
-=======
66 62
                     <el-input v-model="form.dialysisNo" placeholder="填写或自动生成" style="width:62%;float:left;margin-right: 1%;" ></el-input>
67 63
                     <el-button style="width:70px;padding:10px 0;" :disabled="$store.getters.xt_user.subscibe.state==3||!subscibeFlag?true:false" type="primary" @click="generatedialysisno">自动生成</el-button>
68
->>>>>>> .theirs
69 64
                 </el-form-item>
70 65
               </el-col>
71 66
             </template>