deviceSet.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <template>
  2. <!-- 设备信息修改 -->
  3. <div class="deviceSetPage flex-col">
  4. <s-header :name="$t('device.deviceInformation')" :noback="false"></s-header>
  5. <van-form @submit="updateDeviceFun">
  6. <div class="bd1 flex-col">
  7. <div class="bd3 flex-col">
  8. <div class="mod1 flex-col">
  9. <span class="word2">{{ $t("device.essentialInformation") }}</span>
  10. <img class="pic1" referrerpolicy="no-referrer" src="../../assets/line.png" />
  11. </div>
  12. <div class="mod2 flex-col"></div>
  13. </div>
  14. <van-field readonly v-model="deviceDetal.clientId" :label="`${$t('device.equipmentCode')}`" placeholder="" />
  15. <div class="cust_vantBorder">
  16. <van-field required clearable v-model="deviceDetal.name" name="name"
  17. :label="`${$t('device.equipmentNameLabel')}`" :placeholder="$t('device.equipmentNamePlaceholder')" :rules="[
  18. {
  19. required: true,
  20. message: $t('device.equipmentNamePlaceholder'),
  21. },
  22. ]" />
  23. <van-field clearable v-model="deviceDetal.selfName" :label="`${$t('device.equipmentRemarksLabel')}`"
  24. :placeholder="$t('device.equipmentRemarksPlaceholder')" />
  25. <div></div>
  26. </div>
  27. <van-field readonly v-model="deviceDetal.adminUserName" :label="`${$t('device.affiliatedMerchant')}`" />
  28. <van-field readonly v-model="deviceDetal.equimentType" :label="`${$t('device.machineType')}`" placeholder="" />
  29. <!-- mg280才有到期时间 -->
  30. <template v-if="deviceDetal?.equimentType?.indexOf('mg280') !== -1">
  31. <van-field readonly v-model="deviceDetal.lastUseDate" :label="`${$t('device.expirationTime')}`"
  32. placeholder="" />
  33. </template>
  34. <!-- 设备标签 -->
  35. <div class="bd9 l-f">
  36. <van-field readonly :label="`${$t('device.equipmentLabel')}`" placeholder="">
  37. <template #input>
  38. <div class="box2 l-flex-RC l-flex-w" v-if="tagsList.arr.length > 0">
  39. <div class="word8 o-mr-6 o-p-6 c-radius-2 o-mb-10" v-for="(item, index) in tagsList.arr" :key="index">
  40. {{ item.name }}
  41. </div>
  42. </div>
  43. </template>
  44. <template #extra>
  45. <div @click="toTagSet" class="ImageText1 flex-col">
  46. <div class="box3 flex-row justify-between">
  47. <div class="bd10 flex-col"></div>
  48. <div class="TextGroup1 flex-col">
  49. <span class="word9">{{ $t("device.edit") }}</span>
  50. </div>
  51. </div>
  52. </div>
  53. </template>
  54. </van-field>
  55. </div>
  56. <div class="custom-line"></div>
  57. <!-- 广告规则 -->
  58. <div v-if="isAdmind" class="bd9 l-f">
  59. <van-field readonly :label="`${$t('device.adRule')}`" placeholder="">
  60. <template #input>
  61. <div class="box2 l-flex-RC l-flex-w" v-if="adRuleList.length > 0">
  62. <div class="word8 o-mr-6 o-p-6 c-radius-2 o-mb-5" v-for="(item, index) in adRuleList" :key="index">
  63. {{ item.name }}
  64. </div>
  65. </div>
  66. </template>
  67. <template #extra>
  68. <div @click="toEditAdRule" class="ImageText1 flex-col">
  69. <div class="box3 flex-row justify-between">
  70. <div class="bd10 flex-col"></div>
  71. <div class="TextGroup1 flex-col">
  72. <span class="word9">{{ $t("device.edit") }}</span>
  73. </div>
  74. </div>
  75. </div>
  76. </template>
  77. </van-field>
  78. <div class="custom-line"></div>
  79. </div>
  80. <!-- 优惠券 -->
  81. <van-field readonly :label="`${$t('device.coupon')}`" placeholder=""
  82. v-if="user.type < 2 && user.ifForeign === '0'">
  83. <template #input>
  84. <div class="l-flex-RC">
  85. <span>{{ couponStatusNameComp }}</span>
  86. <van-switch class="o-ml-5" @change="couponStatusChg" v-model="deviceDetal.couponStatus" size="23px"
  87. active-value="1" inactive-value="0" />
  88. </div>
  89. </template>
  90. </van-field>
  91. <div class="cust_vantBorder">
  92. <van-field required clearable v-model="deviceDetal.contactName" name="contactName"
  93. :label="`${$t('device.nameOfOperatorLabel')}`" :placeholder="$t('device.nameOfOperatorPlaceholder')" :rules="[
  94. {
  95. required: true,
  96. message: $t('device.nameOfOperatorPlaceholder'),
  97. },
  98. ]" />
  99. <van-field required clearable v-model="deviceDetal.contactPhone" name="contactPhone"
  100. :label="`${$t('device.operatorTelephoneLabel')}`" :placeholder="$t('device.operatorTelephonePlaceholder')"
  101. :rules="[
  102. {
  103. required: true,
  104. message: $t('device.operatorTelephonePlaceholder'),
  105. },
  106. ]" />
  107. <!-- <van-field clearable v-model="deviceDetal.timeRuleId" :label="`${$t('device.advertisingRulesLabel')}:`"
  108. :placeholder="$t('device.advertisingRulesPlaceholder')" /> -->
  109. </div>
  110. <div class="custom-line"></div>
  111. <div class="cust_vantBorder">
  112. <van-field clearable label-width="32%" v-model="deviceDetal.messageReceiver1"
  113. :label="`${$t('device.messageReceiver1')}`"
  114. :placeholder="$t('device.equipmentmessageReceiverPlaceholder')" />
  115. <van-field clearable label-width="32%" v-model="deviceDetal.messageReceiver2"
  116. :label="`${$t('device.messageReceiver2')}`"
  117. :placeholder="$t('device.equipmentmessageReceiverPlaceholder')" />
  118. <van-field clearable label-width="32%" v-model="deviceDetal.messageReceiver3"
  119. :label="`${$t('device.messageReceiver3')}`"
  120. :placeholder="$t('device.equipmentmessageReceiverPlaceholder')" />
  121. </div>
  122. <div class="custom-line"></div>
  123. <!-- <div class="cust_vantBorder">
  124. </div>
  125. <div class="cust_vantBorder">
  126. </div> -->
  127. <!-- 支付方式 -->
  128. <!-- <van-field v-if="user.ifForeign == '0'" colon readonly label-width="18%" :label="`${$t('device.paymentMethod')}`"
  129. placeholder="">
  130. <template #input>
  131. <div class="van-cell__value van-field__value radioBox">
  132. <van-radio-group v-model="deviceDetal.payType" direction="horizontal">
  133. <van-radio name="0" icon-size="18px">{{
  134. $t("device.onlinePayment")
  135. }}</van-radio>
  136. <van-radio name="1" icon-size="18px">{{
  137. $t("device.offlinePayment")
  138. }}</van-radio>
  139. <van-radio name="2" icon-size="18px">{{
  140. $t("device.onlineAndOfflinePayment")
  141. }}</van-radio>
  142. </van-radio-group>
  143. </div>
  144. </template>
  145. </van-field> -->
  146. <!-- 新支付方式,暂时没用屏蔽掉,后续再添加 -->
  147. <!-- <van-field v-model="paymentValue" is-link readonly :label="`${$t('device.paymentMethod')}`" placeholder="选择支付方式"
  148. @click="showPayment = true" />
  149. <van-popup v-model:show="showPayment" round position="bottom">
  150. <van-picker :columns="paymentColumns" @cancel="showPayment = false" @confirm="onConfirm" />
  151. </van-popup> -->
  152. <!-- 通信通道 -->
  153. <template v-if="isAdmind">
  154. <van-field readonly :label="`${$t('device.communiChannel')}`" placeholder="">
  155. <template #input>
  156. <div class="van-cell__value van-field__value radioBox">
  157. <van-radio-group v-model="deviceDetal.channel" direction="horizontal">
  158. <van-radio name="1" icon-size="16px">{{
  159. $t("device.tweets")
  160. }}</van-radio>
  161. <van-radio name="2" icon-size="16px">{{
  162. $t("device.mq")
  163. }}</van-radio>
  164. </van-radio-group>
  165. </div>
  166. </template>
  167. </van-field>
  168. </template>
  169. <!-- 花型种类 -->
  170. <template v-if="isAdmind && (machineType === '0' || machineType === '1')">
  171. <!-- <van-field readonly :label="`${$t('device.flowerType')}`" placeholder="">
  172. <template #input>
  173. <div class="van-cell__value van-field__value radioBox">
  174. <van-radio-group v-model="deviceDetal.flowers" direction="horizontal">
  175. <van-radio name="18" icon-size="16px">18</van-radio>
  176. <van-radio name="22" icon-size="16px">22</van-radio>
  177. <van-radio name="26" icon-size="16px">26</van-radio>
  178. <van-radio name="30" icon-size="16px">30</van-radio>
  179. <van-radio name="42" icon-size="16px">42</van-radio>
  180. <van-radio name="60" icon-size="16px">60</van-radio>
  181. </van-radio-group>
  182. </div>
  183. </template>
  184. </van-field> -->
  185. <van-field v-model="deviceDetal.flowers" is-link readonly
  186. :label="machineType === '1' ? '口味种类' : $t('device.flowerType')"
  187. :placeholder="machineType === '1' ? '选择口味种类' : '选择花型种类'" @click="showFlowerPicker = true" />
  188. </template>
  189. <!-- 版本号 -->
  190. <van-field readonly v-model="deviceDetal.apkVersion" :label="`${$t('device.versionNo')}`" placeholder="" />
  191. <!-- url -->
  192. <div v-if="isAdmind">
  193. <van-field center clearable class="input1" v-model="deviceDetal.url" :label="$t('device.url')"
  194. :placeholder="$t('device.urlPlace')">
  195. <template #button>
  196. <van-button class="updateBtn" @click="updateUrlClk" type="primary">&nbsp;&nbsp;{{ $t("device.update")
  197. }}&nbsp;&nbsp;</van-button>
  198. </template>
  199. </van-field>
  200. </div>
  201. <div class="l-flex-center o-mtb-30">
  202. <van-button round type="primary" class="info7" native-type="submit">{{
  203. $t("device.submitAndPushDeviceUpdates") }}</van-button>
  204. </div>
  205. </div>
  206. </van-form>
  207. <!-- 地区弹窗 -->
  208. <kCascader @getareaname="getAreaName" :selectId="deviceDetal.areaId" @areapopfinish="areaPopFinish"
  209. ref="kCascaderRef">
  210. </kCascader>
  211. <!-- 更新弹窗 -->
  212. <kDialog :dialogTitle="$t('user.logOutTips')" :cancelBtnTxt="$t('user.cancelLog')"
  213. :confirmBtnTxt="$t('user.confirmLog')" ref="kDialogRef" :dialogContent="$t('device.sureUpdate')"
  214. @confirmclk="confirmClk">
  215. </kDialog>
  216. <!-- 花型种类 -->
  217. <van-popup v-model:show="showFlowerPicker" round position="bottom">
  218. <van-picker v-model="selectedFlower" :columns="flowerColumns" @cancel="showFlowerPicker = false"
  219. @confirm="onFlowerConfirm" />
  220. </van-popup>
  221. </div>
  222. </template>
  223. <script>
  224. // 导入接口
  225. import { Api_getAdRuleDetail } from "@/service/advertManage";
  226. // 引入弹窗
  227. import kDialog from "@/components/commom/kDialog/index.vue";
  228. // 导入公用方法
  229. import { setLocal, getLoginUser } from "@/common/js/utils";
  230. // 导入vuex
  231. import { useStore } from "vuex";
  232. // 导入接口
  233. import { Api_getGetEquipmentToLabel } from "@/service/labelMan";
  234. // 导入地区弹窗
  235. import kCascader from "@/components/commom/kCascader/index.vue";
  236. import { computed, onMounted, reactive, ref } from "vue";
  237. import sHeader from "@/components/SimpleHeader";
  238. import { useRoute, useRouter, onBeforeRouteLeave } from "vue-router";
  239. import {
  240. getDeviceDetal,
  241. updateDevice,
  242. Api_getTApkInfo_updateApk,
  243. Api_getDiscCodeStatus,
  244. getGoodsNumber,
  245. } from "@/service/device/index";
  246. import { showFailToast, showSuccessToast, showToast } from "vant";
  247. import { useI18n } from "vue-i18n";
  248. import dateUtil from "@/utils/dateUtil";
  249. import { styleUrl } from "../../common/js/utils";
  250. export default {
  251. name: "deviceSet",
  252. components: { sHeader, kCascader, kDialog },
  253. // // 路由守卫
  254. // beforeRouteEnter(to, from, next) {
  255. // console.log("to", to);
  256. // console.log("from", from);
  257. // // 不能获取组件实例
  258. // // 因为当守卫执行前,组件实例还没被创建
  259. // if (from.name === "editTag") {
  260. // let tagList = sessionStorage.getItem("tagList") || "[]";
  261. // this.tagsList.arr = JSON.parse(tagList);
  262. // sessionStorage.removeItem("tagList");
  263. // }
  264. // next();
  265. // },
  266. setup() {
  267. // 广告规则列表
  268. const adRuleList = ref([]);
  269. // 获取用户信息
  270. const user = getLoginUser();
  271. // 导入vuex
  272. const store = useStore();
  273. const { t } = useI18n();
  274. const route = useRoute();
  275. const router = useRouter();
  276. const isUpdate = ref(false);
  277. const deviceDetal = ref({
  278. name: "",
  279. selfName: "",
  280. contactName: "",
  281. contactPhone: "",
  282. operationalName: "",
  283. operationalPhone: "",
  284. timeRuleId: "",
  285. payType: "",
  286. channel: "",
  287. flowers: "18",
  288. messageReceiver1: "",
  289. messageReceiver2: "",
  290. messageReceiver3: "",
  291. });
  292. let tagsList = reactive({
  293. arr: [],
  294. });
  295. onBeforeRouteLeave((to, from, next) => {
  296. if (isUpdate.value) {
  297. // console.log("to.meta.keepAlive>>>", to.meta.keepAlive);
  298. // to.meta.keepAlive = false;
  299. }
  300. next();
  301. });
  302. // 过滤时间
  303. const filterDate = (date) => {
  304. if (date) {
  305. return dateUtil.formateDate(new Date(date), dateUtil.DATE_yyyy_MM_dd());
  306. }
  307. return "";
  308. };
  309. // 是否管理员
  310. const isAdmind = ref(false);
  311. // 设备类型
  312. const machineType = ref('0');
  313. const paymentColumns = [
  314. {
  315. text: t("device.onlinePayment"),
  316. value: 0
  317. },
  318. {
  319. text: t("device.offlinePayment"),
  320. value: 1
  321. },
  322. {
  323. text: t("device.onlineAndOfflinePayment"),
  324. value: 2
  325. }
  326. ];
  327. const paymentValue = ref('');
  328. const showPayment = ref(false);
  329. const onConfirm = ({ selectedOptions }) => {
  330. paymentValue.value = selectedOptions[0].text;
  331. deviceDetal.value.payType = selectedOptions[0].value;
  332. // console.log(deviceDetal.value.payType);
  333. showPayment.value = false;
  334. };
  335. // 初始化页面获取列表
  336. onMounted(async () => {
  337. // 加载样式
  338. styleUrl('deviceSet');
  339. // 从标签设置回来
  340. // let tagList = sessionStorage.getItem("tagList") || "[]";
  341. // tagsList.arr = JSON.parse(tagList);
  342. // sessionStorage.removeItem("tagList");
  343. getDeviceDetalFun();
  344. getLabelDetail();
  345. // 如果user.type<2那么则是公司人员
  346. if (user.type < 2) {
  347. isAdmind.value = true;
  348. }
  349. });
  350. // 获取标签
  351. const getLabelDetail = () => {
  352. Api_getGetEquipmentToLabel({ equipmentId: route.query.deviceId }).then(
  353. (res) => {
  354. // console.log("res", res);
  355. if (res.data.code === "00000") {
  356. tagsList.arr = res.data.data;
  357. // 储存数据到vuex
  358. store.commit("MUTA_LABELLIST", tagsList.arr);
  359. setLocal("deviceSet-tagsList", JSON.stringify(tagsList.arr));
  360. }
  361. }
  362. );
  363. };
  364. // 获取设备列表数据
  365. const getDeviceDetalFun = async () => {
  366. const { data } = await getDeviceDetal({ id: route.query.deviceId });
  367. if (data.code === "00000") {
  368. if (data.data.lastUseDate) {
  369. data.data.lastUseDate = filterDate(data.data.lastUseDate);
  370. }
  371. // channel如果为null,那么默认是个推
  372. if (!data.data.channel) {
  373. data.data.channel = "1";
  374. }
  375. // couponStatus如果是null,默认是关闭
  376. if (data.data.couponStatus != 1) {
  377. data.data.couponStatus = "0";
  378. }
  379. deviceDetal.value = data.data;
  380. // 查询地址回显
  381. kCascaderRef.value.init(deviceDetal.value.areaId);
  382. // 获取广告规则详情
  383. if (isAdmind.value) {
  384. if (data.data.timeRuleId) {
  385. getDetail(data.data.timeRuleId);
  386. }
  387. }
  388. if (data.data.machineType === '1') {
  389. machineType.value = '1';
  390. } else if (data.data.machineType === '2') {
  391. machineType.value = '1';
  392. }
  393. if (machineType.value == '0' || machineType.value == '1') {
  394. selectedFlower.value = [deviceDetal.value.flowers];
  395. getFlowerNumber(machineType.value);
  396. }
  397. } else {
  398. showFailToast(data.message);
  399. }
  400. };
  401. // 获取广告规则详情
  402. const getDetail = (id) => {
  403. Api_getAdRuleDetail({ id }).then((res) => {
  404. const resData = res.data.data;
  405. // console.log("resData", resData);
  406. adRuleList.value = [{ name: resData.name, id: resData.id }];
  407. });
  408. };
  409. // 修改设备详情
  410. const updateDeviceFun = async () => {
  411. let params = Object.assign({}, deviceDetal.value);
  412. params = [params].map((item) => {
  413. return {
  414. id: item.id,
  415. name: item.name,
  416. selfName: item.selfName,
  417. areaId: item.areaId,
  418. contactName: item.contactName,
  419. contactPhone: item.contactPhone,
  420. flowers: user.type <= 1 ? item.flowers : '',
  421. operationalName: item.operationalName,
  422. operationalPhone: item.operationalPhone,
  423. timeRuleId: item.timeRuleId,
  424. channel: item.channel,
  425. messageReceiver1: item.messageReceiver1,
  426. messageReceiver2: item.messageReceiver2,
  427. messageReceiver3: item.messageReceiver3,
  428. payType: item.payType
  429. };
  430. })[0];
  431. // console.log(params);
  432. if (params.name.length > 25) {
  433. showToast(t("device.nameLength"));
  434. return;
  435. }
  436. const { data } = await updateDevice(params);
  437. if (data.code === "00000") {
  438. isUpdate.value = true;
  439. showSuccessToast(t("device.modificationSucceeded"));
  440. setTimeout(() => {
  441. router.push({ path: "/device" });
  442. }, 1500);
  443. } else if (data.code === "A0001") {
  444. // 设备名称重复
  445. showToast(t("device.existsFailed"));
  446. } else {
  447. showFailToast(t("device.editFailed"))
  448. }
  449. };
  450. // 选中的花型种类
  451. const selectedFlower = ref([]);
  452. // 花型种类数据
  453. const flowerColumns = [];
  454. // 显示弹窗
  455. const showFlowerPicker = ref(false);
  456. // 获取花型种类下拉列表
  457. const getFlowerNumber = async (machineType) => {
  458. const { data } = await getGoodsNumber({ machineType: machineType });
  459. if (data.code === "00000") {
  460. data.data.forEach(item => {
  461. flowerColumns.push({ text: item, value: item + "" })
  462. });
  463. }
  464. }
  465. //确认选择
  466. const onFlowerConfirm = ({ selectedOptions }) => {
  467. showFlowerPicker.value = false;
  468. deviceDetal.value.flowers = selectedOptions[0].text;
  469. showToast("提示:\n修改花型后需要重新设置价格")
  470. }
  471. // 点击去到编辑标签页
  472. const toTagSet = () => {
  473. router.push({
  474. path: "/editTag",
  475. query: { deviceId: route.query.deviceId },
  476. });
  477. };
  478. // 地区的显示
  479. const areaShow = ref(false);
  480. // 地区弹窗
  481. const fieldValue = ref("");
  482. const kCascaderRef = ref(null);
  483. // 点击地区输入框
  484. const fieldValueInpClk = () => {
  485. kCascaderRef.value.openPop();
  486. };
  487. // 选择地区完成
  488. const areaPopFinish = async (e) => {
  489. // console.log("e", e);
  490. fieldValue.value = e.selectName;
  491. deviceDetal.value.areaId = e.selectId;
  492. };
  493. // 获取回显的值
  494. const getAreaName = (e) => {
  495. fieldValue.value = e;
  496. };
  497. // 退出登录弹窗
  498. const kDialogRef = ref(null);
  499. // 点击更新url
  500. const updateUrlClk = () => {
  501. if (!deviceDetal.value.url) {
  502. showToast(t("device.urlPlace"));
  503. return;
  504. }
  505. kDialogRef.value.openDialog();
  506. };
  507. // 点击更新弹窗的确定
  508. const confirmClk = () => {
  509. Api_getTApkInfo_updateApk({
  510. id: deviceDetal.value.id,
  511. url: deviceDetal.value.url,
  512. }).then((res) => {
  513. showToast(res.data.message);
  514. setTimeout(() => {
  515. getDeviceDetalFun();
  516. }, 1000);
  517. });
  518. };
  519. // 点击优惠券开关
  520. const couponStatusChg = (couponStatus) => {
  521. Api_getDiscCodeStatus({
  522. equipmentId: deviceDetal.value.id,
  523. couponStatus,
  524. }).then((res) => {
  525. showToast(res.data.message);
  526. setTimeout(() => {
  527. getDeviceDetalFun();
  528. }, 1500);
  529. });
  530. };
  531. const couponStatusNameComp = computed(() => {
  532. if (deviceDetal.value.couponStatus != 1) {
  533. return t("device.close");
  534. } else {
  535. return t("device.open");
  536. }
  537. });
  538. // 点击广告规则的编辑
  539. const toEditAdRule = () => {
  540. router.push({
  541. path: "/editAdRule",
  542. query: { deviceId: route.query.deviceId, adRuleList: JSON.stringify(adRuleList.value) },
  543. });
  544. };
  545. return {
  546. deviceDetal,
  547. updateDeviceFun,
  548. filterDate,
  549. toTagSet,
  550. tagsList,
  551. areaShow,
  552. fieldValue,
  553. kCascaderRef,
  554. fieldValueInpClk,
  555. areaPopFinish,
  556. getAreaName,
  557. isAdmind,
  558. updateUrlClk,
  559. confirmClk,
  560. kDialogRef,
  561. couponStatusChg,
  562. couponStatusNameComp,
  563. toEditAdRule,
  564. adRuleList,
  565. machineType,
  566. user,
  567. paymentValue,
  568. paymentColumns,
  569. onConfirm,
  570. showPayment,
  571. flowerColumns,
  572. showFlowerPicker,
  573. selectedFlower,
  574. onFlowerConfirm,
  575. };
  576. },
  577. };
  578. </script>
  579. <style lang="less" scoped>
  580. @import "../../common/style/common";
  581. @import "../../styles/deviceSet/index.less";
  582. .custom-line {
  583. height: 1px;
  584. background-color: #ebedf0;
  585. /* 设置线条颜色 */
  586. // margin-bottom: 10px; /* 根据需要调整线条与上方内容的间距 */
  587. margin: 0 15px;
  588. }
  589. </style>