Explorar el Código

提交部分代码

vothin hace 2 años
padre
commit
8d01177b72

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
dist/index.html


+ 54 - 47
languages/en.js

@@ -27,7 +27,7 @@ module.exports = {
     systemCreate: 'System Create',
     cancelHandle: 'Cancel the operation! ',
     handleSuccess: 'The operation succeeded',
-    handleFailed:'operation failed',
+    handleFailed: 'operation failed',
     saveEdit: 'Save changes',
     saveSettings: 'Save settings',
     deleteSettings: 'Delete settings',
@@ -214,8 +214,8 @@ module.exports = {
     openWatchSosInfo: 'Whether to turn off the watch sedentary alarm. If it is turned off, the watch will not trigger the sedentary alarm again',
     closeWatchSos: 'Turn off the watch sedentary alarm',
     openWatchSos: 'Turn on the alarm for long sitting',
-    opendebug:'Debug',
-    reboot:'Reboot'
+    opendebug: 'Debug',
+    reboot: 'Reboot'
   },
   member: {
     face: 'Avatar',
@@ -416,6 +416,7 @@ module.exports = {
   },
   clerkManage: {
     clerkEdit: 'Edit member information',
+    choiceClerk: 'Please select an employee',
     role: 'Role',
     choiceRole: 'Please choose a role',
     clerkList: 'Team members',
@@ -1000,8 +1001,8 @@ module.exports = {
     interactionChars: 'Interaction statistics',
     partSetting: 'Organization settings',
     functionRoleMapping: 'Component Permissions',
-    countdownConfig:'Countdown Component Configuration',
-    screentip:'ScreenTip Component Configuration',
+    countdownConfig: 'Countdown Component Configuration',
+    screentip: 'ScreenTip Component Configuration',
     interactionChain: 'Interaction Accept Order',
     allClerk: 'All employees',
     allCustomer: 'All users',
@@ -1157,40 +1158,46 @@ module.exports = {
     configurateRight: ']'
   },
   functions: {
+    SIGN_IN: 'Sign in',
     MANAGE_BED: 'Manage Bed',
     POSITION_COMPONENT: 'Locate',
     COUNTDOWN_COMPONENT: 'Countdown',
     ROOMCHECK_COMPONENT: 'Room patrol',
-    SCREEN_TIP_SET_COMPONENT: 'Set screen prompt'
+    SCREEN_TIP_SET_COMPONENT: 'Set screen prompt',
+    nfcCalender: 'Calendar records',
+    nfcInteraction: 'Small component statistics',
+    nfcPosition: 'Positioning trajectory',
+    currently: ' currently ',
+    notRecords: 'There are currently no records available'
   },
-  countdownConfig:{
-    countDownItmes:'Countdown items',
-    countDownTimes:'Countdown time item',
-    addNewItem:'New item',
-    addNewTimeItem:'Add a time item',
-    numberRequired:'You must enter a number',
-    errorTip:'At least one item in the hour, minute, and second must be greater than 0',
+  countdownConfig: {
+    countDownItmes: 'Countdown items',
+    countDownTimes: 'Countdown time item',
+    addNewItem: 'New item',
+    addNewTimeItem: 'Add a time item',
+    numberRequired: 'You must enter a number',
+    errorTip: 'At least one item in the hour, minute, and second must be greater than 0'
   },
-  screenTip:{
-    tipAdd:'Add a prompt',
-    tipEdit:'Edit prompt',
-    showText:'Display content',
-    textColor:'Text color',
-    textSize:'Text Size',
-    screenBgColor:'Screen background color',
-    displayMinutes:'Maximum display time (minutes)',
-    displayLongest:'Maximum display time',
-    boolScroll:'Whether to scroll display',
-    scrollDirect:'Scroll direction',
-    leftToRight:'From left to right',
-    rightToLeft:'From right to left',
-    upToDown:'From top to bottom',
-    downToUp:'From bottom to top',
-    showTextRequired:'Display text must be filled in',
-    scrollDirectRequired:'The scroll direction must be selected',
-    displayMinutesRequired:'The maximum display time must be filled in',
-    textSizeRequired:'Text size must be filled in',
-    numberRequired:'You must enter a number'
+  screenTip: {
+    tipAdd: 'Add a prompt',
+    tipEdit: 'Edit prompt',
+    showText: 'Display content',
+    textColor: 'Text color',
+    textSize: 'Text Size',
+    screenBgColor: 'Screen background color',
+    displayMinutes: 'Maximum display time (minutes)',
+    displayLongest: 'Maximum display time',
+    boolScroll: 'Whether to scroll display',
+    scrollDirect: 'Scroll direction',
+    leftToRight: 'From left to right',
+    rightToLeft: 'From right to left',
+    upToDown: 'From top to bottom',
+    downToUp: 'From bottom to top',
+    showTextRequired: 'Display text must be filled in',
+    scrollDirectRequired: 'The scroll direction must be selected',
+    displayMinutesRequired: 'The maximum display time must be filled in',
+    textSizeRequired: 'Text size must be filled in',
+    numberRequired: 'You must enter a number'
   },
   clerkFrameManage: {
     employeeView: 'Staff View',
@@ -1258,24 +1265,24 @@ module.exports = {
     yes: 'YES',
     nop: 'NO'
   },
-  boardTitle:{
-    add:'Add information board screen',
-    screenTitle:'Screen Title',
-    showIndex:'Display order',
-    partId:'Department ID',
-    design:'Design content',
-    titleRequire:'Screen title cannot be empty',
-    createTitle:'New information board custom screen',
-    editTitle:'Edit information board custom screen'
+  boardTitle: {
+    add: 'Add information board screen',
+    screenTitle: 'Screen Title',
+    showIndex: 'Display order',
+    partId: 'Department ID',
+    design: 'Design content',
+    titleRequire: 'Screen title cannot be empty',
+    createTitle: 'New information board custom screen',
+    editTitle: 'Edit information board custom screen'
   },
   s433Led: {
-    s433Led: "433LED",
+    s433Led: '433LED',
     model: 'model',
-    inspectionTime: "Inspection Time",
+    inspectionTime: 'Inspection Time',
     screenGinseng: 'Screen ginseng',
-    customData: "Custom Data",
-    duBug: "duBug",
-    clearDisplay: "Clear display",
+    customData: 'Custom Data',
+    duBug: 'duBug',
+    clearDisplay: 'Clear display',
     helloWord: 'Hello World',
     batchTx: 'Bulk Send',
     wait: 'Waiting to be sent',

+ 54 - 47
languages/es.js

@@ -27,7 +27,7 @@ module.exports = {
     systemCreate: 'Crear sistema',
     cancelHandle: '¡Cancelar la operación! ',
     handleSuccess: 'La operación tuvo éxito',
-    handleFailed:'La operación falló',
+    handleFailed: 'La operación falló',
     saveEdit: 'Guardar cambios',
     saveSettings: 'Guardar configuración',
     deleteSettings: 'Eliminar configuración',
@@ -214,8 +214,8 @@ module.exports = {
     openWatchSosInfo: 'Si apagar la alarma de sedentarismo del reloj. Si se cierra, el reloj no volverá a activar la alarma sedentaria',
     closeWatchSos: 'Apague la alarma de sedentarismo del reloj',
     openWatchSos: 'Sentarse durante mucho tiempo y encender la alarma',
-    opendebug:'depuración',
-    reboot:'reiniciar'
+    opendebug: 'depuración',
+    reboot: 'reiniciar'
   },
   member: {
     face: 'Avatar',
@@ -417,6 +417,7 @@ module.exports = {
   },
   clerkManage: {
     clerkEdit: 'Editar información del miembro',
+    choiceClerk: 'Por favor, elija un empleado',
     role: 'Rol',
     choiceRole: 'Por favor elige un rol',
     clerkList: 'Miembros del equipo',
@@ -1001,8 +1002,8 @@ module.exports = {
     interactionChars: 'Interacción Estadísticas',
     partSetting: 'Organización construir',
     functionRoleMapping: 'Permisos de componentes',
-    countdownConfig:'Configuración del componente de cuenta atrás',
-    screentip:'Configuración del componente de recordatorio de pantalla',
+    countdownConfig: 'Configuración del componente de cuenta atrás',
+    screentip: 'Configuración del componente de recordatorio de pantalla',
     interactionChain: 'Aceptar órdenes de forma interactiva',
     allClerk: 'Todos los empleados',
     allCustomer: 'Todos los usuarios',
@@ -1157,41 +1158,47 @@ module.exports = {
     configurateRight: ']'
   },
   functions: {
+    SIGN_IN: 'Firmar',
     MANAGE_BED: 'Gestión de camas',
     POSITION_COMPONENT: 'location',
     COUNTDOWN_COMPONENT: 'cuenta atrás',
     ROOMCHECK_COMPONENT: 'patrulla de casas',
-    SCREEN_TIP_SET_COMPONENT: 'configurar el recordatorio de pantalla'
+    SCREEN_TIP_SET_COMPONENT: 'configurar el recordatorio de pantalla',
+    nfcCalender: 'Registro del calendario',
+    nfcInteraction: 'Estadísticas de componentes pequeños',
+    nfcPosition: 'Trayectoria de posicionamiento',
+    currently: ' en la actualidad ',
+    notRecords: 'Actualmente no hay registros disponibles'
   },
-  countdownConfig:{
-    countDownItmes:'proyecto de cuenta atrás',
-    countDownTimes:'entrada de tiempo de cuenta atrás',
-    addNewItem:'nuevo proyecto',
-    addNewTimeItem:'añadir elemento de tiempo',
-    numberRequired:'se debe introducir el número',
-    errorTip:'el tiempo, el minuto y el segundo deben tener al menos uno mayor que 0',
+  countdownConfig: {
+    countDownItmes: 'proyecto de cuenta atrás',
+    countDownTimes: 'entrada de tiempo de cuenta atrás',
+    addNewItem: 'nuevo proyecto',
+    addNewTimeItem: 'añadir elemento de tiempo',
+    numberRequired: 'se debe introducir el número',
+    errorTip: 'el tiempo, el minuto y el segundo deben tener al menos uno mayor que 0'
 
   },
-  screenTip:{
-    tipAdd:'nuevo recordatorio',
-    tipEdit:'editar indicaciones',
-    showText:'mostrar contenido',
-    textColor:'color del texto',
-    textSize:'tamaño del texto',
-    screenBgColor:'color de fondo de la pantalla',
-    displayMinutes:'tiempo máximo de visualización (min)',
-    displayLongest:'tiempo máximo de visualización',
-    boolScroll:'si se desplaza a la pantalla',
-    scrollDirect:'dirección de desplazamiento',
-    leftToRight:'de izquierda a derecha',
-    rightToLeft:'de derecha a izquierda',
-    upToDown:'de arriba a abajo',
-    downToUp:'de abajo hacia arriba',
-    showTextRequired:'el texto de visualización debe rellenarse',
-    scrollDirectRequired:'la dirección de desplazamiento debe seleccionarse',
-    displayMinutesRequired:'el tiempo máximo de visualización debe completarse',
-    textSizeRequired:'el tamaño del texto debe rellenarse',
-    numberRequired:'se debe introducir el número'
+  screenTip: {
+    tipAdd: 'nuevo recordatorio',
+    tipEdit: 'editar indicaciones',
+    showText: 'mostrar contenido',
+    textColor: 'color del texto',
+    textSize: 'tamaño del texto',
+    screenBgColor: 'color de fondo de la pantalla',
+    displayMinutes: 'tiempo máximo de visualización (min)',
+    displayLongest: 'tiempo máximo de visualización',
+    boolScroll: 'si se desplaza a la pantalla',
+    scrollDirect: 'dirección de desplazamiento',
+    leftToRight: 'de izquierda a derecha',
+    rightToLeft: 'de derecha a izquierda',
+    upToDown: 'de arriba a abajo',
+    downToUp: 'de abajo hacia arriba',
+    showTextRequired: 'el texto de visualización debe rellenarse',
+    scrollDirectRequired: 'la dirección de desplazamiento debe seleccionarse',
+    displayMinutesRequired: 'el tiempo máximo de visualización debe completarse',
+    textSizeRequired: 'el tamaño del texto debe rellenarse',
+    numberRequired: 'se debe introducir el número'
   },
   clerkFrameManage: {
     employeeView: 'Vista de empleados',
@@ -1259,24 +1266,24 @@ module.exports = {
     yes: 'Sí.',
     nop: 'No.'
   },
-  boardTitle:{
-    add:'Añadir pantalla de visualización de información',
-    screenTitle:'Título de la pantalla',
-    showIndex:'Orden de visualización',
-    partId:'Departamento ID',
-    design:'Contenido del diseño',
-    titleRequire:'El título de la pantalla no puede estar vacío',
-    createTitle:'Nueva pantalla personalizada de la Junta de información',
-    editTitle:'Editar la pantalla personalizada del tablero de información'
+  boardTitle: {
+    add: 'Añadir pantalla de visualización de información',
+    screenTitle: 'Título de la pantalla',
+    showIndex: 'Orden de visualización',
+    partId: 'Departamento ID',
+    design: 'Contenido del diseño',
+    titleRequire: 'El título de la pantalla no puede estar vacío',
+    createTitle: 'Nueva pantalla personalizada de la Junta de información',
+    editTitle: 'Editar la pantalla personalizada del tablero de información'
   },
   s433Led: {
-    s433Led: "433LED",
+    s433Led: '433LED',
     model: 'Modelo',
-    inspectionTime: "Tiempo de Inspección",
+    inspectionTime: 'Tiempo de Inspección',
     screenGinseng: 'Ginseng de pantalla',
-    customData: "Datos personalizados",
-    duBug: "Dubuge",
-    clearDisplay: "Mostrar claramente",
+    customData: 'Datos personalizados',
+    duBug: 'Dubuge',
+    clearDisplay: 'Mostrar claramente',
     helloWord: 'Hola, mundo',
     batchTx: 'Envío por lotes',
     wait: 'Esperando el envío',

+ 8 - 1
languages/ru-RU.js

@@ -410,6 +410,7 @@ module.exports = {
   },
   clerkManage: {
     clerkEdit: 'Редактировать информацию об участнике',
+    choiceClerk: 'Пожалуйста, выберите сотрудника',
     role: 'Роль',
     selectionRole: 'Пожалуйста, выберите роль',
     clerkList: 'Члены команды',
@@ -1137,11 +1138,17 @@ module.exports = {
     configurateRight: ']Функциональные роли '
   },
   functions: {
+    SIGN_IN: 'Подписаться',
     MANAGE_BED: 'Управление койками',
     POSITION_COMPONENT: 'Месторасположение',
     COUNTDOWN_COMPONENT: 'Обратный отсчет',
     ROOMCHECK_COMPONENT: 'Патрульный дом',
-    SCREEN_TIP_SET_COMPONENT: 'Настройка подсказок экрана'
+    SCREEN_TIP_SET_COMPONENT: 'Настройка подсказок экрана',
+    nfcCalender: 'Календарь',
+    nfcInteraction: 'Статистика малых компонентов',
+    nfcPosition: 'траектория траэтория наведения',
+    currently: ' В настоящее время ',
+    notRecords: 'В настоящее время нет доступных записей'
   },
   countdownConfig: {
     countDownItmes: 'Проект обратного отсчета',

+ 27 - 20
languages/zh-CN.js

@@ -27,7 +27,7 @@ module.exports = {
     systemCreate: '系统创建',
     cancelHandle: '取消操作!',
     handleSuccess: '操作成功',
-    handleFailed:'操作失败',
+    handleFailed: '操作失败',
     saveEdit: '保存修改',
     saveSettings: '保存设置',
     deleteSettings: '清空设置',
@@ -214,8 +214,8 @@ module.exports = {
     openWatchSosInfo: '是否关闭手表久坐报警,关闭的话手表不会再触发久坐报警',
     closeWatchSos: '关闭手表久坐报警',
     openWatchSos: '开启手表久坐报警',
-    opendebug:'调试',
-    reboot:'重启'
+    opendebug: '调试',
+    reboot: '重启'
   },
   member: {
     face: '头像',
@@ -375,8 +375,8 @@ module.exports = {
     transRs485: '上属485转换盒',
     re485SipId: '485地址',
     inputRe485SipId: '请输入485地址',
-    powerControlAddress:'电源版地址',
-    controlLineNumber:'接口线路',
+    powerControlAddress: '电源版地址',
+    controlLineNumber: '接口线路',
     sosDeviceSettingType: '报警模式',
     sosDeviceSettingStatusFalse: '不开启',
     sosDeviceSettingControlModel: '防控模式',
@@ -418,6 +418,7 @@ module.exports = {
   },
   clerkManage: {
     clerkEdit: '编辑成员信息',
+    choiceClerk: '请选择员工',
     role: '角色',
     choiceRole: '请选择角色',
     clerkList: '小组成员',
@@ -1161,11 +1162,17 @@ module.exports = {
     configurateRight: ']功能的角色'
   },
   functions: {
+    SIGN_IN: '签到',
     MANAGE_BED: '管理床位',
     POSITION_COMPONENT: '定位',
     COUNTDOWN_COMPONENT: '倒计时',
     ROOMCHECK_COMPONENT: '巡房',
-    SCREEN_TIP_SET_COMPONENT: '设置屏幕提示语'
+    SCREEN_TIP_SET_COMPONENT: '设置屏幕提示语',
+    nfcCalender: '日历记录',
+    nfcInteraction: '小组件统计',
+    nfcPosition: '定位轨迹',
+    currently: '进行',
+    notRecords: '暂时没有记录'
   },
   countdownConfig: {
     countDownItmes: '倒计时项目',
@@ -1262,24 +1269,24 @@ module.exports = {
     yes: '是',
     nop: '否'
   },
-  boardTitle:{
-    add:'添加看板屏幕',
-    screenTitle:'屏幕标题',
-    showIndex:'显示顺序',
-    partId:'科室ID',
-    design:'设计内容',
-    titleRequire:'屏幕标题不能为空',
-    createTitle:'新增看板自定义屏',
-    editTitle:'编辑自定义看板屏'
+  boardTitle: {
+    add: '添加看板屏幕',
+    screenTitle: '屏幕标题',
+    showIndex: '显示顺序',
+    partId: '科室ID',
+    design: '设计内容',
+    titleRequire: '屏幕标题不能为空',
+    createTitle: '新增看板自定义屏',
+    editTitle: '编辑自定义看板屏'
   },
   s433Led: {
-    s433Led: "无线点阵屏",
+    s433Led: '无线点阵屏',
     model: '模式',
-    inspectionTime: "校验时间",
+    inspectionTime: '校验时间',
     screenGinseng: '屏参',
-    customData: "自定义数据",
-    duBug: "调试",
-    clearDisplay: "清空显示",
+    customData: '自定义数据',
+    duBug: '调试',
+    clearDisplay: '清空显示',
     helloWord: '你好世界',
     batchTx: '批量发送',
     wait: '等待发送',

+ 3 - 3
public/domain.js

@@ -1,7 +1,7 @@
 const domain = {
-  serverUrl: 'http://192.168.1.54:8005',
-  DeviceUrl: 'http://192.168.1.54:8006',
-  mediaUrl: 'http://192.168.1.54:8004',
+  serverUrl: 'http://192.168.1.57:8005',
+  DeviceUrl: 'http://192.168.1.57:8006',
+  mediaUrl: 'http://192.168.1.57:8004',
   OnlineSystemUrl: 'http://api.base.wdklian.com',
   apiMode: 'dev',
   uiVersion: 1 // 1 医院版,2 月子中心版,3养老院版

+ 7 - 1
src/api/ncs_clerk.js

@@ -102,7 +102,6 @@ export function getClerkManageFrame(clerkId,frameRootType) {
   })
 }
 
-
 export function saveClerkManageFrame(params) {
   return request({
     url: '/ncs/clerk/saveclerkmanageframe',
@@ -112,3 +111,10 @@ export function saveClerkManageFrame(params) {
     headers: { 'Content-Type': 'application/json' }
   })
 }
+
+export function getClerksByShopId(partId) {
+  return request({
+    url: `/ncs/clerk/get_clerks_by_part_id/${partId}`,
+    method: 'GET'
+  })
+}

+ 20 - 0
src/api/nfc_interatcion.js

@@ -0,0 +1,20 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/nfc/nfc_interaction/page',
+    method: 'POST',
+    loading: true,
+    data: params,
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+  })
+}
+
+export function get_list_by_clerk_id(params) {
+  return request({
+    url: '/nfc/nfc_interaction/get_list_by_clerk_id',
+    method: 'GET',
+    loading: true,
+    params
+  })
+}

+ 9 - 9
src/utils/domain.js

@@ -26,17 +26,17 @@ module.exports = {
 }
 // docker run -idt -p 8007:80 -e serverUrl=http://8.129.220.143:8005 -e DeviceUrl=http://8.129.220.143:8006 -e mediaUrl=http://8.129.220.143:8004 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121
 // docker run -idt -p 8008:80 -e serverUrl=http://8.129.220.143:8005 -e DeviceUrl=http://8.129.220.143:8006  -e mediaUrl=http://8.129.220.143:8004 -e apiMode=dev -e uiVersion=1 --name ncs-ui-hospital --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121
-// docker run -idt -p 8007:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e mediaUrl=http://119.23.151.229:8004 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.120
-// docker run -idt -p 8008:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e mediaUrl=http://119.23.151.229:8004 -e apiMode=dev -e uiVersion=1 --name ncs-ui-hospital --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.120
+// docker run -idt -p 8007:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e mediaUrl=http://119.23.151.229:8004 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121
+// docker run -idt -p 8008:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e mediaUrl=http://119.23.151.229:8004 -e apiMode=dev -e uiVersion=1 --name ncs-ui-hospital --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121
 // docker run -idt -p 8010:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e mediaUrl=http://119.23.151.229:8004 -e apiMode=dev -e uiVersion=1 --name no-logo-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.105
 // docker run -idt -p 8007:80 -e serverUrl=http://47.107.28.109:8005 -e DeviceUrl=http://47.107.28.109:8006 -e mediaUrl=http://47.107.28.109:8004 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.91
 // docker run -idt -p 8008:80 -e serverUrl=http://47.107.28.109:8005 -e DeviceUrl=http://47.107.28.109:8006 -e mediaUrl=http://47.107.28.109:8004 -e apiMode=dev -e uiVersion=1 --name ncs-ui-hospital --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.91
 // docker run -idt -p 8009:80 -e serverUrl=http://47.107.28.109:8005 -e DeviceUrl=http://47.107.28.109:8006 -e mediaUrl=http://47.107.28.109:8004 -e apiMode=dev -e uiVersion=3 --name ncs-ui-yanglao --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.91
-// docker run -idt -p 8007:80 -e serverUrl=http://110.41.1.153:8005 -e DeviceUrl=http://110.41.1.153:8006 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/ncs_ui:bdhp1.110
+// docker run -idt -p 8007:80 -e serverUrl=http://110.41.1.153:8005 -e DeviceUrl=http://110.41.1.153:8006 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.118
 // docker run -idt -p 8007:80 -e serverUrl=http://192.168.2.251:8005 -e DeviceUrl=http://192.168.2.251:8006 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.47
 // docker run -idt -p 8007:80 -e serverUrl=http://183.64.28.10:8005 -e DeviceUrl=http://183.64.28.10:8006 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.53
 // docker run -idt -p 80:80 -e serverUrl=http://192.168.8.5:8005 -e DeviceUrl=http://192.168.8.5:8006 -e apiMode=dev -e uiVersion=1 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.47
-// docker run -idt -p 80:80 -e serverUrl=http://172.17.33.5:8005 -e DeviceUrl=http://172.17.33.5:8006 -e apiMode=dev -e uiVersion=1 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.86
+// docker run -idt -p 8009:80 -e serverUrl=http://119.23.151.229:8005 -e DeviceUrl=http://119.23.151.229:8006 -e apiMode=dev -e uiVersion=1 --name ncs-ui3 --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.92
 // docker run -idt -p 8007:80 -e serverUrl=http://192.168.1.248:8005 -e DeviceUrl=http://192.168.1.248:8006 -e mediaUrl=http://192.168.1.248:8004 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.97
 // docker run -idt -p 8008:80 -e serverUrl=http://192.168.1.248:8005 -e DeviceUrl=http://192.168.1.248:8006 -e mediaUrl=http://192.168.1.248:8004 -e apiMode=dev -e uiVersion=1 --name ncs-ui2 --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.97
 // docker run -idt -p 80:80 -e serverUrl=http://192.168.20.100:8005 -e DeviceUrl=http://192.168.20.100:8006 -e apiMode=dev -e uiVersion=2 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.74
@@ -48,8 +48,8 @@ module.exports = {
 // docker run -idt -p 8007:80 -e uiVersion=2 --name ncs-ui-yz --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.77
 //
 // 网盘医院版
-// docker build -t   registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121 .
-// docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.121
+// docker build -t   registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.122 .
+// docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.122
 // docker pull registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.47
 // 删除ui
 // docker run -idt -p 80:80 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:bdhp1.119
@@ -58,9 +58,9 @@ module.exports = {
 // docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:en1.83
 // docker run -idt -p 8008:80 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:en1.83
 // 西班牙语板
-// docker build -t   registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.91 .
-// docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.91
-// docker run -idt -p 8008:80 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.91
+// docker build -t   registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.92 .
+// docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.92
+// docker run -idt -p 80:80 --name ncs-ui --log-opt max-size=500m --log-opt max-file=1  -v /etc/localtime:/etc/localtime --restart always  registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:es1.92
 // 俄语板
 // docker build -t   registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:ru1.92 .
 // docker push registry.cn-shenzhen.aliyuncs.com/wdkl/hp_ui:ru1.92

+ 13 - 0
src/utils/enum/FunctionEnum.js

@@ -0,0 +1,13 @@
+import createEnum from '@/utils/enum/createEnum'
+import i18n from '@/utils/i18n'
+
+export const FUNCTION_TYPE = createEnum(
+  {
+    SIGN_IN: ['SIGN_IN', i18n.t('functions.SIGN_IN')],
+    MANAGE_BED: ['MANAGE_BED', i18n.t('functions.MANAGE_BED')],
+    POSITION_COMPONENT: ['POSITION_COMPONENT', i18n.t('functions.POSITION_COMPONENT')],
+    COUNTDOWN_COMPONENT: ['COUNTDOWN_COMPONENT', i18n.t('functions.COUNTDOWN_COMPONENT')],
+    ROOMCHECK_COMPONENT: ['ROOMCHECK_COMPONENT', i18n.t('functions.ROOMCHECK_COMPONENT')],
+    SCREEN_TIP_SET_COMPONENT: ['SCREEN_TIP_SET_COMPONENT', i18n.t('functions.SCREEN_TIP_SET_COMPONENT')]
+  }
+)

+ 27 - 3
src/views/nfc-interaction/index.vue

@@ -1,11 +1,35 @@
 <template>
-  <el-calendar v-model="value">
-  </el-calendar>
+
+  <el-row>
+    <el-tabs v-model="activeName" type="border-card" style="margin: 10px">
+      <el-tab-pane :label="this.$t('functions.nfcCalender')" name="nfcCalender">
+        <nfc-calender/>
+      </el-tab-pane>
+
+      <el-tab-pane label="小组件统计" name="nfcInteraction">
+        <nfc-interaction/>
+      </el-tab-pane>
+
+      <el-tab-pane label="定位轨迹" name="nfcPosition">
+        <nfc-position/>
+      </el-tab-pane>
+    </el-tabs>
+  </el-row>
 </template>
 
 <script>
+
+import NfcCalender from './nfcCalender'
+import NfcInteraction from './nfcInteraction'
+import NfcPosition from './nfcPosition'
 export default {
-  name: "index"
+  name: "index",
+  components: { NfcCalender, NfcInteraction, NfcPosition },
+  data() {
+    return {
+      activeName: 'nfcCalender'
+    }
+  }
 }
 </script>
 

+ 280 - 0
src/views/nfc-interaction/nfcCalender.vue

@@ -0,0 +1,280 @@
+<template>
+  <div class="container">
+    <el-row>
+      <el-select v-model="param.clerk_id" :placeholder="this.$t('clerkManage.choiceClerk')" @change="clerkChange">
+        <el-option v-for="(item, index) in this.clerkList" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
+      </el-select>
+    </el-row>
+
+    <el-row>
+<!--      <el-col :span="16">-->
+      <el-col :span="24">
+        <el-card style="margin: 15px 0 15px 15px;height: 700px">
+          <el-calendar v-model="value">
+            <template slot="dateCell" slot-scope="{date, data}">
+              <div @click="calendarOnClick(date)">
+                <div style="margin: auto;min-width: 90px;min-height: 70px">
+<!--                <div style="margin: auto">-->
+                  {{ data.day.split('-').slice(2).join('-') }}
+                  <div style="float: right" class="signIn" v-if="isSignInFunction(data.day)"></div>
+<!--                    <p style="float: right" class="budge green" v-if="isSignInFunction(data.day)"></p>-->
+<!--                    <p style="float: right" class="budge blue" v-if="isOtherFunction(data.day)"></p>-->
+
+                </div>
+
+              </div>
+            </template>
+          </el-calendar>
+        </el-card>
+      </el-col>
+
+<!--      <el-col :span="8">-->
+<!--        <el-card style="margin: 15px 15px 15px 0;height: 700px;overflow: scroll">-->
+<!--          <el-timeline v-if="this.dayNfcInteractionList.length > 0">-->
+<!--            <el-timeline-item-->
+<!--                v-for="(dayInteraction, index) in this.dayNfcInteractionList"-->
+<!--                :key="index"-->
+<!--                :color="getTimelineItemColor(dayInteraction.operation)"-->
+<!--                :timestamp="formatterDate(dayInteraction.create_time)" placement="top">-->
+<!--              <el-card>-->
+<!--&lt;!&ndash;                <h4>{{ dayInteraction.nickname }}</h4>&ndash;&gt;-->
+<!--                <h4>{{ getCardString(dayInteraction) }}</h4>-->
+<!--              </el-card>-->
+<!--            </el-timeline-item>-->
+<!--          </el-timeline>-->
+<!--          <el-timeline v-else>-->
+<!--            <el-timeline-item>-->
+<!--              <el-card>-->
+<!--                {{ this.$t('functions.notRecords') }}-->
+<!--              </el-card>-->
+<!--            </el-timeline-item>-->
+
+<!--          </el-timeline>-->
+<!--        </el-card>-->
+<!--      </el-col>-->
+    </el-row>
+  </div>
+</template>
+
+<script>
+import * as API_nfcInteraction from '@/api/nfc_interatcion'
+import { FUNCTION_TYPE } from "@/utils/enum/FunctionEnum";
+import { parseTime } from "@/utils";
+import {unixToDate} from "@/utils/Foundation";
+import * as API_Clerk from "@/api/ncs_clerk";
+import {getClerksByShopId} from "@/api/ncs_clerk";
+export default {
+  name: "nfc-calender",
+  // clerkId: {
+  //   type: Number,
+  //   default: null
+  // },
+  data() {
+    return {
+      formmodel: {},
+      rules: {},
+      loading: false,
+      mount: "",
+      param: {
+      },
+      value: new Date(),
+      month: "",
+      nfcInteractionList: [],
+      signInList: [],
+      otherList: [],
+      dayNfcInteractionList: [],
+      clerkList: [],
+    }
+  },
+  created: function() {
+    this.$nextTick(() => {
+      // 点击前一个月
+      let prevBtn = document.querySelector(
+          ".el-calendar__button-group .el-button-group>button:nth-child(1)"
+      );
+      prevBtn.addEventListener("click", e => {
+        this.handleYearMonthChanged(this.value)
+      });
+
+      //点击下一个月
+      let nextBtn = document.querySelector(
+          ".el-calendar__button-group .el-button-group>button:nth-child(3)"
+      );
+      nextBtn.addEventListener("click", () => {
+        this.handleYearMonthChanged(this.value)
+      });
+
+      //点击今天
+      let todayBtn = document.querySelector(
+          ".el-calendar__button-group .el-button-group>button:nth-child(2)"
+      );
+      todayBtn.addEventListener("click", () => {
+        this.handleYearMonthChanged(this.value)
+      });
+    });
+  },
+  mounted() {
+    this.value = new Date()
+    this.calendarOnClick(this.value)
+    this.getClerkList()
+  },
+  methods: {
+    getClerkList() {
+      this.loading = true
+      API_Clerk.getClerksByShopId(this.$store.getters.partId).then(res => {
+        this.clerkList = res
+        this.loading = false
+      })
+    },
+    clerkChange(val) {
+      // this.param.clerk_id = val
+      this.getNfcInteraction()
+    },
+    // 获取选择月的nfc数据
+    getNfcInteraction() {
+      this.loading = true
+      API_nfcInteraction.get_list_by_clerk_id(this.param).then(r => {
+        this.loading = false;
+        this.nfcInteractionList = r;
+
+        let date = ''
+        this.signInList = []
+        for (let i = 0; i < this.nfcInteractionList.length; i++) {
+          date = parseTime(this.nfcInteractionList[i].create_time, '{y}-{m}-{d}')
+          if (this.nfcInteractionList[i].operation === FUNCTION_TYPE.SIGN_IN) {
+            this.signInList.push({'date' : date})
+          }
+          else {
+            this.otherList.push({'date' : date})
+          }
+        }
+        // console.log(this.nfcInteractionList)
+      })
+    },
+    /** 年月份发生变化 */
+    handleYearMonthChanged(date) {
+      // console.log(object)
+      this.param.year = date.getFullYear()
+      this.param.month = this.checkTime(date.getMonth() + 1)
+      this.param.day = this.checkTime(date.getDate())
+      if (this.param.month !== this.month) {
+        this.month = this.param.month
+        this.getNfcInteraction();
+      }
+    },
+    // 时间处理,如果时间小于10 ,则再前面加一个'0'
+    checkTime(i) {
+      if (i < 10) {
+        i = '0' + i
+      }
+      return i
+    },
+    // 每个月打卡签到的时间列表,用于日历显示
+    isSignInFunction(param) {
+      let res = false
+      for (let i = 0; i < this.signInList.length; i++) {
+        if (this.signInList[i].date === param) {
+          res = true;
+          break;
+        }
+      }
+      return res;
+    },
+    isOtherFunction(param) {
+      let res = false
+      for (let i = 0; i < this.otherList.length; i++) {
+        if (this.otherList[i].date === param) {
+          res = true;
+          break;
+        }
+      }
+      return res;
+    },
+    //点击日期块
+    calendarOnClick(date) {
+      this.handleYearMonthChanged(date)
+      this.getNfcInteractionByDay(date)
+    },
+    // 获取选择日的nfc数据
+    getNfcInteractionByDay(date) {
+      let startTime = date.getFullYear() + '-' + this.checkTime(date.getMonth() + 1) + '-' + this.checkTime(date.getDate()) + ' 00:00:00'
+      let endTime  = date.getFullYear() + '-' + this.checkTime(date.getMonth() + 1) + '-' + this.checkTime(date.getDate()) + ' 23:59:59'
+      startTime = new Date(startTime).getTime() / 1000;
+      endTime = new Date(endTime).getTime() / 1000;
+
+      // 每次点击都需要清空 this.dayNfcInteractionList
+      this.dayNfcInteractionList = []
+      // 再通过循环,将列表里属于选择日的数据放入 this.dayNfcInteractionList
+      for (let i = 0; i < this.nfcInteractionList.length; i++) {
+        if (startTime <= this.nfcInteractionList[i].create_time && this.nfcInteractionList[i].create_time <= endTime) {
+          this.dayNfcInteractionList.push(this.nfcInteractionList[i])
+        }
+      }
+
+    },
+    formatterDate(param) {
+      return unixToDate(param)
+    },
+    getFunctionString(param) {
+      return FUNCTION_TYPE.getDescFromValue(param)
+    },
+    // 修改时间线的圆圈颜色,打卡为绿色,其他为蓝色,没有为灰色
+    getTimelineItemColor(param) {
+      if (param === FUNCTION_TYPE.SIGN_IN) {
+        return '#4abe84'
+      }
+      else {
+        return '#409eff'
+      }
+    },
+    getCardString(dayInteraction) {
+      let time = unixToDate(dayInteraction.create_time).substring(11, 16);
+      return time + '  ' + dayInteraction.clerk_name + this.$t('functions.currently') + this.getFunctionString(dayInteraction.operation)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.budge{
+  width: 10px;
+  height: 10px;
+  border-radius: 5px;
+  margin-top: 50px;
+  /*margin-bottom: 5px;*/
+  margin-right: 10px;
+  /*margin: 36px 80px;*/
+}
+.green{
+  background-color: #4abe84;;
+}
+
+.blue{
+  background-color: #409eff;
+}
+/*.signIn:before {*/
+/*  content: '';*/
+/*  position: absolute;*/
+/*  !*right: 0;*!*/
+/*  !*bottom: 0;*!*/
+/*  border: 17px solid #4abe84;*/
+/*  border-top-color: transparent;*/
+/*  border-left-color: transparent;*/
+/*  margin: 30px 38px;*/
+/*}*/
+.signIn {
+  content: '';
+  width: 5px;
+  height: 12px;
+  position: absolute;
+  /*right: 6px;*/
+  /*bottom: 6px;*/
+  border: 2px solid #4abe84;
+  border-top-color: transparent;
+  border-left-color: transparent;
+  transform: rotate(45deg);
+  margin: 36px 110px;
+  /*margin: auto;*/
+}
+
+</style>

+ 188 - 0
src/views/nfc-interaction/nfcInteraction.vue

@@ -0,0 +1,188 @@
+<template>
+
+  <div class="container">
+    <el-row>
+      <el-select v-model="param.clerk_id" :placeholder="this.$t('clerkManage.choiceClerk')" @change="clerkChange">
+        <el-option v-for="(item, index) in this.clerkList" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
+      </el-select>
+
+      <el-date-picker
+          style="float: right"
+          v-model="value"
+          align="right"
+          type="date"
+          :placeholder="this.$t('action.choiceData')"
+          :picker-options="pickerOptions"
+          :clearable="false"
+          @change="handleYearMonthChanged"
+      >
+      </el-date-picker>
+    </el-row>
+
+    <el-row>
+<!--      <el-col :span="24" class="frame" style="margin: 15px auto auto" >-->
+<!--        <el-tabs tab-position="left" style="margin: 20px;height: 700px" >-->
+<!--          <el-tab-pane label="用户管理">用户管理</el-tab-pane>-->
+<!--          <el-tab-pane label="配置管理">配置管理</el-tab-pane>-->
+<!--          <el-tab-pane label="角色管理">角色管理</el-tab-pane>-->
+<!--          <el-tab-pane label="定时任务补偿">定时任务补偿</el-tab-pane>-->
+<!--        </el-tabs>-->
+<!--      </el-col>-->
+      <el-menu>
+        <el-submenu v-for="(key,index) in Object.keys(clerkList)" :index="index+''" :key="index">
+          <template slot="title">
+            <svg-icon icon-class="role"/>
+            <span>{{key}}</span>
+          </template>
+          <el-menu-item-group v-if="clerkList[key].length>0">
+            <el-menu-item :index="index+'-'+_idx" v-for="(item,_idx) in clerkList[key]" :key="_idx">
+              {{item.clerk_name}}
+            </el-menu-item>
+          </el-menu-item-group>
+        </el-submenu>
+
+        <el-submenu index="1">
+          <template slot="title">
+            <i class="el-icon-location"></i>
+            <span>导航一</span>
+          </template>
+          <el-menu-item-group>
+            <template slot="title">分组一</template>
+            <el-menu-item index="1-1">选项1</el-menu-item>
+            <el-menu-item index="1-2">选项2</el-menu-item>
+          </el-menu-item-group>
+          <el-menu-item-group title="分组2">
+            <el-menu-item index="1-3">选项3</el-menu-item>
+          </el-menu-item-group>
+          <el-submenu index="1-4">
+            <template slot="title">选项4</template>
+            <el-menu-item index="1-4-1">选项1</el-menu-item>
+          </el-submenu>
+        </el-submenu>
+        </el-menu>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import * as API_Clerk from "@/api/ncs_clerk";
+import * as API_nfcInteraction from "@/api/nfc_interatcion";
+import {parseTime} from "@/utils";
+import {FUNCTION_TYPE} from "@/utils/enum/FunctionEnum";
+import {unixToDate} from "@/utils/Foundation";
+
+export default {
+  name: "nfcInteractionManager",
+  data() {
+    return {
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        },
+        shortcuts: [{
+          text: '今天',
+          onClick(picker) {
+            picker.$emit('pick', new Date());
+          }
+        }, {
+          text: '昨天',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24);
+            picker.$emit('pick', date);
+          }
+        }, {
+          text: '一周前',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', date);
+          }
+        }]
+      },
+      formmodel: {},
+      rules: {},
+      loading: false,
+      mount: "",
+      param: {
+      },
+      value: new Date(),
+      month: "",
+      nfcInteractionList: [],
+      dayNfcInteractionList: [],
+      clerkList: [],
+    }
+  },
+  mounted() {
+    this.value = new Date()
+    this.calendarOnClick(this.value)
+    this.getClerkList()
+  },
+  methods: {
+    getClerkList() {
+      this.loading = true
+      API_Clerk.getClerksByShopId(this.$store.getters.partId).then(res => {
+        this.clerkList = res
+        this.loading = false
+      })
+    },
+    clerkChange(val) {
+      // this.param.clerk_id = val
+      this.getNfcInteraction()
+    },
+    // 获取选择月的nfc数据
+    getNfcInteraction() {
+      this.loading = true
+      API_nfcInteraction.get_list_by_clerk_id(this.param).then(r => {
+        this.loading = false;
+        this.nfcInteractionList = r;
+
+        let date = ''
+        for (let i = 0; i < this.nfcInteractionList.length; i++) {
+          date = parseTime(this.nfcInteractionList[i].create_time, '{y}-{m}-{d}')
+          if (this.nfcInteractionList[i].operation === FUNCTION_TYPE.SIGN_IN) {
+          } else {
+          }
+        }
+        // console.log(this.nfcInteractionList)
+      })
+    },
+    /** 年月份发生变化 */
+    handleYearMonthChanged(date) {
+      // console.log(date)
+      if (date !== null) {
+        this.param.year = date.getFullYear()
+        this.param.month = this.checkTime(date.getMonth() + 1)
+        this.param.day = this.checkTime(date.getDate())
+        if (this.param.month !== this.month) {
+          this.month = this.param.month
+          this.getNfcInteraction();
+        }
+      }
+    },
+    // 时间处理,如果时间小于10 ,则再前面加一个'0'
+    checkTime(i) {
+      if (i < 10) {
+        i = '0' + i
+      }
+      return i
+    },
+    //点击日期块
+    calendarOnClick(date) {
+      this.handleYearMonthChanged(date)
+    },
+    formatterDate(param) {
+      return unixToDate(param)
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+.frame{
+  box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
+  border-radius: 0
+}
+
+</style>

+ 137 - 0
src/views/nfc-interaction/nfcPosition.vue

@@ -0,0 +1,137 @@
+<template>
+  <div class="container">
+    <el-row>
+      <el-select v-model="param.clerk_id" :placeholder="this.$t('clerkManage.choiceClerk')" @change="clerkChange">
+        <el-option v-for="(item, index) in this.clerkList" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
+      </el-select>
+
+      <el-date-picker
+          style="float: right"
+          v-model="value"
+          align="right"
+          type="date"
+          :placeholder="this.$t('action.choiceData')"
+          :picker-options="pickerOptions"
+          :clearable="false"
+          @change="handleYearMonthChanged"
+      >
+      </el-date-picker>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import * as API_nfcInteraction from "@/api/nfc_interatcion";
+import {parseTime} from "@/utils";
+import {FUNCTION_TYPE} from "@/utils/enum/FunctionEnum";
+import * as API_Clerk from "@/api/ncs_clerk";
+import {unixToDate} from "@/utils/Foundation";
+
+export default {
+  name: "nfcPosition",
+  data() {
+    return {
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        },
+        shortcuts: [{
+          text: '今天',
+          onClick(picker) {
+            picker.$emit('pick', new Date());
+          }
+        }, {
+          text: '昨天',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24);
+            picker.$emit('pick', date);
+          }
+        }, {
+          text: '一周前',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', date);
+          }
+        }]
+      },
+      formmodel: {},
+      rules: {},
+      loading: false,
+      mount: "",
+      param: {
+      },
+      value: new Date(),
+      month: "",
+      nfcInteractionList: [],
+      dayNfcInteractionList: [],
+      clerkList: [],
+    }
+  },
+  mounted() {
+    this.value = new Date()
+    this.calendarOnClick(this.value)
+    this.getClerkList()
+  },
+  methods: {
+    getClerkList() {
+      this.loading = true
+      API_Clerk.getClerksByShopId(this.$store.getters.partId).then(res => {
+        this.clerkList = res
+        this.loading = false
+      })
+    },
+    clerkChange(val) {
+      // this.param.clerk_id = val
+      this.getNfcInteraction()
+    },
+    // 获取选择月的nfc数据
+    getNfcInteraction() {
+      this.loading = true
+      API_nfcInteraction.get_list_by_clerk_id(this.param).then(r => {
+        this.loading = false;
+        this.nfcInteractionList = r;
+
+        let date = ''
+        for (let i = 0; i < this.nfcInteractionList.length; i++) {
+          date = parseTime(this.nfcInteractionList[i].create_time, '{y}-{m}-{d}')
+          if (this.nfcInteractionList[i].operation === FUNCTION_TYPE.SIGN_IN) {
+          } else {
+          }
+        }
+        // console.log(this.nfcInteractionList)
+      })
+    },
+    /** 年月份发生变化 */
+    handleYearMonthChanged(date) {
+      // console.log(date)
+      this.param.year = date.getFullYear()
+      this.param.month = this.checkTime(date.getMonth() + 1)
+      this.param.day = this.checkTime(date.getDate())
+      if (this.param.month !== this.month) {
+        this.month = this.param.month
+        this.getNfcInteraction();
+      }
+    },
+    // 时间处理,如果时间小于10 ,则再前面加一个'0'
+    checkTime(i) {
+      if (i < 10) {
+        i = '0' + i
+      }
+      return i
+    },
+    //点击日期块
+    calendarOnClick(date) {
+      this.handleYearMonthChanged(date)
+    },
+    formatterDate(param) {
+      return unixToDate(param)
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>