瀏覽代碼

开发用户费用

vothin 2 年之前
父節點
當前提交
2d0d0e3575

+ 10 - 0
languages/en.js

@@ -481,6 +481,16 @@ module.exports = {
     remarkTime: 'Time:',
     remarkTime: 'Time:',
     remarkName: 'Remark person:',
     remarkName: 'Remark person:',
     addRemark: 'Add remark',
     addRemark: 'Add remark',
+    fee: 'Expense',
+    feeName: 'Expense name',
+    feeValue: 'Specific expenses',
+    feeNumber: 'Expense batch',
+    feeTime: 'Time of expense',
+    feeGroupName: 'Group Name',
+    feeKeyCode: 'Code',
+    feeUnit: 'Unit',
+    feeDescription: 'Describe',
+    feeKeyType: 'Parameter Type',
     outBed: 'Log out of bed',
     outBed: 'Log out of bed',
     outBed2: 'Unregister',
     outBed2: 'Unregister',
     outBed3: 'Unregister',
     outBed3: 'Unregister',

+ 10 - 0
languages/es.js

@@ -481,6 +481,16 @@ module.exports = {
     remarkTime: 'Tiempo:',
     remarkTime: 'Tiempo:',
     remarkName: 'Observar persona:',
     remarkName: 'Observar persona:',
     addRemark: 'Agregar comentario',
     addRemark: 'Agregar comentario',
+    fee: 'Gastos',
+    feeName: 'Nombre de la tarifa',
+    feeValue: 'Gastos específicos',
+    feeNumber: 'Lote de gastos',
+    feeTime: 'Tiempo incurrido en los gastos',
+    feeGroupName: 'Nombre del Grupo',
+    feeKeyCode: 'Codificación',
+    feeUnit: 'Unidades',
+    feeDescription: 'Descripción',
+    feeKeyType: 'Tipo de parámetro',
     outBed: 'Salir',
     outBed: 'Salir',
     outBed2: 'Anular registro',
     outBed2: 'Anular registro',
     outBed3: 'Anular registro',
     outBed3: 'Anular registro',

+ 10 - 0
languages/ru-RU.js

@@ -481,6 +481,16 @@ module.exports = {
     commentTime: 'Время:',
     commentTime: 'Время:',
     commentName: 'Отметить человека:',
     commentName: 'Отметить человека:',
     addRemark: 'Добавить примечание',
     addRemark: 'Добавить примечание',
+    fee: 'расходы',
+    feeName: 'наименование расходов',
+    feeValue: 'конкретные расходы',
+    feeNumber: 'партия расходов',
+    feeTime: 'время возникновения расходов',
+    feeGroupName: 'название группы',
+    feeKeyCode: 'Кодировка',
+    feeUnit: 'единица',
+    feeDescription: 'описание',
+    feeKeyType: 'тип параметра',
     outBed: 'покидать',
     outBed: 'покидать',
     outBed2: 'Отменить регистрацию',
     outBed2: 'Отменить регистрацию',
     outBed3: 'Отменить регистрацию',
     outBed3: 'Отменить регистрацию',

+ 10 - 0
languages/zh-CN.js

@@ -481,6 +481,16 @@ module.exports = {
     remarkTime: '时间: ',
     remarkTime: '时间: ',
     remarkName: '备注人: ',
     remarkName: '备注人: ',
     addRemark: '添加备注',
     addRemark: '添加备注',
+    fee: '费用',
+    feeName: '费用名称',
+    feeValue: '具体费用',
+    feeNumber: '费用批次',
+    feeTime: '费用产生的时间',
+    feeGroupName: '费用项组名',
+    feeKeyCode: '费用编码',
+    feeUnit: '单位',
+    feeDescription: '描述',
+    feeKeyType: '参数类型',
     outBed: '退床',
     outBed: '退床',
     outBed2: '注销登记',
     outBed2: '注销登记',
     outBed3: '注销',
     outBed3: '注销',

+ 19 - 0
src/api/ncs_customer_fee_config.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+export function getCustomerFeeConfig(customerId) {
+  return request({
+    url: `/ncs/customer_fee_config/getCustomerFeeConfig/${customerId}`,
+    method: 'GET'
+  })
+}
+
+export function getCustomerFeeConfigPage(params) {
+  return request({
+    url: '/ncs/customer_fee_config/get_customer_fee_config_page',
+    method: 'POST',
+    loading: true,
+    data: params,
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+  })
+}
+

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

@@ -412,6 +412,10 @@
         <el-tab-pane v-if="formmodel.id && boolDevice" :label="this.$t('customerManage.footprint')" name="footprint">
         <el-tab-pane v-if="formmodel.id && boolDevice" :label="this.$t('customerManage.footprint')" name="footprint">
           <my-map-html :map-url="mapUrl" style="width: 100%; height: 670px;"></my-map-html>
           <my-map-html :map-url="mapUrl" style="width: 100%; height: 670px;"></my-map-html>
         </el-tab-pane>
         </el-tab-pane>
+
+        <el-tab-pane v-if="formmodel.id" :label="this.$t('customerManage.fee')" name="customer-fee-sign">
+          <customer-fee :customer-id="formmodel.id" :active-name="'fee_signs1'"/>
+        </el-tab-pane>
       </el-tabs>
       </el-tabs>
     </el-dialog>
     </el-dialog>
     <!-- 用户信息 -->
     <!-- 用户信息 -->
@@ -543,6 +547,7 @@ import * as API_Remark from '@/api/ncs_remark'
 import * as API_User from '@/api/user'
 import * as API_User from '@/api/user'
 import { FRAME_TYPE } from '@/utils/enum/FrameTypeEnum'
 import { FRAME_TYPE } from '@/utils/enum/FrameTypeEnum'
 import vitalSignLog from '@/views/vital-sign/log'
 import vitalSignLog from '@/views/vital-sign/log'
+import CustomerFee from '@/views/ncs_fee/index'
 import vueQr from 'vue-qr'
 import vueQr from 'vue-qr'
 import * as API_SystemConfig from '@/api/ncs_systemconfig'
 import * as API_SystemConfig from '@/api/ncs_systemconfig'
 import {RELATIVE_NAME_TYPE} from "@/utils/enum/RelativeNameTypeEnum";
 import {RELATIVE_NAME_TYPE} from "@/utils/enum/RelativeNameTypeEnum";
@@ -554,7 +559,7 @@ import {getRelativeList, removeRelative} from "@/api/ncs_relative";
 const serverUrl = domain.serverUrl
 const serverUrl = domain.serverUrl
 export default {
 export default {
   name: 'CustomerManager',
   name: 'CustomerManager',
-  components: { ButtonCellRenderList, ButtonCellRender, ListFilter, RadioFilter, vitalSignLog, vueQr, myMapHtml },
+  components: { ButtonCellRenderList, ButtonCellRender, ListFilter, RadioFilter, vitalSignLog, vueQr, myMapHtml, CustomerFee },
   filters: {
   filters: {
     unixDateFilter(val) {
     unixDateFilter(val) {
       return unixToDate(val)
       return unixToDate(val)

+ 227 - 0
src/views/ncs_fee/index.vue

@@ -0,0 +1,227 @@
+<template>
+  <div>
+    <ag-grid-layout
+        toolbar
+        theme="ag-theme-alpine"
+        :column-defs="columnDefs"
+        :row-data="rowData"
+        :locale-text="localeText"
+        :grid-options="gridOptions"
+        :debounce-vertical-scrollbar="true"
+        :default-col-def="defaultColDef"
+        :animate-rows="true"
+        :row-selection="rowSelection"
+        :framework-components="frameworkComponents"
+        @filterChanged="filterModifed"
+        @sortChanged="gridSortChange"
+    >
+      <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>
+  </div>
+
+</template>
+
+<script>
+import {AG_GRID_LOCALE_CN} from "@/utils/AgGridVueLocaleCn";
+import * as API_Customer_Fee from "@/api/ncs_customer_fee_config";
+import {unix2Date, unixToDate} from "@/utils/Foundation";
+import ButtonCellRender from "@/components/AgGridCellRender/ButtonCellRender";
+import ListFilter from "@/components/AgGridCustomFilter/ListFilter";
+import RadioFilter from "@/components/AgGridCustomFilter/RadioFilter";
+import {getCustomerFeeConfigPage} from "@/api/ncs_customer_fee_config";
+
+export default {
+  name: "CustomerFee",
+  components: {ButtonCellRender, ListFilter, RadioFilter},
+  props: {
+    customerId: {
+      type: Number,
+      default: null
+    },
+    activeName: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      /** ag-grid参数 **/
+      pageData: {}, // 翻页数据
+      errorId: null,
+      shopVisible: false,
+      columnDefs: null,
+      rowData: [],
+      defaultColDef: null,
+      gridOptions: null,
+      gridApi: null,
+      columnApi: null,
+      localeText: AG_GRID_LOCALE_CN,
+      filterState: null,
+      rowSelection: null,
+      frameworkComponents: null,
+      /** 列表参数 */
+      params: {
+        page_size: 20,
+        page_no: 1,
+        fixedCondition: 'fee_config_id is not null and customer_id = ' + this.customerId
+      },
+      isLedDevice: false,
+      websock: null,
+      onlineDevice: [],
+    }
+  },
+  computed: {
+  },
+  watch: {},
+  beforeMount() {
+    this.gridOptions = {}
+    this.columnDefs = [
+      {
+        headerName: '#',
+        headerCheckboxSelection: true,
+        headerCheckboxSelectionFilteredOnly: true,
+        checkboxSelection: true,
+        sortable: false, filter: false,
+        width: 80,
+        resizable: false,
+        valueGetter: this.hashValueGetter
+      },
+      {headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeName'), field: 'fee_name', sortable: true, filter: 'agTextColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeValue'), field: 'fee_value', sortable: true, filter: 'agNumberColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeNumber'), field: 'fee_number', sortable: true, filter: 'agNumberColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeTime'), field: 'fee_time', sortable: true, valueFormatter: this.formatterDate, width: 100},
+      {headerName: this.$t('customerManage.feeGroupName'), field: 'group_name', sortable: true, filter: 'agTextColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeKeyCode'), field: 'key_code', sortable: true, filter: 'agTextColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeUnit'), field: 'unit', sortable: true, filter: 'agTextColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeDescription'), field: 'description', sortable: true, filter: 'agTextColumnFilter', width: 100},
+      {headerName: this.$t('customerManage.feeKeyType'), field: 'key_type', sortable: true, filter: 'agTextColumnFilter', width: 100},
+    ]
+    this.defaultColDef = {
+      // filter: 'agTextColumnFilter',
+      sortable: true,
+      resizable: true,
+      enableValue: true,
+      filter: true,
+      // comparator: this.dateCustomComparator,
+      filterParams: {
+        debounceMs: 500,
+        newRowsAction: 'keep',
+        textCustomComparator: this.textCustomComparator
+      }
+    }
+    this.rowSelection = 'multiple'
+  },
+  mounted() {
+    window.onresize = this.windowResize
+    this.gridApi = this.gridOptions.api
+    // this.gridColumnApi = this.gridOptions.columnApi
+    this.getList()
+  },
+  methods: {
+    windowResize() {
+      this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
+    },
+    /** 加载列表数据 */
+    getList() {
+      const param = this.MixinClone(this.params)
+      this.gridApi.showLoadingOverlay()
+      API_Customer_Fee.getCustomerFeeConfigPage(param).then(response => {
+        this.rowData = 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)
+          }
+        })
+      })
+    },
+
+    /**
+     * 过滤状态发生变化,发送到服务器检索数据
+     */
+    filterModifed(param) {
+      var model = param.api.getFilterModel()
+      // 连接状态不经过服务器过滤
+      delete model.online_state
+      this.params.filter = JSON.stringify(model)
+      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()
+    },
+    /** 处理搜索 */
+    handlerSearch(keywords) {
+      this.params.query = keywords
+      this.getList()
+    },
+    /** 格式化时间函数 */
+    unixDateFormatter(param) {
+      if (!param.value) return ''
+      return unix2Date(param.value * 1000)
+    },
+    /** 分页大小发生改变 */
+    handlePageSizeChange(size) {
+      this.params.page_size = size
+      this.getList()
+    },
+    /** 分页页数发生改变 */
+    handlePageCurrentChange(page) {
+      this.params.page_no = page
+      this.getList()
+    },
+    formatterDate(params) {
+      return unixToDate(params.value)
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>