Parcourir la source

错误日志,系统参数配置功能,修复bug,添加window onresize事件

wuyunfeng il y a 4 ans
Parent
commit
37ee506f00

+ 2 - 2
src/api/calling-ncError.js

@@ -1,7 +1,7 @@
 import request from '@/utils/request'
 export function getList(params) {
   return request({
-    url: '/mgr/ncError/page',
+    url: '/ncs/error_log/page',
     method: 'POST',
     loading: true,
     data: params,
@@ -30,7 +30,7 @@ export function getModel(id) {
 
 export function clearError() {
   return request({
-    url: '/mgr/ncError',
+    url: '/ncs/error_log/clear',
     method: 'DELETE',
     loading: true
   })

+ 56 - 0
src/api/ncs_systemconfig.js

@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+
+/**
+ * 系统参数设置相关接口
+ * @param params
+ * @returns {*|Promise|Promise<unknown>}
+ */
+export function getList(params) {
+  return request({
+    url: '/ncs/config/page',
+    method: 'POST',
+    loading: true,
+    data: params,
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+  })
+}
+
+/** 新增系统参数 */
+export function add(params) {
+  return request({
+    url: '/ncs/config',
+    method: 'POST',
+    loading: true,
+    data: params
+  })
+}
+
+/** 删除系统参数 */
+export function remove(params) {
+  const ids = params.toString()
+  return request({
+    url: `/ncs/config/${ids}`,
+    method: 'DELETE',
+    loading: true,
+    data: params
+  })
+}
+
+/** 更新系统参数 */
+export function update(id, params) {
+  return request({
+    url: `/ncs/config/${id}`,
+    method: 'put',
+    data: params
+  })
+}
+
+/** 查询单个系统参数 */
+export function get(id, params) {
+  return request({
+    url: `/ncs/config/${id}`,
+    method: 'get',
+    loading: false,
+    params
+  })
+}

+ 17 - 17
src/router/index.js

@@ -330,19 +330,19 @@ export const partRoutes = [
       }
     ]
   },
-  {
-    path: '/calling-deviceregisterparams',
-    component: Layout,
-    redirect: '/deviceregisterparams/index',
-    children: [
-      {
-        path: 'index',
-        component: () => import('@/views/calling-deviceRegisterParam/index'),
-        name: 'deviceRegisterParam',
-        meta: { title: '设备自动注册参数', icon: 'params', noCache: true }
-      }
-    ]
-  },
+  // {
+  //   path: '/calling-deviceregisterparams',
+  //   component: Layout,
+  //   redirect: '/deviceregisterparams/index',
+  //   children: [
+  //     {
+  //       path: 'index',
+  //       component: () => import('@/views/calling-deviceRegisterParam/index'),
+  //       name: 'deviceRegisterParam',
+  //       meta: { title: '设备自动注册参数', icon: 'params', noCache: true }
+  //     }
+  //   ]
+  // },
   {
     path: '/calling-setting',
     component: Layout,
@@ -402,14 +402,14 @@ export const adminRoutes = [
     ]
   },
   {
-    path: '/ncs-nurse-config',
+    path: '/ncs-system-config',
     component: Layout,
-    redirect: '/ncs-nurse-config/index',
+    redirect: 'index',
     children: [
       {
         path: 'index',
-        component: () => import('@/views/ncs-nurse-config/index'),
-        name: 'CallingNcConfig',
+        component: () => import('@/views/ncs-system-config/index'),
+        name: 'NcsSystemConfig',
         meta: { title: '系统参数', icon: 'nested', noCache: true }
       }
     ]

+ 9 - 3
src/views/calling-board/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="app-container">
+  <div >
     <ag-grid-layout
       toolbar
       :table-height="tableHeight"
@@ -193,10 +193,10 @@ export default {
         headerName: '别名', field: 'name', sortable: true, filter: 'agTextColumnFilter', width: 150
       },
       {
-        headerName: 'mac地址', field: 'eth_mac', sortable: true, filterFramework: 'agTextColumnFilter', flex: 1
+        headerName: 'mac地址', field: 'eth_mac', sortable: true, filter: 'agTextColumnFilter', flex: 1
       },
       {
-        headerName: '科室ID', field: 'part_id', sortable: true, filterFramework: 'agNumberColumnFilter', width: 150
+        headerName: '科室ID', field: 'part_id', sortable: true, filter: 'agNumberColumnFilter', width: 150
 
       },
       {
@@ -341,6 +341,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(() => {
         this.loading = false
       })

+ 0 - 282
src/views/calling-deviceRegisterParam/index.vue

@@ -1,282 +0,0 @@
-<template>
-  <div class="tab-container">
-    <el-card style="margin: 15px">
-      <el-form ref="editform" :rules="rules" label-width="200px" :model="formmodel">
-        <fieldset>
-          <legend>护士主机参数</legend>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="护士主机别名前缀" prop="nurse_host_name_prefix">
-                <el-input
-                  v-model="formmodel.nurse_host_name_prefix"
-                  clearable
-                  :maxlength="100"
-                  placeholder="请输入护士主机别名前缀"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="设备别名后缀起始数字" prop="nurse_host_name_suffix_start_num">
-                <el-input-number
-                  v-model="formmodel.nurse_host_name_suffix_start_num"
-                  :min="0"
-                  :max="100"
-                  placeholder="设备别名后缀起始数字"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="设备别名后缀数字长度" prop="nurse_host_name_suffix_num_length">
-                <el-input-number
-                  v-model="formmodel.nurse_host_name_suffix_num_length"
-                  :min="1"
-                  :max="10"
-                  placeholder="设备别名后缀数字长度"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-        </fieldset>
-        <fieldset class="margin-top-sm">
-          <legend>门口机参数</legend>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="门口机别名前缀" prop="door_name_prefix">
-                <el-input
-                  v-model="formmodel.door_name_prefix"
-                  clearable
-                  :maxlength="100"
-                  placeholder="请输入门口机别名前缀"
-                />
-              </el-form-item>
-              <el-form-item label="房间号名称前缀" prop="room_name_prefix">
-                <el-input
-                  v-model="formmodel.room_name_prefix"
-                  clearable
-                  :maxlength="100"
-                  placeholder="请输入房间号名称前缀"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="门口机别名后缀起始数字" prop="door_name_suffix_start_num">
-                <el-input-number
-                  v-model="formmodel.door_name_suffix_start_num"
-                  :min="0"
-                  :max="100"
-                  placeholder="门口机别名后缀起始数字"
-                />
-              </el-form-item>
-              <el-form-item label="房间号后缀起始数字" prop="room_name_suffix_start_num">
-                <el-input-number
-                  v-model="formmodel.room_name_suffix_start_num"
-                  :min="0"
-                  :max="100"
-                  placeholder="房间号后缀起始数字"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="门口机别名后缀数字长度" prop="nurse_host_name_suffix_num_length">
-                <el-input-number
-                  v-model="formmodel.door_name_suffix_num_length"
-                  :min="1"
-                  :max="10"
-                  placeholder="门口机别名后缀数字长度"
-                />
-              </el-form-item>
-              <el-form-item label="房间号后缀数字长度" prop="room_name_suffix_num_length">
-                <el-input-number
-                  v-model="formmodel.room_name_suffix_num_length"
-                  :min="1"
-                  :max="10"
-                  placeholder="房间号后缀数字长度"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-        </fieldset>
-
-        <fieldset class="margin-top-sm">
-          <legend>病床分机参数</legend>
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="病床分机别名前缀" prop="bed_device_name_prefix">
-                <el-input
-                  v-model="formmodel.bed_device_name_prefix"
-                  clearable
-                  :maxlength="100"
-                  placeholder="请输入病床分机别名前缀"
-                />
-              </el-form-item>
-              <el-form-item label="床号前缀" prop="bed_name_prefix">
-                <el-input
-                  v-model="formmodel.bed_name_prefix"
-                  clearable
-                  :maxlength="100"
-                  placeholder="请输入床号前缀"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="病床分机别名后缀起始数字" prop="bed_device_name_suffix_start_num">
-                <el-input-number
-                  v-model="formmodel.bed_device_name_suffix_start_num"
-                  :min="0"
-                  :max="100"
-                  placeholder="病床分机别名后缀起始数字"
-                />
-              </el-form-item>
-              <el-form-item label="床号后缀起始数字" prop="bed_name_suffix_start_num">
-                <el-input-number
-                  v-model="formmodel.bed_name_suffix_start_num"
-                  :min="0"
-                  :max="100"
-                  placeholder="房间号后缀起始数字"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="病床分机别名后缀数字长度" prop="bed_device_name_suffix_num_length">
-                <el-input-number
-                  v-model="formmodel.bed_device_name_suffix_num_length"
-                  :min="1"
-                  :max="10"
-                  placeholder="病床分机别名后缀数字长度"
-                />
-              </el-form-item>
-              <el-form-item label="床号后缀数字长度" prop="bed_name_suffix_num_length">
-                <el-input-number
-                  v-model="formmodel.bed_name_suffix_num_length"
-                  :min="1"
-                  :max="10"
-                  placeholder="床号后缀数字长度"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-form-item label="要跳过的床号" prop="bed_name_suffix_skip_num">
-              <el-input
-                v-model="formmodel.bed_name_suffix_skip_num"
-                clearable
-                :maxlength="100"
-                placeholder="请输入要跳过的床号"
-              />
-            </el-form-item>
-          </el-row>
-        </fieldset>
-
-        <fieldset class="margin-top-sm">
-          <legend>注册设备所属科室</legend>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="设备注册到科室" prop="device_register_part_id">
-                <el-select
-                  v-model="formmodel.device_register_part_id"
-                  placeholder="请选择科室"
-                  clearable
-                >
-                  <el-option
-                    v-for="(item,index) in parts"
-                    :key="index"
-                    :value="item.id"
-                    :label="item.part_name"
-                  />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-        </fieldset>
-
-        <el-form-item align="center" class="margin-top-sm">
-          <el-button type="success" @click="onSubmit">保存设置</el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-  </div>
-</template>
-
-<script>
-
-import * as API_DeviceRegisterParams from '@/api/calling-deviceRegisterParams'
-import * as API_Part from '@/api/calling-part'
-export default {
-  name: 'Index',
-  data() {
-    return {
-      formmodel: {},
-      rules: {
-        device_register_part_id: [
-          { required: true, message: '请输入医院名称', trigger: 'blur' }
-        ]
-      },
-      parts: []
-    }
-  },
-  async mounted() {
-    await this.getParts()
-    this.getPartInfo()
-  },
-  methods: {
-    getParts() {
-      API_Part.getList({ page_no: 1, page_size: 100 }).then(res => {
-        this.parts = [...res.data]
-      })
-    },
-    getPartInfo() {
-      API_DeviceRegisterParams.get().then(res => {
-        if (res === '') {
-          this.formmodel = {
-            nurse_host_name_suffix_start_num: 1,
-            nurse_host_name_suffix_num_length: 2,
-            door_name_suffix_start_num: 1,
-            door_name_suffix_num_length: 2,
-            room_name_suffix_start_num: 1,
-            room_name_suffix_num_length: 2,
-            bed_name_suffix_start_num: 1,
-            bed_name_suffix_num_length: 2,
-            bed_device_name_suffix_start_num: 1,
-            bed_device_name_suffix_num_length: 2,
-            bed_name_suffix_skip_num: '4,14,24,34,44,54',
-            bed_device_name_prefix: '病床分机',
-            door_name_prefix: '门口机',
-            nurse_host_name_prefix: '护士主机',
-            room_appointed: 0,
-            appoint_host_id: null,
-            appoint_room_id: null
-          }
-        } else {
-          this.formmodel = { ...res }
-        }
-      })
-    },
-
-    onSubmit() {
-      this.$refs['editform'].validate((valid) => {
-        if (valid) {
-          API_DeviceRegisterParams.update(this.formmodel).then(res => {
-            this.$message.success('保存成功!')
-          }).catch(err => {
-            this.$message.error(err.message)
-          })
-        } else {
-          this.$message.error('表单填写错误,请检查!')
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style scoped>
-    fieldset{
-        border-style: solid;
-        border-color: #DCDFE6;
-        border-width: 1px;
-    }
-    .margin-top-sm{margin-top: 20px}
-</style>

+ 0 - 47
src/views/calling-ncError/detail.vue

@@ -1,47 +0,0 @@
-<template>
-  <div class="app-container">
-    <div v-html="ncError.stack_trace"></div>
-  </div>
-</template>
-
-<script>
-import * as API_CallingNcError from '@/api/calling-ncError'
-
-export default {
-  name: 'Detail',
-  props: {
-    errorId: {
-      type: Number,
-      default: null
-    }
-  },
-  data() {
-    return {
-      ncError: {
-        stack_trace: null
-      }
-    }
-  },
-  watch: {
-    errorId: function() {
-      this.getNcError()
-    }
-  },
-  mounted() {
-    this.getNcError()
-  },
-  methods: {
-    getNcError() {
-      API_CallingNcError.getModel(this.errorId).then(res => {
-        this.ncError = res
-      })
-    }
-  }
-}
-</script>
-
-<style rel="stylesheet/scss" lang="scss">
-    .el-drawer.rtl{
-        overflow: scroll
-    }
-</style>

+ 43 - 109
src/views/calling-ncError/index.vue

@@ -1,86 +1,5 @@
 <template>
-  <div class="app-container">
-
-    <!--    <en-table-layout toolbar pagination :table-data="tableData" :loading="loading" @sort-change="tableSort">-->
-    <!--      &lt;!&ndash;工具栏&ndash;&gt;-->
-    <!--          <div slot="toolbar" class="inner-toolbar">-->
-    <!--            <div class="toolbar-search">-->
-    <!--              <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />-->
-    <!--            </div>-->
-    <!--            <div class="toolbar-btns">-->
-    <!--              <el-button type="danger" @click="clearError">清空日志</el-button>-->
-    <!--            </div>-->
-    <!--          </div>-->
-    <!--      &lt;!&ndash;表头&ndash;&gt;-->
-    <!--      <template slot="table-columns">-->
-    <!--        &lt;!&ndash;                <el-table-column prop="id" sortable="custom" label="ID" width="100" align="center"/>&ndash;&gt;-->
-    <!--        <el-table-column prop="class_name" sortable="custom" label="类名" width="300" align="center" />-->
-    <!--        <el-table-column prop="method_name" sortable="custom" label="类型" width="140" align="center" />-->
-    <!--        <el-table-column prop="exception_name" sortable="custom" label="异常名" width="200" align="center" />-->
-    <!--        <el-table-column prop="err_msg" sortable="custom" label="错误信息" min-width="200" :show-overflow-tooltip="true" align="center" />-->
-    <!--        <el-table-column prop="create_time" sortable="custom" label="创建时间" width="170" align="center" :formatter="forDate" />-->
-    <!--        <el-table-column label="操作" align="center" width="160">-->
-    <!--          <template slot-scope="scope">-->
-    <!--            <el-button type="permary" size="mini" @click="showDetail(scope.row.id)">详情</el-button>-->
-    <!--            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.id)">删除</el-button>-->
-    <!--          </template>-->
-    <!--        </el-table-column>-->
-
-    <!--      </template>-->
-
-    <!--      &lt;!&ndash;翻页&ndash;&gt;-->
-    <!--              <el-pagination-->
-    <!--                v-if="pageData"-->
-    <!--                slot="pagination"-->
-    <!--                :current-page="pageData.page_no"-->
-    <!--                :page-sizes="[10, 20, 50, 100]"-->
-    <!--                :page-size="pageData.page_size"-->
-    <!--                layout="total, sizes, prev, pager, next, jumper"-->
-    <!--                :total="pageData.data_total"-->
-    <!--                @size-change="handlePageSizeChange"-->
-    <!--                @current-change="handlePageCurrentChange"-->
-    <!--              />-->
-    <!--    </en-table-layout>-->
-    <!--    <el-drawer-->
-    <!--      title="详情"-->
-    <!--      :modal="true"-->
-    <!--      :visible.sync="shopVisible"-->
-    <!--      direction="rtl"-->
-    <!--      size="60%"-->
-    <!--    >-->
-    <!--      <detail :error-id="errorId" />-->
-    <!--    </el-drawer>-->
-
-    <!--    <ag-grid-vue-->
-    <!--      :style="{'height': tableHeight+'px'}"-->
-    <!--      class="ag-theme-alpine"-->
-    <!--      :column-defs="columnDefs"-->
-    <!--      :row-data="rowData"-->
-    <!--      :locale-text="localeText"-->
-    <!--      :grid-options="gridOptions"-->
-    <!--      :default-col-def="defaultColDef"-->
-    <!--      :animate-rows="true"-->
-    <!--      :row-selection="rowSelection"-->
-    <!--      @rowDoubleClicked="getList"-->
-    <!--      @filterChanged="filterModifed"-->
-    <!--      @sortChanged="gridSortChange"-->
-    <!--    />-->
-
-    <!--    <div class="pagination">-->
-    <!--      <div class="pagination-toolbar" />-->
-    <!--      <el-pagination-->
-    <!--        v-if="pageData"-->
-    <!--        slot="pagination"-->
-    <!--        :current-page="pageData.page_no"-->
-    <!--        :page-sizes="[10, 20, 50, 100]"-->
-    <!--        :page-size="pageData.page_size"-->
-    <!--        layout="total, sizes, prev, pager, next, jumper"-->
-    <!--        :total="pageData.data_total"-->
-    <!--        multi-sort-key="ctrl"-->
-    <!--        @size-change="handlePageSizeChange"-->
-    <!--        @current-change="handlePageCurrentChange"-->
-    <!--      />-->
-    <!--    </div>-->
+  <div>
     <ag-grid-layout
       toolbar
       :table-height="tableHeight"
@@ -92,7 +11,7 @@
       :default-col-def="defaultColDef"
       :animate-rows="true"
       :row-selection="rowSelection"
-      @rowDoubleClicked="getList"
+      @rowDoubleClicked="showDetail"
       @filterChanged="filterModifed"
       @sortChanged="gridSortChange"
     >
@@ -101,7 +20,7 @@
           <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
         </div>
         <div class="toolbar-btns">
-          <el-button type="danger" @click="clearError">清空日志</el-button>
+          <el-button type="danger" size="mini" @click="clearError">清空日志</el-button>
         </div>
       </div>
       <el-pagination
@@ -117,17 +36,21 @@
       />
     </ag-grid-layout>
 
+    <el-dialog :visible.sync="shopVisible" title="错误详情" class="customer-dialog">
+      <el-scrollbar>
+        <div style="height: 500px;padding:15px" v-html="selectedRow.stack_trace" />
+      </el-scrollbar>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
-import * as API_CallingNcError from '@/api/calling-ncError'
-import detail from './detail'
-import { unix2Date } from '@/utils/Foundation'
+import * as API_ErrorLog from '@/api/ncs_errorlog'
+import { unixToDate } from '@/utils/Foundation'
 import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
 export default {
   name: 'Index',
-  components: { detail },
   data() {
     return {
       tableData: [],
@@ -148,7 +71,8 @@ export default {
       columnApi: null,
       localeText: AG_GRID_LOCALE_CN,
       filterState: null,
-      rowSelection: null
+      rowSelection: null,
+      selectedRow: {}
     }
   },
   computed: {
@@ -183,23 +107,32 @@ export default {
       { headerName: '错误信息', field: 'err_msg', sortable: true, filter: true, flex: 1 },
       { headerName: '错误时间', field: 'create_time',
         valueFormatter: this.dateValueFormatter,
-        sortable: true, filter: 'date', flex: 1 }
+        filterParams: {
+          comparator: (filterLocalDateAtMidnight, cellValue) => {
+            const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+            return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
+          }
+        },
+        sortable: true, filter: 'date', flex: 1 },
+      { headerName: '堆栈跟踪', field: 'stack_trace',
+        sortable: true, flex: 1 }
     ]
     this.defaultColDef = {
-      filter: 'agTextColumnFilter',
+      // filter: 'agTextColumnFilter',
       sortable: true,
       resizable: true,
-      comparator: this.testComparator,
+      // comparator: this.testComparator,
       filterParams: {
         debounceMs: 200,
-        newRowsAction: 'keep',
-        textCustomComparator: this.textCustomComparator,
-        comparator: this.testComparator
+        newRowsAction: 'keep'
+        //  textCustomComparator: this.textCustomComparator,
+        // comparator: this.testComparator
       }
-    },
+    }
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     // var column = this.gridColumnApi.getColumn('id')
@@ -221,13 +154,16 @@ export default {
     this.getList()
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     handlerDelete(ids) {
       this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        API_CallingNcError.remove(ids).then(
+        API_ErrorLog.remove(ids).then(
           response => {
             this.getList()
             this.$message({
@@ -249,7 +185,7 @@ export default {
       })
     },
     clearError() {
-      API_CallingNcError.clearError().then(res => {
+      API_ErrorLog.clearError().then(res => {
         this.getList()
       })
     },
@@ -269,7 +205,7 @@ export default {
       this.loading = true
       const param = this.MixinClone(this.params)
       this.gridApi.showLoadingOverlay()
-      API_CallingNcError.getList(param).then(response => {
+      API_ErrorLog.getList(param).then(response => {
         this.loading = false
         // this.tableData = [...response.data]
         this.pageData = {
@@ -299,12 +235,12 @@ export default {
       }
       this.getList()
     },
-    showDetail(id) {
-      this.errorId = id
+    showDetail(row) {
+      this.selectedRow = { ...row.data }
       this.shopVisible = true
     },
     forDate(row, column, cellValue) {
-      return unix2Date(row.create_time)
+      return unixToDate(row.create_time)
     },
     testComparator(valueA, valueB, nodeA, nodeB, isInverted) {
       console.log('a', new Date(valueA))
@@ -323,12 +259,9 @@ export default {
         return 1
       } else if (new Date(valueA) > cellDateMidNight) {
         return -1
-      }else{
+      } else {
         return 0
       }
-
-      return 0
-      // return console.log(valueA)
     },
     gridSortChange(param) {
       console.log('sortparam', param)
@@ -381,12 +314,13 @@ export default {
       return true
     },
     hashValueGetter(params) {
-      return params.node.rowIndex + 1
+      // return params.node.rowIndex + 1
+      return ''
     },
     dateValueFormatter(params) {
-      console.log('ss', params)
-      return unix2Date(params.value)
+      return unixToDate(params.value)
     }
+
   }
 }
 </script>

+ 20 - 6
src/views/customer/components/customerManager.vue

@@ -625,7 +625,8 @@ export default {
 
       { headerName: '生日', field: 'birthday', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '年龄', field: 'age', sortable: true, filter: 'agNumberColumnFilter', width: 130
@@ -641,12 +642,14 @@ export default {
 
       { headerName: '入住时间', field: 'in_date', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '离开时间', field: 'out_date', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '编辑', field: 'id',
@@ -729,6 +732,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize()
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     this.gridColumnApi.applyColumnState({
@@ -759,7 +763,9 @@ export default {
     // this.getList()
   },
   methods: {
-
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     getEmptyBeds() {
       return new Promise((resolve, reject) => {
         API_Frame.getSickbedByPartId(this.$store.getters.partId).then(res => {
@@ -793,6 +799,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(err => {
         this.$message.error(err)
       })
@@ -1029,6 +1041,8 @@ export default {
             message: response.message
           })
         })
+      }).catch(() => {
+        this.$message.info('已取消删除!')
       })
     },
 
@@ -1064,8 +1078,8 @@ export default {
           this.getList()
           this.infoChanged()
         })
-      }).catch(err => {
-        this.$message.error(err)
+      }).catch(() => {
+        this.$message.info('取消操作!')
       })
     },
     /** 换床 **/

+ 23 - 7
src/views/customer/components/patientManager.vue

@@ -239,7 +239,8 @@
               </el-card>
 
             </div>
-            <div style="height: 100px;">
+
+            <div style="flex:1">
               <el-form ref="remarkForm" :model="remarkFormModel" :rules="remarkRules" label-width="100px" style="margin-right: 10px">
                 <el-row>
                   <el-col :span="16">
@@ -628,7 +629,8 @@ export default {
 
       { headerName: '生日', field: 'birthday', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '年龄', field: 'age', sortable: true, filter: 'agNumberColumnFilter', width: 130
@@ -644,12 +646,14 @@ export default {
 
       { headerName: '入住时间', field: 'in_date', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '离开时间', field: 'out_date', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '编辑', field: 'id',
@@ -732,6 +736,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize()
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     this.gridColumnApi.applyColumnState({
@@ -767,7 +772,9 @@ export default {
     // this.getList()
   },
   methods: {
-
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     getEmptyBeds() {
       return new Promise((resolve, reject) => {
         API_Frame.getSickbedByPartId(this.$store.getters.partId).then(res => {
@@ -801,6 +808,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(err => {
         this.$message.error(err)
       })
@@ -1049,6 +1062,8 @@ export default {
             message: response.message
           })
         })
+      }).catch(() => {
+        this.$message.info('取消删除!')
       })
     },
 
@@ -1101,7 +1116,7 @@ export default {
           this.infoChanged()
         })
       }).catch(err => {
-        this.$message.error(err)
+        this.$message.info('取消操作!')
       })
     },
     /** 换床 **/
@@ -1398,4 +1413,5 @@ export default {
                                  .el-form-item{
                                    margin-bottom: 18px;
                                  }
-</style>
+                                 .el-scrollbar__wrap{ overflow-x:hidden; }
+   </style>

+ 1 - 1
src/views/customer/customerManagement.vue

@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import CustomerManager from './components/patientManager'
+import CustomerManager from './components/customerManager'
 export default {
   name: 'CustomerManagement',
   components: { CustomerManager },

+ 6 - 1
src/views/customer/list.vue

@@ -158,7 +158,8 @@
         { headerName: '住院时间', field: 'in_date', valueFormatter: this.formatterDate, sortable: true, minWidth: 220, filter: 'agDateColumnFilter',
           filterParams: {
             comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-              return 0
+              const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+              return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
             }
           }
         },
@@ -234,10 +235,14 @@
               this.rowSelection = 'multiple'
     },
     mounted() {
+      window.onresize = this.windowResize()
       this.gridApi = this.gridOptions.api
       this.GET_List()
     },
     methods: {
+      windowResize() {
+        this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+      },
       /** 选择行变化时,记录选中的行数据 */
       selectFun(val) {
         this.multipleSelection = val

+ 5 - 5
src/views/dashboard/calling-admin/partInfoSetting.vue

@@ -6,11 +6,11 @@
           <part-info-edit :part-id="part_id" />
         </keep-alive>
       </el-tab-pane>
-      <el-tab-pane label="科室管理账号" name="partInfoAccount">
-        <keep-alive>
-          <part-user-manager :part-id="part_id" />
-        </keep-alive>
-      </el-tab-pane>
+<!--      <el-tab-pane label="科室管理账号" name="partInfoAccount">-->
+<!--        <keep-alive>-->
+<!--          <part-user-manager :part-id="part_id" />-->
+<!--        </keep-alive>-->
+<!--      </el-tab-pane>-->
       <el-tab-pane label="护士主机APP更新" name="nurse">
         <keep-alive>
          <app-version-manager :part-id="part_id" :device-type="1"></app-version-manager>

+ 8 - 2
src/views/hospital/ncs_customer/customerManager.vue

@@ -586,7 +586,8 @@ export default {
       { headerName: '住院时间', field: 'in_date', valueFormatter: this.formatterDate, sortable: true, minWidth: 220, filter: 'agDateColumnFilter',
         filterParams: {
           comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-            return 0
+            const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+            return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
           }
         }
       },
@@ -595,7 +596,8 @@ export default {
       { headerName: '证件号码', field: 'id_no', sortable: true, filter: 'agNumberColumnFilter', width: 160 },
       { headerName: '生日', field: 'birthday', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '家庭住址', field: 'address', sortable: true, filter: 'agTextColumnFilter', width: 260 },
@@ -679,6 +681,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize()
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     this.gridColumnApi.applyColumnState({
@@ -691,6 +694,9 @@ export default {
     })
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     /** 分页大小发生改变 */
     handlePageSizeChange(size) {
       this.params.page_size = size

+ 2 - 1
src/views/hospital/ncs_device/deviceManager.vue

@@ -320,7 +320,8 @@ export default {
       { headerName: 'SIP账号', field: 'sip_id', sortable: true, filter: 'agTextColumnFilter' },
       { headerName: '更新时间', field: 'update_time', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
       { headerName: '编辑', field: 'shop_id',

+ 5 - 3
src/views/hospitalFrame/frameGroupEdit.vue

@@ -17,8 +17,8 @@
         </el-row>
         <fieldset class="margin-top-sm">
           <legend>区域管辖空间</legend>
-          <el-row :gutter="20">
-            <el-col v-for="(item,index) in rooms" :key="index" gut :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
+          <el-row :gutter="20" type="flex">
+            <el-col v-for="(item,index) in rooms" :key="index"  :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
               <el-card class="box-card">
                 <div slot="header" class="clearfix">
                   <el-checkbox v-model="item.checked" @change="handleCheckboxChanged(item)"><svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}</span></el-checkbox>
@@ -171,7 +171,9 @@ export default {
   .item {
     margin-bottom: 10px;
   }
-  .box-card{margin-bottom: 10px}
+  .el-row--flex{flex-wrap: wrap !important;margin-top: 20px;}
+  .el-col{margin-bottom: 20px !important;}
+  .box-card{height: 100%;}
   /deep/ .el-card__body {
       min-height: 130px;
     }

+ 5 - 2
src/views/hospitalFrame/nurse_watch_frame.vue

@@ -4,8 +4,8 @@
       <el-form ref="editform" label-width="80px">
         <fieldset class="margin-top-sm">
           <legend>腕表管辖空间</legend>
-          <el-row :gutter="20">
-            <el-col v-for="(item,index) in rooms" :key="index" gut :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
+          <el-row :gutter="20" type="flex">
+            <el-col v-for="(item,index) in rooms" :key="index"  :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
               <el-card class="box-card">
                 <div slot="header" class="clearfix">
                   <el-checkbox v-model="item.checked" @change="handleCheckboxChanged(item)"><svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}</span></el-checkbox>
@@ -171,6 +171,9 @@ export default {
   .item {
     margin-bottom: 10px;
   }
+  .el-row--flex{flex-wrap: wrap !important;margin-top: 20px;}
+  .el-col{margin-bottom: 20px !important;}
+  .box-card{height: 100%;}
   /deep/ .el-card__body {
       min-height: 130px;
     }

+ 13 - 12
src/views/ncs-auth/superadmin/defaultRoleManager.vue

@@ -29,7 +29,7 @@
     <el-dialog title="编辑角色事件" :visible.sync="formShow" width="50%">
       <el-form ref="editform" label-width="80px">
         <el-checkbox v-model="allCheck" :indeterminate="indeterminate" @change="handleCheckAllChange">全选</el-checkbox>
-        <div style="margin: 15px 0;"></div>
+        <div style="margin: 15px 0;" />
         <el-checkbox-group v-model="newCheckList" @change="handleCheckedCitiesChange">
           <el-checkbox v-for="(item, index) in eventList" :key="index" :label="item.id" style="width: 200px;">{{ item.name }}</el-checkbox>
         </el-checkbox-group>
@@ -76,20 +76,21 @@ export default {
     getRoleList(response) { // roleEdit 保存成功时回调会传入当前role实体,新增时需要根据当前role选择新添加的角色
       API_Auth.getRoleList(-1).then(res => {
         this.tableData = [...res]
-        this.$nextTick(() => {
-          if (!response) {
-            if (this.role_id === 0) { // 初始加载角色列表
-              this.$refs.roleTable.setCurrentRow(this.tableData[0])
-              this.role_id = this.tableData[0].role_id
-            } else {
-              const index = this.tableData.findIndex(p => p.role_id === this.role_id)
-              this.$refs.roleTable.setCurrentRow(this.tableData[index])
-            }
+        console.log('roleid', this.role_id)
+        // this.$nextTick(() => {
+        if (!response) {
+          if (this.role_id === 0) { // 初始加载角色列表
+            this.role_id = this.tableData[0].role_id
+            this.$refs.roleTable.setCurrentRow(this.tableData[0])
           } else {
-            const index = this.tableData.findIndex(p => p.role_id === response.role_id)
+            const index = this.tableData.findIndex(p => p.role_id === this.role_id)
             this.$refs.roleTable.setCurrentRow(this.tableData[index])
           }
-        })
+        } else {
+          const index = this.tableData.findIndex(p => p.role_id === response.role_id)
+          this.$refs.roleTable.setCurrentRow(this.tableData[index])
+        }
+        // })
       })
     },
     /**

+ 5 - 3
src/views/ncs-broadcast/components/broadcastInfo.vue

@@ -103,8 +103,8 @@
 
       <fieldset>
         <legend>其他广播位置</legend>
-        <el-row :gutter="20">
-          <el-col v-for="(item,index) in rooms" :key="index" gut :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
+        <el-row :gutter="20" type="flex">
+          <el-col v-for="(item,index) in rooms" :key="index"  :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
             <el-card class="box-card">
               <div slot="header" class="clearfix">
                 <el-checkbox v-model="item.checked" @change="handleCheckboxChanged(item)"><svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}</span></el-checkbox>
@@ -389,7 +389,9 @@ export default {
     .item {
         margin-bottom: 10px;
     }
-    .box-card{margin-bottom: 10px}
+    .el-row--flex{flex-wrap: wrap !important;margin-top: 20px;}
+    .el-col{margin-bottom: 20px !important;}
+    .box-card{height: 100%;}
     /deep/ .el-card__body {
         min-height: 130px;
     }

+ 6 - 0
src/views/ncs-broadcast/index.vue

@@ -498,6 +498,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
         this.rowData = [...response.data]
         this.refreshPlayStatus()
       }).catch(() => {

+ 35 - 11
src/views/ncs-device/components/deviceManager.vue

@@ -8,6 +8,7 @@
       :row-data="rowData"
       :locale-text="localeText"
       :grid-options="gridOptions"
+      :debounce-vertical-scrollbar="true"
       :default-col-def="defaultColDef"
       :animate-rows="true"
       :row-selection="rowSelection"
@@ -20,7 +21,7 @@
           <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
         </div>
         <div class="toolbar-btns">
-          <el-button type="primary" size="mini" @click="handleAdd">新增设备</el-button>
+          <el-button v-if="part_view" type="primary" size="mini" @click="handleAdd">新增设备</el-button>
         </div>
       </div>
       <el-pagination
@@ -176,6 +177,10 @@ export default {
     frame: {
       type: Object,
       default: () => {}
+    },
+    part_view: { // 是否为科室视图
+      type: Boolean,
+      default: true
     }
   },
   data() {
@@ -198,7 +203,7 @@ export default {
       params: {
         page_size: 20,
         page_no: 1,
-        fixedCondition: 'part_id=' + this.$store.getters.partId
+        fixedCondition: this.part_view ? ('part_id=' + this.$store.getters.partId) : '1=1'
       },
       /** device 弹窗 **/
       deviceDialogVisible: false,
@@ -286,7 +291,8 @@ export default {
         valueGetter: this.hashValueGetter
       },
       { headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 100 },
-      { headerName: '设备类型', field: 'device_type', sortable: true, filterFramework: 'ListFilter', width: 160,
+      { headerName: '设备类型', field: 'device_type', sortable: true,
+        filterFramework: 'ListFilter', width: 160,
         filterParams: {
           listData: this.deviceTypeTransfer
         },
@@ -296,7 +302,8 @@ export default {
       // lockPinned = true 不能拖动然后固定
       // resizeable 单元个大小是否可以调整
       { headerName: '设备别名', field: 'name', sortable: true, filter: 'agTextColumnFilter' },
-      { headerName: '设备状态', field: 'status', sortable: true, filterFramework: 'RadioFilter',
+      { headerName: '设备状态', field: 'status', sortable: true,
+        filterFramework: 'RadioFilter',
         filterParams: {
           listData: this.deviceStatusTransfer
         },
@@ -316,10 +323,11 @@ export default {
       { headerName: 'SIP账号', field: 'sip_id', sortable: true, filter: 'agTextColumnFilter' },
       { headerName: '更新时间', field: 'update_time', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
         comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-          return 0
+          const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+          return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
         }
       }},
-      { headerName: '编辑', field: 'shop_id',
+      { headerName: '编辑', field: 'id',
         cellRendererFramework: 'ButtonCellRender',
         cellRendererParams: {
           onClick: this.handleEdit,
@@ -333,7 +341,7 @@ export default {
         width: 90,
         resizable: false,
         sortable: false },
-      { headerName: '删除', field: 'shop_id',
+      { headerName: '删除', field: 'id',
         cellRendererFramework: 'ButtonCellRender',
         cellRendererParams: param => {
           return {
@@ -355,6 +363,8 @@ export default {
       // filter: 'agTextColumnFilter',
       sortable: true,
       resizable: true,
+      enableValue: true,
+      filter: true,
       // comparator: this.dateCustomComparator,
       filterParams: {
         debounceMs: 500,
@@ -365,6 +375,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     this.gridColumnApi.applyColumnState({
@@ -376,9 +387,14 @@ export default {
       ]
     })
     /** 加载科室空间节点  **/
-    this.getPartFrames()
+    if (this.part_view) {
+      this.getPartFrames(this.$store.getters.partId)
+    }
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     /** 加载列表数据 */
     getList() {
       const param = this.MixinClone(this.params)
@@ -390,13 +406,19 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(err => {
         this.$message.error(err)
       })
     },
     /** 获取科室的所有空间节点 */
-    getPartFrames() {
-      API_Frame.getFramesPartId(this.$store.getters.partId).then(res => {
+    getPartFrames(partid) {
+      API_Frame.getFramesPartId(partid).then(res => {
         this.partFrames = [...res]
       })
     },
@@ -527,7 +549,9 @@ export default {
     /** 修改设备  **/
     handleEdit(params) {
       this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
-      console.log('param', params)
+      if (!this.part_view) {
+        this.getPartFrames(params.part_id)
+      }
       this.hasRoleId = params.device_type === 7
       this.deviceModel = {
         ...params

Fichier diff supprimé car celui-ci est trop grand
+ 830 - 809
src/views/ncs-device/device-admin.vue


+ 12 - 1
src/views/ncs-device/nurse_watch.vue

@@ -188,7 +188,8 @@ export default {
       { headerName: '更新时间', field: 'update_time', sortable: true, filter: 'agDateColumnFilter', minWidth: 170, valueFormatter: this.formatterDate,
         filterParams: {
           comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-            return 0
+            const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
+            return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
           }
         }
       },
@@ -223,6 +224,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize()
     this.gridApi = this.gridOptions.api
     this.getList()
     this.initWebSocket()
@@ -234,6 +236,9 @@ export default {
     clearTimeout(this.timer)
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     initWebSocket: function() {
       const stockbase = DeviceUrl.replace('http', 'ws')
       this.websock = new WebSocket(stockbase + '/web-socket/nurseDevice/' + this.$store.getters.partId)
@@ -295,6 +300,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(() => {
         this.loading = false
       })

Fichier diff supprimé car celui-ci est trop grand
+ 507 - 498
src/views/ncs-event/index.vue


+ 12 - 2
src/views/ncs-interaction/index.vue

@@ -138,8 +138,8 @@ export default {
         resizable: false,
         valueGetter: this.hashValueGetter
       },
-      { headerName: '发起方', field: 'fromMemberName', sortable: true, valueFormatter: this.formatterFromName, minWidth: 150 },
-      { headerName: '接收方', field: 'toMemberName', sortable: true, valueFormatter: this.formatterToName, minWidth: 150 },
+      { headerName: '发起方', field: 'fromMemberName', sortable: false, valueFormatter: this.formatterFromName, minWidth: 150 },
+      { headerName: '接收方', field: 'toMemberName', sortable: false, valueFormatter: this.formatterToName, minWidth: 150 },
       { headerName: '交互类型', field: 'action_type', sortable: true, valueFormatter: this.formatterType, width: 100 },
       { headerName: '交互结果', field: 'action_end', sortable: true, cellRenderer: this.formatterResult, width: 100 },
       { headerName: '交互数据', field: 'data', sortable: true, width: 120 },
@@ -162,10 +162,14 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize
     this.gridApi = this.gridOptions.api
     this.getList()
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     /** 批量数据删除处理(删除选中的行) */
     batchDelete: function() {
       const rows = this.gridApi.getSelectedRows()
@@ -232,6 +236,12 @@ export default {
           page_size: response.page_size,
           data_total: response.data_total
         }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
       }).catch(() => {
         this.loading = false
       })

+ 4 - 0
src/views/ncs-orginazition/index.vue

@@ -251,6 +251,7 @@ export default {
     this.rowSelection = 'multiple'
   },
   mounted() {
+    window.onresize = this.windowResize()
     this.gridApi = this.gridOptions.api
     this.gridColumnApi = this.gridOptions.columnApi
     // 设置默认排序字段,应用列状态之后会触发 gridSortChange 函数,会调用getlist,后面不需要再调用this.getlist
@@ -282,6 +283,9 @@ export default {
     // this.getList()
   },
   methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
     handlerDelete(ids) {
       this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
         confirmButtonText: '确定',

+ 5 - 5
src/views/ncs-orginazition/partInfoSetting.vue

@@ -6,11 +6,11 @@
           <part-info-edit :part-id="part_id" />
         </keep-alive>
       </el-tab-pane>
-      <el-tab-pane label="科室管理账号" name="partInfoAccount">
-        <keep-alive>
-          <part-user-manager :part-id="part_id" />
-        </keep-alive>
-      </el-tab-pane>
+<!--      <el-tab-pane label="科室管理账号" name="partInfoAccount">-->
+<!--        <keep-alive>-->
+<!--          <part-user-manager :part-id="part_id" />-->
+<!--        </keep-alive>-->
+<!--      </el-tab-pane>-->
       <el-tab-pane label="护士主机APP更新" name="nurse">
         <keep-alive>
          <app-version-manager :part-id="part_id" :device-type="1"></app-version-manager>

+ 384 - 0
src/views/ncs-system-config/index.vue

@@ -0,0 +1,384 @@
+<template>
+  <div>
+    <ag-grid-layout
+      toolbar
+      :table-height="tableHeight"
+      theme="ag-theme-alpine"
+      :column-defs="columnDefs"
+      :row-data="rowData"
+      :locale-text="localeText"
+      :grid-options="gridOptions"
+      :default-col-def="defaultColDef"
+      :animate-rows="true"
+      :row-selection="rowSelection"
+      :enable-cell-change-flash="true"
+      @filterChanged="filterModifed"
+      @sortChanged="gridSortChange"
+    >
+      <!--        @rowDoubleClicked="getList"-->
+      <div slot="toolbar" class="inner-toolbar">
+        <div class="toolbar-search">
+          <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
+        </div>
+        <div class="toolbar-btns">
+          <el-button type="primary" size="mini" @click="createBroadcast">新增参数配置</el-button>
+        </div>
+      </div>
+      <el-pagination
+        v-if="pageData"
+        slot="pagination"
+        :current-page="pageData.page_no"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageData.page_size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="pageData.data_total"
+        @size-change="handlePageSizeChange"
+        @current-change="handlePageCurrentChange"
+      />
+    </ag-grid-layout>
+    <el-dialog :title.sync="formtitle" :visible.sync="formshow" width="50%">
+      <div>
+        <el-form ref="editform" :rules="rules" label-width="120px" :model="formmodel">
+          <el-form-item label="分组名称" prop="group_name">
+            <el-input v-model="formmodel.group_name" maxlength="20" placeholder="请输入分组名称" />
+          </el-form-item>
+          <el-form-item label="引用代码" prop="key_code">
+            <el-input v-model="formmodel.key_code" maxlength="20" placeholder="请输入引用代码" />
+          </el-form-item>
+          <el-form-item label="配置名称" prop="key_name">
+            <el-input v-model="formmodel.key_name" maxlength="50" placeholder="请输入配置名称" />
+          </el-form-item>
+          <el-form-item label="配置值" prop="key_val">
+            <el-input v-model="formmodel.key_val" maxlength="50" placeholder="请输入配置值" />
+          </el-form-item>
+          <el-form-item label="参数说明">
+            <el-input
+              v-model="formmodel.description"
+              type="textarea"
+              :rows="2"
+              maxlength="200"
+              placeholder="请输入参数说明"
+            />
+          </el-form-item>
+
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="formshow = false">取 消</el-button>
+        <el-button type="primary" @click="handlerFormSubmit('editform')">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
+import ButtonCellRender from '../../components/AgGridCellRender/ButtonCellRender'
+import * as API_SystemConfig from '@/api/ncs_systemconfig'
+import { unix2Date } from '@/utils/Foundation'
+export default {
+  name: 'Index',
+  components: { ButtonCellRender },
+  data() {
+    return {
+      tableData: [],
+      /** 列表参数 */
+      params: {
+        page_size: 20,
+        page_no: 1
+      },
+      /** 新建组织弹出参数 **/
+      formtitle: '新增参数配置',
+      formshow: false,
+      formmodel: {
+      },
+      /** ag-grid参数 **/
+      pageData: [],
+      loading: false,
+      errorId: null,
+      shopVisible: false,
+      columnDefs: null,
+      rowData: null,
+      defaultColDef: null,
+      gridOptions: null,
+      gridApi: null,
+      columnApi: null,
+      localeText: AG_GRID_LOCALE_CN,
+      filterState: null,
+      rowSelection: null,
+      frameworkComponents: null,
+      rules: {
+        key_code: [
+          { required: true, message: '引用代码不能为空', trigger: 'blur' }
+        ],
+        key_val: [
+          { required: true, message: '配置值不能为空', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  computed: {
+    tableHeight() {
+      return this.mainAreaHeight - 130
+    }
+
+  },
+  beforeMount() {
+    this.gridOptions = {}
+    this.columnDefs = [
+      {
+        headerName: '#',
+        headerCheckboxSelection: true,
+        headerCheckboxSelectionFilteredOnly: true,
+        checkboxSelection: true,
+        sortable: false, filter: false,
+        width: 100,
+        resizable: false,
+        valueGetter: this.hashValueGetter
+      },
+      { headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 130 },
+      {
+        headerName: '分组名称', field: 'group_name', sortable: true, filter: 'agTextColumnFilter', width: 150
+      },
+      {
+        headerName: '引用代码', field: 'key_code', sortable: true, filter: 'agTextColumnFilter', width: 150
+      },
+      {
+        headerName: '配置名称', field: 'key_name', sortable: true, filter: 'agTextColumnFilter', width: 150
+      },
+
+      {
+        headerName: '配置值', field: 'key_val', sortable: true, filter: 'agTextColumnFilter', width: 260
+      },
+      {
+        headerName: '参数说明', field: 'description', sortable: true, filter: 'agTextColumnFilter', flex: 1
+      },
+      {
+        headerName: '编辑',
+        cellRendererFramework: 'ButtonCellRender',
+        cellRendererParams: {
+          onClick: this.handEdit,
+          label: '编辑',
+          buttonType: 'primary',
+          buttonSize: 'mini'
+        },
+        filter: false,
+        pinned: 'right',
+        lockPinned: true,
+        width: 100,
+        resizable: false,
+        sortable: false
+      },
+      {
+        headerName: '删除',
+        cellRendererFramework: 'ButtonCellRender',
+        cellRendererParams: param => {
+          return {
+            onClick: this.deleteSingle,
+            label: '删除',
+            buttonType: 'danger',
+            buttonSize: 'mini'
+          }
+        },
+        pinned: 'right',
+        lockPinned: true,
+        width: 100,
+        resizable: false,
+        filter: false,
+        sortable: false
+      }
+    ]
+    this.defaultColDef = {
+      sortable: true,
+      resizable: true,
+      comparator: this.dateCustomComparator,
+      filterParams: {
+        debounceMs: 200,
+        newRowsAction: 'keep',
+        textCustomComparator: this.textCustomComparator,
+        comparator: this.dateCustomComparator
+      }
+    }
+    this.rowSelection = 'multiple'
+  },
+  mounted() {
+    window.onresize = this.windowResize
+    this.gridApi = this.gridOptions.api
+    this.gridColumnApi = this.gridOptions.columnApi
+    // 设置默认排序字段,应用列状态之后会触发 gridSortChange 函数,会调用getlist,后面不需要再调用this.getlist
+    this.gridColumnApi.applyColumnState({
+      state: [
+        {
+          colId: 'id',
+          sort: 'asc'
+        }
+      ]
+    })
+  },
+  methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
+    handlerDelete(ids) {
+      this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        API_SystemConfig.remove(ids).then(
+          response => {
+            this.getList()
+            this.$message({
+              type: 'success',
+              message: '删除成功!'
+            })
+          }
+        ).catch(response => {
+          this.$message({
+            type: 'info',
+            message: response.message
+          })
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        })
+      })
+    },
+    deleteSingle(row) {
+      this.handlerDelete(row.id)
+    },
+
+    /**
+     * 新增参数配置
+     */
+    createBroadcast() {
+      this.formshow = true
+      this.formmodel = {
+        title: '',
+        repeat_times: 1,
+        status: false,
+        repeat_day: [],
+        group_ids: []
+      }
+    },
+    /** 分页大小发生改变 */
+    handlePageSizeChange(size) {
+      this.params.page_size = size
+      this.getList()
+    },
+
+    /** 分页页数发生改变 */
+    handlePageCurrentChange(page) {
+      this.params.page_no = page
+      this.getList()
+    },
+    /** 加载列表数据 */
+    getList() {
+      this.loading = true
+      const param = this.MixinClone(this.params)
+      this.gridApi.showLoadingOverlay()
+      API_SystemConfig.getList(param).then(response => {
+        this.loading = false
+        // this.tableData = [...response.data]
+        this.pageData = {
+          page_no: response.page_no,
+          page_size: response.page_size,
+          data_total: response.data_total
+        }
+        this.$nextTick(() => {
+          const node = this.gridApi.getDisplayedRowAtIndex(0)
+          if (node !== null && node !== undefined) {
+            node.setSelected(true)
+          }
+        })
+        this.rowData = [...response.data]
+        this.refreshPlayStatus()
+      }).catch(() => {
+        this.loading = false
+      })
+    },
+    /** 处理搜索 */
+    handlerSearch(keywords) {
+      this.params.query = keywords
+      this.getList()
+    },
+    gridSortChange(param) {
+      const columnState = param.columnApi.getColumnState()
+      // 排序状态
+      const sortState = columnState.filter(function(s) {
+        return s.sort != null
+      }).map(function(s) {
+        return {
+          colId: s.colId,
+          sort: s.sort,
+          sortIndex: s.sortIndex
+        }
+      }).sort(function(a, b) {
+        return a.sortIndex - b.sortIndex
+      })
+      if (sortState.length > 0) {
+        if (sortState.length === 1) {
+          this.params.sort = sortState[0].colId
+          this.params.dir = sortState[0].sort
+        } else {
+          let sortstring = ''
+          sortState.forEach(function(item) {
+            sortstring += item.colId + ' ' + item.sort + ','
+          })
+          this.params.sort = sortstring.substring(0, sortstring.length - 1)
+          this.params.dir = ' '
+        }
+      } else {
+        delete this.params.sort
+        delete this.params.dir
+      }
+      this.getList()
+    },
+    filterModifed(param) {
+      var model = param.api.getFilterModel()
+      this.params.filter = JSON.stringify(model)
+      this.getList()
+    },
+    handEdit(row) {
+      this.formmodel = { ...row }
+      this.formshow = true
+    },
+    /**
+         * 提交新增表单
+         * @param formname
+         */
+    handlerFormSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          if (this.formmodel.id) {
+            API_SystemConfig.update(this.formmodel.id, this.formmodel).then(() => {
+              this.formshow = false
+              this.$message.success('保存成功!')
+              this.getList()
+            }).catch(err => {
+              this.$message.error(err)
+            })
+          } else {
+            /** 新增 */
+            API_SystemConfig.add(this.formmodel).then(() => {
+              this.formshow = false
+              this.$message.success('保存成功!')
+              this.getList()
+            }).catch(err => {
+              this.$message.error(err)
+            })
+          }
+        } else {
+          this.$message.error('表单填写错误,请检查!')
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

Fichier diff supprimé car celui-ci est trop grand
+ 503 - 500
src/views/ncs-task/index.vue