Browse Source

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

zhengchengwu 6 years ago
parent
commit
505e8cf041

+ 24 - 1
src/api/qcd.js View File

76
     method: 'get',
76
     method: 'get',
77
     params: params
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
+

File diff suppressed because it is too large
+ 492 - 482
src/router/index.js


+ 7 - 1
src/xt_pages/dialysis/details/index.vue View File

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

+ 152 - 0
src/xt_pages/qcd/components/LineChart.vue View File

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 View File

75
         </el-select>
75
         </el-select>
76
       </div>
76
       </div>
77
 
77
 
78
-      <h4 class="hui">统计图</h4>
79
-      <hr class="huixiao">
78
+      <div class="cqd-dataTitle">统计图</div>
80
       <el-row :gutter="32">
79
       <el-row :gutter="32">
81
         <el-col :xs="24" :sm="24" :lg="24">
80
         <el-col :xs="24" :sm="24" :lg="24">
82
           <div class="chart-wrapper">
81
           <div class="chart-wrapper">
84
           </div>
83
           </div>
85
         </el-col>
84
         </el-col>
86
       </el-row>
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
       <el-table
88
       <el-table
91
         ref="multipleTable"
89
         ref="multipleTable"
92
         :data="tableData"
90
         :data="tableData"
91
+        id="qcddt"
93
         border
92
         border
94
         fit
93
         fit
95
         highlight-current-row
94
         highlight-current-row
96
         style="width: 100%;margin-top: 10px;"
95
         style="width: 100%;margin-top: 10px;"
97
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
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
         <el-table-column
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
           align="center"
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
       </el-table>
113
       </el-table>
210
 
114
 
211
       <!-- <pagi-nation title="分页"></pagi-nation> -->
115
       <!-- <pagi-nation title="分页"></pagi-nation> -->
322
             for (const mkey in this.modeOptions) {
226
             for (const mkey in this.modeOptions) {
323
               if (mkey in dd[key]) {
227
               if (mkey in dd[key]) {
324
                 dd[key][mkey].mode = this.modeOptions[mkey].name;
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
               } else {
235
               } else {
327
                 dd[key][mkey] = {
236
                 dd[key][mkey] = {
328
                   mode: this.modeOptions[mkey].name,
237
                   mode: this.modeOptions[mkey].name,
394
       this.getList();
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
   components: {
317
   components: {
398
     BarChart,
318
     BarChart,
399
     BreadCrumb
319
     BreadCrumb
401
 };
321
 };
402
 </script>
322
 </script>
403
 
323
 
324
+<style>
325
+#qcddt ::-webkit-scrollbar {
326
+  height: 15px;
327
+}
328
+</style>
404
 <style rel="stylesheet/scss" lang="scss" scoped>
329
 <style rel="stylesheet/scss" lang="scss" scoped>
405
 .app-container {
330
 .app-container {
406
 //   margin: 20px;
331
 //   margin: 20px;
408
   .filter-container {
333
   .filter-container {
409
     padding-bottom: 5px;
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
   .search-component {
354
   .search-component {
419
     width: 500px;
355
     width: 500px;

+ 31 - 10
src/xt_pages/qcd/outcomeIndicators/control.vue View File

88
         </el-select>
88
         </el-select>
89
       </div>
89
       </div>
90
 
90
 
91
-      <h4 class="hui">统计图</h4>
92
-      <hr class="huixiao">
91
+      <div class="cqd-dataTitle">统计图</div>
93
       <el-row :gutter="32">
92
       <el-row :gutter="32">
94
         <el-col :xs="24" :sm="24" :lg="24">
93
         <el-col :xs="24" :sm="24" :lg="24">
95
           <div class="chart-wrapper">
94
           <div class="chart-wrapper">
98
         </el-col>
97
         </el-col>
99
       </el-row>
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
       <el-table
102
       <el-table
104
         ref="multipleTable"
103
         ref="multipleTable"
105
         :data="tableData"
104
         :data="tableData"
121
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
120
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
122
         </el-table-column>
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
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
124
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
126
         </el-table-column>
125
         </el-table-column>
127
       </el-table>
126
       </el-table>
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
   components: {
381
   components: {
372
     PieChart,
382
     PieChart,
373
     BreadCrumb
383
     BreadCrumb
388
   .filter-container {
398
   .filter-container {
389
     padding-bottom: 5px;
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
   .search-component {
419
   .search-component {
399
     width: 500px;
420
     width: 500px;

+ 29 - 8
src/xt_pages/qcd/outcomeIndicators/query.vue View File

59
         </el-select>
59
         </el-select>
60
       </div>
60
       </div>
61
 
61
 
62
-      <h4 class="hui">统计表</h4>
63
-      <hr class="huixiao">
62
+      <div class="cqd-dataTitle">统计表</div>
64
       <el-table
63
       <el-table
65
         ref="multipleTable"
64
         ref="multipleTable"
66
         :data="tableData"
65
         :data="tableData"
86
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
85
           <template slot-scope="scope"><span>{{getTime(scope.row.inspect_date, '{y}{m}{d}')}}</span></template>
87
         </el-table-column>
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
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
89
           <template slot-scope="scope"><span>{{getItemVulue(reference.project_id, reference.id, scope.row)}}</span></template>
91
         </el-table-column>
90
         </el-table-column>
92
       </el-table>
91
       </el-table>
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
   components: {
306
   components: {
297
     BreadCrumb
307
     BreadCrumb
298
   }
308
   }
315
   .filter-container {
325
   .filter-container {
316
     padding-bottom: 5px;
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
   .search-component {
346
   .search-component {
326
     width: 500px;
347
     width: 500px;

+ 20 - 11
src/xt_pages/qcd/patientAnalysis/bloodPressure.vue View File

69
       </div>
69
       </div>
70
 
70
 
71
 
71
 
72
-      <h4 class="hui">统计图</h4>
73
-      <hr class="huixiao">
72
+      <div class="cqd-dataTitle">统计图</div>
74
       <el-row :gutter="32">
73
       <el-row :gutter="32">
75
         <el-col :xs="24" :sm="24" :lg="24">
74
         <el-col :xs="24" :sm="24" :lg="24">
76
           <div class="chart-wrapper">
75
           <div class="chart-wrapper">
77
-              <pie-chart title="血压(次)" :options="CompletionOptions"/>
76
+              <pie-chart title="血压(次)" :options="CompletionOptions"/>
78
           </div>
77
           </div>
79
         </el-col>
78
         </el-col>
80
       </el-row>
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
       <el-table
83
       <el-table
85
         ref="multipleTable"
84
         ref="multipleTable"
86
         :data="tableData"
85
         :data="tableData"
91
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
90
         :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}"
92
       >
91
       >
93
         
92
         
94
-        
95
         <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
93
         <el-table-column  label="透析日期" min-width="80" property="schedule_date" align="center">
96
           <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
94
           <template slot-scope="scope"><span>{{getTime(scope.row.schedule_date, '{y}{m}{d}')}}</span></template>
97
         </el-table-column>
95
         </el-table-column>
412
   .filter-container {
410
   .filter-container {
413
     padding-bottom: 5px;
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
   .search-component {
431
   .search-component {
423
     width: 500px;
432
     width: 500px;

+ 19 - 11
src/xt_pages/qcd/patientAnalysis/complication.vue View File

67
         </div>
67
         </div>
68
       </div>
68
       </div>
69
 
69
 
70
-
71
-      <h4 class="hui">统计图</h4>
72
-      <hr class="huixiao">
70
+      <div class="cqd-dataTitle">统计图</div>
73
       <el-row :gutter="32">
71
       <el-row :gutter="32">
74
         <el-col :xs="24" :sm="24" :lg="24">
72
         <el-col :xs="24" :sm="24" :lg="24">
75
           <div class="chart-wrapper">
73
           <div class="chart-wrapper">
78
           </div>
76
           </div>
79
         </el-col>
77
         </el-col>
80
       </el-row>
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
       <el-table
81
       <el-table
85
         ref="multipleTable"
82
         ref="multipleTable"
86
         :data="tableData"
83
         :data="tableData"
346
   .filter-container {
343
   .filter-container {
347
     padding-bottom: 5px;
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
   .search-component {
364
   .search-component {
357
     width: 500px;
365
     width: 500px;

+ 19 - 10
src/xt_pages/qcd/patientAnalysis/dialysisAge.vue View File

82
         </div>
82
         </div>
83
       </div>
83
       </div>
84
 
84
 
85
-
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
85
+      <div class="cqd-dataTitle">统计图</div>
88
       <el-row :gutter="32">
86
       <el-row :gutter="32">
89
         <el-col :xs="24" :sm="24" :lg="24">
87
         <el-col :xs="24" :sm="24" :lg="24">
90
           <div class="chart-wrapper">
88
           <div class="chart-wrapper">
93
         </el-col>
91
         </el-col>
94
       </el-row>
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
       <el-table
96
       <el-table
99
         ref="multipleTable"
97
         ref="multipleTable"
100
         :data="tableData"
98
         :data="tableData"
376
   .filter-container {
374
   .filter-container {
377
     padding-bottom: 5px;
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
   .search-component {
395
   .search-component {
387
     width: 500px;
396
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/patientAnalysis/infectiousDiseases.vue View File

83
         </div>
83
         </div>
84
       </div>
84
       </div>
85
 
85
 
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
86
+      <div class="cqd-dataTitle">统计图</div>
88
       <el-row :gutter="32">
87
       <el-row :gutter="32">
89
         <el-col :xs="24" :sm="24" :lg="8">
88
         <el-col :xs="24" :sm="24" :lg="8">
90
           <div class="chart-wrapper">
89
           <div class="chart-wrapper">
104
         </el-col>
103
         </el-col>
105
       </el-row>
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
       <el-table
108
       <el-table
110
         ref="multipleTable"
109
         ref="multipleTable"
111
         :data="tableData"
110
         :data="tableData"
405
   .filter-container {
404
   .filter-container {
406
     padding-bottom: 5px;
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
   .search-component {
425
   .search-component {
416
     width: 500px;
426
     width: 500px;

+ 19 - 10
src/xt_pages/qcd/patientAnalysis/lapseto.vue View File

82
         </div>
82
         </div>
83
       </div>
83
       </div>
84
 
84
 
85
-
86
-      <h4 class="hui">统计图</h4>
87
-      <hr class="huixiao">
85
+      <div class="cqd-dataTitle">统计图</div>
88
       <el-row :gutter="32">
86
       <el-row :gutter="32">
89
         <el-col :xs="24" :sm="24" :lg="24">
87
         <el-col :xs="24" :sm="24" :lg="24">
90
           <div class="chart-wrapper">
88
           <div class="chart-wrapper">
93
         </el-col>
91
         </el-col>
94
       </el-row>
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
       <el-table
96
       <el-table
99
         ref="multipleTable"
97
         ref="multipleTable"
100
         :data="tableData"
98
         :data="tableData"
368
   .filter-container {
366
   .filter-container {
369
     padding-bottom: 5px;
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
   .search-component {
387
   .search-component {
379
     width: 500px;
388
     width: 500px;

+ 534 - 0
src/xt_pages/qcd/patientAnalysis/person/bloodPressure.vue View File

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 View File

1
 <template>
1
 <template>
2
     <el-tabs v-model="tabActiveName" @tab-click="handleTabClick">
2
     <el-tabs v-model="tabActiveName" @tab-click="handleTabClick">
3
         <el-tab-pane label="转归" name="lapseto"></el-tab-pane>
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
     </el-tabs>
7
     </el-tabs>
5
 </template>
8
 </template>
6
 <script>
9
 <script>
9
         activeName:{
12
         activeName:{
10
             type:String,
13
             type:String,
11
             default: 'total'
14
             default: 'total'
12
-        }
15
+        },
16
+        patientID:{
17
+            type:Number,
18
+            default:0,
19
+        },
13
     },
20
     },
14
     data(){
21
     data(){
15
         return{
22
         return{
16
-            tabActiveName:'total',
23
+            tabActiveName:'lapseto',
17
         }
24
         }
18
     }, 
25
     }, 
19
     methods:{
26
     methods:{
20
         handleTabClick(tab, event) {
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
     created(){
35
     created(){

+ 313 - 0
src/xt_pages/qcd/patientAnalysis/person/indicators.vue View File

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 View File

5
     </div>
5
     </div>
6
     <div class="app-container" id="outcome-indicators-query">
6
     <div class="app-container" id="outcome-indicators-query">
7
       <person-info :patient="patientInfo"></person-info>
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
       <el-table
11
       <el-table
13
         ref="multipleTable"
12
         ref="multipleTable"
14
         :data="tableData"
13
         :data="tableData"
85
       this.$message.error('参数错误,无法请求');
84
       this.$message.error('参数错误,无法请求');
86
       return false;
85
       return false;
87
     }
86
     }
87
+    patientID = parseInt(patientID);
88
     this.patientID = patientID;
88
     this.patientID = patientID;
89
     this.listQuery.patient_id = patientID;
89
     this.listQuery.patient_id = patientID;
90
     // if (this.patientID==0)
90
     // if (this.patientID==0)
203
   .filter-container {
203
   .filter-container {
204
     padding-bottom: 5px;
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
   .search-component {
224
   .search-component {
214
     width: 500px;
225
     width: 500px;

+ 441 - 0
src/xt_pages/qcd/patientAnalysis/person/weight.vue View File

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 View File

76
           </ul>
76
           </ul>
77
         </div>
77
         </div>
78
       </div>
78
       </div>
79
-
80
-
81
-      <h4 class="hui">统计图</h4>
82
-      <hr class="huixiao">
79
+      <div class="cqd-dataTitle">统计图</div>
83
       <el-row :gutter="32">
80
       <el-row :gutter="32">
84
         <el-col :xs="24" :sm="24" :lg="24">
81
         <el-col :xs="24" :sm="24" :lg="24">
85
           <div class="chart-wrapper">
82
           <div class="chart-wrapper">
88
         </el-col>
85
         </el-col>
89
       </el-row>
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
       <el-table
90
       <el-table
94
         ref="multipleTable"
91
         ref="multipleTable"
95
         :data="tableData"
92
         :data="tableData"
321
   .filter-container {
318
   .filter-container {
322
     padding-bottom: 5px;
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
   .search-component {
339
   .search-component {
332
     width: 500px;
340
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/patientAnalysis/weight.vue View File

68
       </div>
68
       </div>
69
 
69
 
70
 
70
 
71
-      <h4 class="hui">统计图</h4>
72
-      <hr class="huixiao">
71
+      <div class="cqd-dataTitle">统计图</div>
73
       <el-row :gutter="32">
72
       <el-row :gutter="32">
74
         <el-col :xs="24" :sm="24" :lg="8">
73
         <el-col :xs="24" :sm="24" :lg="8">
75
           <div class="chart-wrapper">
74
           <div class="chart-wrapper">
88
         </el-col>
87
         </el-col>
89
       </el-row>
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
       <el-table
92
       <el-table
94
         ref="multipleTable"
93
         ref="multipleTable"
95
         :data="tableData"
94
         :data="tableData"
453
   .filter-container {
452
   .filter-container {
454
     padding-bottom: 5px;
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
   .search-component {
473
   .search-component {
464
     width: 500px;
474
     width: 500px;

+ 19 - 9
src/xt_pages/qcd/processIndicators.vue View File

75
         </el-select>
75
         </el-select>
76
       </div>
76
       </div>
77
 
77
 
78
-      <h4 class="hui">统计图</h4>
79
-      <hr class="huixiao">
78
+      <div class="cqd-dataTitle">统计图</div>
80
       <el-row :gutter="32">
79
       <el-row :gutter="32">
81
         <el-col :xs="24" :sm="24" :lg="24">
80
         <el-col :xs="24" :sm="24" :lg="24">
82
           <div class="chart-wrapper">
81
           <div class="chart-wrapper">
85
         </el-col>
84
         </el-col>
86
       </el-row>
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
       <el-table
89
       <el-table
91
         ref="multipleTable"
90
         ref="multipleTable"
92
         :data="tableData"
91
         :data="tableData"
338
   .filter-container {
337
   .filter-container {
339
     padding-bottom: 5px;
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
   .search-component {
358
   .search-component {
349
     width: 500px;
359
     width: 500px;

+ 1 - 1
src/xt_pages/statistics/index.vue View File

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

+ 0 - 5
src/xt_pages/user/components/PatientForm.vue View File

59
               </el-col>
59
               </el-col>
60
               <el-col :span="8" >
60
               <el-col :span="8" >
61
                 <el-form-item label="透析号 : " class="is-required" prop="dialysisNo" >
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
                     <el-input v-model="form.dialysisNo" placeholder="填写或自动生成" style="width:62%;float:left;margin-right: 1%;" ></el-input>
62
                     <el-input v-model="form.dialysisNo" placeholder="填写或自动生成" style="width:62%;float:left;margin-right: 1%;" ></el-input>
67
                     <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>
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
                 </el-form-item>
64
                 </el-form-item>
70
               </el-col>
65
               </el-col>
71
             </template>
66
             </template>