detail.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <template>
  2. <div class="deviceDetail pb10">
  3. <div class="c-border-tb c-f14 c-999 mt10 plr15 ptb10 bgc-fff">
  4. <div class=" kitbox">
  5. <div class="box-flex-1 fs-16 c-333 ellipsis_1">
  6. {{ info.equName }}
  7. </div>
  8. <div class="pt2 ml10">
  9. <van-tag type="success" v-if="info.networkStatus == 1">在线</van-tag>
  10. <van-tag type="danger" v-else>离线</van-tag>
  11. <van-tag type="success" v-if="info.saleStatus == 1" class="ml5">在售</van-tag>
  12. <van-tag type="danger" v-else class="ml5">停售</van-tag>
  13. </div>
  14. </div>
  15. <div class="mt10">
  16. <span>设备所属:</span>
  17. <span>{{ info.community }}</span>
  18. </div>
  19. <div>
  20. <span>设备编号:</span>
  21. <span>{{ info.equNum }}</span>
  22. </div>
  23. <div>
  24. <span>设备地址:</span>
  25. <span>{{ info.deliveryAddress }}</span>
  26. </div>
  27. </div>
  28. <div class="mt10 bgc-fff c-border-tb">
  29. <div class="panel-title">药品管理</div>
  30. <div class="grid-4 c-f14 c-333 ptb15">
  31. <!-- @click='gotoUrl("/device/temperature/index", {id: id})' -->
  32. <div class="c-t-center" @click="gotoUrl('/device/stock', { deviceId: id })">
  33. <div>
  34. <van-image class="ability" :src="require('@/assets/images/yaopingaikuang.png')" />
  35. </div>
  36. <div>药品概况</div>
  37. </div>
  38. <div v-if="hasAuth('stockUp') || createOutAuth" class="c-t-center" @click="toApplyDrug()">
  39. <div>
  40. <van-image class="ability" :src="require('@/assets/images/beihuo.png')" />
  41. </div>
  42. <div>药品申领</div>
  43. </div>
  44. <div v-if="hasAuth('replenish')" class="c-t-center" @click="gotoUrl('/replenishment/start/deviceDetail', { deviceId: id })">
  45. <div>
  46. <van-image class="ability" :src="require('@/assets/images/buhuo.png')" />
  47. </div>
  48. <div>药品入库</div>
  49. </div>
  50. </div>
  51. </div>
  52. <div v-if="cargoSettingAuth || temperatureCtrlAuth || cargoStateAuth || putDeviceAuth" class="mt10 bgc-fff c-border-tb">
  53. <div class="panel-title">设备设置</div>
  54. <div class="grid-4 c-f14 c-333 ptb15">
  55. <div v-if="cargoSettingAuth" class="c-t-center" @click="gotoUrl('/device/cargoLane/setting', { deviceId: id })">
  56. <div>
  57. <van-image class="ability" :src="require('@/assets/images/huodaoshezhi.png')" />
  58. </div>
  59. <div>货道设置</div>
  60. </div>
  61. <div v-if="temperatureCtrlAuth" class="c-t-center" @click="gotoUrl('/device/temperature/index', { id: $route.query.id })">
  62. <div>
  63. <van-image class="ability" :src="require('@/assets/images/wendukongzhi.png')" />
  64. </div>
  65. <div>温湿度控制</div>
  66. </div>
  67. <div v-if="cargoStateAuth" class="c-t-center" @click="gotoUrl('/device/cargoLane/index', { deviceId: id })">
  68. <div>
  69. <van-image class="ability" :src="require('@/assets/images/huodaozhuangtai.png')" />
  70. </div>
  71. <div>货道状态</div>
  72. </div>
  73. <div v-if="putDeviceAuth" class="c-t-center" @click="gotoUrl('/device/sell', { id: info.id, status: info.saleStatus })">
  74. <div>
  75. <van-image class="ability" :src="require('@/assets/images/zaishoutingshou.png')" />
  76. </div>
  77. <div>维护/上架</div>
  78. </div>
  79. <div class="c-t-center" @click="gotoUrl('/device/reboot', { equNum: info.equNum, equName: info.equName, id: id })">
  80. <div>
  81. <van-image class="ability" :src="require('@/assets/images/shebeichongqi.png')" />
  82. </div>
  83. <div>设备调试</div>
  84. </div>
  85. <!-- <div class='c-t-center' @click='gotoUrl("/device/temperature/index", {id: $route.query.id})'>
  86. <div>
  87. <van-image class='ability' :src='require("@/assets/images/shidukongzhi.png")'/>
  88. </div>
  89. <div>湿度控制</div>
  90. </div> -->
  91. <!-- <div class='c-t-center' @click='gotoUrl("/device/status", {id: info.id})'>
  92. <div>
  93. <van-image class='ability' :src='require("@/assets/images/shebeizhuangtai.png")'/>
  94. </div>
  95. <div>设备状态</div>
  96. </div> -->
  97. <!-- <div class='c-t-center' @click='gotoUrl("/device/reboot")'>
  98. <div>
  99. <van-image class='ability' :src='require("@/assets/images/shebeichongqi.png")'/>
  100. </div>
  101. <div>设备重启</div>
  102. </div> -->
  103. <!-- <div class='c-t-center' @click='gotoUrl("/device/infoLog/index")'>
  104. <div>
  105. <van-image class='ability' :src='require("@/assets/images/xinxirizhi.png")'/>
  106. </div>
  107. <div>信息日志</div>
  108. </div> -->
  109. </div>
  110. </div>
  111. <div class="mt10 bgc-fff c-border-tb">
  112. <div class="panel-title">操作日志</div>
  113. <div class="grid-4 c-f14 c-333 ptb15">
  114. <div class="c-t-center" @click="gotoUrl('/device/infoLog/index', { deviceId: id, equNum: info.equNum })">
  115. <div>
  116. <van-image class="ability" :src="require('@/assets/images/xinxirizhi.png')" />
  117. </div>
  118. <div>信息日志</div>
  119. </div>
  120. <div class="c-t-center" @click="gotoUrl('/replenishment/picking/list', { deviceId: id })">
  121. <div>
  122. <van-image class="ability" :src="require('@/assets/images/beihuojilu.png')" />
  123. </div>
  124. <div>申领记录</div>
  125. </div>
  126. <div class="c-t-center" @click="gotoUrl('/replenishment/record/list', { deviceId: id })">
  127. <div>
  128. <van-image class="ability" :src="require('@/assets/images/buhuojilu.png')" />
  129. </div>
  130. <div>入库记录</div>
  131. </div>
  132. <!-- <div class='c-t-center' @click='gotoUrl("/device/status", {id: info.id})'>
  133. <div>
  134. <van-image class='ability' :src='require("@/assets/images/shebeizhuangtai.png")'/>
  135. </div>
  136. <div>设备状态</div>
  137. </div> -->
  138. <!-- <div class='c-t-center' @click='gotoUrl("/device/reboot")'>
  139. <div>
  140. <van-image class='ability' :src='require("@/assets/images/shebeichongqi.png")'/>
  141. </div>
  142. <div>设备重启</div>
  143. </div> -->
  144. <!-- <div class='c-t-center' @click='gotoUrl("/device/infoLog/index")'>
  145. <div>
  146. <van-image class='ability' :src='require("@/assets/images/xinxirizhi.png")'/>
  147. </div>
  148. <div>信息日志</div>
  149. </div>
  150. <div class='c-t-center' @click='gotoUrl("/device/sell", {id: info.id, status: info.saleStatus})'>
  151. <div>
  152. <van-image class='ability' :src='require("@/assets/images/zaishoutingshou.png")'/>
  153. </div>
  154. <div>在售停售</div>
  155. </div> -->
  156. </div>
  157. </div>
  158. <div style="height: 100px;width: 100%;"></div>
  159. <div style="padding: 0 20px 20px;" v-if="info.equType == '04'">
  160. <van-button block class="c-border-r-5" type="info" @click="openLock()">远程开锁</van-button>
  161. </div>
  162. </div>
  163. </template>
  164. <script>
  165. import medicineAbinetApi from '@/api/api-medicineAbinet'
  166. export default {
  167. name: 'deviceDetail',
  168. data() {
  169. return {
  170. info: {},
  171. id: this.$route.query.id,
  172. menuAuth: []
  173. }
  174. },
  175. computed: {
  176. createOutAuth() {
  177. return this.$hasAuth('replenishmentMgnt', 'pickingList', 'createOut')
  178. },
  179. cargoSettingAuth() {
  180. return this.hasAuth('cargoSetting')
  181. },
  182. cargoStateAuth() {
  183. return this.hasAuth('cargoState')
  184. },
  185. temperatureCtrlAuth() {
  186. return this.hasAuth('temperatureCtrl')
  187. },
  188. putDeviceAuth() {
  189. return this.hasAuth('putDevice')
  190. },
  191. debugDeviceAuth() {
  192. return this.hasAuth('debugDevice')
  193. }
  194. },
  195. created() {
  196. this.findById()
  197. this.menuAuth = _.find(
  198. _.find(this.$store.state.app.authMenu, v => {
  199. return v.url == 'device'
  200. }).children,
  201. v => {
  202. return v.url == 'operate'
  203. }
  204. ).children
  205. },
  206. methods: {
  207. openLock() {
  208. this.$dialog
  209. .confirm({
  210. title: '确认远程开锁?',
  211. message: '您可以通过远程开锁,打开药柜门进行补药。'
  212. })
  213. .then(() => {
  214. var p = {
  215. equNum: this.info.equNum,
  216. type: 'remoteUnlocking',
  217. message: '远程开锁'
  218. }
  219. medicineAbinetApi
  220. .sendSocketMessage(p)
  221. .then(res => {
  222. this.$toast.success(res.message)
  223. })
  224. .catch(err => {
  225. this.$toast.fail(err.message)
  226. })
  227. })
  228. },
  229. $refreshData() {
  230. this.findById()
  231. },
  232. findById() {
  233. this.$loading('加载中..')
  234. let p = {
  235. deviceId: this.id
  236. }
  237. medicineAbinetApi
  238. .findDeviceById(p)
  239. .then(res => {
  240. this.$toast.clear()
  241. this.info = res.obj.device
  242. })
  243. .catch(err => {
  244. console.error(err)
  245. })
  246. },
  247. hasAuth(name) {
  248. return _.find(this.menuAuth, v => {
  249. return v.url == name
  250. })
  251. },
  252. toApplyDrug() {
  253. if (this.createOutAuth) {
  254. this.gotoUrl('/replenishment/picking/list', {
  255. deviceId: this.id,
  256. status: 2
  257. })
  258. } else {
  259. this.gotoUrl('/replenishment/stockUp/detail', {
  260. deviceId: this.id
  261. })
  262. }
  263. }
  264. }
  265. }
  266. </script>
  267. <style scoped lang="scss">
  268. .deviceDetail {
  269. .panel-title {
  270. position: relative;
  271. padding: 10px 15px;
  272. font-size: 15px;
  273. &::before {
  274. content: '';
  275. display: block;
  276. position: absolute;
  277. top: 50%;
  278. left: 0;
  279. transform: translateY(-50%);
  280. height: 15px;
  281. background: #17b3ec;
  282. width: 3px;
  283. border-radius: 3px;
  284. }
  285. }
  286. .grid-4 {
  287. display: grid;
  288. grid-template-columns: 1fr 1fr 1fr 1fr;
  289. grid-row-gap: 20px;
  290. }
  291. .ability {
  292. width: 50px;
  293. height: 50px;
  294. }
  295. }
  296. </style>