lincl пре 3 година
родитељ
комит
3e7f3ca9c7
46 измењених фајлова са 1265 додато и 1993 уклоњено
  1. 404 0
      mini-pro-web/src/api/api-medicineAbinet.js
  2. 1 1
      mini-pro-web/src/api/apiGateway.js
  3. 14 6
      mini-pro-web/src/api/login.js
  4. 0 48
      mini-pro-web/src/api/message.js
  5. 0 55
      mini-pro-web/src/api/monitor.js
  6. 0 51
      mini-pro-web/src/api/myOrderApi.js
  7. 0 22
      mini-pro-web/src/api/nlpgApi.js
  8. 0 22
      mini-pro-web/src/api/noticeApi.js
  9. 0 108
      mini-pro-web/src/api/nurseryRecordApi.js
  10. 0 29
      mini-pro-web/src/api/online.js
  11. 0 70
      mini-pro-web/src/api/onlineConsultation.js
  12. 0 138
      mini-pro-web/src/api/onlineRegistrationApi.js
  13. 0 70
      mini-pro-web/src/api/orderApi.js
  14. 0 28
      mini-pro-web/src/api/org.js
  15. 0 95
      mini-pro-web/src/api/patient.js
  16. 0 60
      mini-pro-web/src/api/physicalTestApi.js
  17. 0 20
      mini-pro-web/src/api/plannedImmunization.js
  18. 0 14
      mini-pro-web/src/api/residentApi.js
  19. 0 138
      mini-pro-web/src/api/securityMonitoringApi.js
  20. 0 17
      mini-pro-web/src/api/sign.js
  21. 0 246
      mini-pro-web/src/api/signApi.js
  22. 0 76
      mini-pro-web/src/api/sos.js
  23. 4 0
      mini-pro-web/src/components/layout/NavLayout.vue
  24. 6 0
      mini-pro-web/src/mixins/common.js
  25. 13 4
      mini-pro-web/src/router/index.js
  26. 1 1
      mini-pro-web/src/store/getters.js
  27. 4 3
      mini-pro-web/src/utils/web-ajax.js
  28. 43 23
      mini-pro-web/src/views/device/detail.vue
  29. 54 31
      mini-pro-web/src/views/device/index.vue
  30. 24 9
      mini-pro-web/src/views/device/status.vue
  31. 22 0
      mini-pro-web/src/views/drug/css/drugSel.scss
  32. 101 0
      mini-pro-web/src/views/drug/list.vue
  33. 23 17
      mini-pro-web/src/views/index/Index.vue
  34. 25 93
      mini-pro-web/src/views/login/Login.vue
  35. 0 1
      mini-pro-web/src/views/login/Register.vue
  36. 136 10
      mini-pro-web/src/views/machine/index.vue
  37. 67 77
      mini-pro-web/src/views/order/list.vue
  38. 35 24
      mini-pro-web/src/views/personal/changePassword.vue
  39. 31 231
      mini-pro-web/src/views/personal/index.vue
  40. 1 1
      mini-pro-web/src/views/replenishment/device/list.vue
  41. 10 10
      mini-pro-web/src/views/replenishment/index.vue
  42. 28 6
      mini-pro-web/src/views/replenishment/picking/detail.vue
  43. 54 59
      mini-pro-web/src/views/replenishment/picking/list.vue
  44. 30 32
      mini-pro-web/src/views/replenishment/start/deviceList.vue
  45. 91 9
      mini-pro-web/src/views/replenishment/stockUp/detail.vue
  46. 43 38
      mini-pro-web/src/views/replenishment/stockUp/deviceList.vue

+ 404 - 0
mini-pro-web/src/api/api-medicineAbinet.js

@ -0,0 +1,404 @@
import request from "@/utils/request";
import {BASE} from "@/api/apiGateway"
let service = {
	//备货单相关接口 start
	replenishList: function(params) {
		return request({
			url: `${BASE}/baseUp/docFullInfo`,
			method: "get",
			params
		});
    },
	replenishFindById: function(params) {
		return request({
			url: `${BASE}/baseUp/getUpDetailListById`,
			method: "get",
			params
		});
    },
	replenishCreate: function(data) {
		return request({
			url: `${BASE}/baseUp/create`,
			method: "post",
			data
		});
    },
	replenishUpdate: function(data) {
		return request({
			url: `${BASE}/baseUp/update`,
			method: "post",
			data
		});
    },
	replenishDelete: function(data) {
		return request({
			url: `${BASE}/baseUp/delete`,
			method: "post",
			data
		});
    },
	baseUpGetRecordByPage: function(params) {
		return request({
			url: `${BASE}/baseUp/getRecordByPage`,
			method: "get",
			params
		});
    },
	// 生成备货单
	baseUpCreateUp: function(data) {
		return request({
			url: `${BASE}/baseUp/createUp`,
			method: "post",
			data
		});
    },
	getUpDetailById: function(params) {
		return request({
			url: `${BASE}/baseUp/getUpDetailById`,
			method: "get",
			params
		});
    },
	// .获取补货记录明细  recordId
	getRecordDetailListById: function(params) {
		return request({
			url: `${BASE}/baseUp/getRecordDetailListById`,
			method: "get",
			params
		});
    },
	//备货单相关接口 end
	//出库单相关接口 start
	outboundOrderList: function(params) {
		return request({
			url: `${BASE}/baseOut/docFullInfo`,
			method: "get",
			params
		});
    },
	outboundOrderCreate: function(data) {
		return request({
			url: `${BASE}/baseOut/create`,
			method: "post",
			data
		});
    },
	outboundOrderUpdate: function(data) {
		return request({
			url: `${BASE}/baseOut/update`,
			method: "post",
			data
		});
    },
	outboundOrderDelete: function(data) {
		return request({
			url: `${BASE}/baseOut/delete`,
			method: "post",
			data
		});
    },
	// 修改出货单领取状态
	changeReceiveState: function(data) {
		return request({
			url: `${BASE}/baseOut/changeReceiveState`,
			method: "post",
			data
		});
    },
	changeMoreReceiveState: function(data) {
		return request({
			url: `${BASE}/baseOut/changeMoreReceiveState`,
			method: "post",
			data
		});
    },
	// 生成出库单
	baseOutCreateUp: function(data) {
		return request({
			url: `${BASE}/baseOut/createUp`,
			method: "post",
			data
		});
    },
	// 出库单明细
	getOutDetailById: function(params) {
		return request({
			url: `${BASE}/baseOut/getOutDetailById`,
			method: "get",
			params
		});
    },
	//出库单相关接口 end
	
	
	//药品信息 start
	drugList: function(params) {
		return request({
			url: `${BASE}/baseDrug/docFullInfo`,
			method: "get",
			params
		});
    },
	getDrugDetailListById: function(params) {
		return request({
			url: `${BASE}/baseDrug/getDrugDetailListById`,
			method: "get",
			params
		});
    },
	//药品信息 end
	//设备相关接口 start
	deviceList: function(params) {
		return request({
			url: `${BASE}/baseDevice/docFullInfo`,
			method: "get",
			params
		});
    },
	deviceCreate: function(data) {
		return request({
			url: `${BASE}/baseDevice/create`,
			method: "post",
			data
		});
    },
	deviceUpdate: function(data) {
		return request({
			url: `${BASE}/baseDevice/update`,
			method: "post",
			data
		});
    },
	deviceDelete: function(data) {
		return request({
			url: `${BASE}/baseDevice/delete`,
			method: "post",
			data
		});
    },
	// 获取缺货列表
	getOutOfStockDeviceList: function(params) {
		return request({
			url: `${BASE}/baseDevice/getOutOfStockDeviceList`,
			method: "get",
			params
		});
    },
	// 获取缺货信息
	getDetialOutOfStock: function(data) {
		return request({
			url: `${BASE}/baseDevice/getDetialOutOfStock`,
			method: "post",
			data
		});
    },
	//通过设备id  查询 所绑定的补货员信息列表  deviceId
	getUserListByDeviceId: function(params) {
		return request({
			url: `${BASE}/baseDevice/getUserListByDeviceId`,
			method: "get",
			params
		});
    },
	//获取设备信息
	findDeviceById: function(params) {
		return request({
			url: `${BASE}/baseDevice/findById`,
			method: "get",
			params
		});
    },
	getDevicesByMoreContent: function(params) {
		return request({
			url: `${BASE}/baseDevice/getDevicesByMoreContent`,
			method: "get",
			params
		});
    },
	// 更新设备投放地址
	updateAddressInfo: function(data) {
		return request({
			url: `${BASE}/baseDevice/updateAddressInfo`,
			method: "post",
			data
		});
    },
	// 更新设备社区
	updateCommunity: function(data) {
		return request({
			url: `${BASE}/baseDevice/updateCommunity`,
			method: "post",
			data
		});
    },
	//解绑设备 deviceIds
	unbindDevice: function(data) {
		return request({
			url: `${BASE}/baseDevice/unbindDevice`,
			method: "post",
			data
		});
    },
	updateSaleStatus: function(data) {
		return request({
			url: `${BASE}/baseDevice/updateSaleStatus`,
			method: "post",
			data
		});
    },
	// 新增投放地址
	createAddress: function(data) {
		return request({
			url: `${BASE}/baseDevice/createAddress`,
			method: "post",
			data
		});
    },
	// 删除投放地址
	deleteAddress: function(data) {
		return request({
			url: `${BASE}/baseDevice/deleteAddress`,
			method: "post",
			data
		});
    },
	// 获取投放地址列表
	getDevicesDeliveryList: function(params) {
		return request({
			url: `${BASE}/baseDevice/getDevicesDeliveryList`,
			method: "get",
			params
		});
    },
	// 处方明细接口
	getOrderDetailById: function(params) {
		return request({
			url: `${BASE}/baseOrder/getOrderDetailById`,
			method: "get",
			params
		});
    },
	//获取设备统计
	countall: function(params) {
		return request({
			url: `${BASE}/baseDevice/countall`,
			method: "get",
			params
		});
    },
	
	
	warrayGetExceed: function(params) {
		return request({
			url: `${BASE}/baseWarray/getExceed`,
			method: "get",
			params
		});
    },
	warrayGetFlow: function(params) {
		return request({
			url: `${BASE}/baseWarray/getFlow`,
			method: "get",
			params
		});
    },
	warrayGetNetwork: function(params) {
		return request({
			url: `${BASE}/baseWarray/getNetwork`,
			method: "get",
			params
		});
    },
	warrayGetFault: function(params) {
		return request({
			url: `${BASE}/baseWarray/getFault`,
			method: "get",
			params
		});
    },
	warrayGetOffline: function(params) {
		return request({
			url: `${BASE}/baseWarray/getOffline`,
			method: "get",
			params
		});
    },
	warrayGetHumidity: function(params) {
		return request({
			url: `${BASE}/baseWarray/getHumidity`,
			method: "get",
			params
		});
    },
	warrayGetTemperature: function(params) {
		return request({
			url: `${BASE}/baseWarray/getTemperature`,
			method: "get",
			params
		});
    },
	//设备相关接口 end
	//订单相关接口 start
	orderList: function(params) {
		return request({
			url: `${BASE}/baseOrder/docFullInfo`,
			method: "get",
			params
		});
    },
	getOrderDetailListById: function(params) {
		return request({
			url: `${BASE}/baseOrder/getOrderDetailListById`,
			method: "get",
			params
		});
    },
	//设备相关接口 end
	//补货员列表
	replenishErList: function(params) {
		return request({
			url: `${BASE}/baseUser/docFullInfo`,
			method: "get",
			params
		});
    },
	// 分配设备(员工)  userIds deviceIds  isAll
	allotDevice: function(params) {
		return request({
			url: `${BASE}/baseUser/allotDevice`,
			method: "get",
			params
		});
    },
	// 检查订单并且返回药品库存信息
	checkOrderAndReturn: function(params) {
		return request({
			url: `${BASE}/open/noLogin/checkOrderAndReturn`,
			method: "get",
			params
		});
    },
	
	
};
export default service;

+ 1 - 1
mini-pro-web/src/api/apiGateway.js

@ -1,2 +1,2 @@
export const BASE = '/cloudCare'
export const BASE = '/cityihealth/base'
export const AUTH = "/cityihealth"
export const AUTH = "/cityihealth"

+ 14 - 6
mini-pro-web/src/api/login.js

@ -109,11 +109,19 @@ export function deleteUser(data) {
        data
        data
	});
	});
}
}
//获取居民定位
export function updLatLon(data) {
	return request({
		url: `${BASE}/patient/updLatLon`,
        method: "post",
        data
export function findUserBaseInfo(data) {
    return request({
		url: `${BASE}/user/findUserBaseInfo`,
        method: "get",
        params: data
	});
	});
}
export function changePwd(data) {
	return request({
	  url: `${BASE}/user/updatePwd`,
	  method: 'post',
	  data
	})
}
}

+ 0 - 48
mini-pro-web/src/api/message.js

@ -1,48 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
let nmessageApi = {
  //居民消息父级列表
    residentList(params) {
        return request({
          url: `${BASE}/patient/message/getSystemMessage`,
          method: 'get',
          params: params
        })
    },
  //居民消息子级列表
    requestDetail(params) {
        return request({
          url: `${BASE}/patient/message/getSystemMessageList`,
          method: 'get',
          params: params
        })
    },
    //更改未读状态
    modificationState(data) {
        return request({
            url: `${BASE}/patient/message/updateMessageRead`,
            method: 'post',
            data
        })
    },
     //获取安防工单
    workOrder(params) {
      return request({
        url: `${BASE}/security/order/getSecurityOrderDetail`,
        method: 'get',
        params: params
      })
    },
     //获取紧急工单
     urgency(params) {
      return request({
        url: `${BASE}/emergency_assistance/patientGetOrderDetail`,
        method: 'get',
        params:params
      })
    },
    
}
export default nmessageApi

+ 0 - 55
mini-pro-web/src/api/monitor.js

@ -1,55 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
var apiList = {
  //设备抓拍
  deviceCapture(params) {
    return request({
      url: `${BASE}/ys/device/deviceCapture`,
      method: 'GET',
      params
    })
  },
  //直播地址
  getDeviceLiveAddress(params) {
    return request({
      url: `${BASE}/ys/device/getDeviceLiveAddress`,
      method: 'GET',
      params
    })
  },
  //设备录像存储信息
  deviceVideoTimeList(params) {
    return request({
      url: `${BASE}/ys/device/deviceVideoTimeList`,
      method: 'GET',
      params
    })
  },
  //录像地址
  videoList2(params) {
    return request({
      url: `${BASE}/ys/device/videoList2`,
      method: 'GET',
      params
    })
  },
  //摄像头开始旋转
  ptzStart(params) {
    return request({
      url: `${BASE}/ys/device/ptzStart`,
      method: 'GET',
      params
    })
  },
  //摄像头停止旋转
  ptzStop(params) {
    return request({
      url: `${BASE}/ys/device/ptzStop`,
      method: 'GET',
      params
    })
  },
}
export default apiList

+ 0 - 51
mini-pro-web/src/api/myOrderApi.js

@ -1,51 +0,0 @@
import request from '@/utils/request'
import {
    BASE
} from './apiGateway'
//居民端-在线报名
//参考材料 https://note.youdao.com/coshare/index.html?token=C66242BC719A493DB9A0B78E230A0287&gid=117741674
var myOrderApi = {
    // 我的订单列表
    patientOrderList(params) {
        return request({
            url: `${BASE}/patient/course/patientOrderList`,
            method: 'GET',
            params: params
        })
    },
  //  我的订单头部数量
  topStatusBarNum(params) {
      return request({
          url: `${BASE}/patient/course/topStatusBarNum`,
          method: 'GET',
          params: params
      })
  },
  //  订单详情
  orderInfo(params) {
      return request({
          url: `${BASE}/patient/course/orderInfo`,
          method: 'GET',
          params: params
      })
  },
  //  取消订单
  cancalOrder(params) {
      return request({
          url: `${BASE}/patient/course/cancalOrder`,
          method: 'GET',
          params: params
      })
  },
  //  招生报名
  enrollment(params) {
      return request({
          url: `${BASE}/patient/course/enrollment`,
          method: 'GET',
          params: params
      })
  },
  
}
export default myOrderApi

+ 0 - 22
mini-pro-web/src/api/nlpgApi.js

@ -1,22 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
let nlpgApi = {
    getAssessmentItemDetail(params) {
        return request({
          url: `${BASE}/sign/getAssessmentItemDetail`,
          method: 'GET',
          params: params
        })
    },
    saveAssessmentItemDetail(data) {
        return request({
            url: `${BASE}/sign/saveAssessmentItemDetail`,
            method: 'POST',
            data
        })
    }
    
}
export default nlpgApi

+ 0 - 22
mini-pro-web/src/api/noticeApi.js

@ -1,22 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
let noticeApi = {
    getNoticeList(params) {
        return request({
             url: `${BASE}/patient/message/course/getNoticeList`,
          method: 'GET',
          params: params
        })
    },
  orgNoticeDetail(params) {
      return request({
           url: `${BASE}/patient/message/course/orgNoticeDetail`,
        method: 'GET',
        params: params
      })
  },
    
}
export default noticeApi

+ 0 - 108
mini-pro-web/src/api/nurseryRecordApi.js

@ -1,108 +0,0 @@
import request from '@/utils/request'
import {
    BASE
} from './apiGateway'
//托育日志
//https://note.youdao.com/coshare/index.html?token=7531501EFA6D4861A3131AA5D2470A85&gid=117741674
var nurseryRecordApi = {
    // 我的订单列表
    patientOrderList(params) {
        return request({
            url: `${BASE}/patient/course/patientOrderList`,
            method: 'GET',
            params: params
        })
    },
    // 教师端-获取托育日志按月日历形式
    findNurseryLogByMonth(params) {
        return request({
            url: `${BASE}/doctor/nursery/findNurseryLogByMonth`,
            method: 'GET',
            params: params
        })
    },
    //教师端已填写日志列表
    findNurseryLogList(params) {
        return request({
            url: `${BASE}/doctor/nursery/findNurseryLogList`,
            method: 'GET',
            params: params
        })
    },
    // 教师端未填写日志列表
    nuseryLogUnFilledIn(params) {
        return request({
            url: `${BASE}/doctor/nursery/nuseryLogUnFilledIn`,
            method: 'GET',
            params: params
        })
    },
    // 按id查找日志详情
    nurseryDetail(params) {
        return request({
            url: `${BASE}/doctor/nursery/nurseryDetail`,
            method: 'GET',
            params: params
        })
    },
    // 新增托育日志
    addNurseryLog(params) {
        return request({
            url: `${BASE}/doctor/nursery/addNurseryLog`,
            method: 'POST',
            params: params
        })
    },
    // 新增课程记录
    addCourseRecord(params) {
        return request({
            url: `${BASE}/doctor/nursery/addCourseRecord`,
            method: 'POST',
            params: params
        })
    },
    //  食物字典
    findDictDiet(params) {
        return request({
            url: `${BASE}/doctor/nursery/findDictDiet`,
            method: 'POST',
            params: params
        })
    },
    // 新增饮食记录
    addDietRecord(params) {
        return request({
            url: `${BASE}/doctor/nursery/addDietRecord`,
            method: 'POST',
            params: params
        })
    },
    // 根据托育日志id查找课程记录或者饮食记录
    nurseryDetail(params) {
        return request({
            url: `${BASE}/doctor/nursery/nurseryDetail`,
            method: 'GET',
            params: params
        })
    },
    // 根据id查找课程记录
    findCourseRecord(params) {
        return request({
            url: `${BASE}/doctor/nursery/findCourseRecord`,
            method: 'GET',
            params: params
        })
    },
    // 根据id查找饮食记录
    findDietRecord(params) {
        return request({
            url: `${BASE}/doctor/nursery/findDietRecord`,
            method: 'GET',
            params: params
        })
    },
}
export default nurseryRecordApi

+ 0 - 29
mini-pro-web/src/api/online.js

@ -1,29 +0,0 @@
import request from "@/utils/request";
import {BASE} from "./apiGateway";
let api = {
	getOnLineObj(params) {
		return request({
			url: `${BASE}/online/getOnLineObj`,
			method: 'get',
      params
		});
	},
  //服务站列表
  getAllOrgListWithSignFlag(params) {
		return request({
			url: `${BASE}/patientContacts/getAllOrgListWithSignFlag`,
			method: 'get',
      params
		});
  },
  //家属在线列表
  membersWithOnLineFlag(params) {
		return request({
			url: `${BASE}/family/membersWithOnLineFlag`,
			method: 'get',
      params
		});
  },
};
export default api;

+ 0 - 70
mini-pro-web/src/api/onlineConsultation.js

@ -1,70 +0,0 @@
import request from "@/utils/request";
import {BASE} from "./apiGateway";
let api = {
	addOnlineConsult(data) {
		return request({
			url: `${BASE}/im/patient/addOnlineConsult`,
			method: 'post',
      data
		});
	},
	isExistsUnfinishedOnline(params) {
		return request({
			url: `${BASE}/im/patient/isExistsUnfinishedOnline`,
			method: 'GET',
      params
		});
  },
  
  append(data) {
		return request({
			url: `${BASE}/im/patient/append`,
			method: 'post',
      data
		});
  },
  
  records(params) {
		return request({
			url: `${BASE}/im/patient/records`,
			method: 'GET',
      params
		});
  },
  
  finish(data) {
		return request({
			url: `${BASE}/im/patient/finish`,
			method: 'post',
      data
		});
	},
  findLastOnlineConsult(params) {
		return request({
			url: `${BASE}/im/patient/findLastOnlineConsult`,
			method: 'get',
      params
		});
	},
  findDoctorByOrg(params) {
		return request({
			url: `${BASE}/patient/course/findDoctorByOrg`,
			method: 'get',
      params
		});
	},
  findConsultDoctor(params) {
		return request({
			url: `${BASE}/im/patient/findConsultDoctor`,
			method: 'get',
      params
		});
	}
};
export default api;

+ 0 - 138
mini-pro-web/src/api/onlineRegistrationApi.js

@ -1,138 +0,0 @@
import request from '@/utils/request'
import {
    BASE
} from './apiGateway'
var onlineRegistrationApi = {
    // 获取机构详情
    getOrgInfoById(params) {
        return request({
            url: `${BASE}/patient/course/getOrgInfoById`,
            method: 'GET',
            params: params
        })
    },
    // 未登录获取机构详情
    getOrgInfoByIdNoLogin(params) {
    return request({
        url: `${BASE}/cloudCare/noLogin/patient/getOrgInfoById`,
        method: 'GET',
        params: params
    })
    },
    // 获取课程详情
    getCourseInfo(params) {
        return request({
            url: `${BASE}/patient/course/getCourseInfo`,
            method: 'GET',
            params: params
        })
    },
    // // 获取课程目录
    // getCatalogue(params) {
    //     return request({
    //         url: `${BASE}/patient/course/getCatalogue`,
    //         method: 'GET',
    //         params: params
    //     })
    // },
    // // 获取教师详情
    // getCatalogue2(params) {
    //     return request({
    //         url: `${BASE}/patient/course/getCatalogue`,
    //         method: 'GET',
    //         params: params
    //     })
    // },
    //在线报名获取教师详情    
    getTecInfoById(params) {
        return request({
            url: `${BASE}/patient/course/getTecInfoById`,
            method: 'GET',
            params: params
        })
    },
    //未登录在线报名获取教师详情    
    getTecInfoByIdNoLogin(params) {
        return request({
            url: `${BASE}/cloudCare/noLogin/patient/getTecInfoById`,
            method: 'GET',
            params: params
        })
    },
    // 获取居民订单
    getCoursrOrderStatusByPatient(params) {
        return request({
            url: `${BASE}/patient/course/getCoursrOrderStatusByPatient`,
            method: 'GET',
            params: params
        })
    },
    // 获取订单详情
    getOrderInfo(params) {
        return request({
            url: `${BASE}/patient/course/getOrderInfo`,
            method: 'GET',
            params: params
        })
    },
    // 购买课程
    buyCourseOrder(params) {
        return request({
            url: `${BASE}/patient/course/buyCourseOrder`,
            method: 'GET',
            params: params
        })
    },
    // 根据课程展示
    getCourseByCourse(params) {
        return request({
            url: `${BASE}/patient/course/getCourseByCourse`,
            method: 'GET',
            params: params
        })
    },
    // 机构展示
    getCourseByOrg(params) {
        return request({
            url: `${BASE}/patient/course/getCourseByOrg`,
            method: 'GET',
            params: params
        })
    },
    // 未登录机构展示
    getCourseByOrgNoLogin(params) {
    return request({
        url: `${BASE}/cloudCare/noLogin/patient/getCourseByOrg`,
        method: 'GET',
        params: params
    })
    },
    // 教师展示
    getTecInfoByTecInfo(params) {
        return request({
            url: `${BASE}/patient/course/getTecInfoByTecInfo`,
            method: 'GET',
            params: params
        })
    },
	
	// 招生报名
	enrollment(params) {
	    return request({
	        url: `${BASE}/patient/course/enrollment`,
	        method: 'POST',
	        params: params
	    })
	},
	// 查询居民是否已经报名
	isEnrollment(params) {
	    return request({
	        url: `${BASE}/patient/course/isEnrollment`,
	        method: 'GET',
	        params: params
	    })
	},
}
export default onlineRegistrationApi

+ 0 - 70
mini-pro-web/src/api/orderApi.js

@ -1,70 +0,0 @@
import request from "@/utils/request";
import {BASE} from "./apiGateway";
let orderApi = {
    //头部数量
	topStatusBarNum(params) {
		return request({
			url: `${BASE}/pay/topStatusBarNum`,
			method: 'GET',
      		params
		});
	},
//  订单列表   
    orderList(params) {
        return request({
            url: `${BASE}/pay/orderList`,
            method: 'GET',
            params
        });
    },
    //  订单详情   
    orderInfo(params) {
        return request({
            url: `${BASE}/pay/orderInfo`,
            method: 'GET',
            params
        });
    },
// 微信内支付jsapi支付
	wxWapPay(data) {
		return request({
			url: `${BASE}/pay/wxWapPay`,
			method: 'POST',
      		data
		});
	},
// 工单查询支付信息  
    getPayInfo(params) {
        return request({
            url: `${BASE}/pay/getPayInfo`,
            method: 'GET',
            params
        });
    },
//查询是否有未支付订单    
    existWaitForPay(params) {
        return request({
            url: `${BASE}/pay/existWaitForPay`,
            method: 'GET',
            params
        });
    },
// 取消订单
    cancleOrder(data) {
        return request({
            url: `${BASE}/pay/cancleOrder`,
            method: 'POST',
            data
        });
    },
//申请退款    
    applyRefund(data) {
        return request({
            url: `${BASE}/pay/applyRefund`,
            method: 'POST',
            data
        });
    },
};
export default orderApi;

+ 0 - 28
mini-pro-web/src/api/org.js

@ -1,28 +0,0 @@
import request from "@/utils/request";
import {BASE} from "./apiGateway";
let api = {
	findOrgList(params) {
		return request({
			url: `${BASE}/org/findOrgList`,
			method: 'GET',
      		params
		});
	},
	//未登录幼儿在线咨询列表
	findOrgListNoLogin(params) {
		return request({
			url: `${BASE}/cloudCare/noLogin/patient/findOrgList`,
			method: 'GET',
      		params
		});
	},
	findOrgByCode(params) {
		return request({
			url: `${BASE}/org/findOrgByCode`,
			method: 'GET',
      		params
		});
	}
};
export default api;

+ 0 - 95
mini-pro-web/src/api/patient.js

@ -1,95 +0,0 @@
import request from '@/utils/request'
import {BASE, AUTH} from "@/api/apiGateway"
export function getPatient(params){
    return request({
        url: `${BASE}/patient/getPatientById`,
        method: 'get',
        params
    })
}
export function updPatient(data){
    return request({
        url: `${BASE}/patient/updPatient`,
        method: 'post',
        data
    })
}
export function uploadStream(data){
    return request({
        url: `${BASE}/open/fileUpload/upload_stream`,
        method: 'post',
        data,
        transformRequest:[data=>data],
        processData: false,
        headers:{'Content-Type': 'multipart/form-data','cache': 'false','processData': 'false'}  
    })
}
export function updatePatientPw(data){
    return request({
        url: `${BASE}/patient/updatePatientPw`,
        method: 'post',
        data
    })
}
export function getTeacherOrgList(params){
    return request({
        url: `${BASE}/patient/getTeacherOrgList`,
        method: 'get',
        params
    })
}
export function getTeacherList(params){
    return request({
        url: `${BASE}/patient/getTeacherList`,
        method: 'get',
        params
    })
}    
export function getFamilyAllArchiveType(params){
  return request({
      url: `${BASE}/patient/getFamilyAllArchiveType`,
      method: 'get',
      params
  })
}
//获取生日祝福详情
export function getWishesById(params){
    return request({
        url: `${BASE}/patient/birthday/getWishesById`,
        method: 'get',
        params
    })
  }
//获取居民拥有的设备
export function patientIconStatus(params){
  return request({
      url: `${BASE}/patient/patientIconStatus`,
      method: 'get',
      params
  })
}
//获取居民标签及能力评估结果信息
export function findPatientLabelAndCar(params){
  return request({
      url: `${BASE}/patient/findPatientLabelAndCar`,
      method: 'get',
      params
  })
}
//查询亲属信息
export function findByPateintId(params){
  return request({
      url: `${BASE}/patient/findByPateintId`,
      method: 'get',
      params
  })
}

+ 0 - 60
mini-pro-web/src/api/physicalTestApi.js

@ -1,60 +0,0 @@
import request from '@/utils/request'
import {
    BASE
} from './apiGateway'
//儿童体检,通讯录,通知
//参考材料 https://note.youdao.com/coshare/index.html?token=7E0A5361132E4D0BA06A196DD1357B7C&gid=117741674
var physicalTestApi = {
    // 新增居家体检记录
    patientOrderList(params) {
        return request({
            url: `${BASE}/patient/examinationRecord/newRecord`,
            method: 'GET',
            params: params
        })
    },
 // 查看居民体检详情
 getRecordDetailById(params) {
     return request({
         url: `${BASE}/patient/examinationRecord/getRecordDetailById`,
         method: 'GET',
         params: params
     })
 },
 // 查看居民体检列表
 getRecordList(params) {
     return request({
         url: `${BASE}/patient/examinationRecord/getRecordList`,
         method: 'GET',
         params: params
     })
 },
 //获取教育机构列表
 getTeacherOrgList(params) {
     return request({
         url: `${BASE}/patient/getTeacherOrgList`,
         method: 'GET',
         params: params
     })
 },
 //获取教育机构医生
 getTeacherList(params) {
     return request({
         url: `${BASE}/patient/getTeacherList`,
         method: 'GET',
         params: params
     })
 },
 //获取教育机构医生
 getTeacherList(params) {
     return request({
         url: `${BASE}/patient/getTeacherList`,
         method: 'GET',
         params: params
     })
 },
}
export default physicalTestApi

+ 0 - 20
mini-pro-web/src/api/plannedImmunization.js

@ -1,20 +0,0 @@
let pApi = {
    healthRecordList(data) {
        return request({
          url: `${BASE}/doctor/health_index/list`,
          method: 'POST',
          data
        })
    },
    healthRecordLast(params) {
      return request({
        url: `${BASE}/doctor/health_index/last`,
        method: 'GET',
        params
      })
    },
}
export default pApi

+ 0 - 14
mini-pro-web/src/api/residentApi.js

@ -1,14 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
var apiList = {
  getPatientById(params) {
    return request({
      url: `${BASE}/patient/getPatientById`,
      method: 'GET',
      params: params
    })
  },
}
export default apiList

+ 0 - 138
mini-pro-web/src/api/securityMonitoringApi.js

@ -1,138 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
var apiList = {
  //列表
  getSecurityOrderList(params) {
    return request({
      url: `${BASE}/security/order/getSecurityOrderList`,
      method: 'GET',
      params
    })
  },
  //动态详情
  getSecurityOrderDetail(params) {
    return request({
      url: `${BASE}/security/order/getSecurityOrderDetail`,
      method: 'GET',
      params
    })
  },  
  //接收工单
  acceptOrder(data) {
    return request({
      url: `${BASE}/security/order/acceptOrder`,
      method: 'post',
      data
    })
  },
  //取消工单
  cancelOrder(data) {
    return request({
      url: `${BASE}/security/order/cancelOrder`,
      method: 'post',
      data
    })
  },
  //医生签到
  signIn(data) {
    return request({
      url: `${BASE}/security/order/signIn`,
      method: 'post',
      data
    })
  },
  //跳过服务小结
  cancelConclusion(data) {
    return request({
      url: `${BASE}/security/order/cancelConclusion`,
      method: 'post',
      data
    })
  },
  //登记/编辑服务小结
  updateDoorConclusion(data) {
    return request({
      url: `${BASE}/security/order/updateDoorConclusion`,
      method: 'post',
      data
    })
  },
  //医生确认完成
  saveOrderFinishBydoctor(data) {
    return request({
      url: `${BASE}/security/order/saveOrderFinishBydoctor`,
      method: 'post',
      data
    })
  },
  
  //服务医生
  getSecurityServerDoctor(params) {
    return request({
      url: `${BASE}/security/order/getSecurityServerDoctor`,
      method: 'get',
      params
    })
  },
  //消息应用-查看未完成工单列表
  getSecurityOrderUnCompleteList(params) {
    return request({
      url: `${BASE}/security/order/getSecurityOrderUnCompleteList`,
      method: 'GET',
      params
    })
  }, 
  // 获取安防监护-监护信息
  patientMonitoringInfo(params) {
    return request({
      url: `${BASE}/security/order/patientMonitoringInfo`,
      method: 'get',
      params
    })
  },
  
  patientDeviceListByTopic(params) {
    return request({
      url: `${BASE}/patient/device/patientDeviceListByTopic`,
      method: 'GET',
      params
    })
  },
  
  updatePatientLocation(data) {
    return request({
      url: `${BASE}/security/order/updatePatientLocation`,
      method: 'post',
      data
    })
  },
  getSecurityTab(params){
    return request({
        url: `${BASE}/security/order/getSecurityTab`,
        method: 'get',
        params
    })
  },
  //居民睡眠监护信息列表
  getPatientSleepDetainList(params){
    return request({
        url: `${BASE}/security/order/getPatientSleepDetainList`,
        method: 'get',
        params
    })
  },
  //居民睡眠起夜数据
  getPatientSleepNightRecord(params){
    return request({
        url: `${BASE}/security/order/getPatientSleepNightRecord`,
        method: 'get',
        params
    })
  },
}
export default apiList

+ 0 - 17
mini-pro-web/src/api/sign.js

@ -1,17 +0,0 @@
import request from '@/utils/request'
import {BASE, AUTH} from "@/api/apiGateway"
export function getPackageDetailById(params){
    return request({
        url: `${BASE}/sign/getPackageDetailById`,
        method: 'get',
        params
    })
}
export function serviceItemByPackageId(params){
    return request({
        url: `${BASE}/sign/serviceItemByPackageId`,
        method: 'get',
        params
    })
}

+ 0 - 246
mini-pro-web/src/api/signApi.js

@ -1,246 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
var apiList = {
  findSignOrg(params) {
    return request({
      url: `${BASE}/sign/findSignOrg`,
      method: 'GET',
      params
    })
  },
  //未登录老人在线咨询
  findSignOrgNoLogin(params) {
    return request({
      url: `${BASE}/cloudCare/noLogin/patient/findSignOrg`,
      method: 'GET',
      params
    })
  },
  findSignDoctor(params) {
    return request({
      url: `${BASE}/sign/findSignDoctor`,
      method: 'GET',
      params
    })
  },
  assessmentPage(params) {
    return request({
      url: `${BASE}/sign/assessmentPage`,
      method: 'GET',
      params
    })
  },
  
  sysArchive(data) {
    return request({
      url: `${BASE}/sign/sysArchive`,
      method: 'post',
      data
    })
  },
  /**
   * 居民是否存在档案建档
   */
  isExistArchive(data) {
    return request({
      url: `${BASE}/sign/isExistArchive`,
      method: 'post',
      data
    })
  },
  
  /**
   * 建档记录/未签约列表
   */
  archiveList(params) {
    return request({
      url: `${BASE}/sign/archiveList`,
      method: 'GET',
      params
    })
  },
  
  createArchive(data) {
    return request({
      url: `${BASE}/sign/createArchive`,
      method: 'post',
      data
    })
  },
  
  findAssessmentById(params) {
    return request({
      url: `${BASE}/sign/findAssessmentById`,
      method: 'GET',
      params
    })
  },
  isCapacityAssessment(params) {
    return request({
      url: `${BASE}/sign/isCapacityAssessment`,
      method: 'GET',
      params
    })
  },
  confirmAssessment(data) {
    return request({
      url: `${BASE}/sign/confirmAssessment`,
      method: 'post',
      data
    })
  },
  getSignTopNum(params) {
    return request({
      url: `${BASE}/sign/getSignTopNum`,
      method: 'GET',
      params
    })
  },
  getArchiveTopNum(params) {
    return request({
      url: `${BASE}/sign/getArchiveTopNum`,
      method: 'GET',
      params
    })
  },
  servicePackagePage(params) {
    return request({
      url: `${BASE}/sign/servicePackagePage`,
      method: 'GET',
      params
    })
  },
  signRecordPage(params) {
    return request({
      url: `${BASE}/sign/signRecordPage`,
      method: 'GET',
      params
    })
  },
  servicePackageSign(data) {
    return request({
      url: `${BASE}/sign/servicePackageSign`,
      method: 'post',
      data
    })
  },
  findSignById(params) {
    return request({
      url: `${BASE}/sign/findSignById`,
      method: 'GET',
      params
    })
  },
  getAssessmentItemDetail(params) {
    return request({
      url: `${BASE}/sign/getAssessmentItemDetail`,
      method: 'GET',
      params
    })
  },
  getSignNum(params) {
    return request({
      url: `${BASE}/sign/getSignNum`,
      method: 'GET',
      params
    })
  },
  capacityAssessment(data) {
    return request({
      url: `${BASE}/sign/capacityAssessment`,
      method: 'post',
      data
    })
  },
  serviceItemByPackageId(params) {
    return request({
      url: `${BASE}/sign/serviceItemByPackageId`,
      method: 'get',
      params
    })
  },
  //获取专题列表
  servicePackageByTopicType(params) {
    return request({
      url: `${BASE}/sign/servicePackageByTopicType`,
      method: 'get',
      params
    })
  },
  servicePackageByServerItem(params) {
    return request({
      url: `${BASE}/sign/servicePackageByServerItem`,
      method: 'get',
      params
    })
  },
  
  getServerDoctorByPackage(params) {
		return request({
			url: `${BASE}/sign/getServerDoctorByPackage`,
			method: 'get',
            params
		});
	},
  //签约的助老员
  getServerDoctorAll(params) {
    return request({
      url: `${BASE}/sign/getServerDoctorAll`,
      method: 'GET',
      params
    })
  },
  //签约服务包
  findPatientSignList(params) {
    return request({
      url: `${BASE}/sign/findPatientSignList`,
      method: 'GET',
      params
    })
  },
  //签约服务包详情
  signPackageDetail(params) {
    return request({
      url: `${BASE}/sign/signPackageDetail`,
      method: 'GET',
      params
    })
  },
  //签约服务包医生
  signPackageDoctorList(params) {
    return request({
      url: `${BASE}/sign/signPackageDoctorList`,
      method: 'GET',
      params
    })
  },
}
export default apiList

+ 0 - 76
mini-pro-web/src/api/sos.js

@ -1,76 +0,0 @@
import request from '@/utils/request'
import { BASE } from './apiGateway'
export function newOrder(data){
    return request({
        url: `${BASE}/emergency_assistance/newOrder`,
        method: 'post',
        data
    })
}
export function cancelOrder(data){
    return request({
        url: `${BASE}/emergency_assistance/cancelOrder`,
        method: 'post',
        data
    })
}
export function patientGetOrderDetail(params){
    return request({
        url: `${BASE}/emergency_assistance/patientGetOrderDetail`,
        method: 'get',
        params
    })
}
export function getOrderList(params){
    return request({
        url: `${BASE}/emergency_assistance/getOrderList`,
        method: 'get',
        params
    })
}
export function sendQuickMessage(data){
    return request({
        url: `${BASE}/emergency_assistance/sendQuickMessage`,
        method: 'post',
        data
    })
}
export function existApplyStatus(params){
    return request({
        url: `${BASE}/emergency_assistance/existApplyStatus`,
        method: 'get',
        params
    })
}
export function updatePatientLocation(data){
    return request({
        url: `${BASE}/emergency_assistance/updatePatientLocation`,
        method: 'post',
        data
    })
}
export function getTabStatusCounts(params){
    return request({
        url: `${BASE}/emergency_assistance/getTabStatusCounts`,
        method: 'get',
        params
    })
}
export function servicePackageByServerItem(params){
    return request({
        url: `${BASE}/sign/servicePackageByServerItem`,
        method: 'get',
        params
    })
}

+ 4 - 0
mini-pro-web/src/components/layout/NavLayout.vue

@ -43,6 +43,10 @@ export default {
		}
		}
	},
	},
	computed: {
	computed: {
		hasTop(){
			return false
			return !(this.$route.meta&&this.$route.meta.hasTop===false)
		},
		title() {
		title() {
			return this.$store.state.app.pageTitle
			return this.$store.state.app.pageTitle
		}
		}

+ 6 - 0
mini-pro-web/src/mixins/common.js

@ -162,6 +162,12 @@ Vue.mixin({
        formatSex(v){
        formatSex(v){
            return v==1? "男" : v==2? "女" : "未知"
            return v==1? "男" : v==2? "女" : "未知"
        },
        },
        formatDatetime(date){
            if(!date){
                return ''
            }
            return this.$moment(date).format('YYYY-MM-DD HH:mm:ss')
        },
        dateFormat(fmt='YYYY-mm-dd HH:MM:SS', date=new Date()) {
        dateFormat(fmt='YYYY-mm-dd HH:MM:SS', date=new Date()) {
            let ret;
            let ret;
            const opt = {
            const opt = {

+ 13 - 4
mini-pro-web/src/router/index.js

@ -9,6 +9,7 @@ import {
import Login from '@/views/login/Login'
import Login from '@/views/login/Login'
import Register from '@/views/login/Register'
import Register from '@/views/login/Register'
import FotgetPassword from '@/views/login/FotgetPassword'
import FotgetPassword from '@/views/login/FotgetPassword'
import DrugList from '@/views/drug/list'
import Index from '@/views/index/Index'
import Index from '@/views/index/Index'
import personal from './personal'
import personal from './personal'
import order from './order'
import order from './order'
@ -18,6 +19,10 @@ import machine from './machine'
Vue.use(VueRouter)
Vue.use(VueRouter)
const routes = [
const routes = [
    {
        path: '/',
        redirect: '/home'
    },
	{
	{
        path: '/404',
        path: '/404',
        name: '404',
        name: '404',
@ -63,6 +68,14 @@ const routes = [
            }
            }
        }]
        }]
    },
    },
    {
        path: '/drugList',
        name: 'drugList',
        component: DrugList,
        meta: {
            title: '选择药品'
        }
    },
]
]
const whiteList = [
const whiteList = [
@ -89,8 +102,6 @@ function redirectToLogin(to, from, next) {
if(process.env.NODE_ENV==='production') {
if(process.env.NODE_ENV==='production') {
    router.beforeEach(async (to, from, next) => {
    router.beforeEach(async (to, from, next) => {
        next()
        return
        if((store.getters.user && store.getters.user.accessToken)) {
        if((store.getters.user && store.getters.user.accessToken)) {
            next()
            next()
        } else {
        } else {
@ -103,8 +114,6 @@ if(process.env.NODE_ENV==='production') {
    })
    })
} else {
} else {
    router.beforeEach(async (to, from, next) => {
    router.beforeEach(async (to, from, next) => {
        next()
        return
        if ((!store.getters.user || !store.getters.user.accessToken) && whiteList.indexOf(to.path) == -1) {
        if ((!store.getters.user || !store.getters.user.accessToken) && whiteList.indexOf(to.path) == -1) {
            next('/login')
            next('/login')
            return
            return

+ 1 - 1
mini-pro-web/src/store/getters.js

@ -1,7 +1,7 @@
const getters = {
const getters = {
    loading: state => state.app.loading,
    loading: state => state.app.loading,
    pageTitle: state => state.app.pageTitle,
    pageTitle: state => state.app.pageTitle,
    clientId: state => "ihealth_pa8DIRJasL",
    clientId: state => "EwC0iRSrcS",
    user: state => state.user,
    user: state => state.user,
    wxAppId: state => state.app.wxWechatConfig && state.app.wxWechatConfig.wxAppId,
    wxAppId: state => state.app.wxWechatConfig && state.app.wxWechatConfig.wxAppId,
    wxId: state => state.app.wxWechatConfig && state.app.wxWechatConfig.wxId,
    wxId: state => state.app.wxWechatConfig && state.app.wxWechatConfig.wxId,

+ 4 - 3
mini-pro-web/src/utils/web-ajax.js

@ -64,6 +64,7 @@ service.interceptors.response.use(
			data: JSON.parse(cryptoUtils.Decrypt(response.data.data)),
			data: JSON.parse(cryptoUtils.Decrypt(response.data.data)),
			config: response.config
			config: response.config
		}
		}
		
		if (response.status == 200) {
		if (response.status == 200) {
			if(response.data.status==1300){
			if(response.data.status==1300){
				Message("验证码错误")
				Message("验证码错误")
@ -82,9 +83,9 @@ service.interceptors.response.use(
                    redirectToLogin()
                    redirectToLogin()
                }, 1000)
                }, 1000)
            } else if (response.data.status != 200) {
            } else if (response.data.status != 200) {
              if ((!store.getters.user || !store.getters.user.accessToken)){
                return response.data
              }
				if ((!store.getters.user || !store.getters.user.accessToken)){
					return response.data
				}
				if(!response.config.noMesg){  //status 非200并且不需要提示的则传noMesg
				if(!response.config.noMesg){  //status 非200并且不需要提示的则传noMesg
                    Message(response.data.status==500? "系统异常" : response.data.message);
                    Message(response.data.status==500? "系统异常" : response.data.message);
				}
				}

+ 43 - 23
mini-pro-web/src/views/device/detail.vue

@ -4,24 +4,27 @@
            <div class="c-f16 c-333">{{info.name}}</div>
            <div class="c-f16 c-333">{{info.name}}</div>
            <div class="mt10">
            <div class="mt10">
                <span>设备所属:</span>
                <span>设备所属:</span>
                <span>{{info.belong}}</span>
                <span>{{info.community}}</span>
            </div>
            </div>
            <div>
            <div>
                <span>设备编号:</span>
                <span>设备编号:</span>
                <span>{{info.id}}</span>
                <span>{{info.equNum}}</span>
            </div>
            </div>
            <div>
            <div>
                <span>信号强度:</span>
                <span>信号强度:</span>
                <span>{{info.signalStrength}}</span>
                <span>{{info.signalintensity}}</span>
            </div>
            </div>
            <div>
            <div>
                <span>网<i class="mr2em"></i>络:
                </span>
                <span>{{info.network}}</span>
                <span>网<i class="mr2em"></i>络:</span>
                <span>4G</span>
            </div>
            <div>
                <span>售卖状态:</span>
                <span>{{info.saleStatus==1?'在售':info.selling_status==0?'停售':'故障'}}</span>
            </div>
            </div>
            <div>
            <div>
                <span>设备地址:</span>
                <span>设备地址:</span>
                <span>{{info.address}}</span>
                <span>{{info.deliveryAddress}}</span>
            </div>
            </div>
        </div>
        </div>
        <div class='mt20 grid-4 c-f14 c-333 bgc-fff c-border-tb ptb15'>
        <div class='mt20 grid-4 c-f14 c-333 bgc-fff c-border-tb ptb15'>
@ -49,46 +52,63 @@
                </div>
                </div>
                <div>货道设置</div>
                <div>货道设置</div>
            </div>
            </div>
            <div class='c-t-center' @click='gotoUrl("/device/status")'>
            <div class='c-t-center' @click='gotoUrl("/device/status", {id: info.id})'>
                <div>
                <div>
                    <van-image class='ability' :src='require("@/assets/images/shebeizhuangtai.png")'/>
                    <van-image class='ability' :src='require("@/assets/images/shebeizhuangtai.png")'/>
                </div>
                </div>
                <div>设备状态</div>
                <div>设备状态</div>
            </div>
            </div>
            <div class='c-t-center' @click='gotoUrl("/device/reboot")'>
            <!-- <div class='c-t-center' @click='gotoUrl("/device/reboot")'>
                <div>
                <div>
                    <van-image class='ability' :src='require("@/assets/images/shebeichongqi.png")'/>
                    <van-image class='ability' :src='require("@/assets/images/shebeichongqi.png")'/>
                </div>
                </div>
                <div>设备重启</div>
                <div>设备重启</div>
            </div>
            </div> -->
            <div class='c-t-center' @click='gotoUrl("/device/infoLog/index")'>
            <div class='c-t-center' @click='gotoUrl("/device/infoLog/index")'>
                <div>
                <div>
                    <van-image class='ability' :src='require("@/assets/images/xinxirizhi.png")'/>
                    <van-image class='ability' :src='require("@/assets/images/xinxirizhi.png")'/>
                </div>
                </div>
                <div>信息日志</div>
                <div>信息日志</div>
            </div>
            </div>
            <div class='c-t-center' @click='gotoUrl("/device/sell")'>
            <!-- <div class='c-t-center' @click='gotoUrl("/device/sell")'>
                <div>
                <div>
                    <van-image class='ability' :src='require("@/assets/images/zaishoutingshou.png")'/>
                    <van-image class='ability' :src='require("@/assets/images/zaishoutingshou.png")'/>
                </div>
                </div>
                <div>在售停售</div>
                <div>在售停售</div>
            </div>
            </div> -->
        </div>
        </div>
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default {
export default {
  name: "deviceDetail",
  data() {
    return {
      info: {}
    };
  },
  methods: {},
  created() {
    this.info = this.$route.query.deviceInfo;
    console.log(this.info);
  }
    name: "deviceDetail",
    data() {
        return {
            info: {},
            id: this.$route.query.id
        };
    },
    created() {
        this.findById()
    },
    methods: {
        findById(){
            this.$loading('加载中..')
            let p = {
                deviceId: this.id
            }
            medicineAbinetApi
                .findDeviceById(p)
                .then(res=>{
                    this.$toast.clear()
                    this.info = res.obj.device
                })
                .catch(err=>{
                    console.error(err)
                })
        }
    },
};
};
</script>
</script>
<style scoped lang='scss'>
<style scoped lang='scss'>

+ 54 - 31
mini-pro-web/src/views/device/index.vue

@ -1,61 +1,70 @@
<template>
<template>
    <div class='deviceIndex'>
    <div class='deviceIndex'>
        <van-field
            v-model="id"
            center
            clearable
            placeholder="请输入设备名或编号">
            <template #button>
                <van-button size="small" type="info" @click="onSearch()">搜索</van-button>
            </template>
        </van-field>
        <div class='p15'>
            <van-swipe-cell v-for='(item, index) in list'>
                <div class='c-f14 bgc-fff ptb15 c-999 plr10' @click="gotoUrl('/device/detail',{deviceInfo: item})">
        <van-sticky>
            <van-field
                v-model="searchText"
                center
                clearable
                placeholder="请输入设备名或编号">
                <template #button>
                    <van-button size="small" type="info" @click="onSearch()">搜索</van-button>
                </template>
            </van-field>
        </van-sticky>
        <div class='plr15'>
            <van-swipe-cell class="mt10" v-for='(item, index) in list' :key="index">
                <div class='c-f14 bgc-fff ptb15 c-999 plr10' @click="gotoUrl('/device/detail',{id: item.id})">
                    <div class='f_y_c flex f_x_s'>
                    <div class='f_y_c flex f_x_s'>
                        <span class='c-f16 c-333'>{{item.name||'众健信联1号'}}</span>
                        <span class='c-f16 c-333'>{{item.equName}}</span>
                        <div>
                        <div>
                            <van-tag :type="true?'success':'danger'" class='mr10'>在线</van-tag>
                            <van-tag :type="true?'success':'danger'">在售</van-tag>
                            <van-tag v-if="item.networkStatus==1" type="success" class='mr10'>{{item.networkStatusName}}</van-tag>
                            <van-tag v-else type="danger" class='mr10'>{{item.networkStatusName}}</van-tag>
                            <van-tag v-if="item.saleStatus==1" type="success">{{item.saleStatusName}}</van-tag>
                            <van-tag v-else type="danger">{{item.saleStatusName}}</van-tag>
                        </div>
                        </div>
                    </div>
                    </div>
                    <div class='mt10'>
                    <div class='mt10'>
                        <span>设备所属:</span>
                        <span>设备所属:</span>
                        <span>{{item.belong}}</span>
                        <span>{{item.community}}</span>
                    </div>
                    </div>
                    <div>
                    <div>
                        <span>设备编号:</span>
                        <span>设备编号:</span>
                        <span>{{item.id}}</span>
                        <span>{{item.equNum}}</span>
                    </div>
                    </div>
                    <div>
                    <div>
                        <span>信号强度:</span>
                        <span>信号强度:</span>
                        <span>{{item.signalStrength}}</span>
                        <span>{{item.signalintensity}}</span>
                    </div>
                    </div>
                    <div>
                    <div>
                        <span>网<i class='mr2em'></i>络:</span>
                        <span>网<i class='mr2em'></i>络:</span>
                        <span>{{item.network}}</span>
                        <span>4G</span>
                    </div>
                    </div>
                </div>
                </div>
                <template #right>
                    <van-button square text="解绑" type="danger" class="delete-button" @click='unBind(item)'/>
                    <van-button square text="停售" type="warning" class="delete-button" @click="stopSell(item)"/>
                </template>
                <!-- <template #right> -->
                    <!-- <van-button square text="解绑" type="danger" class="delete-button" @click='unBind(item)'/> -->
                    <!-- <van-button square text="停售" type="warning" class="delete-button" @click="stopSell(item)"/> -->
                <!-- </template> -->
            </van-swipe-cell>
            </van-swipe-cell>
        </div>
        </div>
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'deviceIndex',
    name: 'deviceIndex',
    data(){
    data(){
        return {
        return {
            id: '',
            list: [{name:'众健信联1号'}]
            searchText: '',
            list: []
        }
        }
    },
    },
    created(){
        this.findList();
    },
    methods:{
    methods:{
        onSearch(){
        onSearch(){
            this.findList()
        },
        },
        unBind(item){
        unBind(item){
@ -63,13 +72,27 @@ export default{
        stopSell(item){
        stopSell(item){
        },
        },
        initMain(){
        findList(){
            this.$loading('加载中..')
            this.list = []
            let p = {
                content: this.searchText,
                page: 1,
                size: 9999,
            }
            medicineAbinetApi
                .deviceList(p)
                .then(res=>{
                    this.$toast.clear()
                    this.list = res.detailModelList
                    console.log(res.detailModelList)
                })
                .catch(err=>{
                    console.error(err)
                })
        }
        }
    },
    },
    created(){
        this.initMain();
    }
    
}
}
</script>
</script>
<style scoped lang='scss'>
<style scoped lang='scss'>

+ 24 - 9
mini-pro-web/src/views/device/status.vue

@ -1,29 +1,44 @@
<template>
<template>
    <div class='deviceStatus'>
    <div class='deviceStatus' v-if="info">
        <div class='c-t-center ptb30 c-f20 c-333 c-border-b bgc-fff'>
        <div class='c-t-center ptb30 c-f20 c-333 c-border-b bgc-fff'>
            <span>当前设备状态:</span><span class='c-17b3ec'>{{'在线'}}</span>
            <span>当前设备状态:</span><span class='c-17b3ec'>{{info.networkStatus==1? '在线' : '离线'}}</span>
        </div>
        </div>
        <div class='mt30 plr15'>
        <div class='mt30 plr15'>
            <van-button style='width:100%' class='c-border-r-5' type="info" @click="refresh">刷新设备状态</van-button>
            <van-button style='width:100%' class='c-border-r-5' type="info" @click="findById">刷新设备状态</van-button>
        </div>
        </div>
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'deviceStatus',
    name: 'deviceStatus',
    data(){
    data(){
        return {
        return {
            id: this.$route.query.id,
            info: ''
        }
        }
    },
    },
    created(){
        this.findById()
    },
    methods:{
    methods:{
        refresh(){
        findById(){
            this.$loading('加载中..')
            let p = {
                deviceId: this.id
            }
            medicineAbinetApi
                .findDeviceById(p)
                .then(res=>{
                    this.$toast.clear()
                    this.info = res.obj.device
                })
                .catch(err=>{
                    console.error(err)
                })
        }
        }
    },
    },
    created(){
        
    }
    
}
}
</script>
</script>
<style scoped lang='scss'>
<style scoped lang='scss'>

+ 22 - 0
mini-pro-web/src/views/drug/css/drugSel.scss

@ -0,0 +1,22 @@
.drug-sel{
    .search{
        position: fixed;
        top: 0;
        width: 100%;
    }
    .list{
        padding-top: 54px;
    }
    .btb-e1e1e1{
        border-top: solid 1px #e1e1e1;
        border-bottom: solid 1px #e1e1e1;
    }
}
.has-top{
    .drug-sel{
        .search{
            top: 46px;
        }
    }
}

+ 101 - 0
mini-pro-web/src/views/drug/list.vue

@ -0,0 +1,101 @@
<template>
    <div class="drug-list">
        <div class="search">
            <form action="/">
                <van-search
                    v-model="value"
                    placeholder="请输入搜索关键词"
                    show-action
                    @search="getDrugDictionary"
                    @cancel="onCancel"
                />
            </form>
        </div>
        <div class="list" v-if="list.length">
            <div 
                v-for="(item, i) in list" :key="i"
                @click="addDrug(item)"
                class="item mb10 bgc-fff btb-e1e1e1 pt10 pb10 plr15">
                <van-row class="lh25 c-333">
                    <span class="fs-17">{{item.drugname}}</span>
                    <span class="fs-14 ml20">处方名称/项目名称:{{item.drugname}}</span>
                </van-row>
                <van-row class="lh25">
                    <van-col span="12" class="c-999">规格:<span class="c-333">{{item.specification}}</span></van-col>
                    <van-col span="12" class="c-999">零售价:<span class="c-333">{{item.retprice}}</span></van-col>
                </van-row>
                <van-row class="lh25">
                    <van-col span="12" class="c-999">医保支付价:<span class="c-333"></span></van-col>
                    <van-col span="12" class="c-999">医保支付比例:<span class="c-333"></span></van-col>
                </van-row>
                <van-row class="lh25">
                    <van-col span="12" class="c-999">基药:<span class="c-333"></span></van-col>
                    <van-col span="12" class="c-999">药品类别:<span class="c-333"></span></van-col>
                </van-row>
                <div class="c-ff5e6c fs-14 lh25">高危药品:</div>
            </div>
        </div>
        <div v-else class="c-999 fs-14 tc pt20">
            <div v-if="value">搜索不到数据~~</div>
            <div v-else>请输入关键词进行搜索</div>
        </div>
    </div>
</template>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default {
    name: "DrugSel",
    components: {
        
    },
    watch: {
        value(n, o){
            this.getDrugDictionary()
        }
    },
    data(){
        return {
            value: "",
            list: [],
        }
    },
    async created(){
        
    },
    methods: {
        getDrugDictionary(){
            var val = this.value
			if(val&&val.length>=2){
                var p = {
                    content: this.value,
                    page: 1,
                    size: 50
                }
                console.log('params', p)
                medicineAbinetApi
                    .drugList(p)
                    .then(res => {
                        if(res.status == 200){
                            console.log('drugList', res)
                            this.list = res.detailModelList
                        }
                    })
                    .catch(err=>{
                        console.error(err)
                    })
			}
        },
        onCancel(){
            this.$router.back()
        },
        addDrug(item){
            this.$EventBus.$emit('drug-sel', item)
            this.$router.back()
        },
    }
};
</script>
<style lang="scss" scoped>
@import './css/drugSel.scss';
</style>

+ 23 - 17
mini-pro-web/src/views/index/Index.vue

@ -1,6 +1,6 @@
<template>
<template>
	<div class="index-wrap pt30">
	<div class="index-wrap pt30">
    	<div class="panel plr15">
    	<!-- <div class="panel plr15">
			<div class="kitbox pt15 ">
			<div class="kitbox pt15 ">
				<div class="box-flex-1 c-333 fs-16 f-bold">今日订单数量</div>
				<div class="box-flex-1 c-333 fs-16 f-bold">今日订单数量</div>
				<div class="c-666 fs-12 box-v-middle">
				<div class="c-666 fs-12 box-v-middle">
@ -17,9 +17,9 @@
				752,600
				752,600
			</div>
			</div>
			<div class="c-666 fs-14 pt10 pb10">今日补货量 <span class="ml10 c-17b3ec">0</span></div>
			<div class="c-666 fs-14 pt10 pb10">今日补货量 <span class="ml10 c-17b3ec">0</span></div>
		</div>
		</div> -->
		<div class="mt10">
		<div class="">
			<div class="panel  sbzl">
			<div class="panel  sbzl">
				<div class="kitbox pt15 plr15">
				<div class="kitbox pt15 plr15">
					<div class="box-flex-1 c-333 fs-16 f-bold">设备总览</div>
					<div class="box-flex-1 c-333 fs-16 f-bold">设备总览</div>
@ -27,19 +27,19 @@
				<div class="pt20 pb20 plr5">
				<div class="pt20 pb20 plr5">
					<van-row class="">
					<van-row class="">
						<van-col span="6" class="tc ">
						<van-col span="6" class="tc ">
							<div class="fs-23 c-17b3ec">10</div>
							<div class="fs-23 c-17b3ec">{{allCount}}</div>
							<div class="fs-14 c-666 pt5">全部设备</div>
							<div class="fs-14 c-666 pt5">全部设备</div>
						</van-col>
						</van-col>
						<van-col span="6" class="tc">
						<van-col span="6" class="tc">
							<div class="fs-23 c-ff9526">10</div>
							<div class="fs-23 c-ff9526">0</div>
							<div class="fs-14 c-666 pt5">在线设备</div>
							<div class="fs-14 c-666 pt5">在线设备</div>
						</van-col>
						</van-col>
						<van-col span="6" class="tc">
						<van-col span="6" class="tc">
							<div class="fs-23 c-ff5e6c">90%</div>
							<div class="fs-23 c-ff5e6c">0%</div>
							<div class="fs-14 c-666 pt5">在线率</div>
							<div class="fs-14 c-666 pt5">在线率</div>
						</van-col>
						</van-col>
						<van-col span="6" class="tc">
						<van-col span="6" class="tc">
							<div class="fs-23 c-17b3ec">10</div>
							<div class="fs-23 c-17b3ec">0</div>
							<div class="fs-14 c-666 pt5">在售设备</div>
							<div class="fs-14 c-666 pt5">在售设备</div>
						</van-col>
						</van-col>
					</van-row>
					</van-row>
@ -54,11 +54,11 @@
				</div>
				</div>
				<div class="ptb10 plr5">
				<div class="ptb10 plr5">
					<van-row class="">
					<van-row class="">
						<van-col span="6" class="tc ">
						<van-col @click="gotoUrl('/order/list')" span="6" class="tc ">
							<div class="fs-23 c-17b3ec"><img src="@/assets/images/dingdanguanli.png" alt=""></div>
							<div class="fs-23 c-17b3ec"><img src="@/assets/images/dingdanguanli.png" alt=""></div>
							<div class="fs-14 c-666 pt5">订单管理</div>
							<div class="fs-14 c-666 pt5">订单管理</div>
						</van-col>
						</van-col>
						<van-col span="6" class="tc">
						<van-col @click="gotoUrl('/device')" span="6" class="tc">
							<div class="fs-23 c-ff9526"><img src="@/assets/images/shebeiguanli.png" alt=""></div>
							<div class="fs-23 c-ff9526"><img src="@/assets/images/shebeiguanli.png" alt=""></div>
							<div class="fs-14 c-666 pt5">设备管理</div>
							<div class="fs-14 c-666 pt5">设备管理</div>
						</van-col>
						</van-col>
@ -69,6 +69,7 @@
	</div>
	</div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default {
export default {
	name: "index",
	name: "index",
	components: {
	components: {
@ -78,19 +79,24 @@ export default {
    	return {
    	return {
			searchTypeShow: false,
			searchTypeShow: false,
            searchType: "今日",
            searchType: "今日",
			options: ['今日', '7天内', '30天内']
			
			options: ['今日', '7天内', '30天内'],
			allCount: 0
    	}
    	}
  	},
  	},
	created(){
	created(){
		
		this.countall()
	},
	},
  	mounted() {
  	},
  	methods: {
  	methods: {
		search(){
			
		countall(){
			medicineAbinetApi
				.countall()
				.then(res=>{
					console.log('countall', res)
					this.allCount = res.obj.count || 0
				})
				.catch(err=>{
					console.error(err)
				})
		}
		}
    },
    },
}
}

+ 25 - 93
mini-pro-web/src/views/login/Login.vue

@ -63,28 +63,10 @@
</template>
</template>
<script>
<script>
import { getPublicKey, login, imgCaptcha, sendCaptcha ,updLatLon} from "@/api/login";
import { getPublicKey, login, imgCaptcha, sendCaptcha ,findUserBaseInfo} from "@/api/login";
import JSEncrypt from "@/utils/jsencrypt";
import JSEncrypt from "@/utils/jsencrypt";
import ValidatorUtils from '@/utils/validator'
import ValidatorUtils from '@/utils/validator'
import store from "@/store";
import { setTimeout } from 'timers';
import { setTimeout } from 'timers';
import residentApi from '@/api/residentApi'
import { getSign, getOpenidByCode} from "@/api/wx"
function GetRequest() {  
    let url = location.search; //获取url中"?"符后的字串
    let theRequest = {};
    let strs = []
    if (url.indexOf("?") != -1) {
        let str = url.substr(1);
        strs = str.split("&");
        for(var i = 0; i < strs.length; i ++) {
            theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}
export default {
export default {
    name: "login",
    name: "login",
    data() {
    data() {
@ -141,7 +123,6 @@ export default {
            data: this.data 
            data: this.data 
        })
        })
        this.data = this.validator.Data
        this.data = this.validator.Data
        this.openid = await this.fetchOpenid()
        this.initPage();
        this.initPage();
    },
    },
    methods: {
    methods: {
@ -149,30 +130,6 @@ export default {
            this.lat = vals.lat
            this.lat = vals.lat
            this.lng = vals.lng
            this.lng = vals.lng
        },
        },
      fetchOpenid() {
            let queryParam = GetRequest(),
                code = queryParam.code
            //微信授权过来的  取得到code
            if(code){
                return getOpenidByCode({
                    code: code
                }).then((res)=>{
                    if(res.status==200){
                        store.dispatch('SetLoginUser', {openid: res.obj})
                        
                        return Promise.resolve(res.obj)
                    } else {
                        vant.Toast('获取openid失败');
                        return Promise.reject()
                    }
                }).catch((err)=>{
                    vant.Toast('获取openid失败');
                    console.error(err)
                    return Promise.reject()
                })
            }
            
        },
        toRegister(){
        toRegister(){
            this.$router.push({path: "/register", query: this.$route.query})
            this.$router.push({path: "/register", query: this.$route.query})
        },
        },
@ -313,7 +270,7 @@ export default {
                        client_id: this.$store.getters.clientId,
                        client_id: this.$store.getters.clientId,
                        password: encrypt.encrypt(this.data.password),
                        password: encrypt.encrypt(this.data.password),
                        username: this.data.mobile?this.data.mobile:this.data.idcord,
                        username: this.data.mobile?this.data.mobile:this.data.idcord,
                        login_type: 3, // 1-平台管理员  2-医生登录  3-患者登录
                        login_type: 1, // 1-平台管理员  2-医生登录  3-患者登录
                        key: this.imgKey,
                        key: this.imgKey,
                        text: this.data.code,
                        text: this.data.code,
                        openid: this.openid,
                        openid: this.openid,
@ -329,10 +286,10 @@ export default {
                p = {
                p = {
                    client_id: this.$store.getters.clientId?this.$store.getters.clientId:process.env.VUE_APP_CLIENTID,
                    client_id: this.$store.getters.clientId?this.$store.getters.clientId:process.env.VUE_APP_CLIENTID,
                    username: this.data.mobile?this.data.mobile:this.data.idcord,
                    username: this.data.mobile?this.data.mobile:this.data.idcord,
                    login_type: 3, // 1-平台管理员  2-医生登录  3-患者登录
                    login_type: 1, // 1-平台管理员  2-医生登录  3-患者登录
                    captcha: this.data.msgCode,
                    captcha: this.data.msgCode,
                    openid: this.openid,
                    openid: this.openid,
                    clientType: "wx"
                    // clientType: "wx"
                }
                }
            }
            }
            p.wechatId = process.env.VUE_APP_WXID
            p.wechatId = process.env.VUE_APP_WXID
@ -352,35 +309,28 @@ export default {
            login(p).then(async result => {
            login(p).then(async result => {
                this.loading=false
                this.loading=false
                if (result.status == 200) {
                if (result.status == 200) {
                    result.obj.openid = result.obj.openid || this.openid
                    store.dispatch('SetLoginUser', result.obj)
                    try{
                      localStorage.removeItem("Medical-Care-Wx-Proxy-User")
                    }catch{
                    }
                    if(result.obj.archiveType==3){
                      let userAgent = {agent: result.obj.id}
                      localStorage.setItem("Medical-Care-Wx-Logined-User-Agent", JSON.stringify(userAgent))
                    }
                    let userInfo = await this.getPatientById(result.obj)
                    this.$toast.clear()
                    if(this.redirect){
                        this.$router.replace(decodeURIComponent(this.redirect))
                    } else {
                        updLatLon({
                            latLon:this.lat+","+this.lng,
                            patientId:this.user.id
                        }).then(res=>{
                            // console.log("保存定位成功")
                    let userInfo = result.obj;
                    this.$store
                        .dispatch("SetLoginUser", userInfo)
                        .then(() => {
                            findUserBaseInfo({
                                id: userInfo.id
                            }).then(res2 => {
                                userInfo = _.assignIn(userInfo, res2.obj);
                                this.$store
                                    .dispatch("SetLoginUser", userInfo)
                                    .then(() => {
                                        this.readonly = true
                                        this.$router.push({
                                            path: this.redirect || "/"
                                        });
                                    });
                            });
                        })
                        .catch(err=>{
                            console.error(err)
                            this.$toast.clear()
                        })
                        })
                        if(userInfo.archiveType) {
                            this.$router.replace("/home")
                        } else {
                            this.$router.replace("/setRole")
                        }
                        
                    }
                } else {
                } else {
                    this.$toast.clear()
                    this.$toast.clear()
                    this.$toast(result.status==1300? "验证码错误" : result.message);
                    this.$toast(result.status==1300? "验证码错误" : result.message);
@ -409,24 +359,6 @@ export default {
                }
                }
            })
            })
        },
        },
        async getPatientById(userInfo){
            var res = await residentApi.getPatientById({
                id: userInfo.id
            }).catch(err=>{
                console.error(err)
            })
            var userAgent = {
              id: res.obj.patient.id,
              uid: res.obj.patient.id,
              agent: res.obj.agentPatient?res.obj.agentPatient.id:''
            }
            res.obj.agentPatient?localStorage.setItem("Medical-Care-Wx-Proxy-User", JSON.stringify(res.obj.agentPatient)):''
            localStorage.setItem("Medical-Care-Wx-Logined-User-Agent", JSON.stringify(userAgent))
            userInfo = _.assignIn(userInfo, res.obj.patient)
            store.dispatch('SetLoginUser', userInfo)
            return userInfo
        }
    },
    },
    watch: {
    watch: {
        $route: {
        $route: {

+ 0 - 1
mini-pro-web/src/views/login/Register.vue

@ -59,7 +59,6 @@ import ValidatorUtils from '@/utils/validator'
import {isIdcard} from '@/utils/validator'
import {isIdcard} from '@/utils/validator'
import { setTimeout } from 'timers';
import { setTimeout } from 'timers';
import { getSign, getOpenidByCode} from "@/api/wx"
import { getSign, getOpenidByCode} from "@/api/wx"
import residentApi from '@/api/residentApi'
export default {
export default {
    name: "register",
    name: "register",
    data() {
    data() {

+ 136 - 10
mini-pro-web/src/views/machine/index.vue

@ -1,5 +1,13 @@
<template>
<template>
	<div class="machine-index">
	<div class="machine-index">
		<div v-show="step===0" class="tc">
			<div class="plr15 pt20">
				<van-field v-model="deviceNum" label="" placeholder="请输入设备编号" />
			</div>
			<div class="tc mt20">
				<van-button color="#17b3ec" @click="init" type="primary">   启动  </van-button>
			</div>
		</div>
		<div v-show="step==1" class="step-1">
		<div v-show="step==1" class="step-1">
			<div class="title-banner ">
			<div class="title-banner ">
				<img src="./img/biaoti_img.png" alt="">
				<img src="./img/biaoti_img.png" alt="">
@ -33,7 +41,7 @@
				</div>
				</div>
				<div class="item">
				<div class="item">
					<img @click="step=2" src="./img/btn_saoma.png" alt="">
					<img @click="step=2" src="./img/btn_saoma.png" alt="">
					<img src="./img/btn_ybk.png" alt="">
					<img @click="sendReadCard" src="./img/btn_ybk.png" alt="">
				</div>
				</div>
			</div>
			</div>
@ -68,20 +76,137 @@ export default {
  	},
  	},
  	data() {
  	data() {
    	return {
    	return {
			step: 1,
			deviceNum: 'dev_001_T',
			step: 0,
			curImg: '',
			curImg: '',
			illustrationMskShow: false
    	}
  	},
	created(){
		
	},
  	mounted() {
			illustrationMskShow: false,
			path: "ws://yik.ab-inbev.vip/c/websocket/",
			socket: "",
			mess: [],
			layerNo: "0",
			wayerNo: "0",
			forceClose: false,
			heartbitInterval: '',
			currindex: 0,
			orderdetail: []
    	}
  	},
  	},
  	methods: {
  	methods: {
		
		init: function() {
			if(!this.deviceNum){
				return
			}
			this.path += this.deviceNum
			if (typeof(WebSocket) === "undefined") {
				alert("您的浏览器不支持socket")
			} else {
				// 实例化socket
				this.socket = new WebSocket(this.path)
				// 监听socket连接
				this.socket.onopen = this.open
				// 监听socket错误信息
				this.socket.onerror = this.error
				// 监听socket消息
				this.socket.onmessage = this.getMessage
				this.socket.onclose = this.close
				this.step = 1
			}
		},
		open: function() {
			console.log("socket连接成功")
			this.heartbit()
		},
		error: function() {
			this.$dialog.confirm({
				title: '',
				message: '连接服务器失败',
				confirmButtonText: "重试"
			})
			.then(()=>{
				this.init()
			})
			console.log("连接错误")
		},
		getMessage: function(msg) {
			console.log(msg.data)
			this.mess.push(msg.data); //返回数据信息,包含医保瞳
			var msgobj = JSON.parse(msg.data)
			if (msgobj.type == 'ShipInfo') {
				if (msgobj.mess.indexOf("异常") < 0) {
					this.currindex++;
					if (this.orderdetail.length > this.currindex) {
						this.nextShipment(this.orderdetail[this.currindex]);
					}
				}
			} else if (msgobj.type == 'BarCodeInfo') {
				if (msgobj.mess.indexOf("异常") < 0) {
					console.log("读到的条码:" + msg.data.mess)
				}
			}
		},
		sendReadCard: function() {
			var obj = {
				type: "ReadCard",
				mess: ""
			}
			this.socket.send(JSON.stringify(obj));
		},
		sendShipment: function() {
			this.currindex = 0;
			//循环订单返回的列表,读取第一个
			if (this.orderdetail.length > this.currindex) {
				this.nextShipment(this.orderdetail[this.currindex]);
			}
		},
		nextShipment: function(row) {
			//检查刷新是否已经完成数据,没有完成继续,这个设计是为了防断网
			var obj = {
				type: "Shipment",
				mess: "{detailid:'" + row.id + "'}", //整串返回
				layerNo: row.layerNo,
				wayerNo: row.wayerNo
			}
			this.socket.send(JSON.stringify(obj));
		},
		send: function() {
			var obj = {
				type: "读取设备功能列表",
				mess: "",
				layerNo: this.layerNo,
				wayerNo: this.wayerNo,
			}
			this.socket.send(JSON.stringify(obj));
		},
		send2: function() {
			var obj = {
				type: "读取设备功能列表",
				mess: ""
			}
			this.socket.send(JSON.stringify(obj));
		},
		close: function() {
			console.log("socket已经关闭")
			if(!this.forceClose){
				console.log("socket已经关闭")
				this.init()
			}
		},
		heartbit(){
			this.heartbitInterval = setInterval(()=>{
				var obj = {
					type: "heart",
					mess: "",
				}
				this.socket.send(JSON.stringify(obj));
			}, 60 * 1000)
		}
    },
    },
	destroyed() {
		this.forceClose = true
		clearInterval(this.heartbitInterval)
	}
}
}
</script>
</script>
<style lang="scss" scoped>
<style lang="scss" scoped>
@ -137,6 +262,7 @@ export default {
				img{
				img{
					display: block;
					display: block;
					width: calc(154px / 6);
					width: calc(154px / 6);
					margin: 0 auto;
				}
				}
			}
			}
			.item{
			.item{

+ 67 - 77
mini-pro-web/src/views/order/list.vue

@ -54,92 +54,82 @@
    </div>
    </div>
</template>
</template>
<script>
<script>
    export default{
        name: 'orderList',
        data(){
            return {
                list: [],
                currentDate: new Date(),
                maxDate: new Date(),
                datePickerShow: false,
                startDate: new Date(),
                endDate: new Date(),
                pickType: 1,
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
    name: 'orderList',
    data(){
        return {
            list: [],
            currentDate: new Date(),
            maxDate: new Date(),
            datePickerShow: false,
            startDate: new Date(),
            endDate: new Date(),
            pickType: 1,
                value1: '',
                option1: [
                    { text: '全部商品', value: 0 },
                    { text: '新款商品', value: 1 },
                    { text: '活动商品', value: 2 },
                ],
            value1: '',
            option1: [
                { text: '全部', value: 0 },
            ],
        }
    },
    created() {
        
    },
    methods:{
        onLoad({page, pageSize, searchText}){
            var { startDate, endDate } = this
            var p = {
				startTime: startDate? this.$moment(startDate).format('YYYY-MM-DD 00:00:00') : '',
				endTime: endDate? this.$moment(endDate).format('YYYY-MM-DD 23:59:59') : '',
				// content: searchForm.content,
				// community: len? this.community[len-1] : '',
				// sellState: searchForm.sellStatus,
                page: page,
                size: pageSize
            }
            }
            console.log('params', p)
            medicineAbinetApi
                .orderList(p)
                .then(res=>{
                    if(res.status == 200){
                        var list = res.detailModelList
                        this.list = page==1? list : this.list.concat(list)
                        this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                    } else {
                        this.$refs.customList.endLoad(false, true)
                    }
                }).catch(err=>{
                    console.error(err)
                    this.$refs.customList.endLoad(false, true)
                })
        },
        },
        created() {
            
        pickDate(pickType){
            this.pickType = pickType
            this.currentDate = pickType ==1? this.startDate : this.endDate
            this.datePickerShow = true
        },
        },
        methods:{
            onLoad({page, pageSize, searchText}){
                setTimeout(()=>{
                    for(var i=0; i<pageSize; i++){
                        this.list.push((page-1)*pageSize + i)
                    }
                    console.log(this.list)
                    debugger
                    this.$refs.customList.endLoad(page==5, this.list.length)
                }, 1000)
                return
                var that = this, 
                    params = {
                        orgCode: this.$store.getters.orgCode,
                        doctorNameKey: searchText,
                        dept: this.routerParam.dept,
                        diseaseKey: this.routerParam.disease,
                        page: page,
                        pagesize: pageSize
                    };
                
                zhuanjiazixunApi
                    .findDoctorByHospitalAndDiseaseAndDept(params)
                    .then(res=>{
                        if(res.status == 200){
                            var list = res.detailModelList.map(item=>{
                                var data = item
                                data.photo = this.$root.setDocPhoto(data.photo)
                                return data
                            })
                            this.list = page==1? list : this.list.concat(list)
                            this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        } else {
                            this.$refs.customList[this.active].endLoad(false, true)
                        }
                    }).catch(err=>{
                        console.error(err)
                        this.$refs.customList[this.active].endLoad(false, true)
                    })
            },
            pickDate(pickType){
                this.pickType = pickType
                this.currentDate = pickType ==1? this.startDate : this.endDate
                this.datePickerShow = true
            },
            onPick(){
                var date = this.$moment(this.currentDate).toDate()
                if(this.pickType ==1){
                    this.startDate = date
                } else {
                    this.endDate = date
                }
                this.datePickerShow = false
            },
            onSearch(){
                this.list = []
                this.$refs.customList.refresh(true)
        onPick(){
            var date = this.$moment(this.currentDate).toDate()
            if(this.pickType ==1){
                this.startDate = date
            } else {
                this.endDate = date
            }
            }
            this.datePickerShow = false
        },
        },
    }
        onSearch(){
            this.list = []
            this.$refs.customList.refresh(true)
        }
    },
}
</script>
</script>
<style lang='scss' scoped>
<style lang='scss' scoped>
.order-list{
.order-list{
    .custom-list{
        height: calc(100vh - 50px);
    }
    .top-banner{
    .top-banner{
        background: #f2f3f5;
        background: #f2f3f5;
        .date-item{
        .date-item{

+ 35 - 24
mini-pro-web/src/views/personal/changePassword.vue

@ -62,40 +62,51 @@ export default {
    },
    },
    methods:{
    methods:{
        async onSubmit() {
        async onSubmit() {
            var that = this
            if(!this.oldPassword.length){
            if(!this.oldPassword.length){
                 that.$toast("原密码不能为空");
                 return false
                this.$toast("原密码不能为空");
                return false
            }
            }
            if(!this.password.length || !this.requirePassword.length){
            if(!this.password.length || !this.requirePassword.length){
                 that.$toast("密码不能为空");
                 return false
                this.$toast("密码不能为空");
                return false
            }
            }
            if(!this.setPassword()){
            if(!this.setPassword()){
                 that.$toast("两次输入密码不一致");
                 return false
                this.$toast("两次输入密码不一致");
                return false
            }
            }
            if(this.s1!=1 || this.s2!=1 || this.s3!=1 ){
            if(this.s1!=1 || this.s2!=1 || this.s3!=1 ){
                that.$toast("密码设置不符合要求");
                this.$toast("密码设置不符合要求");
                return false
                return false
            }
            }
            var params = {id: this.$store.getters.user.id,pw:this.password}
                params['orgPw'] = this.oldPassword
            var res = await changePwd(params)
            var that = this
            if(res.status == 200&&res.obj){
                that.$toast('修改成功');
                await this.$store.dispatch('LogOut')
                setTimeout(function(){
                    that.$router.push('/login')
                },800)
            }else{
                if(res.message){
                    that.$toast(res.message);
                } else {
                    that.$toast('修改失败');
                }
            
            var params = {
                id: this.user.id,
                pw: this.password,
                orgPw: this.oldPassword
            }
            }
            changePwd(params)
                .then(res=>{
                    if(res.status == 200 && res.obj){
                        if(res.obj.response == "fail"){
                            this.$toast(res.obj.msg);
                            return
                        }
                        this.$toast('修改成功');
                        this.$store
                            .dispatch('LogOut')
                            .then(res=>{
                                setTimeout(()=>{
                                    this.$router.push('/login')
                                },800)
                            })
                    } else {
                        this.$toast(res.message || '修改失败');
                    }
                })
                .catch(err=>{
                    console.error(err)
                })
            
        },
        },
        setPassword() {
        setPassword() {
            return this.password === this.requirePassword
            return this.password === this.requirePassword

+ 31 - 231
mini-pro-web/src/views/personal/index.vue

@ -7,15 +7,15 @@
                        width="80"
                        width="80"
                        height="80"
                        height="80"
                        round
                        round
                        src="https://img01.yzcdn.cn/vant/cat.jpeg"
                        :src="setImgUrl(user.photo)"
                    />
                    />
                </div>
                </div>
                <div class="pl15 lh20 kitbox box-v-middle">
                <div class="pl15 lh20 kitbox box-v-middle">
                    <div>
                    <div>
                        <div class="fs-16 c-333">张三</div>
                        <div class="fs-16 c-333">{{user.name}}</div>
                        <div class="fs-14 c-666 pt5">
                        <div class="fs-14 c-666 pt5">
                            <div>15050505050</div>
                            <div>禾山街道社区卫生服务中心</div>
                            <div>{{user.mobile}}</div>
                            <!-- <div>禾山街道社区卫生服务中心</div> -->
                        </div>
                        </div>
                    </div>
                    </div>
                </div>
                </div>
@ -35,236 +35,36 @@
    </div>
    </div>
</template>
</template>
<script>
<script>
    import {getPatient, updPatient, uploadStream} from '@/api/patient'
    import { ImagePreview } from 'vant';
    import {getMembers} from '@/api/family'
    import store from "@/store";
    import { Dialog } from 'vant';
    export default{
        name: 'meIndex',
        data(){
            return {
                fileList: [],
                screenWidth: document.body.clientWidth,
                family:[],
                patient:{},
                file: '',
                filename: '',
                defaultImg: '',
                members:[],
                
       
            }
        },
        created() {
export default{
    name: 'meIndex',
    data(){
        return {
            fileList: [],
            screenWidth: document.body.clientWidth,
            family:[],
            patient:{},
            file: '',
            filename: '',
            defaultImg: '',
            members:[],
        }
    },
    methods:{
        redirectToLogin() {
            let appId = process.env.VUE_APP_APPID,
                protocol = window.location.protocol,
                host = window.location.host,
                redirctWxAuthUrl = encodeURIComponent(`${protocol}//${host}${process.env.VUE_APP_PRE_PATH}/login`),
                wxAuthUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirctWxAuthUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`
            
            
            location.replace(wxAuthUrl)
        },
        },
        methods:{
            activeList3Names(n){
                this.orgPage = 1;
                if(typeof n == 'number'){
                    this.getTeacherList(n)
                }
            },
            dataURLtoFile(dataurl, filename) { 
                var arr = dataurl.split(','),
                    mime = arr[0].match(/:(.*?);/)[1],
                    bstr = atob(arr[1]),
                    n = bstr.length,
                    u8arr = new Uint8Array(n);
                while (n--) {
                    u8arr[n] = bstr.charCodeAt(n);
                }
                return new File([u8arr], filename, { type: mime });
            },
            afterRead(){
                let that = this;
                that.patient.photo = that.fileList[0].content;
                that.file = that.fileList[0].content;
                that.filename = that.fileList[0].file.name;
                that.fileList = [];
                let param = new FormData();
                param.append('file', that.dataURLtoFile(that.file, that.filename));
                param.append('filename', that.filename);
                uploadStream(param).then(res => {
                    if(res.status == 200){
                        console.log(res)
                        that.patient.photo = res.obj.fullUri;
                        updPatient({'jsonData': {'patient':that.patient}}).then( res1 => {
                            if(res1.status == 200){
                                that.updLocalUser();
                            }
                            else{
                                that.$toast('修改失败');
                            }
                            console.log(res1)
                        })
                    }
                })
            },
            redirectToLogin() {
                let appId = process.env.VUE_APP_APPID,
                    protocol = window.location.protocol,
                    host = window.location.host,
                    redirctWxAuthUrl = encodeURIComponent(`${protocol}//${host}${process.env.VUE_APP_PRE_PATH}/login`),
                    wxAuthUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirctWxAuthUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`
                
                location.replace(wxAuthUrl)
            },
            async logout(){
                await this.$store.dispatch('LogOut')
                localStorage.removeItem("Medical-Care-Wx-Logined-User-Agent")
                try{
                  localStorage.removeItem("Medical-Care-Wx-Proxy-User")
                }catch{
                }
                let isApp = this.$route.query.isApp || this.isSupportHtml5Plus
                if(!isApp) {
                  if(navigator.userAgent.toLowerCase().indexOf('micromessenger') !==-1) {
                    this.redirectToLogin()
                    return ;
                  }else{
                    this.gotoUrl('/login')
                  }
                }
            },
            Edit(str, value=''){
                this.$router.push({path: '/me/editMeInfo', query: {'key': str, 'value': value}})
            },
            imgPreview(){
                try{
                    if(this.patient.photo && this.patient.photo.toString().length>0){
                        ImagePreview({
                            images: [
                                this.patient.photo
                            ],
                            onClose() {
                                
                            },
                        });
                    }else{
                        ImagePreview({
                            images: [
                                require('@/assets/images/p-default.png')
                            ],
                            onClose() {
                                
                            },
                        });
                    }
                    
                }catch{
                    
                }
            },
            updLocalUser(){
                getPatient({id:this.patient.id}).then(res => {
                    if(res.status == 200){
                        let userInfo = _.assignIn(this.user, res.obj.patient)
                        store.dispatch('SetLoginUser', userInfo)
                        this.patient = this.user;
                        console.log(this.patient,"paskp")
                    }
                })
            },
            initMain(){
                let that = this;
                try{
                    that.patient = this.user;
                    getMembers({'patient': that.patient.id}).then(res => {
                        if(res.status == 200){
                            that.members = res.obj.normalmembers;
                            if(JSON.parse(localStorage.getItem("Medical-Care-Wx-Logined-User-Agent")).agent){
                            getMembers({'patient': JSON.parse(localStorage.getItem("Medical-Care-Wx-Logined-User-Agent")).agent}).then(res1 => {
                                console.log(res1)
                                if(res1.status == 200){
                                  if(that.members.length>0){
                                    res1.obj.normalmembers.forEach(el=>{
                                      let num = 0
                                      for(let i of that.members){
                                        if(i.id != el.id && this.user.id!=el.id){
                                          num += 1
                                        }else{
                                          el.isNotMembers = true
                                        }
                                      }
                                      if(num==that.members.length){
                                        el.isNotMembers = true
                                        that.members.push(el);
                                      }
                                    });
                                  }else{
                                    res1.obj.normalmembers.forEach(el=>{
                                      el.isNotMembers = true
                                    })
                                    that.members = res1.obj.normalmembers;
                                  }
                                }
                              })
                            }
                        }
                    })
                }catch{
                }
            },
            isSwitchLoginUser(item){
                Dialog.confirm({
                    title: '切换登录',
                    message: '是否要切换登录到'+item.name+"?",
                })
                .then(() => {
                    this.switchLoginUser(item)
                })
                .catch(() => {
                    // on cancel 
                });
            },
            async switchLoginUser(item){
                await switchLogin(item)
                this.initMain()
                this.$emitRefreshPage('homeIndex')
                this.gotoUrl('/home/index')
            },
            onCancel() {
                this.EditShow = false
            },
        async logout(){
            await this.$store.dispatch('LogOut')
            this.gotoUrl('/login')
        },
        },
        created(){
            this.initMain();
        },
        filters:{
            infoFliter(m){
                if(m && m.length>0){
                    return m.substr(0, m.length-8) + '****' + m.substr(m.length-4, 4);
                }
            },
            relationFilter(r){
                if(r.sex == 1){
                    switch(r.familyRelation){
                        case 2:
                            return '父亲';
                        case 4:
                            return '老公';
                        case 6:
                            return '儿子';
                    }
                }else if(r.sex == 2){
                    switch(r.familyRelation){
                        case 1:
                            return '母亲';
                        case 3:
                            return '老婆';
                        case 5:
                            return '女儿';
                    }
                }
                return r.familyRelationName;
            }
        }
    }
    },
}
</script>
</script>
<style lang='scss' scoped>
<style lang='scss' scoped>
.personal-index{
.personal-index{

+ 1 - 1
mini-pro-web/src/views/replenishment/device/list.vue

@ -4,7 +4,7 @@
			ref="customList"
			ref="customList"
			@onLoad="onLoad">
			@onLoad="onLoad">
			<div class="list plr15 pt10">
			<div class="list plr15 pt10">
                <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                <div @click="gotoUrl('/replenishment/device/detail')" v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                    <div class=" ptb10 kitbox">
                    <div class=" ptb10 kitbox">
                        <div class="box-flex-1 fs-14">众健信联1号</div>
                        <div class="box-flex-1 fs-14">众健信联1号</div>
                        <div class="">
                        <div class="">

+ 10 - 10
mini-pro-web/src/views/replenishment/index.vue

@ -1,13 +1,13 @@
<template>
<template>
	<div class="replenishment-index pt10">
	<div class="replenishment-index pt10">
    	<div class="panel plr15 c-fff fs-14">
    	<div @click="gotoUrl('/replenishment/device/list')" class="panel plr15 c-fff fs-14">
			<div class=" pt15 ">
			<div class=" pt15 ">
				<div class="fs-16 f-bold">我维护的设备</div>
				<div class="fs-16 f-bold">我维护的设备</div>
			</div>
			</div>
			<div class="kitbox  pt10">
			<div class="kitbox  pt10">
				<div class="box-flex-1">
				<div class="box-flex-1">
					<span class="fs-23">1</span>
					<span>台</span>
					<span class="fs-23">0</span>
					<span class="ml5">台</span>
				</div>
				</div>
				<div class="">
				<div class="">
					<span class="v-middle">查看设备商品</span>
					<span class="v-middle">查看设备商品</span>
@ -15,7 +15,7 @@
				</div>
				</div>
			</div>
			</div>
			<div class="pt10 pb10">
			<div class="pt10 pb10">
				<span>在线:1台</span> 
				<span>在线:0台</span> 
				<span class="ml10">离线:0台</span>
				<span class="ml10">离线:0台</span>
			</div>
			</div>
		</div>
		</div>
@ -26,18 +26,18 @@
				<div class="fs-16 f-bold">缺货设备  |  实时</div>
				<div class="fs-16 f-bold">缺货设备  |  实时</div>
			</div>
			</div>
			<div class="  pt10">
			<div class="  pt10">
				<span class="fs-23">1</span>
				<span>台</span>
				<span class="fs-23">0</span>
				<span class="ml5">台</span>
			</div>
			</div>
			<div class="pt10 ">
			<div class="pt10 ">
				以上统计的缺货设备为实时数据
				以上统计的缺货设备为实时数据
			</div>
			</div>
			<div class="kitbox ptb10">
			<div class="kitbox ptb10">
				<div class="box-flex-1 mr10">
				<div class="box-flex-1 mr10">
					<van-button plain block round size="small" type="info">去备货</van-button>
					<van-button @click="gotoUrl('/replenishment/stockUp/deviceList')" plain block round size="small" type="info">去备货</van-button>
				</div>
				</div>
				<div class="box-flex-1 ml10">
				<div class="box-flex-1 ml10">
					<van-button plain block round size="small" type="info">去补货</van-button>
					<van-button @click="gotoUrl('/replenishment/start/deviceList')" plain block round size="small" type="info">去补货</van-button>
				</div>
				</div>
			</div>
			</div>
		</div>
		</div>
@ -49,11 +49,11 @@
				</div>
				</div>
				<div class="ptb10 plr5">
				<div class="ptb10 plr5">
					<van-row class="">
					<van-row class="">
						<van-col span="6" class="tc ">
						<van-col @click="gotoUrl('/replenishment/picking/list')" span="6" class="tc ">
							<div class="fs-23 c-17b3ec"><img src="@/assets/images/dingdanguanli.png" alt=""></div>
							<div class="fs-23 c-17b3ec"><img src="@/assets/images/dingdanguanli.png" alt=""></div>
							<div class="fs-14 c-666 pt5">备货单</div>
							<div class="fs-14 c-666 pt5">备货单</div>
						</van-col>
						</van-col>
						<van-col span="6" class="tc">
						<van-col @click="gotoUrl('/replenishment/record/list')" span="6" class="tc">
							<div class="fs-23 c-ff9526"><img src="@/assets/images/shebeiguanli.png" alt=""></div>
							<div class="fs-23 c-ff9526"><img src="@/assets/images/shebeiguanli.png" alt=""></div>
							<div class="fs-14 c-666 pt5">补货记录</div>
							<div class="fs-14 c-666 pt5">补货记录</div>
						</van-col>
						</van-col>

+ 28 - 6
mini-pro-web/src/views/replenishment/picking/detail.vue

@ -5,26 +5,48 @@
                <div class="box-flex-1 pl10">商品名称</div>
                <div class="box-flex-1 pl10">商品名称</div>
                <div class="tc">领料数量</div>
                <div class="tc">领料数量</div>
            </div>
            </div>
            <div class="row kitbox">
                <div class="box-flex-1 pl10 ellipsis">J氯化钠注射液J氯化钠注射液J氯化钠注射液J氯化钠注射液(90mg)</div>
                <div class="tc">5</div>
            <div class="row kitbox" v-for="(item, i) in drugList" :key="i">
                <div class="box-flex-1 pl10 ellipsis">{{item.drugName}}</div>
                <div class="tc">{{item.claim}}</div>
            </div>
            </div>
        </div>
        </div>
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'replenishmentPickingDetail',
    name: 'replenishmentPickingDetail',
    data(){
    data(){
        return {
        return {
            
            entity: '',
            drugList: [],
            idUp: this.$route.query.idUp
        }
        }
    },
    },
    created() {
    created() {
        
        this.findById()
    },
    },
    methods:{
    methods:{
        
        findById(){
            this.$loading('加载中..')
            let p = {
                idUp: this.idUp
            }
            medicineAbinetApi
                .getUpDetailById(p)
                .then(res=>{
                    this.$toast.clear()
                    console.log('getUpDetailById', res)
                    if(res.status == 200){
                        this.drugList = res.obj.list
                    } else {
                        this.drugList = []
                    }
                })
                .catch(err=>{
                    console.error(err)
                })
        }
    },
    },
}
}
</script>
</script>

+ 54 - 59
mini-pro-web/src/views/replenishment/picking/list.vue

@ -1,15 +1,13 @@
<template>
<template>
    <div class='replenishment-picking-list'>
    <div class='replenishment-picking-list'>
        <van-sticky>
        <van-sticky>
            <van-tabs v-model="active" >
            <van-tabs v-model="active" @change="onChange">
                <van-tab title="全部"></van-tab>
                <van-tab title="全部"></van-tab>
                <van-tab title="备货中"></van-tab>
                <van-tab title="备货中"></van-tab>
                <van-tab title="">
                <van-tab title="">
                    <div slot="title">
                    <div slot="title">
                        <van-badge :content="5">
                        待领料
                        </van-badge>
                        <van-badge v-if="waitCount" :content="waitCount">待领料</van-badge>
                        <span v-else>待领料</span>
                    </div>
                    </div>
                </van-tab>
                </van-tab>
                <van-tab title="已领料"></van-tab>
                <van-tab title="已领料"></van-tab>
@ -21,9 +19,9 @@
            :searchfun="false"
            :searchfun="false"
			@onLoad="onLoad">
			@onLoad="onLoad">
			<div class="list plr15 pt10">
			<div class="list plr15 pt10">
                <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                <div @click="gotoUrl('./detail', {idUp: item.id})" v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                    <div class=" ptb10 kitbox bb-e1e1e1">
                    <div class=" ptb10 kitbox bb-e1e1e1">
                        <div class="box-flex-1 fs-14">备货单号:Q1090811559890001</div>
                        <div class="box-flex-1 fs-14">备货单号:{{item.docNum}}</div>
                        <div class="">
                        <div class="">
                            <span class="c-ff9526">备货中</span>
                            <span class="c-ff9526">备货中</span>
                            <!-- <span class="c-17b3ec">待领料</span>
                            <!-- <span class="c-17b3ec">待领料</span>
@ -35,23 +33,23 @@
                        <div class="box-flex-1">
                        <div class="box-flex-1">
                            <div class="row">
                            <div class="row">
                                <div>补货员</div>
                                <div>补货员</div>
                                <div>张三</div>
                                <div>{{item.replenishEr}}</div>
                            </div>
                            </div>
                            <div class="row">
                            <div class="row">
                                <div>待补设备</div>
                                <div>待补设备</div>
                                <div>总健信联1号</div>
                                <div>{{item.replenishEqu}}</div>
                            </div>
                            </div>
                            <div class="row">
                            <div class="row">
                                <div>待补品类</div>
                                <div>待补品类</div>
                                <div>10</div>
                                <div>{{item.replenishCateName}}</div>
                            </div>
                            </div>
                            <div class="row">
                            <div class="row">
                                <div>待补库存</div>
                                <div>待补库存</div>
                                <div>60</div>
                                <div>{{item.replenishInventory}}</div>
                            </div>
                            </div>
                            <div class="row">
                            <div class="row">
                                <div>单据日期</div>
                                <div>单据日期</div>
                                <div>2021-09-10 15:00:41</div>
                                <div>{{formatDatetime(item.docTime)}}</div>
                            </div>
                            </div>
                        </div>
                        </div>
                        <div class="fs-20 c-pr">
                        <div class="fs-20 c-pr">
@ -64,56 +62,53 @@
    </div>
    </div>
</template>
</template>
<script>
<script>
    export default{
        name: 'replenishmentDeviceList',
        data(){
            return {
                list: [],
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
    name: 'replenishmentDeviceList',
    data(){
        return {
            list: [],
            active: 0,
            waitCount: 0
        }
    },
    created() {
        
    },
    methods:{
        onLoad({page, pageSize, searchText}){
            var p = {
				// startTime: startDate? this.$moment(startDate).format('YYYY-MM-DD 00:00:00') : '',
				// endTime: endDate? this.$moment(endDate).format('YYYY-MM-DD 23:59:59') : '',
				// content: searchForm.content,
				// community: len? this.community[len-1] : '',
				// sellState: searchForm.sellStatus,
                page: page,
                size: pageSize
            }
            }
        },
        created() {
            
        },
        methods:{
            onLoad({page, pageSize, searchText}){
                setTimeout(()=>{
                    for(var i=0; i<pageSize; i++){
                        this.list.push((page-1)*pageSize + i)
            console.log('params', p)
            medicineAbinetApi
                .replenishList(p)
                .then(res=>{
                    if(res.status == 200){
                        var list = res.detailModelList
                        this.list = page==1? list : this.list.concat(list)
                        this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                    } else {
                        this.list = []
                        this.$refs.customList.endLoad(false, true)
                    }
                    }
                    this.$refs.customList.endLoad(page==5, this.list.length)
                }, 1000)
                return
                var that = this, 
                    params = {
                        orgCode: this.$store.getters.orgCode,
                        doctorNameKey: searchText,
                        dept: this.routerParam.dept,
                        diseaseKey: this.routerParam.disease,
                        page: page,
                        pagesize: pageSize
                    };
                
                zhuanjiazixunApi
                    .findDoctorByHospitalAndDiseaseAndDept(params)
                    .then(res=>{
                        if(res.status == 200){
                            var list = res.detailModelList.map(item=>{
                                var data = item
                                data.photo = this.$root.setDocPhoto(data.photo)
                                return data
                            })
                            this.list = page==1? list : this.list.concat(list)
                            this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        } else {
                            this.$refs.customList[this.active].endLoad(false, true)
                        }
                    }).catch(err=>{
                        console.error(err)
                        this.$refs.customList[this.active].endLoad(false, true)
                    })
            },
                }).catch(err=>{
                    console.error(err)
                    this.list = []
                    this.$refs.customList.endLoad(false, true)
                })
        },
        },
    }
        onChange(){
            this.$refs.customList.refresh(true)
        }
    },
}
</script>
</script>
<style lang='scss' scoped>
<style lang='scss' scoped>
.replenishment-picking-list{
.replenishment-picking-list{

+ 30 - 32
mini-pro-web/src/views/replenishment/start/deviceList.vue

@ -13,17 +13,17 @@
                <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                    <div class=" ptb10 kitbox">
                    <div class=" ptb10 kitbox">
                        <div class="box-flex-1 fs-14">
                        <div class="box-flex-1 fs-14">
                            众健信联1号
                            {{item.equName}}
                        </div>
                        </div>
                        <div class="">
                        <div class="">
                            <van-tag type="success">在线</van-tag>
                            <van-tag type="success" class="ml5">在售</van-tag>
                            <van-tag :type="item.networkStatus==1? 'success' : 'danger'">{{item.networkStatusName}}</van-tag>
                            <van-tag :type="item.saleStatus==1? 'success' : 'danger'" class="ml5">{{item.saleStatusName}}</van-tag>
                        </div>
                        </div>
                    </div>
                    </div>
                    <div class="lh20 ptb10 kitbox">
                    <div class="lh20 ptb10 kitbox">
                        <div class="box-flex-1">
                        <div class="box-flex-1">
                            <div>设备编号:149122021070000</div>
                            <div>上次补货时间:2021-09-11 09:00:14</div>
                            <div>设备编号:{{item.equNum}}</div>
                            <div>上次补货时间:</div>
                        </div>
                        </div>
                    </div>
                    </div>
                    <div class="operate kitbox pt10 pb10">
                    <div class="operate kitbox pt10 pb10">
@ -36,6 +36,7 @@
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'replenishmentStartDeviceList',
    name: 'replenishmentStartDeviceList',
    data(){
    data(){
@ -46,45 +47,42 @@ export default{
            active: 0
            active: 0
        }
        }
    },
    },
    watch:{
        active(){
            this.$refs.customList.refresh(true)
        }
    },
    created() {
    created() {
        
        
    },
    },
    methods:{
    methods:{
        onLoad({page, pageSize, searchText}){
        onLoad({page, pageSize, searchText}){
            setTimeout(()=>{
                for(var i=0; i<pageSize; i++){
                    this.list.push((page-1)*pageSize + i)
                }
                this.$refs.customList.endLoad(page==5, this.list.length)
            }, 1000)
            return
            var that = this, 
                params = {
                    orgCode: this.$store.getters.orgCode,
                    doctorNameKey: searchText,
                    dept: this.routerParam.dept,
                    diseaseKey: this.routerParam.disease,
                    page: page,
                    pagesize: pageSize
                };
            
            zhuanjiazixunApi
                .findDoctorByHospitalAndDiseaseAndDept(params)
            var p = {
                page: page,
                size: pageSize
            }
            var func
            if(this.active === 0){
                func = medicineAbinetApi.getOutOfStockDeviceList
            } else {
            }
            console.log('params', p)
            func(p)
                .then(res=>{
                .then(res=>{
                    console.log('getOutOfStockDeviceList', res)
                    if(res.status == 200){
                    if(res.status == 200){
                        var list = res.detailModelList.map(item=>{
                            var data = item
                            data.photo = this.$root.setDocPhoto(data.photo)
                            return data
                        })
                        var list = res.detailModelList
                        this.list = page==1? list : this.list.concat(list)
                        this.list = page==1? list : this.list.concat(list)
                        this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        this.$refs.customList.endLoad(this.active===0 || !list || !list.length, this.list.length)
                    } else {
                    } else {
                        this.$refs.customList[this.active].endLoad(false, true)
                        this.list = []
                        this.$refs.customList.endLoad(false, true)
                    }
                    }
                }).catch(err=>{
                }).catch(err=>{
                    console.error(err)
                    console.error(err)
                    this.$refs.customList[this.active].endLoad(false, true)
                    this.list = []
                    this.$refs.customList.endLoad(false, true)
                })
                })
        },
        },
    },
    },

+ 91 - 9
mini-pro-web/src/views/replenishment/stockUp/detail.vue

@ -5,30 +5,102 @@
                <div class="box-flex-1 pl10">商品名称</div>
                <div class="box-flex-1 pl10">商品名称</div>
                <div class="tc">现料数</div>
                <div class="tc">现料数</div>
                <div class="tc">缺料数</div>
                <div class="tc">缺料数</div>
                <div class="tc">操作</div>
            </div>
            </div>
            <div class="row kitbox">
                <div class="box-flex-1 pl10 ellipsis">J氯化钠注射液J氯化钠注射液J氯化钠注射液J氯化钠注射液(90mg)</div>
                <div class="tc">5</div>
                <div class="tc">5</div>
            <div v-for="(item, i) in list" :key="i" class="row kitbox">
                <div class="box-flex-1 pl10 ellipsis">{{item.drugName}}</div>
                <div class="tc">{{item.qty}}</div>
                <div class="tc">{{item.upInventory}}</div>
                <div class="tc">删除</div>
            </div>
        </div>
        <div class="btns">
            <div class="pl15 pr8">
                <van-button plain @click="gotoUrl('/drugList')" block round type="info">新增商品</van-button>
            </div>
            <div class="pl8 pr15">
                <van-button  block @click="submit" round type="info">生成备货单</van-button>
            </div>
            </div>
        </div>
        </div>
        <BotFloatButton :fix="true">下一步,生成备货单</BotFloatButton>
        <!-- <BotFloatButton :fix="true">下一步,生成备货单</BotFloatButton> -->
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'replenishmentStockUpDetail',
    name: 'replenishmentStockUpDetail',
    data(){
    data(){
        return {
        return {
            
            deviceId: this.$route.query.deviceId,
            list: [],
            oriData: []
        }
        }
    },
    },
    created() {
    created() {
        
        this.$EventBus.$on('drug-sel', (item)=>{
            this.list.push(item)
        })
        this.getDetialOutOfStock()
    },
    },
    methods:{
    methods:{
        
        getDetialOutOfStock(){
            this.$loading('加载中..')
            let p = {
                ids: this.deviceId
            }
            console.log('params', p)
            medicineAbinetApi
                .getDetialOutOfStock(p)
                .then(res=>{
                    console.log('getDetialOutOfStock', res)
                    this.$toast.clear()
                    this.oriData = res.detailModelList
					this.tableData = res.detailModelList&&res.detailModelList[0].children
                })
                .catch(err=>{
                    console.error(err)
                })
        },
        submit(){
            if(!this.oriData[0].children.length){
                this.$toast('请选择药品')
                return
            }
            this.$loading('保存中..')
            var list = _.map(this.oriData, v=>{
                return {
                    deviceId: v.id,
                    drugs: _.map(v.children, d=>{
                        return {
                            drugId: d.id,
                            qty: d.upInventory
                        }
                    })
                }
            })
            var p = {
                list
            }
            console.log('params', p)
            medicineAbinetApi
                .baseUpCreateUp({
                    jsonData: JSON.stringify(p),
                })
                .then(res => {
                    if(res.status == 200){
                        this.setBackRefresh()
                        this.$toast('生成成功')
                        history.back()
                    }
                })
                .catch(err=>{
                    console.error(err)
                })
                
        }
    },
    },
}
}
</script>
</script>
@ -38,7 +110,7 @@ export default{
        .row{
        .row{
            padding: 10px 0;
            padding: 10px 0;
            border-bottom: 1px solid #e1e1e1;
            border-bottom: 1px solid #e1e1e1;
            >div:nth-child(2), >div:nth-child(3){
            >div:nth-child(2), >div:nth-child(3), >div:nth-child(4){
                width: 80px;
                width: 80px;
            }
            }
            &:last-child{
            &:last-child{
@ -46,5 +118,15 @@ export default{
            }
            }
        }
        }
    }
    }
    .btns{
        position: fixed;
        width: 100%;
        left: 0;
        bottom: 20px;
        display: -webkit-box;
        >div{
            width: 50%;
        }
    }
}
}
</style>
</style>

+ 43 - 38
mini-pro-web/src/views/replenishment/stockUp/deviceList.vue

@ -5,10 +5,11 @@
			@onLoad="onLoad">
			@onLoad="onLoad">
			<div class="list plr15 pt10">
			<div class="list plr15 pt10">
                <van-checkbox-group v-model="result">
                <van-checkbox-group v-model="result">
                    <div v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                    <div @click="gotoUrl('./detail', {deviceId: item.id})" v-for="(item, i) in list" :key="i" class="item bgc-fff plr15 c-333 fs-14">
                        <div class=" ptb10 kitbox">
                        <div class=" ptb10 kitbox">
                            <div class="box-flex-1 fs-14">
                            <div class="box-flex-1 fs-14">
                                <van-checkbox name="a">众健信联1号</van-checkbox>
                                {{item.equName}}
                                <!-- <van-checkbox :name="item.id">{{item.equName}}</van-checkbox> -->
                            </div>
                            </div>
                            <div class="">
                            <div class="">
                                <van-tag type="success">在线</van-tag>
                                <van-tag type="success">在线</van-tag>
@ -17,15 +18,15 @@
                        </div>
                        </div>
                        <div class="kitbox ptb10 pr40">
                        <div class="kitbox ptb10 pr40">
                            <div class="pt2">空置率:</div>
                            <div class="pt2">空置率:</div>
                            <div class="box-flex-1 pt10"><van-progress :percentage="50" /></div>
                            <div class="box-flex-1 pt10"><van-progress :percentage="item.idleRate? (item.idleRate*100) : 0" /></div>
                        </div>
                        </div>
                        <div class="lh20 ptb10 kitbox">
                        <div class="lh20 ptb10 kitbox">
                            <div class="box-flex-1">
                            <div class="box-flex-1">
                                <div>待补商品数量:1156</div>
                                <div>未设商品空货道:133</div>
                                <div>设备所属:禾山街道社区卫生服务中心</div>
                                <div>设备编号:149122021070000</div>
                                <div>上次补货时间:2021-09-11 09:00:14</div>
                                <div>待补商品数量:{{item.unuserdCapacity}}</div>
                                <div>未设商品空货道:{{item.unusedAisles}}</div>
                                <div>设备所属:{{item.community}}</div>
                                <div>设备编号:{{item.equNum}}</div>
                                <div>上次补货时间:</div>
                            </div>
                            </div>
                            <div class="fs-20 c-pr">
                            <div class="fs-20 c-pr">
                                <van-icon name="arrow" />
                                <van-icon name="arrow" />
@ -35,19 +36,20 @@
                </van-checkbox-group>
                </van-checkbox-group>
            </div>
            </div>
		</CustomList>
		</CustomList>
        <div class="bot-banner ptb10 bgc-fff">
        <!-- <div class="bot-banner ptb10 bgc-fff">
            <div class="kitbox fs-14">
            <div class="kitbox fs-14">
                <div class="pr40 box-v-middle pl15">
                <div class="pr40 box-v-middle pl15">
                    <van-checkbox v-model="selAll">全选</van-checkbox>
                    <van-checkbox v-model="selAll">全选</van-checkbox>
                </div>
                </div>
                <div class="box-flex-1 plr15">
                <div class="box-flex-1 plr15">
                    <van-button type="info" size="small" round block>下一步,查看缺货商品汇总</van-button>
                    <van-button @click="gotoUrl('./detail', {deviceIds: result.join(',')})" type="info" size="small" round block>下一步,查看缺货商品汇总</van-button>
                </div>
                </div>
            </div>
            </div>
        </div>
        </div> -->
    </div>
    </div>
</template>
</template>
<script>
<script>
import medicineAbinetApi from '@/api/api-medicineAbinet'
export default{
export default{
    name: 'replenishmentStockUpDeviceList',
    name: 'replenishmentStockUpDeviceList',
    data(){
    data(){
@ -57,45 +59,48 @@ export default{
            selAll: false
            selAll: false
        }
        }
    },
    },
    watch:{
        selAll(n){
            if(n){
                this.result = _.map(this.list, v=>{
                    return v.id
                })
            } else {
                this.result = []
            }
        }
    },
    created() {
    created() {
        
        
    },
    },
    methods:{
    methods:{
        onLoad({page, pageSize, searchText}){
        onLoad({page, pageSize, searchText}){
            setTimeout(()=>{
                for(var i=0; i<pageSize; i++){
                    this.list.push((page-1)*pageSize + i)
                }
                this.$refs.customList.endLoad(page==5, this.list.length)
            }, 1000)
            return
            var that = this, 
                params = {
                    orgCode: this.$store.getters.orgCode,
                    doctorNameKey: searchText,
                    dept: this.routerParam.dept,
                    diseaseKey: this.routerParam.disease,
                    page: page,
                    pagesize: pageSize
                };
            
            zhuanjiazixunApi
                .findDoctorByHospitalAndDiseaseAndDept(params)
            var p = {
				// startTime: startDate? this.$moment(startDate).format('YYYY-MM-DD 00:00:00') : '',
				// endTime: endDate? this.$moment(endDate).format('YYYY-MM-DD 23:59:59') : '',
				// content: searchForm.content,
				// community: len? this.community[len-1] : '',
				// sellState: searchForm.sellStatus,
                // page: page,
                // size: pageSize
            }
            console.log('params', p)
            medicineAbinetApi
                .getOutOfStockDeviceList(p)
                .then(res=>{
                .then(res=>{
                    console.log('getOutOfStockDeviceList', res)
                    if(res.status == 200){
                    if(res.status == 200){
                        var list = res.detailModelList.map(item=>{
                            var data = item
                            data.photo = this.$root.setDocPhoto(data.photo)
                            return data
                        })
                        var list = res.detailModelList
                        this.list = page==1? list : this.list.concat(list)
                        this.list = page==1? list : this.list.concat(list)
                        this.$refs.customList.endLoad(!res.detailModelList || res.detailModelList.length==0, this.list.length)
                        this.$refs.customList.endLoad(true, this.list.length)
                    } else {
                    } else {
                        this.$refs.customList[this.active].endLoad(false, true)
                        this.list = []
                        this.$refs.customList.endLoad(false, true)
                    }
                    }
                }).catch(err=>{
                }).catch(err=>{
                    console.error(err)
                    console.error(err)
                    this.$refs.customList[this.active].endLoad(false, true)
                    this.list = []
                    this.$refs.customList.endLoad(false, true)
                })
                })
        },
        },
    },
    },