zhaobao há 3 anos atrás
pai
commit
2071eb23d5
35 ficheiros alterados com 223 adições e 1441 exclusões
  1. 1 1
      postcss.config.js
  2. 17 17
      src/api/hos/satisfyStatisApi.js
  3. 0 82
      src/components/EntGridSelector/index.vue
  4. 0 1
      src/components/FileUpload/multiUpload.vue
  5. 5 7
      src/components/WorkFlow/ActivityHandleRecord.vue
  6. 2 3
      src/components/WorkFlow/index.vue
  7. 13 19
      src/router/modules/csat.js
  8. 1 1
      src/utils/customize_leaflet.js
  9. 1 1
      src/views/hos/assess/index.vue
  10. 1 1
      src/views/hos/components/ArtDetail.vue
  11. 59 124
      src/views/hos/components/ArtPanel.vue
  12. 1 1
      src/views/hos/components/AssessList.vue
  13. 1 0
      src/views/hos/doctor/components/Doctor.vue
  14. 1 1
      src/views/hos/news/index.vue
  15. 10 10
      src/views/hos/panorama/index.vue
  16. 5 250
      src/views/hos/statis/checklist/index.vue
  17. 0 206
      src/views/hos/statis/doctor/index.vue
  18. 0 202
      src/views/hos/statis/grid/index.vue
  19. 4 210
      src/views/hos/statis/group/index.vue
  20. 4 242
      src/views/hos/statis/month/index.vue
  21. 38 0
      src/views/hos/statis/target/index.vue
  22. 37 39
      src/views/hos/statis/year/index.vue
  23. 1 1
      src/views/system/art/art.vue
  24. 0 0
      src/views/system/art/artCat.vue
  25. 2 2
      src/views/system/art/artDetail.vue
  26. 2 2
      src/views/system/art/artList.vue
  27. 2 2
      src/views/system/art/index.vue
  28. 1 1
      src/views/system/art/leftCat.vue
  29. 3 4
      src/views/system/doc/fileList.vue
  30. 1 0
      src/views/system/grid/components/Grid.vue
  31. 5 5
      src/views/system/permit/account/index.vue
  32. 3 2
      src/views/system/permit/position/index.vue
  33. 1 3
      src/views/system/regulation/view.vue
  34. 1 1
      src/views/system/task/components/TaskList.vue
  35. 0 0
      src/views/system/todo/details.vue

+ 1 - 1
postcss.config.js

@@ -2,7 +2,7 @@
 
 module.exports = {
   'plugins': {
-    // to edit doctor browsers: use "browserslist" field in package.json
+    // to edit target browsers: use "browserslist" field in package.json
     'autoprefixer': {}
   }
 }

+ 17 - 17
src/api/hos/satisfyStatisApi.js

@@ -4,9 +4,9 @@ import request from '@/utils/request'
  * Doctor得分排名
  * @returns
  */
-export function doctorByList(data) {
+export function doctorScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/doctor`,
+    url: `/hos/satisfy/statis/doctor/score`,
     method: 'GET',
     params: data
   })
@@ -16,9 +16,9 @@ export function doctorByList(data) {
  * Grid 得分排名
  * @returns
  */
-export function gridByList(data) {
+export function gridScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/grid`,
+    url: `/hos/satisfy/statis/grid/score`,
     method: 'GET',
     params: data
   })
@@ -28,21 +28,21 @@ export function gridByList(data) {
  * 部门得分排名
  * @returns
  */
-export function groupByList(data) {
+export function groupScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/group`,
+    url: `/hos/satisfy/statis/group/score`,
     method: 'GET',
     params: data
   })
 }
 
 /**
- * 部门Year统计
+ * 部门Year得分
  * @returns
  */
-export function groupYearByList(data) {
+export function groupYearScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/group/year`,
+    url: `/hos/satisfy/statis/group/year/score`,
     method: 'GET',
     params: data
   })
@@ -64,21 +64,21 @@ export function groupMonthScoreCounterById(data) {
  * Group Month Score List
  * @returns
  */
-export function groupMonthByList(data) {
+export function groupMonthScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/group/month`,
+    url: `/hos/satisfy/statis/group/month/score`,
     method: 'GET',
     params: data
   })
 }
 
 /**
- * Group Checklist Month List
+ * Group Checklist Month Score List
  * @returns
  */
-export function groupChecklistMonthByList(data) {
+export function groupChecklistMonthScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/group/checklist/month`,
+    url: `/hos/satisfy/statis/group/checklist/month/score`,
     method: 'GET',
     params: data
   })
@@ -97,12 +97,12 @@ export function groupChecklistMonthScoreCounterByList(data) {
 }
 
 /**
- * Group Checklist Day List
+ * Group Checklist Day Score List
  * @returns
  */
-export function groupChecklistDayByList(data) {
+export function groupChecklistDayScoreByList(data) {
   return request({
-    url: `/hos/satisfy/statis/group/checklist/day`,
+    url: `/hos/satisfy/statis/group/checklist/day/score`,
     method: 'GET',
     params: data
   })

+ 0 - 82
src/components/EntGridSelector/index.vue

@@ -1,82 +0,0 @@
-<template>
-  <el-select
-    v-if="multiple"
-    v-model="gridId"
-    value-key="gridId"
-    multiple
-    style="width: 100%"
-    filterable
-    placeholder="请选择网格"
-  >
-    <el-option-group>
-      <el-option
-        v-for="item in gridList"
-        :key="item.gridId"
-        :label="item.gridTitle"
-        :value="item.gridId"
-      />
-    </el-option-group>
-  </el-select>
-  <el-select v-else v-model="gridId" value-key="gridId" style="width: 100%" filterable placeholder="请选择网格">
-    <el-option-group>
-      <el-option
-        v-for="item in gridList"
-        :key="item.gridId"
-        :label="item.gridTitle"
-        :value="item.gridId"
-      />
-    </el-option-group>
-  </el-select>
-</template>
-<script>
-import { getGridByList } from '@/api/system/gridApi'
-
-export default {
-  name: 'GridSelector',
-  components: {},
-  props: {
-    value: {
-      type: [Number, Array],
-      default: undefined
-    },
-    multiple: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      gridId: undefined,
-      gridList: []
-    }
-  },
-  watch: {
-    value(val) {
-      this.gridId = val
-    },
-    gridId(val) {
-      this.$emit('input', val)
-    }
-  },
-  created() {
-    this.initGridData()
-  },
-  mounted() {
-  },
-  methods: {
-    // 网格列表
-    initGridData() {
-      getGridByList({}).then((resp) => {
-        const { code, data, msg } = resp
-        if (code === 0) {
-          this.gridList = data
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    }
-  }
-}
-</script>

+ 0 - 1
src/components/FileUpload/multiUpload.vue

@@ -117,7 +117,6 @@ export default {
           of.fileTitle = data.fileTitle
           of.fileSize = data.fileSize
           of.fileUrl = data.fileUrl
-          of.fileIcon = data.fileIcon
           of.fileExt = data.fileExt
           this.oFileList.push(of)
           this.nFileList.push({ name: of.fileTitle, url: of.fileUrl, id: of.fileId })

+ 5 - 7
src/components/WorkFlow/ActivityHandleRecord.vue

@@ -39,12 +39,7 @@
       <el-table-column prop="attachList" label="附件">
         <template v-slot="{row}">
           <div v-if="row.attachList&&row.attachList.length>0" class="assess-attachList">
-            <p v-for="(attach,index) in row.attachList" :key="index">
-              <el-link :href="attach.fileUrl" target="_blank">
-                <i class="el-icon-document" />
-                <span>{{ attach.fileTitle }}</span>
-              </el-link>
-            </p>
+            <p v-for="(item,index) in row.attachList" :key="index"><attach-list :uri="item.fileUrl" :name="item.fileTitle" /></p>
           </div>
         </template>
       </el-table-column>
@@ -53,9 +48,12 @@
 </template>
 <script>
 import { getWorkflowById } from '@/api/system/wfApi'
+import AttachList from '@/components/AttachList'
 export default {
   name: 'ActivityHandleRecord',
-  components: {},
+  components: {
+    AttachList
+  },
   props: {
     wfInsId: {
       type: [Number],

+ 2 - 3
src/components/WorkFlow/index.vue

@@ -1,13 +1,12 @@
 <template>
   <div>
-    <el-form ref="flowForm" :model="formData" :rules="rules" label-width="130px">
+    <el-form ref="flowForm" :model="formData" :rules="rules" label-width="100px">
 
       <el-form-item v-if="actionVisible" label="处理动作" prop="actionId">
         <el-radio-group v-if="flowData.curActivityIns" v-model="actionId">
           <el-radio v-for="(item, index) in flowData.curActivityIns.actionList" :key="index" :label="item.actionId">{{ item.actionTitle }}</el-radio>
         </el-radio-group>
       </el-form-item>
-
       <el-form-item v-if="remarkVisible" label="处理说明" prop="actionRemark">
         <el-input v-model="formData.actionRemark" type="textarea" :rows="5" placeholder="说明" />
       </el-form-item>
@@ -230,7 +229,7 @@ export default {
           actionId: this.formData.actionId,
           actionCode: this.formData.actionCode,
           actionRemark: this.formData.actionRemark,
-          attachList: JSON.parse(JSON.stringify(this.formData.attachList))
+          attachList: this.formData.attachList
         }
         return { ...data, data: flowData }
       } else {

+ 13 - 19
src/router/modules/csat.js

@@ -40,7 +40,7 @@ const csatRouter = [
     groupId: [1],
     meta: {
       title: '监测数据',
-      icon: 'el-icon-c-scale-to-original',
+      icon: 'el-icon-s-data',
       permit: 'hos_customer'
     },
     children: [
@@ -71,24 +71,6 @@ const csatRouter = [
     },
     children: [
       {
-        path: 'group',
-        component: () => import('@/views/hos/statis/group/index'),
-        name: 'hos_satisfy_statis_group',
-        meta: { title: '科室排名', noCache: true, permit: 'hos_satisfy_statis_group' }
-      },
-      {
-        path: 'doctor',
-        component: () => import('@/views/hos/statis/doctor/index'),
-        name: 'hos_satisfy_statis_doctor',
-        meta: { title: '医生排名', noCache: true, permit: 'hos_satisfy_statis_doctor' }
-      },
-      {
-        path: 'grid',
-        component: () => import('@/views/hos/statis/grid/index'),
-        name: 'hos_satisfy_statis_grid',
-        meta: { title: '场所排名', noCache: true, permit: 'hos_satisfy_statis_grid' }
-      },
-      {
         path: 'year',
         component: () => import('@/views/hos/statis/year/index'),
         name: 'hos_satisfy_statis_year',
@@ -101,10 +83,22 @@ const csatRouter = [
         meta: { title: '按月统计', noCache: true, permit: 'hos_satisfy_statis_month' }
       },
       {
+        path: 'group',
+        component: () => import('@/views/hos/statis/group/index'),
+        name: 'hos_satisfy_statis_group',
+        meta: { title: '按科室统计', noCache: true, permit: 'hos_satisfy_statis_group' }
+      },
+      {
         path: 'checklist',
         component: () => import('@/views/hos/statis/checklist/index'),
         name: 'hos_satisfy_statis_checklist',
         meta: { title: '按清单统计', noCache: true, permit: 'hos_satisfy_statis_checklist' }
+      },
+      {
+        path: 'target',
+        component: () => import('@/views/hos/statis/target/index'),
+        name: 'hos_satisfy_statis_target',
+        meta: { title: '按目标统计', noCache: true, permit: 'hos_satisfy_statis_target' }
       }
     ]
   },

+ 1 - 1
src/utils/customize_leaflet.js

@@ -320,7 +320,7 @@ export default function(config) {
             //     .openOn(mapLayer);
           }).on('dragend', function() {
             // 拖拽回调
-            // let latlng=item.doctor['_latlng'];
+            // let latlng=item.target['_latlng'];
             // this.setLatLng([latlng.lat,latlng.lng]);
             // setCurrentEditorCover(this)
             // _this.layerType='marker';

+ 1 - 1
src/views/hos/assess/index.vue

@@ -15,7 +15,7 @@
 import { YearMonthScore, AssessList } from '@/views/hos/components'
 import { mapGetters } from 'vuex'
 export default {
-  name: 'AssessIndex',
+  name: 'Index',
   components: { YearMonthScore, AssessList },
   mixins: [],
   props: {},

+ 1 - 1
src/views/hos/components/ArtDetail.vue

@@ -27,7 +27,7 @@
   </div>
 </template>
 <script>
-import Art from '@/views/system/art/components/Art'
+import Art from '@/views/system/art/art'
 import { getArtById, deleteArtById } from '@/api/system/artApi'
 import AttachList from '@/components/AttachList'
 export default {

+ 59 - 124
src/views/hos/components/ArtPanel.vue

@@ -2,49 +2,36 @@
   <div class="ArtPanel-group-box" :style="{height:height}">
     <div class="group-title">
       {{ title }}
-      <el-link @click="showMoreArt(dataList,'最新动态');">更多 <i class="el-icon-caret-right" /></el-link>
+      <el-link @click="showMoreArtData(dataList,'最新动态');">更多 <i class="el-icon-caret-right" /></el-link>
     </div>
     <vuescroll v-if="dataList" :ops="ops" style="height: calc(100% - 40px)">
-      <div class="art_list_block">
+      <div class="task-management">
         <div
           v-for="(item, index) in dataList"
           :key="index"
           class="item"
-          @click="showDetail(item)"
+          @click="showNewsDetail(item)"
         >
           <div class="icon">
             <i class="el-icon-s-comment" />
           </div>
-
           <div class="info">
-            <div class="lf clearfix">
-              <h4>{{ item.artTitle }}</h4>
-            </div>
-            <div class="rt">
-              <div class="el-tag-time">
-                <span style="padding-left:0;color:#c4c1c1;font-size: 10px;">{{ item.issuedAt }}</span>
-              </div>
-
-              <div class="el-tag-art">
-                <el-tag v-if="item.artCatId>=10 && item.artCatId <20" size="mini" class="custom-tag tag-1">平安医院</el-tag>
-                <el-tag v-if="item.artCatId>=20 && item.artCatId <30" size="mini" class="custom-tag tag-2">质量医院</el-tag>
-                <el-tag v-if="item.artCatId>=31 && item.artCatId <40" size="mini" class="custom-tag tag-3">满意医院</el-tag>
-                <el-tag v-if="item.artCatId>=40 && item.artCatId <50" size="mini" class="custom-tag tag-4">智慧医院</el-tag>
-                <el-tag v-if="item.artCatId>=50 && item.artCatId <60" size="mini" class="custom-tag tag-5">健康医院</el-tag>
-                <el-tag v-if="item.artCatId>=60 && item.artCatId <69" size="mini" class="custom-tag tag-6">节约型医院</el-tag>
-              </div>
-            </div>
+            <span class="tag ">{{ item.artCatTitle }}</span>
+            <h4>{{ item.artTitle }}</h4>
+            <p>
+              <span style="padding-left:0;color:#c4c1c1;font-size: 10px;">{{ item.issuedAt }}</span>
+            </p>
           </div>
         </div>
       </div>
     </vuescroll>
-    <ArtDetail ref="ArtDetail" />
+    <ArtDetail ref="NewsDetail" />
   </div>
 </template>
 <script>
 import vuescroll from 'vuescroll'
 import { getRecentArtByList } from '@/api/system/artApi'
-import ArtDetail from '@/views/system/art/components/ArtDetail'
+import ArtDetail from '@/views/system/art/artDetail'
 export default {
   name: 'ArtPanel',
   components: {
@@ -56,14 +43,6 @@ export default {
       type: [String],
       default: '最新动态'
     },
-    artCatId: {
-      type: [String, Number],
-      default: undefined
-    },
-    artCatList: {
-      type: [String, Number],
-      default: undefined
-    },
     more: {
       type: [String],
       default: undefined
@@ -84,10 +63,7 @@ export default {
       },
       listLoading: false,
       dataList: [],
-      conditions: {
-        artCatId: this.artCatId,
-        artCatList: this.artCatList
-      }
+      conditions: {}
     }
   },
   mounted() {
@@ -108,7 +84,7 @@ export default {
       })
     },
 
-    showMoreArt(data, title) {
+    showMoreArtData(data, title) {
       let path = '/hos/news/index'
       if (this.more) {
         path = this.more
@@ -117,9 +93,9 @@ export default {
         path
       })
     },
-    showDetail(item) {
+    showNewsDetail(item) {
       const { artId } = item
-      this.$refs.ArtDetail.showModel(artId)
+      this.$refs.NewsDetail.showModel(artId)
     }
   }
 }
@@ -146,95 +122,54 @@ export default {
       height: 80%;
       overflow: auto;
     }
-    .art_list_block{
-      margin-top: 20px;
-      .item{
-          display: flex;
-          justify-content: flex-start;
-          line-height: 1;
-          margin-bottom: 15px;
-          position: relative;
-          cursor: pointer;
-
-          .info{
-            width: 100%;
-            .lf{
-              float: left;
+    .task-management{
+    margin-top: 20px;
+    .item{
+        display: flex;
+        justify-content: flex-start;
+        line-height: 1;
+        margin-bottom: 15px;
+        position: relative;
+        cursor: pointer;
+        .tag{
+            height: 24px;
+            display: inline-block;
+            position: absolute;
+            right: 0;
+            top: 0;
+            padding: 0px 4px;
+            line-height: 24px;
+            font-size: 12px;
+            color: #fff;
+            border-radius: 4px;
+            box-sizing: border-box;
+            white-space: nowrap;
+            border: 1px solid #d9d0c8;
+            &.none{
+                background-color: transparent;
+                border-color: transparent;
             }
-            .rt{
-              margin-top: 20px;
-              .el-tag-time{
-                text-align: left;
-                float: left;
-              }
-              .el-tag-art{
-                float: right;
-                text-align: right;
-                .custom-tag{
-                  color:#fff;
-                  border-color:#eaeaea;
-                  background-color:transparent;
-                  &.tag-1{color: #b97741;border-color:#b97741;}
-                  &.tag-2{color: #97cd38;border-color:#97cd38;}
-                  &.tag-3{color: #dc5a2c;border-color:#dc5a2c;}
-                  &.tag-4{color: #414ab9;border-color:#414ab9;}
-                  &.tag-5{color: #c13ac9;border-color:#c13ac9;}
-                  &.tag-6{color: #29c761;border-color:#29c761;}
-                }
-              }
+        }
+        p,h4{
+            margin: 0;
+            font-size: 14px;
+        }
+        p{
+            padding-top: 6px;
+            font-size: 8px;
+            color: #f5f5f5;
+        }
+        h4{
+            .status{
+                font-size: 12px;
             }
-          }
-
-          .tag{
-              height: 24px;
-              display: inline-block;
-              position: absolute;
-              right: 0;
-              top: 0;
-              padding: 0px 4px;
-              line-height: 24px;
-              font-size: 12px;
-              color: #fff;
-              border-radius: 4px;
-              box-sizing: border-box;
-              white-space: nowrap;
-              border: 1px solid #d9d0c8;
-              &.none{
-                  background-color: transparent;
-                  border-color: transparent;
-              }
-          }
-          p,h4{
-              margin: 0;
-              font-size: 14px;
-          }
-          p{
-              padding-top: 6px;
-              font-size: 8px;
-              color: #f5f5f5;
-          }
-          h4{
-              .status{
-                  font-size: 12px;
-              }
-          }
-        .custom-tag{
-          color:#fff;
-          border-color:#eaeaea;
-          background-color:transparent;
-          &.tag-2{color: #b97741;border-color:#b97741;}
-          &.tag-3{color: #97cd38;border-color:#97cd38;}
-          &.tag-4{color: #dc5a2c;border-color:#dc5a2c;}
-          &.tag-5{color: #414ab9;border-color:#414ab9;}
-          &.tag-6{color: #c13ac9;border-color:#c13ac9;}
-          &.tag-7{color: #29c761;border-color:#29c761;}
         }
-          .icon{
-              width: 45px;
-              height: 45px;
-              font-size: 26px;
-          }
-      }
+        .icon{
+            width: 45px;
+            height: 45px;
+            font-size: 26px;
+        }
+    }
     }
   }
 </style>

+ 1 - 1
src/views/hos/components/AssessList.vue

@@ -58,7 +58,7 @@
 
         <el-table-column prop="hosScore" label="得分" width="80" header-align="center" align="center">
           <template v-slot="{row}">
-            <span v-if="row.isAssessed > 0" class="hosScore" :class="row|hosScoreClass">{{ row.hosScore }}</span>
+            <span v-if="row.hosScore" class="hosScore" :class="row|hosScoreClass">{{ row.hosScore }}</span>
             <span v-else class="notappraise">未评价</span>
           </template>
         </el-table-column>

+ 1 - 0
src/views/hos/doctor/components/Doctor.vue

@@ -224,6 +224,7 @@ export default {
     font-size: 16px;
     font-weight: bold;
     color: #FFFFFF;
+    font-weight: bold;
     background: linear-gradient(0deg, #FFFFFF 0%, #98A8B7 100%);
     -webkit-background-clip: text;
     -webkit-text-fill-color: transparent;

+ 1 - 1
src/views/hos/news/index.vue

@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import ArtList from '@/views/system/art/components/ArtList'
+import ArtList from '@/views/system/art/artList'
 import { mapGetters } from 'vuex'
 export default {
   name: 'Index',

+ 10 - 10
src/views/hos/panorama/index.vue

@@ -198,7 +198,7 @@
 </template>
 
 <script>
-import { gridByList, groupByList, doctorByList } from '@/api/hos/satisfyStatisApi'
+import { gridScoreByList, groupScoreByList, doctorScoreByList } from '@/api/hos/satisfyStatisApi'
 import { yearOverview, monthOverview, todayOverview } from '@/api/hos/satisfyPanoramaApi'
 import monthChart from './components/monthChart'
 import FullYearChart from './components/FullYearChart'
@@ -323,9 +323,9 @@ export default {
       this.getyearOverview()
       this.getMonthOverview()
       this.getTodayOverview()
-      this.getGridByList()
-      this.getDoctorByList()
-      this.getGroupByList()
+      this.getGridScoreByList()
+      this.getDoctorScoreByList()
+      this.getGroupScoreByList()
     },
     getTodayOverview() {
       todayOverview().then((resp) => {
@@ -357,8 +357,8 @@ export default {
         }
       })
     },
-    getGridByList() {
-      gridByList(this.conditions).then((resp) => {
+    getGridScoreByList() {
+      gridScoreByList(this.conditions).then((resp) => {
         const { code, msg, data } = resp
         if (code === 0) {
           this.gridDataList = data
@@ -367,8 +367,8 @@ export default {
         }
       })
     },
-    getGroupByList() {
-      groupByList(this.conditions).then((resp) => {
+    getGroupScoreByList() {
+      groupScoreByList(this.conditions).then((resp) => {
         const { code, msg, data } = resp
         if (code === 0) {
           this.groupDataList = data
@@ -377,8 +377,8 @@ export default {
         }
       })
     },
-    getDoctorByList() {
-      doctorByList(this.conditions).then((resp) => {
+    getDoctorScoreByList() {
+      doctorScoreByList(this.conditions).then((resp) => {
         const { code, msg, data } = resp
         if (code === 0) {
           this.doctorDataList = data

+ 5 - 250
src/views/hos/statis/checklist/index.vue

@@ -1,129 +1,20 @@
 <template>
   <div class="content-container">
     <el-row class="tool-bar">
-      <div class="content-title">
-        <span> {{ title }} </span>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">部门:</span>
-        <group-selector />
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">月份:</span>
-        <el-select v-model="conditions.month" filterable placeholder="月份" style="width:120px" clearable>
-          <el-option label="1月" :value="1" />
-          <el-option label="2月" :value="2" />
-          <el-option label="3月" :value="3" />
-          <el-option label="4月" :value="4" />
-          <el-option label="5月" :value="5" />
-          <el-option label="6月" :value="6" />
-          <el-option label="7月" :value="7" />
-          <el-option label="8月" :value="8" />
-          <el-option label="9月" :value="9" />
-          <el-option label="10月" :value="10" />
-          <el-option label="11月" :value="11" />
-          <el-option label="12月" :value="12" />
-        </el-select>
-      </div>
-
-      <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
-        <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
-      </div>
-    </el-row>
-    <el-row class="content-body">
-      <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
-        <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="部门">
-            <template v-slot="{row}">
-              <span> {{ row.groupName }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="年度">
-            <template v-slot="{row}">
-              <span> {{ row.year }}年-{{ row.month }}月</span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="清单">
-            <template v-slot="{row}">
-              <i class="icon-common_message" /><span> {{ row.checklistTitle }}</span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="总评分">
-            <template v-slot="{row}">
-              <span> {{ row.score }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价目标数目">
-            <template v-slot="{row}">
-              <span> {{ row.targetQty }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </vuescroll>
+      <div class="content-title">按清单统计</div>
     </el-row>
   </div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex'
-import GroupSelector from '@/components/GroupSelector'
-import vuescroll from 'vuescroll'
-import { groupChecklistMonthByList } from '@/api/hos/satisfyStatisApi'
 export default {
-  name: 'MonthSatisIndex',
-  components: { vuescroll, GroupSelector },
+  name: 'ChecklistSatisIndex',
+  components: { },
   mixins: [],
   props: {},
   data() {
     return {
-      ops: {
-        bar: {
-          keepShow: false,
-          background: 'rgba(144, 147, 153, 0.4)',
-          onlyShowBarOnScroll: false
-        }
-      },
-      title: '满意度-按清单统计',
-      listLoading: false,
-      dataList: [],
-      conditions: {
-        keywords: undefined,
-        groupId: undefined,
-        year: undefined,
-        month: undefined
-      }
-
     }
   },
   computed: {
@@ -131,99 +22,10 @@ export default {
       'userData'
     ])
   },
-  mounted() {
-    this.getData()
-  },
+  mounted() {},
   methods: {
-
     getData() {
-      this.listLoading = true
-      groupChecklistMonthByList(this.conditions).then((resp) => {
-        this.listLoading = false
-        const { code, msg, data } = resp
-        if (code === 0) {
-          this.dataList = data
-          this.showYearChart(data)
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    },
-
-    // 显示评分
-    showYearChart(data) {
-      var recordQty = []
-      var score = []
-      var year = []
-      var targetQty = []
-      for (let i = 0; i < data.length; i++) {
-        recordQty.push(`${data[i].recordQty}`)
-        score.push(`${data[i].score}`)
-        year.push(`${data[i].year}`)
-        targetQty.push(`${data[i].targetQty}`)
-      }
-      console.log({
-        targetQty, recordQty, year, score
-      })
-      this.yearKeys = year
-      this.scoreYearValues = score
-      this.targetYearValues = targetQty
-      this.recordYearValues = recordQty
-    },
-
-    // 导出评价记录
-    handleExport() {
-      if (this.recordList.length <= 0) {
-        this.$message.info('数据为空')
-        return
-      }
-
-      this.downloadLoading = true
-      import('@/vendor/Export2Excel').then(excel => {
-        const tHeader = ['科室', '年度', '评价次数', '得分']
-        const filterVal = ['groupName', 'year', 'recordQty', 'score']
-        const data = this.formatJson(filterVal, this.yearScoreList)
-        excel.export_json_to_excel({
-          header: tHeader,
-          data,
-          filename: '',
-          autoWidth: true,
-          bookType: 'xlsx'
-        })
-        this.downloadLoading = false
-      })
-    },
 
-    handlePrint() {
-      let iframe = document.getElementById('print-iframe')
-      if (!iframe) {
-        var el = document.querySelector('#print_view')
-        iframe = document.createElement('IFRAME')
-        var doc = null
-        iframe.setAttribute('id', 'print-iframe')
-        iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;')
-        document.body.appendChild(iframe)
-        doc = iframe.contentWindow.document
-        const styleHtml = 'table{color:#fff;background-color:#0C3444;-webkit-print-color-adjust: exact;}' +
-          'td,th{padding:10px;}' +
-          'th{background:#306379;-webkit-print-color-adjust: exact;}' +
-          'td{background:#0C3444;-webkit-print-color-adjust: exact; }'
-        doc.write(`<html><head><style media="print">@media print {${styleHtml}}</style></head><body style="zoom: 60%;">${el.innerHTML}</body></html>`)
-        doc.close()
-        iframe.contentWindow.focus()
-      }
-      iframe.contentWindow.print()
-      document.body.removeChild(iframe)
-      // if (navigator.userAgent.indexOf('MSIE') > 0) {
-      //   document.body.removeChild(iframe)
-      // }
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v => filterVal.map(j => {
-        return v[j]
-      }))
     }
   }
 }
@@ -231,53 +33,6 @@ export default {
 
 <style lang="scss" scoped>
 .content-container {
-  padding: 10px;
-  margin: 10px;
-  overflow: hidden;
-  background: #193142;
-  height: calc(100vh - 85px);
-  p {
-    margin: 0;
-    line-height: 2em;
-    padding: 0;
-  }
-  .tool-bar {
-    display: flex;
-    align-items: center;
-    overflow: unset;
-    .list-group {
-      font-size: 14px;
-      color: #C1C6C8;
-      // overflow: hidden;
-      padding:0 20px;
-      .list-item {
-        float: left;
-        margin-right: 20px;
-        cursor: pointer;
-        &.active {
-          color: #FFFFFF;
-          border-bottom: 3px solid #08A6DC;
-        }
-      }
-    }
-    .search-label {
-      text-align: right;
-      font-size: 12px;
-      font-weight: 400;
-      color: #FFFFFF;
-      line-height: 1;
-      span {
-        font-size: 20px;
-        font-weight: 400;
-        color: #FFFFFF;
-      }
-    }
-  }
-}
-.select-search{
-  margin-left: 20px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
+  height: calc(100vh - 90px);
 }
 </style>

+ 0 - 206
src/views/hos/statis/doctor/index.vue

@@ -1,206 +0,0 @@
-<template>
-  <div class="content-container">
-    <el-row class="tool-bar">
-      <div class="content-title">
-        <span> {{ title }} </span>
-      </div>
-      <div class="select-search">
-        <span class="search-label">部门:</span>
-        <group-selector />
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">月份:</span>
-        <el-select v-model="conditions.month" filterable placeholder="月份" style="width:120px" clearable>
-          <el-option label="1月" :value="1" />
-          <el-option label="2月" :value="2" />
-          <el-option label="3月" :value="3" />
-          <el-option label="4月" :value="4" />
-          <el-option label="5月" :value="5" />
-          <el-option label="6月" :value="6" />
-          <el-option label="7月" :value="7" />
-          <el-option label="8月" :value="8" />
-          <el-option label="9月" :value="9" />
-          <el-option label="10月" :value="10" />
-          <el-option label="11月" :value="11" />
-          <el-option label="12月" :value="12" />
-        </el-select>
-      </div>
-
-      <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
-        <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
-      </div>
-    </el-row>
-
-    <el-row class="content-body">
-      <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
-        <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="人员姓名">
-            <template v-slot="{row}">
-              <span> {{ row.doctorName }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="总评分">
-            <template v-slot="{row}">
-              <span> {{ row.score }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价目标数目">
-            <template v-slot="{row}">
-              <span> {{ row.targetQty }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </vuescroll>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from 'vuex'
-import vuescroll from 'vuescroll'
-import { doctorByList } from '@/api/hos/satisfyStatisApi'
-import { GroupSelector } from '@/components'
-
-export default {
-  name: 'DoctorSatisIndex',
-  components: { vuescroll, GroupSelector },
-  mixins: [],
-  props: {},
-  data() {
-    return {
-      ops: {
-        bar: {
-          keepShow: false,
-          background: 'rgba(144, 147, 153, 0.4)',
-          onlyShowBarOnScroll: false
-        }
-      },
-      title: '医生排名',
-      listLoading: false,
-      dataList: [],
-      conditions: {
-        keywords: undefined,
-        groupId: undefined,
-        year: undefined,
-        month: undefined
-      }
-
-    }
-  },
-  computed: {
-    ...mapGetters([
-      'userData'
-    ])
-  },
-  mounted() {
-    this.getData()
-  },
-  methods: {
-
-    getData() {
-      this.listLoading = true
-      doctorByList(this.conditions).then((resp) => {
-        this.listLoading = false
-        const { code, msg, data } = resp
-        if (code === 0) {
-          this.dataList = data
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    },
-
-    handleExport() {
-
-    },
-
-    handlePrint() {
-
-    }
-
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.content-container {
-  padding: 10px;
-  margin: 10px;
-  overflow: hidden;
-  background: #193142;
-  height: calc(100vh - 85px);
-  p {
-    margin: 0;
-    line-height: 2em;
-    padding: 0;
-  }
-  .tool-bar {
-    display: flex;
-    align-items: center;
-    overflow: unset;
-    .list-group {
-      font-size: 14px;
-      color: #C1C6C8;
-      // overflow: hidden;
-      padding:0 20px;
-      .list-item {
-        float: left;
-        margin-right: 20px;
-        cursor: pointer;
-        &.active {
-          color: #FFFFFF;
-          border-bottom: 3px solid #08A6DC;
-        }
-      }
-    }
-    .search-label {
-      text-align: right;
-      font-size: 12px;
-      font-weight: 400;
-      color: #FFFFFF;
-      line-height: 1;
-      span {
-        font-size: 20px;
-        font-weight: 400;
-        color: #FFFFFF;
-      }
-    }
-  }
-}
-.select-search{
-  margin-left: 20px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-}
-</style>

+ 0 - 202
src/views/hos/statis/grid/index.vue

@@ -1,202 +0,0 @@
-<template>
-  <div class="content-container">
-    <el-row class="tool-bar">
-      <div class="content-title">
-        <span> {{ title }} </span>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">部门:</span>
-        <group-selector />
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">月份:</span>
-        <el-select v-model="conditions.month" filterable placeholder="月份" style="width:120px" clearable>
-          <el-option label="1月" :value="1" />
-          <el-option label="2月" :value="2" />
-          <el-option label="3月" :value="3" />
-          <el-option label="4月" :value="4" />
-          <el-option label="5月" :value="5" />
-          <el-option label="6月" :value="6" />
-          <el-option label="7月" :value="7" />
-          <el-option label="8月" :value="8" />
-          <el-option label="9月" :value="9" />
-          <el-option label="10月" :value="10" />
-          <el-option label="11月" :value="11" />
-          <el-option label="12月" :value="12" />
-        </el-select>
-      </div>
-
-      <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
-        <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
-      </div>
-    </el-row>
-
-    <el-row class="content-body">
-
-      <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
-        <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="场所">
-            <template v-slot="{row}">
-              <span> {{ row.gridTitle }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="总评分">
-            <template v-slot="{row}">
-              <span> {{ row.score }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </vuescroll>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from 'vuex'
-import vuescroll from 'vuescroll'
-import { gridByList } from '@/api/hos/satisfyStatisApi'
-import GroupSelector from '@/components/GroupSelector'
-
-export default {
-  name: 'DoctorSatisIndex',
-  components: { vuescroll, GroupSelector },
-  mixins: [],
-  props: {},
-  data() {
-    return {
-      ops: {
-        bar: {
-          keepShow: false,
-          background: 'rgba(144, 147, 153, 0.4)',
-          onlyShowBarOnScroll: false
-        }
-      },
-      title: '场所排名',
-      listLoading: false,
-      dataList: [],
-      conditions: {
-        keywords: undefined,
-        groupId: undefined,
-        year: undefined,
-        month: undefined
-      }
-
-    }
-  },
-  computed: {
-    ...mapGetters([
-      'userData'
-    ])
-  },
-  mounted() {
-    this.getData()
-  },
-  methods: {
-
-    getData() {
-      this.listLoading = true
-      gridByList(this.conditions).then((resp) => {
-        this.listLoading = false
-        const { code, msg, data } = resp
-        if (code === 0) {
-          this.dataList = data
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    },
-
-    handleExport() {
-
-    },
-
-    handlePrint() {
-
-    }
-
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.content-container {
-  padding: 10px;
-  margin: 10px;
-  overflow: hidden;
-  background: #193142;
-  height: calc(100vh - 85px);
-  p {
-    margin: 0;
-    line-height: 2em;
-    padding: 0;
-  }
-  .tool-bar {
-    display: flex;
-    align-items: center;
-    overflow: unset;
-    .list-group {
-      font-size: 14px;
-      color: #C1C6C8;
-      // overflow: hidden;
-      padding:0 20px;
-      .list-item {
-        float: left;
-        margin-right: 20px;
-        cursor: pointer;
-        &.active {
-          color: #FFFFFF;
-          border-bottom: 3px solid #08A6DC;
-        }
-      }
-    }
-    .search-label {
-      text-align: right;
-      font-size: 12px;
-      font-weight: 400;
-      color: #FFFFFF;
-      line-height: 1;
-      span {
-        font-size: 20px;
-        font-weight: 400;
-        color: #FFFFFF;
-      }
-    }
-  }
-}
-.select-search{
-  margin-left: 20px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-}
-</style>

+ 4 - 210
src/views/hos/statis/group/index.vue

@@ -1,112 +1,20 @@
 <template>
   <div class="content-container">
     <el-row class="tool-bar">
-      <div class="content-title">
-        <span> {{ title }} </span>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">月份:</span>
-        <el-select v-model="conditions.month" filterable placeholder="月份" style="width:120px" clearable>
-          <el-option label="1月" :value="1" />
-          <el-option label="2月" :value="2" />
-          <el-option label="3月" :value="3" />
-          <el-option label="4月" :value="4" />
-          <el-option label="5月" :value="5" />
-          <el-option label="6月" :value="6" />
-          <el-option label="7月" :value="7" />
-          <el-option label="8月" :value="8" />
-          <el-option label="9月" :value="9" />
-          <el-option label="10月" :value="10" />
-          <el-option label="11月" :value="11" />
-          <el-option label="12月" :value="12" />
-        </el-select>
-      </div>
-
-      <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
-        <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
-      </div>
-    </el-row>
-
-    <el-row class="content-body">
-      <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
-        <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="部门">
-            <template v-slot="{row}">
-              <span> {{ row.groupName }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="总评分">
-            <template v-slot="{row}">
-              <span> {{ row.score }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价目标数目">
-            <template v-slot="{row}">
-              <span> {{ row.targetQty }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </vuescroll>
+      <div class="content-title">按科室统计</div>
     </el-row>
   </div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex'
-import vuescroll from 'vuescroll'
-import { groupByList } from '@/api/hos/satisfyStatisApi'
 export default {
   name: 'GroupSatisIndex',
-  components: { vuescroll },
+  components: { },
   mixins: [],
   props: {},
   data() {
     return {
-      ops: {
-        bar: {
-          keepShow: false,
-          background: 'rgba(144, 147, 153, 0.4)',
-          onlyShowBarOnScroll: false
-        }
-      },
-      title: '科室排名',
-      listLoading: false,
-      dataList: [],
-      conditions: {
-        keywords: undefined,
-        groupId: undefined,
-        year: undefined,
-        month: undefined
-      }
-
     }
   },
   computed: {
@@ -114,77 +22,10 @@ export default {
       'userData'
     ])
   },
-  mounted() {
-    this.getData()
-  },
+  mounted() {},
   methods: {
-
     getData() {
-      this.listLoading = true
-      groupByList(this.conditions).then((resp) => {
-        this.listLoading = false
-        const { code, msg, data } = resp
-        if (code === 0) {
-          this.dataList = data
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    },
-
-    // 导出评价记录
-    handleExport() {
-      if (this.recordList.length <= 0) {
-        this.$message.info('数据为空')
-        return
-      }
 
-      this.downloadLoading = true
-      import('@/vendor/Export2Excel').then(excel => {
-        const tHeader = ['科室', '年度', '评价次数', '得分']
-        const filterVal = ['groupName', 'year', 'recordQty', 'score']
-        const data = this.formatJson(filterVal, this.yearScoreList)
-        excel.export_json_to_excel({
-          header: tHeader,
-          data,
-          filename: '',
-          autoWidth: true,
-          bookType: 'xlsx'
-        })
-        this.downloadLoading = false
-      })
-    },
-
-    handlePrint() {
-      let iframe = document.getElementById('print-iframe')
-      if (!iframe) {
-        var el = document.querySelector('#print_view')
-        iframe = document.createElement('IFRAME')
-        var doc = null
-        iframe.setAttribute('id', 'print-iframe')
-        iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;')
-        document.body.appendChild(iframe)
-        doc = iframe.contentWindow.document
-        const styleHtml = 'table{color:#fff;background-color:#0C3444;-webkit-print-color-adjust: exact;}' +
-          'td,th{padding:10px;}' +
-          'th{background:#306379;-webkit-print-color-adjust: exact;}' +
-          'td{background:#0C3444;-webkit-print-color-adjust: exact; }'
-        doc.write(`<html><head><style media="print">@media print {${styleHtml}}</style></head><body style="zoom: 60%;">${el.innerHTML}</body></html>`)
-        doc.close()
-        iframe.contentWindow.focus()
-      }
-      iframe.contentWindow.print()
-      document.body.removeChild(iframe)
-      // if (navigator.userAgent.indexOf('MSIE') > 0) {
-      //   document.body.removeChild(iframe)
-      // }
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v => filterVal.map(j => {
-        return v[j]
-      }))
     }
   }
 }
@@ -192,53 +33,6 @@ export default {
 
 <style lang="scss" scoped>
 .content-container {
-  padding: 10px;
-  margin: 10px;
-  overflow: hidden;
-  background: #193142;
-  height: calc(100vh - 85px);
-  p {
-    margin: 0;
-    line-height: 2em;
-    padding: 0;
-  }
-  .tool-bar {
-    display: flex;
-    align-items: center;
-    overflow: unset;
-    .list-group {
-      font-size: 14px;
-      color: #C1C6C8;
-      // overflow: hidden;
-      padding:0 20px;
-      .list-item {
-        float: left;
-        margin-right: 20px;
-        cursor: pointer;
-        &.active {
-          color: #FFFFFF;
-          border-bottom: 3px solid #08A6DC;
-        }
-      }
-    }
-    .search-label {
-      text-align: right;
-      font-size: 12px;
-      font-weight: 400;
-      color: #FFFFFF;
-      line-height: 1;
-      span {
-        font-size: 20px;
-        font-weight: 400;
-        color: #FFFFFF;
-      }
-    }
-  }
-}
-.select-search{
-  margin-left: 20px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
+  height: calc(100vh - 90px);
 }
 </style>

+ 4 - 242
src/views/hos/statis/month/index.vue

@@ -1,122 +1,20 @@
 <template>
   <div class="content-container">
     <el-row class="tool-bar">
-      <div class="content-title">
-        <span> {{ title }} </span>
-      </div>
-      <div class="select-search">
-        <span class="search-label">部门:</span>
-        <group-selector />
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
-      </div>
-
-      <div class="select-search">
-        <span class="search-label">月份:</span>
-        <el-select v-model="conditions.month" filterable placeholder="月份" style="width:120px" clearable>
-          <el-option label="1月" :value="1" />
-          <el-option label="2月" :value="2" />
-          <el-option label="3月" :value="3" />
-          <el-option label="4月" :value="4" />
-          <el-option label="5月" :value="5" />
-          <el-option label="6月" :value="6" />
-          <el-option label="7月" :value="7" />
-          <el-option label="8月" :value="8" />
-          <el-option label="9月" :value="9" />
-          <el-option label="10月" :value="10" />
-          <el-option label="11月" :value="11" />
-          <el-option label="12月" :value="12" />
-        </el-select>
-      </div>
-
-      <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
-        <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
-        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
-      </div>
-    </el-row>
-    <el-row class="content-body">
-      <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
-        <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="部门">
-            <template v-slot="{row}">
-              <span> {{ row.groupName }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="年月">
-            <template v-slot="{row}">
-              <span> {{ row.year }}年-{{ row.month }}月</span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="总评分">
-            <template v-slot="{row}">
-              <span> {{ row.score }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价目标数目">
-            <template v-slot="{row}">
-              <span> {{ row.targetQty }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
-        </el-table>
-      </vuescroll>
+      <div class="content-title">按月统计</div>
     </el-row>
   </div>
 </template>
 
 <script>
 import { mapGetters } from 'vuex'
-import GroupSelector from '@/components/GroupSelector'
-import vuescroll from 'vuescroll'
-import { groupMonthByList } from '@/api/hos/satisfyStatisApi'
 export default {
   name: 'MonthSatisIndex',
-  components: { vuescroll, GroupSelector },
+  components: { },
   mixins: [],
   props: {},
   data() {
     return {
-      ops: {
-        bar: {
-          keepShow: false,
-          background: 'rgba(144, 147, 153, 0.4)',
-          onlyShowBarOnScroll: false
-        }
-      },
-      title: '满意度-按年月统计',
-      listLoading: false,
-      dataList: [],
-      conditions: {
-        groupId: undefined,
-        year: undefined,
-        month: undefined,
-        keywords: undefined
-      }
-
     }
   },
   computed: {
@@ -124,99 +22,10 @@ export default {
       'userData'
     ])
   },
-  mounted() {
-    this.getData()
-  },
+  mounted() {},
   methods: {
-
     getData() {
-      this.listLoading = true
-      groupMonthByList(this.conditions).then((resp) => {
-        this.listLoading = false
-        const { code, msg, data } = resp
-        if (code === 0) {
-          this.dataList = data
-          this.showYearChart(data)
-        } else {
-          this.$message.error(msg)
-        }
-      }).catch((error) => {
-        console.log(error)
-      })
-    },
-
-    // 显示评分
-    showYearChart(data) {
-      var recordQty = []
-      var score = []
-      var year = []
-      var targetQty = []
-      for (let i = 0; i < data.length; i++) {
-        recordQty.push(`${data[i].recordQty}`)
-        score.push(`${data[i].score}`)
-        year.push(`${data[i].year}`)
-        targetQty.push(`${data[i].targetQty}`)
-      }
-      console.log({
-        targetQty, recordQty, year, score
-      })
-      this.yearKeys = year
-      this.scoreYearValues = score
-      this.targetYearValues = targetQty
-      this.recordYearValues = recordQty
-    },
-
-    // 导出评价记录
-    handleExport() {
-      if (this.recordList.length <= 0) {
-        this.$message.info('数据为空')
-        return
-      }
-
-      this.downloadLoading = true
-      import('@/vendor/Export2Excel').then(excel => {
-        const tHeader = ['科室', '年度', '评价次数', '得分']
-        const filterVal = ['groupName', 'year', 'recordQty', 'score']
-        const data = this.formatJson(filterVal, this.yearScoreList)
-        excel.export_json_to_excel({
-          header: tHeader,
-          data,
-          filename: '',
-          autoWidth: true,
-          bookType: 'xlsx'
-        })
-        this.downloadLoading = false
-      })
-    },
 
-    handlePrint() {
-      let iframe = document.getElementById('print-iframe')
-      if (!iframe) {
-        var el = document.querySelector('#print_view')
-        iframe = document.createElement('IFRAME')
-        var doc = null
-        iframe.setAttribute('id', 'print-iframe')
-        iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;')
-        document.body.appendChild(iframe)
-        doc = iframe.contentWindow.document
-        const styleHtml = 'table{color:#fff;background-color:#0C3444;-webkit-print-color-adjust: exact;}' +
-          'td,th{padding:10px;}' +
-          'th{background:#306379;-webkit-print-color-adjust: exact;}' +
-          'td{background:#0C3444;-webkit-print-color-adjust: exact; }'
-        doc.write(`<html><head><style media="print">@media print {${styleHtml}}</style></head><body style="zoom: 60%;">${el.innerHTML}</body></html>`)
-        doc.close()
-        iframe.contentWindow.focus()
-      }
-      iframe.contentWindow.print()
-      document.body.removeChild(iframe)
-      // if (navigator.userAgent.indexOf('MSIE') > 0) {
-      //   document.body.removeChild(iframe)
-      // }
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v => filterVal.map(j => {
-        return v[j]
-      }))
     }
   }
 }
@@ -224,53 +33,6 @@ export default {
 
 <style lang="scss" scoped>
 .content-container {
-  padding: 10px;
-  margin: 10px;
-  overflow: hidden;
-  background: #193142;
-  height: calc(100vh - 85px);
-  p {
-    margin: 0;
-    line-height: 2em;
-    padding: 0;
-  }
-  .tool-bar {
-    display: flex;
-    align-items: center;
-    overflow: unset;
-    .list-group {
-      font-size: 14px;
-      color: #C1C6C8;
-      // overflow: hidden;
-      padding:0 20px;
-      .list-item {
-        float: left;
-        margin-right: 20px;
-        cursor: pointer;
-        &.active {
-          color: #FFFFFF;
-          border-bottom: 3px solid #08A6DC;
-        }
-      }
-    }
-    .search-label {
-      text-align: right;
-      font-size: 12px;
-      font-weight: 400;
-      color: #FFFFFF;
-      line-height: 1;
-      span {
-        font-size: 20px;
-        font-weight: 400;
-        color: #FFFFFF;
-      }
-    }
-  }
-}
-.select-search{
-  margin-left: 20px;
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
+  height: calc(100vh - 90px);
 }
 </style>

+ 38 - 0
src/views/hos/statis/target/index.vue

@@ -0,0 +1,38 @@
+<template>
+  <div class="content-container">
+    <el-row class="tool-bar">
+      <div class="content-title">按目标统计</div>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+export default {
+  name: 'TargetSatisIndex',
+  components: { },
+  mixins: [],
+  props: {},
+  data() {
+    return {
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'userData'
+    ])
+  },
+  mounted() {},
+  methods: {
+    getData() {
+
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.content-container {
+  height: calc(100vh - 90px);
+}
+</style>

+ 37 - 39
src/views/hos/statis/year/index.vue

@@ -4,33 +4,21 @@
       <div class="content-title">
         <span> {{ title }} </span>
       </div>
-
       <div class="select-search">
-        <span class="search-label">年度:</span>
-        <el-select v-model="conditions.year" filterable placeholder="年份" style="width:120px">
-          <el-option label="2022年" :value="2022" />
-          <el-option label="2023年" :value="2023" />
-          <el-option label="2024年" :value="2024" />
-          <el-option label="2025年" :value="2025" />
-          <el-option label="2026年" :value="2026" />
-          <el-option label="2027年" :value="2027" />
-        </el-select>
+        <span class="search-label">部门:</span>
+        <group-selector />
       </div>
-
       <div class="right" style="min-width:400px;flex: 1;">
-        <el-input v-model="conditions.keywords" class="search-input m-right-15" placeholder="请输入内容">
-          <el-button slot="append" icon="el-icon-search" @click="getData()" />
-        </el-input>
         <el-button class="filter-item" type="primary" icon="el-icon-document" size="mini" @click="handleExport">导出</el-button>
         <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
       </div>
     </el-row>
     <el-row class="content-body">
-
+      <FullYearChart :keys="yearScoreKeys" :values="yearScoreValues" />
       <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
         <!--年度-->
-        <el-table id="print_view" v-loading="listLoading" border :data="dataList">
-          <el-table-column type="index" align="center" label="序号" width="80" />
+        <el-table id="print_view" v-loading="listLoading" border :data="yearScoreList">
+          <el-table-column type="index" align="center" label="序号" width="200" />
 
           <el-table-column prop="year" header-align="center" align="center" width="300" label="部门">
             <template v-slot="{row}">
@@ -38,29 +26,17 @@
             </template>
           </el-table-column>
 
-          <el-table-column prop="year" header-align="center" align="center" width="300" label="年">
+          <el-table-column prop="year" header-align="center" align="center" width="300" label="年">
             <template v-slot="{row}">
               <span> {{ row.year }}年</span>
             </template>
           </el-table-column>
 
-          <el-table-column prop="score" header-align="center" align="center" label="评分">
+          <el-table-column prop="score" header-align="center" align="center" label="评分">
             <template v-slot="{row}">
               <span> {{ row.score }} </span>
             </template>
           </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价目标数目">
-            <template v-slot="{row}">
-              <span> {{ row.targetQty }} </span>
-            </template>
-          </el-table-column>
-
-          <el-table-column prop="score" header-align="center" align="center" label="评价次数">
-            <template v-slot="{row}">
-              <span> {{ row.recordQty }} </span>
-            </template>
-          </el-table-column>
         </el-table>
       </vuescroll>
     </el-row>
@@ -69,11 +45,13 @@
 
 <script>
 import { mapGetters } from 'vuex'
+import FullYearChart from '../../components/FullYearChart'
+import GroupSelector from '@/components/GroupSelector'
 import vuescroll from 'vuescroll'
-import { groupYearByList } from '@/api/hos/satisfyStatisApi'
+import { groupYearScoreByList } from '@/api/hos/satisfyStatisApi'
 export default {
   name: 'YearSatisIndex',
-  components: { vuescroll },
+  components: { vuescroll, GroupSelector, FullYearChart },
   mixins: [],
   props: {},
   data() {
@@ -87,9 +65,10 @@ export default {
       },
       title: '满意度-按年统计',
       listLoading: false,
-      dataList: [],
+      yearScoreList: [],
+      yearScoreKeys: [],
+      yearScoreValues: [],
       conditions: {
-        keywords: undefined,
         groupId: undefined
       }
 
@@ -107,12 +86,12 @@ export default {
 
     getData() {
       this.listLoading = true
-      groupYearByList(this.conditions).then((resp) => {
+      groupYearScoreByList(this.conditions).then((resp) => {
         this.listLoading = false
         const { code, msg, data } = resp
         if (code === 0) {
-          this.dataList = data
-          this.showYearChart(data)
+          this.yearScoreList = data
+          this.showYearScore(data)
         } else {
           this.$message.error(msg)
         }
@@ -121,6 +100,25 @@ export default {
       })
     },
 
+    // 显示月份同比
+    showYearScore(data) {
+      var recordQty = []
+      var score = []
+      var year = []
+      var targetQty = []
+      for (let i = 0; i < data.length; i++) {
+        recordQty.push(`${data[i].recordQty}`)
+        score.push(`${data[i].score}`)
+        year.push(`${data[i].year}`)
+        targetQty.push(`${data[i].targetQty}`)
+      }
+      console.log({
+        targetQty, recordQty, year, score
+      })
+      this.yearScoreKeys = year
+      this.yearScoreValues = score
+    },
+
     // 导出评价记录
     handleExport() {
       if (this.recordList.length <= 0) {
@@ -223,7 +221,7 @@ export default {
   }
 }
 .select-search{
-  margin-left: 20px;
+  margin-left: 6px;
   display: flex;
   justify-content: flex-start;
   align-items: center;

+ 1 - 1
src/views/system/art/components/Art.vue → src/views/system/art/art.vue

@@ -56,7 +56,7 @@
 import { ACTION_ADD, ACTION_UPDATE } from '@/utils/actionType'
 import FileUpload from '@/components/FileUpload/multiUpload'
 import { createArt, getArtById, updateArt } from '@/api/system/artApi'
-import ArtCatSelector from '@/components/ArtCatSelector'
+import ArtCatSelector from '@/components/ArtCatSelector/index'
 import Vuescroll from 'vuescroll'
 import MarkdownEditor from '@/components/Editor/Markdown.vue'
 export default {

+ 0 - 0
src/views/system/art/components/ArtCat.vue → src/views/system/art/artCat.vue


+ 2 - 2
src/views/system/art/components/ArtDetail.vue → src/views/system/art/artDetail.vue

@@ -1,8 +1,8 @@
 <template>
   <el-drawer
     :title="artInfo.artTitle"
-    :append-to-body="true"
-    :modal="true"
+    :modal-append-to-body="false"
+    :modal="false"
     :wrapper-closable="false"
     size="99.5%"
     :visible.sync="dialogVisible"

+ 2 - 2
src/views/system/art/components/ArtList.vue → src/views/system/art/artList.vue

@@ -64,8 +64,8 @@
 import { getArtByPage, deleteArtById } from '@/api/system/artApi'
 import Pagination from '@/components/Pagination'
 import { mapGetters } from 'vuex'
-import Art from './Art'
-import artDetail from './ArtDetail'
+import Art from './art'
+import artDetail from './artDetail'
 export default {
   components: {
     Pagination,

+ 2 - 2
src/views/system/art/index.vue

@@ -12,8 +12,8 @@
 </template>
 
 <script>
-import LeftCat from './components/LeftCat'
-import ArtList from './components/ArtList'
+import LeftCat from './leftCat'
+import ArtList from './artList'
 
 export default {
   name: 'ArtIndex',

+ 1 - 1
src/views/system/art/components/LeftCat.vue → src/views/system/art/leftCat.vue

@@ -36,7 +36,7 @@
 
 import { getArtCatByList, deleteArtCatById } from '@/api/system/artCatApi'
 import { toTree } from '@/utils/build-tree'
-import ArtCat from './ArtCat'
+import ArtCat from './artCat'
 import Vuescroll from 'vuescroll'
 
 export default {

+ 3 - 4
src/views/system/doc/fileList.vue

@@ -27,10 +27,7 @@
         <el-table-column type="index" label="序号" width="80" header-align="center" align="center" />
         <el-table-column prop="fileTitle" label="文件名称" header-align="left" align="left">
           <template v-slot="{row}">
-            <el-link target="_blank" :href="row.fileUrl" dowload>
-              <i class="el-icon-document" />
-              {{ row.fileTitle }}
-            </el-link>
+            <attach-list :uri="row.fileUrl" :name="row.fileTitle" />
           </template>
         </el-table-column>
 
@@ -69,6 +66,7 @@
 
 <script>
 import File from './file'
+import AttachList from '@/components/AttachList'
 import { getFileByPage, deleteFile } from '@/api/system/docApi'
 import { mapGetters } from 'vuex'
 import Pagination from '@/components/Pagination'
@@ -76,6 +74,7 @@ import { uploadFile } from '@/api/system/uploadApi'
 export default {
   components: {
     Pagination,
+    AttachList,
     File
   },
   data() {

+ 1 - 0
src/views/system/grid/components/Grid.vue

@@ -229,6 +229,7 @@ export default {
     font-size: 16px;
     font-weight: bold;
     color: #FFFFFF;
+    font-weight: bold;
     background: linear-gradient(0deg, #FFFFFF 0%, #98A8B7 100%);
     -webkit-background-clip: text;
     -webkit-text-fill-color: transparent;

+ 5 - 5
src/views/system/permit/account/index.vue

@@ -34,10 +34,10 @@
 
           <el-table-column label="操作" width="50" align="center">
             <template v-slot="{row}">
-              <template>
+              <template v-if="row.permitType===1">
                 <el-checkbox
-                  v-if="row.positionPermitted===1"
-                  v-model="row.positionPermitted"
+                  v-if="row.positionPermited===1"
+                  v-model="row.positionPermited"
                   disabled
                   :true-label="1"
                   :false-label="0"
@@ -45,7 +45,7 @@
                 />
                 <el-checkbox
                   v-else
-                  v-model="row.accountPermitted"
+                  v-model="row.accountPermited"
                   :true-label="1"
                   :false-label="0"
                   @change="permitChange(row)"
@@ -132,7 +132,7 @@ export default {
     },
     permitChange(row) {
       const accountId = this.conditions.accountId
-      if (row.accountPermitted === 1) {
+      if (row.accountPermited === 1) {
         createAccountPermit(accountId, row.permitId)
       } else {
         deleteAccountPermitById(accountId, row.permitId)

+ 3 - 2
src/views/system/permit/position/index.vue

@@ -34,7 +34,8 @@
           <el-table-column label="操作" width="50" align="center">
             <template v-slot="{row}">
               <el-checkbox
-                v-model="row.positionPermitted"
+                v-if="row.permitType===1"
+                v-model="row.positionPermited"
                 :true-label="1"
                 :false-label="0"
                 @change="permitChange(row)"
@@ -119,7 +120,7 @@ export default {
     },
     permitChange(rows) {
       const positionId = this.conditions.positionId// this.userData.positionId
-      if (rows.positionPermitted === 1) {
+      if (rows.positionPermited === 1) {
         createPositionPermit(positionId, rows.permitId)
       } else {
         deletePositionPermitById(positionId, rows.permitId)

+ 1 - 3
src/views/system/regulation/view.vue

@@ -14,9 +14,7 @@
           <h4 class="title">附件:</h4>
           <div class="container">
             <div v-if="formData.attachList&&formData.attachList.length>0" class="attach-list">
-              <p v-for="(item, index) in artInfo.attachList" :key="index">
-                <attach-list :uri="item.fileUrl" :name="item.fileTitle" />
-              </p>
+              <p v-for="(item,index) in artInfo.attachList" :key="index"><attach-list :uri="item.fileUrl" :name="item.fileTitle" /></p>
             </div>
             <span v-else class="emptyTxt">暂无附件</span>
           </div>

+ 1 - 1
src/views/system/task/components/TaskList.vue

@@ -95,7 +95,7 @@
 import HandleTask from '@/views/system/todo/activity/handle'
 import LaunchTask from '@/views/system/todo/activity/launch'
 import TaskTransfer from './TaskTransfer'
-import ToDoDetails from '@/views/system/todo/components/Details'
+import ToDoDetails from '@/views/system/todo/details'
 import { getTaskByPage, deleteTaskById } from '@/api/system/taskApi'
 import { cancelWorkflow } from '@/api/system/wfApi'
 import { taskType, taskPriority, taskStatus } from '@/utils'

+ 0 - 0
src/views/system/todo/components/Details.vue → src/views/system/todo/details.vue