deviceOper.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <template>
  2. <!-- 设备常见操作弹窗 -->
  3. <van-dialog class-name="operDialog" width="auto" v-model:show="show" :showConfirmButton="false"
  4. :showCancelButton="false">
  5. <slot name="title">
  6. <div class="van-dialog__header">{{ $t("device.commonOperations") }}</div>
  7. <div class="txt1" style="padding: 0.2em 1em">
  8. {{ $t("device.equipmentName") }}: {{ device.name }}
  9. </div>
  10. <div class="txt1" style="padding: 0.2em 1em">
  11. {{ $t("device.equipmentNo") }}: {{ device.clientId }}
  12. </div>
  13. </slot>
  14. <van-icon name="cross" class="close" @click="show = false" />
  15. <div class="group4 flex-col"></div>
  16. <div class="operBox">
  17. <div class="operItem" @click="restartFurnace()">
  18. <div class="operIcon">
  19. <img class="operImg" src="../../assets/device/operIcon/restart.png" />
  20. </div>
  21. <div v-if="device.machineType === '1'" class="operText">{{ $t("device.restart") }}</div>
  22. <div v-else class="operText">{{ $t("device.restartFurnaceHead") }}</div>
  23. </div>
  24. <div class="operItem" @click="sleepEquipmentFun()">
  25. <div class="operIcon">
  26. <img class="operImg" src="../../assets/device/operIcon/sleep.png" />
  27. </div>
  28. <div class="operText">{{ sleepTitle }}</div>
  29. </div>
  30. <div class="operItem" @click="openOffFurnace(1)">
  31. <div class="operIcon">
  32. <img class="operImg" src="../../assets/device/operIcon/onOff.png" />
  33. </div>
  34. <div v-if="device.machineType === '1'" class="operText">{{ $t("device.openDevice") }}</div>
  35. <div v-else class="operText">{{ $t("device.openFurnHead") }}</div>
  36. </div>
  37. <div class="operItem" @click="openOffFurnace(0)">
  38. <div class="operIcon">
  39. <img class="operImg" src="../../assets/device/operIcon/onOff.png" />
  40. </div>
  41. <div v-if="device.machineType === '1'" class="operText">{{ $t("device.closeDevice") }}</div>
  42. <div v-else class="operText">{{ $t("device.closeFurnHead") }}</div>
  43. </div>
  44. <!-- <div class="operItem" @click="openDoorFun()">
  45. <div class="operIcon">
  46. <img
  47. class="operImg"
  48. src="../../assets/device/operIcon/openDoor.png"
  49. />
  50. </div>
  51. <div class="operText">{{ $t("device.remoteDoorOpening") }}</div>
  52. </div> -->
  53. <div class="operItem" @click="openDoorFun()">
  54. <div class="operIcon">
  55. <img class="operImg" src="../../assets/device/operIcon/openDoor.png" />
  56. </div>
  57. <div class="operText">{{ $t("device.remoteDoorOpening") }}</div>
  58. </div>
  59. <div class="operItem" @click="doSugar()">
  60. <div class="operIcon">
  61. <img class="operImg" src="../../assets/device/operIcon/doSugar.png" />
  62. </div>
  63. <div v-if="device.machineType === '1'" class="operText">{{ $t("device.remoteProduction") }}</div>
  64. <div v-else class="operText">{{ $t("device.remoteSugarMaking") }}</div>
  65. </div>
  66. <div class="operItem" @click="alarmClock()">
  67. <div class="operIcon">
  68. <img class="operImg" src="../../assets/device/operIcon/alarmClock.png" />
  69. </div>
  70. <div class="operText">{{ $t("device.timeSwitch") }}</div>
  71. </div>
  72. <div class="operItem" @click="modulation()">
  73. <div class="operIcon">
  74. <img class="operImg" src="../../assets/device/operIcon/modulation.png" />
  75. </div>
  76. <div class="operText">{{ $t("device.modulation") }}</div>
  77. </div>
  78. <div class="operItem" @click="recharge()">
  79. <div class="operIcon">
  80. <img class="operImg" src="../../assets/device/operIcon/recharge.png" />
  81. </div>
  82. <div class="operText">{{ $t("device.equipmentRecharge") }}</div>
  83. </div>
  84. <div class="operItem" @click="paramSetPush()">
  85. <div class="operIcon">
  86. <img class="operImg" src="../../assets/device/operIcon/paramsSet.png" />
  87. </div>
  88. <div class="operText">{{ $t("device.parameterSetting") }}</div>
  89. </div>
  90. <div class="operItem" @click="saveProportionPush()">
  91. <div class="operIcon">
  92. <img class="operImg" src="../../assets/device/operIcon/saveProportion.png" />
  93. </div>
  94. <div class="operText">{{ $t("device.addDistributor") }}</div>
  95. </div>
  96. <div v-if="isRole('M17')" class="operItem" @click="tuojiEquipmentFun()">
  97. <div class="operIcon">
  98. <img class="operImg" src="../../assets/device/operIcon/tuoji.png" />
  99. </div>
  100. <div class="operText">{{ $t("device.sysOffline") }}</div>
  101. </div>
  102. <div class="operItem" @click="modifyPriceClk()">
  103. <div class="operIcon">
  104. <img class="operImg" src="../../assets/device/operIcon/editPrice.png" />
  105. </div>
  106. <div class="operText">{{ $t("device.modifyPrice") }}</div>
  107. </div>
  108. <div class="operItem" @click="showGoodsClk()">
  109. <div class="operIcon">
  110. <img class="operImg" src="../../assets/device/operIcon/showGoods.png" />
  111. </div>
  112. <div class="operText">{{ $t("device.showGoods") }}</div>
  113. </div>
  114. <div v-if="device.machineType === '1'" class="operItem" @click="changePasswordClk()">
  115. <div class="operIcon">
  116. <img class="operImg" src="../../assets/device/operIcon/password.png" />
  117. </div>
  118. <div class="operText">{{ $t("device.changePassword") }}</div>
  119. </div>
  120. <!-- 删除设备 -->
  121. <div v-if="user.type < 2" class="operItem" @click="deleteDevice()">
  122. <div class="operIcon">
  123. <img class="operImg" src="../../assets/device/operIcon/deletedevice.png" />
  124. </div>
  125. <div class="operText">{{ $t("device.deleteDevice") }}</div>
  126. </div>
  127. <!-- 日志功能 -->
  128. <div v-if="user.type < 2" class="operItem" @click="viewLogs()">
  129. <div class="operIcon">
  130. <img class="operImg" src="../../assets/device/operIcon/viewLogs.png" />
  131. </div>
  132. <div class="operText">{{ $t("device.viewLogs") }}</div>
  133. </div>
  134. <!-- 定制logo -->
  135. <div v-if="user.type < 2" class="operItem" @click="customLogo()">
  136. <div class="operIcon">
  137. <img class="operImg" src="../../assets/device/operIcon/customLogo.png" />
  138. </div>
  139. <div class="operText">{{ $t("device.customLogo.customLogo") }}</div>
  140. </div>
  141. </div>
  142. </van-dialog>
  143. <van-dialog v-model:show="operCheckShow" :title="$t('device.operationConfirmation')" :showConfirmButton="false"
  144. :showCancelButton="false">
  145. <div class="operCheckBox">
  146. <div class="block5 flex-col"></div>
  147. <span class="word10">{{
  148. $t("device.pleaseConfirmAgainWhetherToOperate")
  149. }}</span>
  150. <div class="block6 flex-row justify-between">
  151. <div class="mod7 flex-col" @click="operCheckClear()">
  152. <span class="info5">{{ $t("device.IllThinkAboutItAgain") }}</span>
  153. </div>
  154. <div class="mod8 flex-col" @click="operCheck()">
  155. <span class="info6">{{ $t("device.confirm") }}</span>
  156. </div>
  157. </div>
  158. </div>
  159. </van-dialog>
  160. </template>
  161. <script>
  162. import { onMounted, ref } from "vue";
  163. import {
  164. setFurnace,
  165. sleepEquipment,
  166. openDoor,
  167. deviceTuoji,
  168. delOneDevice,
  169. } from "../../service/device";
  170. import { Toast } from "vant";
  171. import { useRouter } from "vue-router";
  172. import { useI18n } from "vue-i18n";
  173. import { getLoginUser, styleUrl } from "@/common/js/utils";
  174. export default {
  175. setup(props, { emit }) {
  176. // 点击修改价格
  177. const modifyPriceClk = () => {
  178. router.push({
  179. path: "modifyPrice",
  180. query: { deviceId: device.value.id, name: device.value.name },
  181. });
  182. };
  183. // 点击屏蔽/展示商品
  184. const showGoodsClk = () => {
  185. router.push({
  186. path: "showGoods",
  187. query: { deviceId: device.value.id, name: device.value.name },
  188. });
  189. };
  190. const { t } = useI18n();
  191. const user = getLoginUser();
  192. const router = useRouter();
  193. const show = ref(false);
  194. const operCheckShow = ref(false);
  195. const device = ref({});
  196. const operType = ref("");
  197. // 休眠按钮
  198. const sleepTitle = ref(t("device.enableSleep"));
  199. // 初始化页面获取列表
  200. onMounted(async () => {
  201. // 加载样式
  202. styleUrl('deviceOper');
  203. });
  204. // 当前弹窗父组件触发
  205. const showOper = (e) => {
  206. console.log()
  207. device.value = e;
  208. show.value = true;
  209. // isSleep=true,机器属于休眠状态,按钮是关闭休眠
  210. if (device.value.isSleep) {
  211. sleepTitle.value = t("device.turnOffHibe");
  212. } else {
  213. sleepTitle.value = t("device.enableSleep");
  214. }
  215. };
  216. // 重启炉头
  217. const restartFurnace = () => {
  218. operType.value = 1;
  219. operCheckShow.value = true;
  220. };
  221. // 睡眠
  222. const sleepEquipmentFun = () => {
  223. operType.value = 2;
  224. operCheckShow.value = true;
  225. };
  226. // 点击的是开启炉头还是关闭 1开启 0关闭
  227. const clkOpenOrClose = ref(1);
  228. // 开启关闭炉头
  229. const openOffFurnace = (idx) => {
  230. clkOpenOrClose.value = idx;
  231. operType.value = 3;
  232. operCheckShow.value = true;
  233. };
  234. // 远程开门
  235. /* const openDoorFun = () => {
  236. operType.value = 4;
  237. operCheckShow.value = true;
  238. }; */
  239. const openDoorFun = () => {
  240. if (device.value.machineType === '1' || device.value.equimentType === 'MG280') {
  241. operType.value = 4;
  242. operCheckShow.value = true;
  243. } else {
  244. router.push({ path: "openDoor", query: { deviceId: device.value.id } });
  245. }
  246. };
  247. // 日志功能
  248. const viewLogs = () => {
  249. router.push({ path: "viewLogs", query: { deviceId: device.value.id } });
  250. };
  251. // 定制logo
  252. const customLogo = () => {
  253. router.push({ path: "customLogo", query: { deviceId: device.value.id } });
  254. }
  255. // 音量调节
  256. const modulation = () => {
  257. router.push({ path: "modulation", query: { deviceId: device.value.id } });
  258. };
  259. // 远程做糖
  260. const doSugar = () => {
  261. router.push({ path: "doSugar", query: { deviceId: device.value.id, machineType: device.value.machineType } });
  262. };
  263. // 定时开关
  264. const alarmClock = () => {
  265. router.push({ path: "alarmClock", query: { deviceId: device.value.id } });
  266. };
  267. // 跳转 - 设备充值
  268. const recharge = () => {
  269. router.push({ path: "recharge", query: { deviceId: device.value.id } });
  270. };
  271. // 跳转 - 参数设置
  272. const paramSetPush = () => {
  273. router.push({ path: "paramsSet", query: { deviceId: device.value.id } });
  274. };
  275. // 跳转 - 添加分销人
  276. const saveProportionPush = () => {
  277. router.push({
  278. path: "distributionDetail",
  279. query: { deviceId: device.value.id, clientId: device.value.clientId },
  280. });
  281. };
  282. // 系统脱机
  283. const tuojiEquipmentFun = () => {
  284. operType.value = 5;
  285. operCheckShow.value = true;
  286. };
  287. // 修改机器密码
  288. const changePasswordClk = () => {
  289. router.push({
  290. path: "devicePassword",
  291. query: { deviceId: device.value.id, name: device.value.name },
  292. });
  293. };
  294. // 删除设备
  295. const deleteDevice = () => {
  296. operType.value = 6;
  297. operCheckShow.value = true;
  298. };
  299. // 取消操作
  300. const operCheckClear = () => {
  301. operCheckShow.value = false;
  302. };
  303. // 功能操作 - 确认操作
  304. const operCheck = async () => {
  305. // 重启
  306. if (operType.value === 1) {
  307. const { data } = await setFurnace({
  308. equipmentId: device.value.id,
  309. eqeStatus: 1,
  310. });
  311. if (data.code) {
  312. Toast.success(t("device.restartSucceeded"));
  313. operCheckShow.value = false;
  314. } else {
  315. Toast.fail(data.message);
  316. }
  317. }
  318. // 睡眠
  319. if (operType.value === 2) {
  320. let eqeStatus = 1;
  321. // isSleep=true,机器属于休眠状态,按钮是关闭休眠
  322. if (device.value.isSleep) {
  323. eqeStatus = 0;
  324. }
  325. const { data } = await sleepEquipment({
  326. equipmentId: device.value.id,
  327. eqeStatus,
  328. });
  329. if (data.code) {
  330. Toast.success(t("device.sleepSuccessfully"));
  331. operCheckShow.value = false;
  332. } else {
  333. Toast.fail(data.message);
  334. }
  335. }
  336. // 开机|关机
  337. if (operType.value === 3) {
  338. device.value.eqeStatus = clkOpenOrClose.value;
  339. const { data } = await setFurnace({
  340. equipmentId: device.value.id,
  341. eqeStatus: device.value.eqeStatus,
  342. });
  343. if (data.code) {
  344. Toast.success(
  345. `${device.value.eqeStatus === 0
  346. ? t("device.close")
  347. : t("device.open")
  348. }${t("device.success")}`
  349. );
  350. device.value.eqeStatus = device.value.eqeStatus === 0 ? 1 : 0;
  351. operCheckShow.value = false;
  352. } else {
  353. Toast.fail(data.message);
  354. }
  355. }
  356. // 远程开门
  357. if (operType.value === 4) {
  358. const { data } = await openDoor({ equipmentId: device.value.id });
  359. if (data.code) {
  360. Toast.success(t("device.remoteDoorOpeningSucceeded"));
  361. operCheckShow.value = false;
  362. } else {
  363. Toast.fail(data.message);
  364. }
  365. }
  366. // 系统脱机
  367. if (operType.value === 5) {
  368. const { data } = await deviceTuoji({ id: device.value.id });
  369. if (data.code) {
  370. Toast.success(t("device.sysOffSuccess"));
  371. operCheckShow.value = false;
  372. } else {
  373. Toast.fail(data.message);
  374. }
  375. }
  376. // 删除设备
  377. if (operType.value === 6) {
  378. const { data } = await delOneDevice({
  379. equipmentId: device.value.id,
  380. adminId: user.id,
  381. });
  382. if (data.code) {
  383. Toast.success(t("device.deleteDeviceSucceed"));
  384. operCheckShow.value = false;
  385. } else {
  386. Toast.fail(data.message);
  387. }
  388. }
  389. // 关闭弹窗
  390. show.value = false;
  391. // 触发操作完成回调
  392. emit("operfinish", true);
  393. };
  394. const isRole = (key) => {
  395. return user.menuCodeList.filter((type) => key === type).length > 0;
  396. };
  397. return {
  398. user,
  399. device,
  400. show,
  401. operCheckShow,
  402. showOper,
  403. restartFurnace,
  404. operCheckClear,
  405. operCheck,
  406. sleepEquipmentFun,
  407. openOffFurnace,
  408. openDoorFun,
  409. modulation,
  410. customLogo,
  411. doSugar,
  412. alarmClock,
  413. recharge,
  414. paramSetPush,
  415. saveProportionPush,
  416. tuojiEquipmentFun,
  417. isRole,
  418. modifyPriceClk,
  419. showGoodsClk,
  420. sleepTitle,
  421. viewLogs,
  422. deleteDevice,
  423. changePasswordClk,
  424. };
  425. },
  426. components: {},
  427. };
  428. </script>
  429. <style lang="less" scoped>
  430. @import "../../common/style/common";
  431. </style>