DevicePopup.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <u-popup
  3. :show="layerVisible"
  4. @close="layerClose"
  5. :round="8"
  6. @open="layerOpen"
  7. >
  8. <view class="layer-popup">
  9. <view class="layer-popup__header">
  10. <view class="layer-popup__close">
  11. <u-icon
  12. name="close"
  13. size="36rpx"
  14. color="#4e6961"
  15. @click="layerClose"
  16. ></u-icon>
  17. </view>
  18. <view class="layer-popup__title">{{ dataSource.devName || '-' }}</view>
  19. </view>
  20. <view class="layer-popup__content">
  21. <DescriptionItem>
  22. <view slot="title">设备ID</view>
  23. <view slot="content">{{ dataSource.devCode || '-' }}</view>
  24. </DescriptionItem>
  25. <DescriptionItem>
  26. <view slot="title">在线状态</view>
  27. <view slot="content">{{
  28. dataSource.devStatus == '1' ? '在线' : '离线'
  29. }}</view>
  30. </DescriptionItem>
  31. <DescriptionItem>
  32. <view slot="title">上报时间</view>
  33. <view slot="content">{{ dataSource.devUpdateddate || '-' }}</view>
  34. </DescriptionItem>
  35. <DescriptionItem>
  36. <view slot="title">位置</view>
  37. <view slot="content">{{
  38. `${dataSource.devProvincealign || dataSource.devProvince || ''}${
  39. dataSource.devCityalign || dataSource.devCity || ''
  40. }${dataSource.devDistrictalign || dataSource.devDistrict || ''}`
  41. }}</view>
  42. </DescriptionItem>
  43. <view class="layer-popup__link" @click="nativeToWeb">详情</view>
  44. </view>
  45. </view>
  46. </u-popup>
  47. </template>
  48. <script>
  49. import DescriptionItem from '@/components/Descriptions/DescriptionItem.vue';
  50. import { DEVICE_TYPES } from '@/util/constants';
  51. export default {
  52. name: 'DevicePopup',
  53. components: {
  54. DescriptionItem
  55. },
  56. props: {
  57. visible: {
  58. type: Boolean,
  59. default: false
  60. },
  61. dataSource: {
  62. type: Object,
  63. default: () => ({})
  64. }
  65. },
  66. data() {
  67. return {
  68. layerVisible: false
  69. };
  70. },
  71. watch: {
  72. visible(newVal) {
  73. if (newVal !== this.layerVisible) {
  74. this.layerVisible = newVal;
  75. }
  76. }
  77. },
  78. methods: {
  79. nativeToWeb() {
  80. const item = this.dataSource;
  81. if (
  82. item.devtypeBid == DEVICE_TYPES.JKSB ||
  83. item.devtypeBid == DEVICE_TYPES.YRJKSB
  84. ) {
  85. uni.navigateTo({
  86. url: `/iotmPages/device/monitoring?id=${item.devBid}&code=${
  87. item.devCode
  88. }&name=${item.devName || '视频监控'}&sub=${item.devSubtype}&type=${
  89. item.devtypeBid
  90. }&devtypeBid=${item.devtypeBid}`,
  91. success(res) {
  92. // 通过eventChannel向被打开页面传送数据
  93. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  94. }
  95. });
  96. } else if (
  97. item.devtypeBid === DEVICE_TYPES.XMCMB ||
  98. item.devtypeBid === DEVICE_TYPES.SDDWB ||
  99. item.devtypeBid === DEVICE_TYPES.YMDBB ||
  100. item.devtypeBid === DEVICE_TYPES.XMTXB
  101. ) {
  102. let deviceType = DEVICE_TYPES.SDDWB;
  103. if (item.devtypeBid === DEVICE_TYPES.XMCMBYJJC) {
  104. deviceType = DEVICE_TYPES.XMCMB;
  105. } else if (item.devtypeBid === DEVICE_TYPES.YMDBBYJJC) {
  106. deviceType = DEVICE_TYPES.YMDBB;
  107. } else {
  108. deviceType = DEVICE_TYPES.SDDWB;
  109. }
  110. const extInfo = JSON.parse(item?.extInfo || '{}');
  111. const time = extInfo.collectTime ? extInfo.collectTime : '';
  112. uni.navigateTo({
  113. url: `/iotmPages/device/diseasesPest?id=${item.devBid}&code=${item.devCode}&name=${item.devName}&type=${item.devtypeBid}&deviceType=${deviceType}&time=${time}`,
  114. success(res) {
  115. // 通过eventChannel向被打开页面传送数据
  116. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  117. }
  118. });
  119. return;
  120. } else if (item.devtypeBid === DEVICE_TYPES.SFYTJ) {
  121. uni.navigateTo({
  122. url: `/pages/views/facilitystatenew/index?devBid=${
  123. item.devBid
  124. }&code=${item.devCode}&name=${item.devName}&type=${
  125. item.devtypeBid
  126. }&devStatus=${item.devStatus}&devStatusName=${
  127. item.devStatusName || (item.devStatus == '1' ? '在线' : '离线')
  128. }`,
  129. success(res) {
  130. // 通过eventChannel向被打开页面传送数据
  131. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  132. }
  133. });
  134. } else if (item.devtypeBid === DEVICE_TYPES.HPSFYTJ) {
  135. uni.navigateTo({
  136. url: `/pages/views/facilitystate/index?devBid=${item.devBid}&code=${
  137. item.devCode
  138. }&name=${item.devName}&type=${item.devtypeBid}&devStatus=${
  139. item.devStatus
  140. }&devStatusName=${
  141. item.devStatusName || (item.devStatus == '1' ? '在线' : '离线')
  142. }`,
  143. success(res) {
  144. // 通过eventChannel向被打开页面传送数据
  145. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  146. }
  147. });
  148. } else if (
  149. item.devtypeBid === DEVICE_TYPES.DZM ||
  150. item.devtypeBid === DEVICE_TYPES.DZM2 ||
  151. item.devtypeBid === DEVICE_TYPES.XZM
  152. ) {
  153. uni.navigateTo({
  154. url: `/sicsPages/gate/detail?devBid=${item.devBid}&code=${item.devCode}&name=${item.devName}&type=${item.devtypeBid}`,
  155. success(res) {
  156. // 通过eventChannel向被打开页面传送数据
  157. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  158. }
  159. });
  160. } else if (item.devtypeBid === DEVICE_TYPES.SWJ) {
  161. uni.navigateTo({
  162. url: `/iotmPages/device/detail?id=${item.devBid}&code=${item.devCode}&name=${item.devName}&type=${item.devtypeBid}`,
  163. success(res) {
  164. // 通过eventChannel向被打开页面传送数据
  165. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  166. }
  167. });
  168. } else if (
  169. item.devtypeBid === DEVICE_TYPES.CBD ||
  170. item.devtypeBid === DEVICE_TYPES.SDCBD ||
  171. item.devtypeBid == DEVICE_TYPES.CQXXCJ ||
  172. item.devtypeBid == DEVICE_TYPES.CQXXCJVI ||
  173. item.devtypeBid === DEVICE_TYPES.GKCBD ||
  174. item.devtypeBid === DEVICE_TYPES.XCT
  175. ) {
  176. uni.navigateTo({
  177. url: `/iotmPages/device/pestDetail?id=${item.devBid}&code=${item.devCode}&name=${item.devName}&type=${item.devtypeBid}`,
  178. success(res) {
  179. // 通过eventChannel向被打开页面传送数据
  180. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  181. }
  182. });
  183. return;
  184. } else if (item.devtypeBid === DEVICE_TYPES.JKSB) {
  185. uni.navigateTo({
  186. url: `/iotmPages/device/monitoring?id=${item.devBid}&code=${
  187. item.devCode
  188. }&name=${item.devName || '视频监控'}&type=${item.devtypeBid}&sub=${
  189. item.devSubtype
  190. }&devtypeBid=${item.devtypeBid}`,
  191. success(res) {
  192. // 通过eventChannel向被打开页面传送数据
  193. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  194. }
  195. });
  196. return;
  197. } else if (
  198. item.devtypeBid === DEVICE_TYPES.BZY ||
  199. item.devtypeBid === DEVICE_TYPES.DDBZY
  200. ) {
  201. uni.navigateTo({
  202. url: `/iotmPages/device/bzyDetail?id=${item.devBid}&code=${
  203. item.devCode
  204. }&name=${item.devName}&type=${item.devtypeBid}&devtypeBid=${
  205. item.devtypeBid
  206. }&time=${item.devUpdateddate ? item.devUpdateddate : ''}`,
  207. success(res) {
  208. // 通过eventChannel向被打开页面传送数据
  209. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  210. }
  211. });
  212. } else {
  213. uni.navigateTo({
  214. url: `/iotmPages/device/detail?id=${item.devBid}&code=${
  215. item.devCode
  216. }&name=${item.devName}&type=${item.devtypeBid}&devtypeBid=${
  217. item.devtypeBid
  218. }&time=${item.devUpdateddate ? item.devUpdateddate : ''}`,
  219. success(res) {
  220. // 通过eventChannel向被打开页面传送数据
  221. res.eventChannel.emit('acceptDataFromOpenerPage', item);
  222. }
  223. });
  224. }
  225. },
  226. layerClose() {
  227. this.$emit('update:visible', false);
  228. this.$emit('close');
  229. },
  230. layerOpen() {
  231. this.$emit('layerOpen');
  232. }
  233. }
  234. };
  235. </script>
  236. <style lang="scss" scoped>
  237. .layer-popup {
  238. background-color: #fff;
  239. &__header {
  240. position: relative;
  241. height: 96rpx;
  242. padding: 0 32rpx;
  243. color: #fff;
  244. border-bottom: 1rpx solid #e4e7ed;
  245. }
  246. &__title {
  247. text-align: left;
  248. font-size: 32rpx;
  249. line-height: 96rpx;
  250. color: #042118;
  251. max-width: 80%;
  252. }
  253. &__close {
  254. position: absolute;
  255. top: 0;
  256. right: 0;
  257. padding: 20rpx;
  258. color: #4e6961;
  259. }
  260. &__content {
  261. padding: 32rpx;
  262. background-color: #fff;
  263. }
  264. &__footer {
  265. display: flex;
  266. justify-content: center;
  267. padding: 16rpx 32rpx;
  268. background-color: #fff;
  269. box-shadow: 0 -2px 4px 0 #0000001a;
  270. }
  271. &__link {
  272. color: #14a478;
  273. font-size: 28rpx;
  274. text-align: center;
  275. line-height: 40rpx;
  276. margin-top: 16rpx;
  277. }
  278. }
  279. </style>