Browse Source

Merge commit 'b49fa493f5849997957acc30e7c91019b2aaabf1' into gzb

gzb
guozhongbo 9 months ago
parent
commit
6b55218ef1

+ 5
- 0
src/api/device_manager.js View File

@@ -15,6 +15,11 @@ export const device_manager_list_hd = (data) =>
15 15
  */
16 16
 export const device_manager_list_vd = (data) =>
17 17
   setRequest("device_manager/list_vd", data);
18
+/**
19
+ * 11.1.3.2违规设备--违规详情
20
+ */
21
+export const device_manager_detail_vd = (data) =>
22
+  setRequest("device_manager/detail_vd", data);
18 23
 /**
19 24
  * 11.1.4设备管理--设备管理列表
20 25
  */

+ 5
- 0
src/api/log.js View File

@@ -77,3 +77,8 @@ export const logDeviceBind_list_user = (data) =>
77 77
  */
78 78
 export const logDeviceBind_list_school = (data) =>
79 79
   setRequest("logDeviceBind/list_school", data);
80
+/**
81
+ * 7.10.3 违规设备--合规处理
82
+ */
83
+export const logdoperate_edit_handled = (data) =>
84
+  setRequest("logdoperate/edit_handled", data);

+ 4
- 0
src/api/school.js View File

@@ -109,3 +109,7 @@ export const user_delete = (data) => setRequest("user/delete", data);
109 109
  * 3.2.5用户--导入
110 110
  */
111 111
 export const user_import = (data) => setRequest("user/import", data);
112
+/**
113
+ * 3.2.6用户--获取班级sn
114
+ */
115
+export const user_list_cs = (data) => setRequest("user/list_cs", data);

+ 5
- 0
src/api/setting.js View File

@@ -71,6 +71,11 @@ export const deviceSet_edit = (data) => setRequest("deviceSet/edit", data);
71 71
  * 8.3.2.3 设备设置管理-重置
72 72
  */
73 73
 export const deviceSet_delete = (data) => setRequest("deviceSet/delete", data);
74
+/**
75
+ * 8.3.3 设备管理-获取
76
+ */
77
+export const password_detail_userpwd = (data) =>
78
+  setRequest("password/detail_userpwd", data);
74 79
 /**
75 80
  * 8.4.1 开机设置-详情
76 81
  */

+ 4
- 0
src/api/stPad.js View File

@@ -43,6 +43,10 @@ export const stPad_detail_obj = (data) => setRequest("stPad/detail_obj", data);
43 43
  * 6.1.10 平板策略-个人策略
44 44
  */
45 45
 export const stPad_list_user = (data) => setRequest("stPad/list_user", data);
46
+/**
47
+ * 平板策略-个人策略(网页端)
48
+ */
49
+export const stPad_detail_web = (data) => setRequest("stPad/detail_web", data);
46 50
 /**
47 51
  * 6.1.11 平板策略-平板用户
48 52
  */

+ 1
- 1
src/store/index.js View File

@@ -33,7 +33,7 @@ export default new Vuex.Store({
33 33
       } else if (state.userPower.atype === 3) {
34 34
         state.userPower.regionids = [info.regionid];
35 35
         state.userPower.schoolid = info.schoolid;
36
-        state.userPower.belong = [info.regionName, info.schoolname];
36
+        state.userPower.belong = [info.regionName, info.schoolName];
37 37
       }
38 38
       localStorage.setItem(
39 39
         "xh_control_userInfo",

+ 4
- 4
src/utils/ControlWSMsg.js View File

@@ -24,10 +24,10 @@ class ControlWSMsg {
24 24
     this.body = body;
25 25
   }
26 26
   // 发送消息
27
-  msgContent(body) {
27
+  msgContent(msg) {
28 28
     this.code = 2001;
29
-    // {userid, username, msg}
30
-    this.body = body;
29
+    // {msg}
30
+    this.body = { msg };
31 31
   }
32 32
   // 限制使用
33 33
   limitedUse() {
@@ -65,7 +65,7 @@ class ControlWSMsg {
65 65
     let ws = this.ws;
66 66
     if (ws && ws.readyState === 1) {
67 67
       let msg = this.toJSONString();
68
-      console.log("发送消息", msg);
68
+      // console.log("发送消息", msg);
69 69
       ws.send(msg);
70 70
       cb && cb(true);
71 71
     } else {

+ 1
- 1
src/utils/ControlWs.js View File

@@ -79,7 +79,7 @@ class ControlWs {
79 79
     this.ws.onmessage = (event) => {
80 80
       //如果获取到消息,心跳检测重置
81 81
       if (event.data && JSON.parse(event.data)) {
82
-        console.info("接收到消息", event.data);
82
+        // console.info("接收到消息", event.data);
83 83
         this.myevent.$emit("ws_getmsg", JSON.parse(event.data));
84 84
       } else {
85 85
         console.error(event.data);

+ 72
- 12
src/utils/index.js View File

@@ -588,18 +588,18 @@ export const dateRangeToSecond = ([beginDate, endDate]) => {
588 588
   };
589 589
 };
590 590
 export const doEventInfo = {
591
-  1: "更换SIM卡",
592
-  2: "违规开启蓝牙",
593
-  3: "USB连接电脑",
594
-  4: "USB拔出电脑",
595
-  5: "插入SD卡",
596
-  6: "拔出SD卡",
597
-  7: "账号登录",
598
-  8: "账号退出",
599
-  9: "安装应用",
600
-  10: "卸载应用",
601
-  11: "启动应用",
602
-  12: "首次使用"
591
+  101: "更换SIM卡",
592
+  102: "违规开启蓝牙",
593
+  103: "USB连接电脑",
594
+  104: "USB拔出电脑",
595
+  105: "插入SD卡",
596
+  106: "拔出SD卡",
597
+  201: "账号登录",
598
+  202: "首次使用",
599
+  203: "账号退出",
600
+  211: "安装应用(安装了非应用商店应用违规)",
601
+  212: "卸载应用(卸载强制安装应用违规)",
602
+  213: "启动应用"
603 603
 };
604 604
 export const pushTypeInfo = {
605 605
   1: "发送消息",
@@ -609,3 +609,63 @@ export const pushTypeInfo = {
609 609
   5: "重启设备",
610 610
   6: "恢复出厂"
611 611
 };
612
+export const padDeviceIcon = [
613
+  {
614
+    pdtype: "摄像头",
615
+    icon: "ivu-icon iconfont icon-ball-camera"
616
+  },
617
+  {
618
+    pdtype: "蓝牙",
619
+    icon: "ivu-icon iconfont icon-lanya"
620
+  },
621
+  {
622
+    pdtype: "USB连接",
623
+    icon: "ivu-icon iconfont icon-USB"
624
+  },
625
+  {
626
+    pdtype: "Wi-Fi开关",
627
+    icon: "ivu-icon iconfont icon-bx-wifi-2"
628
+  },
629
+  {
630
+    pdtype: "电话短信",
631
+    icon: "ivu-icon iconfont icon-dianhuaduanxin_line"
632
+  },
633
+  {
634
+    pdtype: "数据流量",
635
+    icon: "ivu-icon iconfont icon-liuliang"
636
+  },
637
+  {
638
+    pdtype: "GPS",
639
+    icon: "ivu-icon iconfont icon-GPSxinxi"
640
+  },
641
+  {
642
+    pdtype: "Wi-Fi高级选项",
643
+    icon: "ivu-icon iconfont icon-wifiguanbi"
644
+  },
645
+  {
646
+    pdtype: "SD卡",
647
+    icon: "ivu-icon iconfont icon-sdka-09"
648
+  },
649
+  {
650
+    pdtype: "OTG",
651
+    icon: "ivu-icon iconfont icon-icon-OTG"
652
+  }
653
+];
654
+export const padViolatesInfo = [
655
+  {
656
+    title: "已ROOT",
657
+    violateType: 1
658
+  },
659
+  {
660
+    title: "安装非商店应用",
661
+    violateType: 2
662
+  },
663
+  {
664
+    title: "更换SIM卡",
665
+    violateType: 3
666
+  },
667
+  {
668
+    title: "USB连接电脑",
669
+    violateType: 4
670
+  }
671
+];

+ 5
- 1
src/views/layout.vue View File

@@ -2,7 +2,11 @@
2 2
   <div class="layout_wrap">
3 3
     <div class="layout_header">
4 4
       <div class="header_left">
5
-        <img src="@/assets/img/setting/LOGO.png" />
5
+        <img
6
+          v-if="userInfo.logoPath"
7
+          :src="$api.showImageUrl + userInfo.logoPath"
8
+        />
9
+        <img v-else src="@/assets/img/setting/LOGO.png" />
6 10
       </div>
7 11
       <div class="header_right">
8 12
         <div style="margin-right: 10px" v-if="powerParams.rtype === 2">

+ 1
- 4
src/views/schoolSection/applicationStrategy/appStrategyManage.vue View File

@@ -35,9 +35,7 @@
35 35
     <div class="main_right">
36 36
       <div class="right_header">
37 37
         <div class="header_left">
38
-          <span v-if="appStrategyInfo.stappid"
39
-            >已引用“{{ appStrategyInfo.name }}”的应用策略</span
40
-          >
38
+          <span v-if="appStrategyInfo.stappid">{{ appStrategyInfo.name }}</span>
41 39
         </div>
42 40
         <div class="header_right">
43 41
           <div
@@ -436,7 +434,6 @@ export default {
436 434
       font-size: 16px;
437 435
       .header_left {
438 436
         font-weight: bold;
439
-        color: #f0153f;
440 437
       }
441 438
       .header_right {
442 439
         display: flex;

+ 458
- 25
src/views/schoolSection/deviceManage/breakRuleDevice.vue View File

@@ -28,11 +28,11 @@
28 28
           <DropdownMenu slot="list">
29 29
             <DropdownItem name="1">恢复出厂</DropdownItem>
30 30
             <DropdownItem name="2">发送消息</DropdownItem>
31
-            <DropdownItem name="3">解除限制</DropdownItem>
32
-            <DropdownItem name="4">限制使用</DropdownItem>
33
-            <DropdownItem name="5">更新策略</DropdownItem>
34
-            <DropdownItem name="6">重启设备</DropdownItem>
35
-            <DropdownItem name="7">合规处理</DropdownItem>
31
+            <DropdownItem name="4">解除限制</DropdownItem>
32
+            <DropdownItem name="5">限制使用</DropdownItem>
33
+            <DropdownItem name="6">更新策略</DropdownItem>
34
+            <DropdownItem name="7">重启设备</DropdownItem>
35
+            <DropdownItem name="8">合规处理</DropdownItem>
36 36
           </DropdownMenu>
37 37
         </Dropdown>
38 38
       </div>
@@ -45,9 +45,11 @@
45 45
       >
46 46
         <template slot-scope="{ row }" slot="actionSlot">
47 47
           <div class="action_list">
48
-            <div @click="toDetail(row)">违规详情</div>
49
-            <div @click="toRestore(row)">恢复出厂</div>
50
-            <div @click="toHandle(row)">合规处理</div>
48
+            <div v-if="row.sn && row.num > 0" @click="toDetail(row)">
49
+              违规详情
50
+            </div>
51
+            <div v-if="row.sn" @click="toRestore(row)">恢复出厂</div>
52
+            <div v-if="row.sn" @click="toLogHandle([row.sn])">合规处理</div>
51 53
           </div>
52 54
         </template>
53 55
       </Table>
@@ -65,14 +67,85 @@
65 67
         show-sizer
66 68
       ></Page>
67 69
     </div>
70
+    <Modal
71
+      class="modal1"
72
+      :mask-closable="false"
73
+      v-model="controlMessageInfo.show"
74
+      title="发送消息"
75
+    >
76
+      <Form
77
+        v-if="controlMessageInfo.show"
78
+        ref="sendMsgForm"
79
+        :model="controlMessageInfo"
80
+        :rules="rules"
81
+        :label-width="60"
82
+      >
83
+        <FormItem label="标题" prop="title">
84
+          <Input
85
+            v-model="controlMessageInfo.title"
86
+            :maxlength="32"
87
+            show-word-limit
88
+            placeholder="请输入标题,不超过32个字符"
89
+          ></Input>
90
+        </FormItem>
91
+        <FormItem label="内容" prop="content">
92
+          <Input
93
+            type="textarea"
94
+            v-model="controlMessageInfo.content"
95
+            :maxlength="255"
96
+            show-word-limit
97
+            placeholder="请输入内容"
98
+          ></Input>
99
+        </FormItem>
100
+      </Form>
101
+      <div slot="footer">
102
+        <Button @click="controlMessageInfo.show = false">取消</Button>
103
+        <Button @click="controlSendMessage()" type="primary" class="primary_btn"
104
+          >保存</Button
105
+        >
106
+      </div>
107
+    </Modal>
108
+    <Modal
109
+      class="modal1"
110
+      :mask-closable="false"
111
+      v-model="logDetailInfo.show"
112
+      title="违规详情"
113
+    >
114
+      <div class="table_wrap">
115
+        <Table :columns="detailColumns" :data="logDetailInfo.list">
116
+          <template slot-scope="{ row }" slot="doEventSlot">
117
+            <div>{{ doEventInfo[row.doEvent] }}</div>
118
+          </template>
119
+        </Table>
120
+      </div>
121
+      <div slot="footer" style="text-align: center">
122
+        <Button @click="logDetailInfo.show = false">关闭</Button>
123
+      </div>
124
+    </Modal>
68 125
   </div>
69 126
 </template>
70 127
 
71 128
 <script>
72
-import { device_manager_list_vd } from "@/api/device_manager";
129
+import { doEventInfo } from "@/utils";
130
+import controlWs from "@/utils/ControlWs";
131
+import ControlWSMsg from "@/utils/ControlWSMsg";
132
+import { logPush_add, logdoperate_edit_handled } from "@/api/log";
133
+import {
134
+  device_manager_list_vd,
135
+  device_manager_detail_vd
136
+} from "@/api/device_manager";
73 137
 export default {
74 138
   data() {
75 139
     return {
140
+      doEventInfo,
141
+      userInfo: {},
142
+      // ws连接后回发信息
143
+      wsEnterInfo: {
144
+        // 消息ID
145
+        mid: null,
146
+        // 是否进入
147
+        isEnter: false
148
+      },
76 149
       searchForm: {
77 150
         name: "",
78 151
         // 是否处理:0否 1是
@@ -82,7 +155,33 @@ export default {
82 155
         list: [],
83 156
         total: 0
84 157
       },
158
+      logDetailInfo: {
159
+        show: false,
160
+        list: []
161
+      },
85 162
       tableSelection: [],
163
+      controlMessageInfo: {
164
+        show: false,
165
+        title: "",
166
+        content: "",
167
+        list: []
168
+      },
169
+      rules: {
170
+        title: [
171
+          {
172
+            required: true,
173
+            message: "请输入标题",
174
+            trigger: "blur"
175
+          }
176
+        ],
177
+        content: [
178
+          {
179
+            required: true,
180
+            message: "请选择内容",
181
+            trigger: "blur"
182
+          }
183
+        ]
184
+      },
86 185
       columns: [
87 186
         {
88 187
           type: "selection",
@@ -123,7 +222,7 @@ export default {
123 222
           align: "center"
124 223
         },
125 224
         {
126
-          title: "ID(IMEI/MEID/ESN)",
225
+          title: "SN",
127 226
           key: "sn",
128 227
           align: "center"
129 228
         },
@@ -134,14 +233,13 @@ export default {
134 233
         },
135 234
         {
136 235
           title: "更新时间",
137
-          key: "lasttime",
236
+          key: "updatetime",
138 237
           width: 190,
139 238
           align: "center"
140 239
         },
141 240
         {
142
-          title: "操作中",
241
+          title: "违规详情",
143 242
           key: "num",
144
-          width: 100,
145 243
           align: "center"
146 244
         },
147 245
         {
@@ -150,18 +248,90 @@ export default {
150 248
           width: 260,
151 249
           align: "center"
152 250
         }
251
+      ],
252
+      detailColumns: [
253
+        {
254
+          title: "序号",
255
+          type: "index",
256
+          align: "center",
257
+          width: 70
258
+        },
259
+        {
260
+          title: "设备使用人",
261
+          key: "username",
262
+          align: "center"
263
+        },
264
+        {
265
+          title: "违规事件",
266
+          slot: "doEventSlot",
267
+          align: "center"
268
+        },
269
+        {
270
+          title: "违规时间",
271
+          key: "createtime",
272
+          width: 190,
273
+          align: "center"
274
+        }
153 275
       ]
154 276
     };
155 277
   },
156 278
   created() {
279
+    this.userInfo = JSON.parse(
280
+      localStorage.getItem("xh_control_userInfo")
281
+    ).content;
157 282
     this.searchList();
283
+    this.initMonitorWS();
158 284
   },
159 285
   computed: {
160 286
     powerParams() {
161 287
       return this.$store.getters.powerParams;
162 288
     }
163 289
   },
290
+  beforeDestroy() {
291
+    controlWs.myevent.$off("ws_error");
292
+    controlWs.myevent.$off("ws_open");
293
+    controlWs.myevent.$off("ws_getmsg");
294
+    controlWs.closeWs();
295
+  },
164 296
   methods: {
297
+    initMonitorWS() {
298
+      controlWs.setWs();
299
+      this.getWSEventInfo();
300
+    },
301
+    getWSEventInfo() {
302
+      controlWs.myevent.$on("ws_error", () => {
303
+        this.$Message.error("网络异常,请检查网络");
304
+      });
305
+      controlWs.myevent.$on("ws_open", () => {
306
+        this.sendAfterConnection();
307
+      });
308
+      controlWs.myevent.$on("ws_getmsg", (data) => {
309
+        if (data.code === 666) {
310
+          if (this.wsEnterInfo.mid === data.mid) {
311
+            this.wsEnterInfo.isEnter = true;
312
+          }
313
+        }
314
+        if (!this.wsEnterInfo.isEnter) {
315
+          return;
316
+        }
317
+      });
318
+    },
319
+    // 连接后回发(需确认)
320
+    sendAfterConnection() {
321
+      this.wsEnterInfo.isEnter = false;
322
+      let controlWSMsg = new ControlWSMsg(controlWs.ws, this.userInfo.adminid);
323
+      controlWSMsg.afterConnection({
324
+        userid: String(this.userInfo.adminid),
325
+        username: this.userInfo.aname,
326
+        schoolid: this.powerParams.objectid,
327
+        usertype: 1
328
+      });
329
+      controlWSMsg.send((isSend) => {
330
+        if (isSend) {
331
+          this.wsEnterInfo.mid = controlWSMsg.mid;
332
+        }
333
+      });
334
+    },
165 335
     // 搜索
166 336
     searchList() {
167 337
       this.searchForm.page = 1;
@@ -198,35 +368,298 @@ export default {
198 368
       });
199 369
     },
200 370
     // 违规详情
201
-    toDetail() {},
371
+    toDetail(row) {
372
+      device_manager_detail_vd({
373
+        rtype: this.powerParams.rtype,
374
+        objectid: this.powerParams.objectid,
375
+        size: 20,
376
+        name: row.sn
377
+      }).then((data) => {
378
+        if (data.code === 0) {
379
+          this.logDetailInfo = {
380
+            show: true,
381
+            list: data.obj
382
+          };
383
+        } else {
384
+          this.$Message.error(data.msg);
385
+        }
386
+      });
387
+    },
202 388
     // 恢复出厂
203
-    toRestore() {},
389
+    toRestore(row) {
390
+      if (!row.sn) {
391
+        this.$Message.error("设备不存在");
392
+        return;
393
+      }
394
+      this.$Modal.confirm({
395
+        title: "提示",
396
+        content: "确定对所选设备进行恢复出厂设置操作吗?",
397
+        onOk: () => {
398
+          this.controlRestoreFactory([row.sn]);
399
+        },
400
+        onCancel: () => {}
401
+      });
402
+    },
204 403
     // 合规处理
205
-    toHandle() {},
404
+    toLogHandle(snList) {
405
+      this.$Modal.confirm({
406
+        title: "提示",
407
+        content: "确定对所选设备进行合规处理操作吗?",
408
+        onOk: () => {
409
+          logdoperate_edit_handled({
410
+            sn: snList
411
+          }).then((data) => {
412
+            if (data.code === 0) {
413
+              this.$Message.success(data.msg);
414
+              this.searchList();
415
+            } else {
416
+              this.$Message.error(data.msg);
417
+            }
418
+          });
419
+        },
420
+        onCancel: () => {}
421
+      });
422
+    },
206 423
     selectionChange(selection) {
207 424
       this.tableSelection = selection;
208 425
     },
209 426
     // 其他操作
210 427
     dropdownSelected(name) {
211
-      if (this.tableSelection.length === 0) {
212
-        this.$Message.error("请选择列表");
428
+      if (!this.wsEnterInfo.isEnter) {
429
+        this.$Message.error("推送服务不可用");
213 430
         return;
214 431
       }
432
+      let snList = this.tableSelection
433
+        .filter((row) => row.sn)
434
+        .map((item) => item.sn);
215 435
       if (name === "1") {
216
-        // 恢复出厂设置
436
+        // 恢复出厂
437
+        if (snList.length === 0) {
438
+          this.$Message.error("请勾选至少一个设备。");
439
+          return;
440
+        }
441
+        this.$Modal.confirm({
442
+          title: "提示",
443
+          content: "确定对所选设备进行恢复出厂设置操作吗?",
444
+          onOk: () => {
445
+            this.controlRestoreFactory(snList);
446
+          },
447
+          onCancel: () => {}
448
+        });
217 449
       } else if (name === "2") {
218 450
         // 发送消息
219
-      } else if (name === "3") {
220
-        // 解除限制
451
+        if (snList.length === 0) {
452
+          this.$Message.error("请勾选至少一个设备。");
453
+          return;
454
+        }
455
+        this.controlMessageInfo = {
456
+          show: true,
457
+          title: "",
458
+          content: "",
459
+          list: snList
460
+        };
221 461
       } else if (name === "4") {
222
-        // 限制使用
462
+        // 解除限制
463
+        if (snList.length === 0) {
464
+          this.$Message.error("请勾选至少一个设备。");
465
+          return;
466
+        }
467
+        this.$Modal.confirm({
468
+          title: "提示",
469
+          content: "确定对所选设备进行解除限制操作吗?",
470
+          onOk: () => {
471
+            this.controlRemoveLimit(snList);
472
+          },
473
+          onCancel: () => {}
474
+        });
223 475
       } else if (name === "5") {
224
-        // 更新策略
476
+        // 限制使用
477
+        if (snList.length === 0) {
478
+          this.$Message.error("请勾选至少一个设备。");
479
+          return;
480
+        }
481
+        this.$Modal.confirm({
482
+          title: "提示",
483
+          content: "确定对所选设备进行限制使用操作吗?",
484
+          onOk: () => {
485
+            this.controlLimitedUse(snList);
486
+          },
487
+          onCancel: () => {}
488
+        });
225 489
       } else if (name === "6") {
226
-        // 重启设备
490
+        // 更新策略
491
+        if (snList.length === 0) {
492
+          this.$Message.error("请勾选至少一个设备。");
493
+          return;
494
+        }
495
+        this.$Modal.confirm({
496
+          title: "提示",
497
+          content: "确定对所选设备进行更新策略操作吗?",
498
+          onOk: () => {
499
+            this.controlUpdateStrategy(snList);
500
+          },
501
+          onCancel: () => {}
502
+        });
227 503
       } else if (name === "7") {
228
-        // 合理处理
504
+        // 重启设备
505
+        if (snList.length === 0) {
506
+          this.$Message.error("请勾选至少一个设备。");
507
+          return;
508
+        }
509
+        this.$Modal.confirm({
510
+          title: "提示",
511
+          content: "确定对所选设备进行重启设备操作吗?",
512
+          onOk: () => {
513
+            this.controlRebootDevice(snList);
514
+          },
515
+          onCancel: () => {}
516
+        });
517
+      } else if (name === "8") {
518
+        // 合规处理
519
+        if (snList.length === 0) {
520
+          this.$Message.error("请勾选至少一个设备。");
521
+          return;
522
+        }
523
+        this.toLogHandle(snList);
524
+      }
525
+    },
526
+    // 恢复出厂设置
527
+    controlRestoreFactory(snList) {
528
+      let controlWSMsg = new ControlWSMsg(
529
+        controlWs.ws,
530
+        this.userInfo.adminid,
531
+        snList
532
+      );
533
+      controlWSMsg.restoreFactory();
534
+      controlWSMsg.send();
535
+      let form = {
536
+        pushType: 6,
537
+        pushObj: 1
538
+      };
539
+      if (snList.length > 1) {
540
+        form.userids = snList;
541
+      } else {
542
+        form.pushObjid = snList[0];
543
+      }
544
+      this.addPushLog(form);
545
+    },
546
+    // 发送消息
547
+    controlSendMessage() {
548
+      this.$refs.sendMsgForm.validate((valid) => {
549
+        if (valid) {
550
+          this.controlMessageInfo.show = false;
551
+          let snList = this.controlMessageInfo.list;
552
+          let controlWSMsg = new ControlWSMsg(
553
+            controlWs.ws,
554
+            this.userInfo.adminid,
555
+            snList
556
+          );
557
+          controlWSMsg.msgContent(this.controlMessageInfo.content);
558
+          controlWSMsg.send();
559
+          let form = {
560
+            pushType: 1,
561
+            pushObj: 1,
562
+            content: this.controlMessageInfo.content
563
+          };
564
+          if (snList.length > 1) {
565
+            form.userids = snList;
566
+          } else {
567
+            form.pushObjid = snList[0];
568
+          }
569
+          this.addPushLog(form);
570
+        }
571
+      });
572
+    },
573
+    // 解除限制
574
+    controlRemoveLimit(snList) {
575
+      let controlWSMsg = new ControlWSMsg(
576
+        controlWs.ws,
577
+        this.userInfo.adminid,
578
+        snList
579
+      );
580
+      controlWSMsg.removeLimit();
581
+      controlWSMsg.send();
582
+      let form = {
583
+        pushType: 2,
584
+        pushObj: 1
585
+      };
586
+      if (snList.length > 1) {
587
+        form.userids = snList;
588
+      } else {
589
+        form.pushObjid = snList[0];
590
+      }
591
+      this.addPushLog(form);
592
+    },
593
+    // 限制使用
594
+    controlLimitedUse(snList) {
595
+      let controlWSMsg = new ControlWSMsg(
596
+        controlWs.ws,
597
+        this.userInfo.adminid,
598
+        snList
599
+      );
600
+      controlWSMsg.limitedUse();
601
+      controlWSMsg.send();
602
+      let form = {
603
+        pushType: 3,
604
+        pushObj: 1
605
+      };
606
+      if (snList.length > 1) {
607
+        form.userids = snList;
608
+      } else {
609
+        form.pushObjid = snList[0];
610
+      }
611
+      this.addPushLog(form);
612
+    },
613
+    // 更新策略
614
+    controlUpdateStrategy(snList) {
615
+      let controlWSMsg = new ControlWSMsg(
616
+        controlWs.ws,
617
+        this.userInfo.adminid,
618
+        snList
619
+      );
620
+      controlWSMsg.updateStrategy();
621
+      controlWSMsg.send();
622
+      let form = {
623
+        pushType: 4,
624
+        pushObj: 1
625
+      };
626
+      if (snList.length > 1) {
627
+        form.userids = snList;
628
+      } else {
629
+        form.pushObjid = snList[0];
229 630
       }
631
+      this.addPushLog(form);
632
+    },
633
+    // 重启设备
634
+    controlRebootDevice(snList) {
635
+      let controlWSMsg = new ControlWSMsg(
636
+        controlWs.ws,
637
+        this.userInfo.adminid,
638
+        snList
639
+      );
640
+      controlWSMsg.rebootDevice();
641
+      controlWSMsg.send();
642
+      let form = {
643
+        pushType: 4,
644
+        pushObj: 1
645
+      };
646
+      if (snList.length > 1) {
647
+        form.userids = snList;
648
+      } else {
649
+        form.pushObjid = snList[0];
650
+      }
651
+      this.addPushLog(form);
652
+    },
653
+    // 添加推送日志
654
+    addPushLog(form) {
655
+      logPush_add(form).then((data) => {
656
+        if (data.code === 0) {
657
+          this.$refs.deviceTable.selectAll(false);
658
+          this.$Message.success(data.msg);
659
+        } else {
660
+          this.$Message.error(data.msg);
661
+        }
662
+      });
230 663
     }
231 664
   }
232 665
 };

+ 763
- 27
src/views/schoolSection/deviceManage/deviceManage.vue View File

@@ -78,6 +78,7 @@
78 78
       </div>
79 79
       <div class="table_wrap">
80 80
         <Table
81
+          ref="deviceTable"
81 82
           :columns="columns"
82 83
           :data="searchForm.list"
83 84
           @on-selection-change="selectionChange"
@@ -91,7 +92,7 @@
91 92
             <div class="action_list">
92 93
               <div @click="toView(row)">查看</div>
93 94
               <div @click="toStrategy(row)">策略</div>
94
-              <div @click="toPsw(row)">设备密码</div>
95
+              <div v-if="row.sn" @click="toPsw(row)">设备密码</div>
95 96
             </div>
96 97
           </template>
97 98
         </Table>
@@ -110,6 +111,244 @@
110 111
         ></Page>
111 112
       </div>
112 113
     </div>
114
+    <Modal
115
+      class="modal1"
116
+      :mask-closable="false"
117
+      v-model="controlMessageInfo.show"
118
+      :title="controlMessageInfo.classid ? '整班发送消息' : '发送消息'"
119
+    >
120
+      <Form
121
+        v-if="controlMessageInfo.show"
122
+        ref="sendMsgForm"
123
+        :model="controlMessageInfo"
124
+        :rules="rules"
125
+        :label-width="60"
126
+      >
127
+        <FormItem label="标题" prop="title">
128
+          <Input
129
+            v-model="controlMessageInfo.title"
130
+            :maxlength="32"
131
+            show-word-limit
132
+            placeholder="请输入标题,不超过32个字符"
133
+          ></Input>
134
+        </FormItem>
135
+        <FormItem label="内容" prop="content">
136
+          <Input
137
+            type="textarea"
138
+            v-model="controlMessageInfo.content"
139
+            :maxlength="255"
140
+            show-word-limit
141
+            placeholder="请输入内容"
142
+          ></Input>
143
+        </FormItem>
144
+      </Form>
145
+      <div slot="footer">
146
+        <Button @click="controlMessageInfo.show = false">取消</Button>
147
+        <Button @click="controlSendMessage()" type="primary" class="primary_btn"
148
+          >保存</Button
149
+        >
150
+      </div>
151
+    </Modal>
152
+    <Modal
153
+      class="modal4"
154
+      :mask-closable="false"
155
+      v-model="devicePswInfo.show"
156
+      title="设备密码"
157
+    >
158
+      <div class="device_psw">
159
+        <div class="device_psw_title">设备密码</div>
160
+        <div class="device_psw_num">{{ devicePswInfo.controlPwd }}</div>
161
+        <div class="device_psw_title">注销密码</div>
162
+        <div class="device_psw_num">{{ devicePswInfo.logoutPwd }}</div>
163
+      </div>
164
+      <div slot="footer" style="text-align: center">
165
+        <Button @click="devicePswInfo.show = false">关闭</Button>
166
+      </div>
167
+    </Modal>
168
+    <Modal
169
+      class="modal5"
170
+      :mask-closable="false"
171
+      v-model="strategyInfo.show"
172
+      :title="`策略【${strategyInfo.username}】`"
173
+    >
174
+      <div class="content" v-if="strategyInfo.show">
175
+        <div class="strategy_list">
176
+          <div class="strategy_title">
177
+            <div>
178
+              <span
179
+                style="font-size: 26px"
180
+                class="ivu-icon iconfont icon-shijian"
181
+              ></span
182
+              >时间限制策略
183
+            </div>
184
+          </div>
185
+          <div style="margin-bottom: 10px" v-if="strategyInfo.hastime">
186
+            <div class="showtime">
187
+              <div
188
+                style="line-height: 30px; font-size: 16px; margin-bottom: 10px"
189
+              >
190
+                设备生效时间
191
+              </div>
192
+              <div class="week">
193
+                <div class="day" v-for="item in weekDay" :key="item.value">
194
+                  <div class="day_title">{{ item.alias }}</div>
195
+                  <div class="day_content">
196
+                    <div
197
+                      class="time"
198
+                      v-for="(sItem, sIndex) in strategyPadTimes(item.value)"
199
+                      :key="sIndex"
200
+                    >
201
+                      {{ sItem.starttime }} - {{ sItem.stoptime }}
202
+                    </div>
203
+                  </div>
204
+                </div>
205
+              </div>
206
+            </div>
207
+          </div>
208
+          <div class="nodata" v-else>未设置时间限制策略</div>
209
+        </div>
210
+        <div class="strategy_list">
211
+          <div class="strategy_title">
212
+            <div>
213
+              <span class="ivu-icon iconfont icon-yingyongcelve"></span>应用策略
214
+            </div>
215
+          </div>
216
+          <div class="strategy_content" v-if="strategyInfo.hasapp">
217
+            <div class="strategy_top">
218
+              <span>授权应用</span>
219
+            </div>
220
+            <div
221
+              class="strategy_bottom"
222
+              style="min-height: 160px"
223
+              v-if="strategyInfo.padApps.length > 0"
224
+            >
225
+              <div
226
+                class="app_list"
227
+                v-for="item in strategyInfo.padApps"
228
+                :key="item.appid"
229
+              >
230
+                <img :src="$api.baseImageUrl + item.appIcon" />
231
+                <div>{{ item.appName }}</div>
232
+              </div>
233
+            </div>
234
+          </div>
235
+          <div class="nodata" v-else>未设置应用策略</div>
236
+        </div>
237
+        <div class="strategy_list">
238
+          <div class="strategy_title">
239
+            <div>
240
+              <span class="ivu-icon iconfont icon-shezhi"></span>设备策略
241
+            </div>
242
+          </div>
243
+          <div class="strategy_content" v-if="strategyInfo.hasdevice">
244
+            <div class="strategy_top">
245
+              <span>设备功能管理</span>
246
+            </div>
247
+            <div class="strategy_bottom" style="min-height: 160px">
248
+              <div
249
+                class="device_list"
250
+                v-for="item in padDeviceIcon"
251
+                :key="item.pdtype"
252
+              >
253
+                <div class="icon">
254
+                  <span :class="[item.icon]"></span>
255
+                </div>
256
+                <div class="title">{{ item.pdtype }}</div>
257
+                <i-switch
258
+                  size="large"
259
+                  :value="strategyInfo.pdtypeInfo[item.pdtype]"
260
+                  :disabled="true"
261
+                  :true-value="1"
262
+                  :false-value="2"
263
+                >
264
+                  <span slot="open">开启</span>
265
+                  <span slot="close">关闭</span>
266
+                </i-switch>
267
+              </div>
268
+            </div>
269
+          </div>
270
+          <div class="nodata" v-else>未设置设备策略</div>
271
+        </div>
272
+        <div class="strategy_list">
273
+          <div class="strategy_title">
274
+            <div>
275
+              <span
276
+                style="font-size: 18px"
277
+                class="ivu-icon iconfont icon-wifi"
278
+              ></span
279
+              >Wifi白名单策略
280
+            </div>
281
+          </div>
282
+          <div class="strategy_content" v-if="strategyInfo.haswifi">
283
+            <div class="strategy_top">
284
+              <span>SSID</span>
285
+            </div>
286
+            <div class="strategy_bottom" style="min-height: 76px">
287
+              <div
288
+                class="padWifis"
289
+                v-for="(item, index) in strategyInfo.padWifis"
290
+                :key="index"
291
+              >
292
+                <div class="title">{{ item }}</div>
293
+              </div>
294
+            </div>
295
+          </div>
296
+          <div class="nodata" v-else>未设置Wifi白名单</div>
297
+        </div>
298
+        <div class="strategy_list">
299
+          <div class="strategy_title">
300
+            <div>
301
+              <span class="ivu-icon iconfont icon-weiguiguanli"></span>违规处理
302
+            </div>
303
+          </div>
304
+          <div style="border: 1px solid #ced9f2; border-bottom: none">
305
+            <Table
306
+              v-if="strategyInfo.hasviolate"
307
+              class="table"
308
+              :columns="violationColumns"
309
+              :data="padViolatesInfo"
310
+            >
311
+              <template slot-scope="{ row }" slot="violationEvents">
312
+                <Checkbox
313
+                  :disabled="true"
314
+                  class="checked"
315
+                  :value="
316
+                    strategyInfo.violatesInfo[row.violateType] &&
317
+                    strategyInfo.violatesInfo[row.violateType].length > 0
318
+                  "
319
+                ></Checkbox>
320
+                <span
321
+                  style="display: inline-block; width: 120px; text-align: left"
322
+                  >{{ row.title }}</span
323
+                >
324
+              </template>
325
+              <template slot-scope="{ row }" slot="violationHandling">
326
+                <CheckboxGroup
327
+                  :value="
328
+                    strategyInfo.violatesInfo[row.violateType] &&
329
+                    strategyInfo.violatesInfo[row.violateType]
330
+                  "
331
+                >
332
+                  <Checkbox :disabled="true" label="通知管理员"></Checkbox>
333
+                  <Checkbox
334
+                    :disabled="true"
335
+                    style="margin: 0 40px"
336
+                    label="限制使用"
337
+                  ></Checkbox>
338
+                  <Checkbox :disabled="true" label="恢复出厂设置"></Checkbox>
339
+                </CheckboxGroup>
340
+              </template>
341
+            </Table>
342
+          </div>
343
+          <div class="nodata" v-if="!strategyInfo.hasviolate">
344
+            未设置违规处理
345
+          </div>
346
+        </div>
347
+      </div>
348
+      <div slot="footer" style="text-align: center">
349
+        <Button @click="strategyInfo.show = false">关闭</Button>
350
+      </div>
351
+    </Modal>
113 352
   </div>
114 353
 </template>
115 354
 
@@ -117,15 +356,22 @@
117 356
 import controlWs from "@/utils/ControlWs";
118 357
 import ControlWSMsg from "@/utils/ControlWSMsg";
119 358
 import { exportToExcel } from "@/utils/exportToExcel";
120
-import { class_list } from "@/api/school";
359
+import { class_list, user_list_cs } from "@/api/school";
121 360
 import {
122 361
   device_manager_list_d,
123 362
   device_manager_export_d,
124 363
   device_manager_export_id
125 364
 } from "@/api/device_manager";
365
+import { password_detail_userpwd } from "@/api/setting";
366
+import { stPad_detail_web } from "@/api/stPad";
367
+import { logPush_add } from "@/api/log";
368
+import { weekDay, padDeviceIcon, padViolatesInfo } from "@/utils";
126 369
 export default {
127 370
   data() {
128 371
     return {
372
+      weekDay,
373
+      padDeviceIcon,
374
+      padViolatesInfo,
129 375
       userInfo: {},
130 376
       // ws连接后回发信息
131 377
       wsEnterInfo: {
@@ -143,7 +389,35 @@ export default {
143 389
         list: [],
144 390
         total: 0
145 391
       },
392
+      devicePswInfo: {
393
+        show: false,
394
+        controlPwd: null,
395
+        logoutPwd: null
396
+      },
146 397
       tableSelection: [],
398
+      controlMessageInfo: {
399
+        show: false,
400
+        title: "",
401
+        content: "",
402
+        classid: null,
403
+        list: []
404
+      },
405
+      rules: {
406
+        title: [
407
+          {
408
+            required: true,
409
+            message: "请输入标题",
410
+            trigger: "blur"
411
+          }
412
+        ],
413
+        content: [
414
+          {
415
+            required: true,
416
+            message: "请选择内容",
417
+            trigger: "blur"
418
+          }
419
+        ]
420
+      },
147 421
       schoolInfo: {
148 422
         schoolid: null,
149 423
         schoolname: null,
@@ -189,7 +463,7 @@ export default {
189 463
           align: "center"
190 464
         },
191 465
         {
192
-          title: "ID(IMEI/MEID/ESN)",
466
+          title: "SN",
193 467
           key: "sn",
194 468
           align: "center"
195 469
         },
@@ -210,6 +484,37 @@ export default {
210 484
           width: 200,
211 485
           align: "center"
212 486
         }
487
+      ],
488
+      strategyInfo: {
489
+        username: null,
490
+        userid: null,
491
+        rversion: null,
492
+        padid: null,
493
+        show: false,
494
+        hastime: false, // 是否开启时间策略:0否 1是
495
+        padTimes: [], // 平板策略时间
496
+        hasapp: false, //是否开启应用策略:0否 1是
497
+        padApps: [], //appid集合
498
+        hasdevice: false, //是否开启设备策略:0否 1是
499
+        padDevices: [], //授权应用
500
+        pdtypeInfo: {},
501
+        haswifi: false, //是否开启wifi白名单策略:0否 1是
502
+        padWifis: [], //wifi白名单
503
+        hasviolate: false, //是否开启违规通知:0否 1是
504
+        padViolates: [] //设备违规
505
+      },
506
+      violationColumns: [
507
+        {
508
+          title: "违规事件",
509
+          slot: "violationEvents",
510
+          align: "center",
511
+          width: 260
512
+        },
513
+        {
514
+          title: "违规处理",
515
+          slot: "violationHandling",
516
+          align: "center"
517
+        }
213 518
       ]
214 519
     };
215 520
   },
@@ -356,7 +661,7 @@ export default {
356 661
                         ? "离线"
357 662
                         : "",
358 663
                     设备型号: item.deviceModel,
359
-                    "ID(IMEI/MEID/ESN)": item.sn,
664
+                    SN: item.sn,
360 665
                     Rom版本: item.romVersion,
361 666
                     更新时间: item.updatetime
362 667
                   };
@@ -408,9 +713,58 @@ export default {
408 713
     // 查看
409 714
     toView() {},
410 715
     // 策略
411
-    toStrategy() {},
716
+    toStrategy(row) {
717
+      stPad_detail_web({ objectid: row.userid }).then((res) => {
718
+        if (res.code === 0) {
719
+          this.strategyInfo.username = row.username;
720
+          this.strategyInfo.userid = row.userid;
721
+          this.strategyInfo.padid = res.obj.padid;
722
+          this.strategyInfo.rversion = res.obj.rversion;
723
+          this.strategyInfo.hastime = res.obj.hastime ? true : false;
724
+          this.strategyInfo.hasapp = res.obj.hasapp ? true : false;
725
+          this.strategyInfo.hasdevice = res.obj.hasdevice ? true : false;
726
+          this.strategyInfo.haswifi = res.obj.haswifi ? true : false;
727
+          this.strategyInfo.hasviolate = res.obj.hasviolate ? true : false;
728
+          this.strategyInfo.padApps = res.obj.padApps || [];
729
+          this.strategyInfo.padWifis = res.obj.padWifis || [];
730
+          this.strategyInfo.padTimes = res.obj.padTimes || [];
731
+          let pdtypeInfo = {};
732
+          this.strategyInfo.padDevices = res.obj.padDevices;
733
+          this.strategyInfo.padDevices.forEach((item) => {
734
+            pdtypeInfo[item.pdtype] = item.enabled;
735
+          });
736
+          this.strategyInfo.pdtypeInfo = pdtypeInfo;
737
+          let violatesInfo = {};
738
+          this.strategyInfo.padViolates = res.obj.padViolates;
739
+          this.strategyInfo.padViolates.forEach((item) => {
740
+            violatesInfo[item.violateType] =
741
+              item.handle_method && item.handle_method.split(";");
742
+          });
743
+          this.strategyInfo.violatesInfo = violatesInfo;
744
+          this.strategyInfo.show = true;
745
+        } else {
746
+          this.$Message.error(res.msg);
747
+        }
748
+      });
749
+    },
412 750
     // 设备密码
413
-    toPsw() {},
751
+    toPsw(row) {
752
+      password_detail_userpwd({
753
+        rtype: this.powerParams.rtype,
754
+        objectid: this.powerParams.objectid,
755
+        sn: row.sn
756
+      }).then((data) => {
757
+        if (data.code === 0) {
758
+          this.devicePswInfo = {
759
+            show: true,
760
+            controlPwd: data.obj.controlPwd,
761
+            logoutPwd: data.obj.logoutPwd
762
+          };
763
+        } else {
764
+          this.$Message.error(data.msg);
765
+        }
766
+      });
767
+    },
414 768
     selectionChange(selection) {
415 769
       this.tableSelection = selection;
416 770
     },
@@ -420,53 +774,259 @@ export default {
420 774
         this.$Message.error("推送服务不可用");
421 775
         return;
422 776
       }
423
-      let snList = this.tableSelection.map((row) => row.sn).filter(Boolean);
777
+      let snList = this.tableSelection
778
+        .filter((row) => row.sn)
779
+        .map((item) => item.sn);
424 780
       if (name === "1") {
425
-        // 恢复出厂设置
426
-        if (this.tableSelection.length === 0) {
427
-          this.$Message.error("请选择列表");
781
+        // 恢复出厂
782
+        if (snList.length === 0) {
783
+          this.$Message.error("请勾选至少一个设备。");
428 784
           return;
429 785
         }
430
-        let controlWSMsg = new ControlWSMsg(
431
-          controlWs.ws,
432
-          this.userInfo.adminid,
433
-          snList
434
-        );
435
-        controlWSMsg.restoreFactory();
436
-        controlWSMsg.send();
786
+        this.$Modal.confirm({
787
+          title: "提示",
788
+          content: "确定对所选设备进行恢复出厂设置操作吗?",
789
+          onOk: () => {
790
+            this.controlRestoreFactory(snList);
791
+          },
792
+          onCancel: () => {}
793
+        });
437 794
       } else if (name === "2") {
438 795
         // 发送消息
439
-        if (this.tableSelection.length === 0) {
440
-          this.$Message.error("请选择列表");
796
+        if (snList.length === 0) {
797
+          this.$Message.error("请勾选至少一个设备。");
441 798
           return;
442 799
         }
800
+        this.controlMessageInfo = {
801
+          show: true,
802
+          title: "",
803
+          content: "",
804
+          classid: null,
805
+          list: snList
806
+        };
443 807
       } else if (name === "3") {
444 808
         // 整班发送消息
809
+        user_list_cs({
810
+          classid: this.searchForm.classid
811
+        }).then((data) => {
812
+          if (data.code === 0) {
813
+            if (data.obj.length === 0) {
814
+              this.$Message.error("当前班级没有设备");
815
+              return;
816
+            }
817
+            this.controlMessageInfo = {
818
+              show: true,
819
+              title: "",
820
+              content: "",
821
+              classid: this.searchForm.classid,
822
+              list: data.obj
823
+            };
824
+          } else {
825
+            this.$Message.error(data.msg);
826
+          }
827
+        });
445 828
       } else if (name === "4") {
446 829
         // 解除限制
447
-        if (this.tableSelection.length === 0) {
448
-          this.$Message.error("请选择列表");
830
+        if (snList.length === 0) {
831
+          this.$Message.error("请勾选至少一个设备。");
449 832
           return;
450 833
         }
834
+        this.$Modal.confirm({
835
+          title: "提示",
836
+          content: "确定对所选设备进行解除限制操作吗?",
837
+          onOk: () => {
838
+            this.controlRemoveLimit(snList);
839
+          },
840
+          onCancel: () => {}
841
+        });
451 842
       } else if (name === "5") {
452 843
         // 限制使用
453
-        if (this.tableSelection.length === 0) {
454
-          this.$Message.error("请选择列表");
844
+        if (snList.length === 0) {
845
+          this.$Message.error("请勾选至少一个设备。");
455 846
           return;
456 847
         }
848
+        this.$Modal.confirm({
849
+          title: "提示",
850
+          content: "确定对所选设备进行限制使用操作吗?",
851
+          onOk: () => {
852
+            this.controlLimitedUse(snList);
853
+          },
854
+          onCancel: () => {}
855
+        });
457 856
       } else if (name === "6") {
458 857
         // 更新策略
459
-        if (this.tableSelection.length === 0) {
460
-          this.$Message.error("请选择列表");
858
+        if (snList.length === 0) {
859
+          this.$Message.error("请勾选至少一个设备。");
461 860
           return;
462 861
         }
862
+        this.$Modal.confirm({
863
+          title: "提示",
864
+          content: "确定对所选设备进行更新策略操作吗?",
865
+          onOk: () => {
866
+            this.controlUpdateStrategy(snList);
867
+          },
868
+          onCancel: () => {}
869
+        });
463 870
       } else if (name === "7") {
464 871
         // 重启设备
465
-        if (this.tableSelection.length === 0) {
466
-          this.$Message.error("请选择列表");
872
+        if (snList.length === 0) {
873
+          this.$Message.error("请勾选至少一个设备。");
467 874
           return;
468 875
         }
876
+        this.$Modal.confirm({
877
+          title: "提示",
878
+          content: "确定对所选设备进行重启设备操作吗?",
879
+          onOk: () => {
880
+            this.controlRebootDevice(snList);
881
+          },
882
+          onCancel: () => {}
883
+        });
884
+      }
885
+    },
886
+    // 恢复出厂设置
887
+    controlRestoreFactory(snList) {
888
+      let controlWSMsg = new ControlWSMsg(
889
+        controlWs.ws,
890
+        this.userInfo.adminid,
891
+        snList
892
+      );
893
+      controlWSMsg.restoreFactory();
894
+      controlWSMsg.send();
895
+      let form = {
896
+        pushType: 6,
897
+        pushObj: 1
898
+      };
899
+      if (snList.length > 1) {
900
+        form.userids = snList;
901
+      } else {
902
+        form.pushObjid = snList[0];
903
+      }
904
+      this.addPushLog(form);
905
+    },
906
+    // 发送消息
907
+    controlSendMessage() {
908
+      this.$refs.sendMsgForm.validate((valid) => {
909
+        if (valid) {
910
+          this.controlMessageInfo.show = false;
911
+          let snList = this.controlMessageInfo.list;
912
+          let controlWSMsg = new ControlWSMsg(
913
+            controlWs.ws,
914
+            this.userInfo.adminid,
915
+            snList
916
+          );
917
+          controlWSMsg.msgContent(this.controlMessageInfo.content);
918
+          controlWSMsg.send();
919
+          let form = {
920
+            pushType: 1,
921
+            pushObj: this.controlMessageInfo.classid ? 2 : 1,
922
+            content: this.controlMessageInfo.content
923
+          };
924
+          if (this.controlMessageInfo.classid) {
925
+            form.pushObjid = this.controlMessageInfo.classid;
926
+          } else {
927
+            if (snList.length > 1) {
928
+              form.userids = snList;
929
+            } else {
930
+              form.pushObjid = snList[0];
931
+            }
932
+          }
933
+          this.addPushLog(form);
934
+        }
935
+      });
936
+    },
937
+    // 解除限制
938
+    controlRemoveLimit(snList) {
939
+      let controlWSMsg = new ControlWSMsg(
940
+        controlWs.ws,
941
+        this.userInfo.adminid,
942
+        snList
943
+      );
944
+      controlWSMsg.removeLimit();
945
+      controlWSMsg.send();
946
+      let form = {
947
+        pushType: 2,
948
+        pushObj: 1
949
+      };
950
+      if (snList.length > 1) {
951
+        form.userids = snList;
952
+      } else {
953
+        form.pushObjid = snList[0];
954
+      }
955
+      this.addPushLog(form);
956
+    },
957
+    // 限制使用
958
+    controlLimitedUse(snList) {
959
+      let controlWSMsg = new ControlWSMsg(
960
+        controlWs.ws,
961
+        this.userInfo.adminid,
962
+        snList
963
+      );
964
+      controlWSMsg.limitedUse();
965
+      controlWSMsg.send();
966
+      let form = {
967
+        pushType: 3,
968
+        pushObj: 1
969
+      };
970
+      if (snList.length > 1) {
971
+        form.userids = snList;
972
+      } else {
973
+        form.pushObjid = snList[0];
974
+      }
975
+      this.addPushLog(form);
976
+    },
977
+    // 更新策略
978
+    controlUpdateStrategy(snList) {
979
+      let controlWSMsg = new ControlWSMsg(
980
+        controlWs.ws,
981
+        this.userInfo.adminid,
982
+        snList
983
+      );
984
+      controlWSMsg.updateStrategy();
985
+      controlWSMsg.send();
986
+      let form = {
987
+        pushType: 4,
988
+        pushObj: 1
989
+      };
990
+      if (snList.length > 1) {
991
+        form.userids = snList;
992
+      } else {
993
+        form.pushObjid = snList[0];
994
+      }
995
+      this.addPushLog(form);
996
+    },
997
+    // 重启设备
998
+    controlRebootDevice(snList) {
999
+      let controlWSMsg = new ControlWSMsg(
1000
+        controlWs.ws,
1001
+        this.userInfo.adminid,
1002
+        snList
1003
+      );
1004
+      controlWSMsg.rebootDevice();
1005
+      controlWSMsg.send();
1006
+      let form = {
1007
+        pushType: 4,
1008
+        pushObj: 1
1009
+      };
1010
+      if (snList.length > 1) {
1011
+        form.userids = snList;
1012
+      } else {
1013
+        form.pushObjid = snList[0];
469 1014
       }
1015
+      this.addPushLog(form);
1016
+    },
1017
+    // 添加推送日志
1018
+    addPushLog(form) {
1019
+      logPush_add(form).then((data) => {
1020
+        if (data.code === 0) {
1021
+          this.$refs.deviceTable.selectAll(false);
1022
+          this.$Message.success(data.msg);
1023
+        } else {
1024
+          this.$Message.error(data.msg);
1025
+        }
1026
+      });
1027
+    },
1028
+    strategyPadTimes(id) {
1029
+      return this.strategyInfo.padTimes.filter((v) => v.week === id);
470 1030
     }
471 1031
   }
472 1032
 };
@@ -561,4 +1121,180 @@ export default {
561 1121
     }
562 1122
   }
563 1123
 }
1124
+.device_psw {
1125
+  display: flex;
1126
+  justify-content: center;
1127
+  align-items: center;
1128
+  .device_psw_title {
1129
+    margin: 0 16px;
1130
+    font-size: 16px;
1131
+  }
1132
+  .device_psw_num {
1133
+    padding: 0 10px;
1134
+    font-size: 24px;
1135
+    line-height: 32px;
1136
+    font-weight: bold;
1137
+    border-radius: 8px;
1138
+    border: 1px solid #ced9f2;
1139
+    background: #f3f4fc;
1140
+  }
1141
+}
1142
+.content {
1143
+  .strategy_list {
1144
+    font-family: "SourceHanSansCN";
1145
+    .strategy_title {
1146
+      height: 40px;
1147
+      font-size: 16px;
1148
+      display: flex;
1149
+      justify-content: space-between;
1150
+      align-items: center;
1151
+      div:first-of-type {
1152
+        font-weight: bold;
1153
+        span {
1154
+          font-size: 22px;
1155
+          color: #339dff;
1156
+          margin-right: 4px;
1157
+        }
1158
+      }
1159
+    }
1160
+    .strategy_content {
1161
+      border-radius: 6px 6px 0 0;
1162
+      border: 1px solid #ced9f2;
1163
+      .strategy_top {
1164
+        display: flex;
1165
+        height: 46px;
1166
+        align-items: center;
1167
+        background: #edf3ff;
1168
+        padding-left: 20px;
1169
+        border-bottom: 1px solid #ced9f2;
1170
+        span {
1171
+          font-size: 16px;
1172
+          color: #253a70;
1173
+          font-weight: 400;
1174
+          font-family: "SourceHanSansCN";
1175
+        }
1176
+      }
1177
+      .strategy_bottom {
1178
+        display: flex;
1179
+        flex-wrap: wrap;
1180
+        padding: 20px;
1181
+        .app_list {
1182
+          margin: 0 16px 16px 0;
1183
+          width: 100px;
1184
+          height: 110px;
1185
+          border-radius: 10px;
1186
+          border: 1px solid #798cb51a;
1187
+          background: #ffffff;
1188
+          text-align: center;
1189
+          position: relative;
1190
+          img {
1191
+            margin: 16px 0;
1192
+            width: 40px;
1193
+            height: 40px;
1194
+            object-fit: cover;
1195
+          }
1196
+          .checked {
1197
+            position: absolute;
1198
+            right: 2px;
1199
+            top: 8px;
1200
+            /deep/ .ivu-checkbox-inner {
1201
+              border-radius: 50%;
1202
+            }
1203
+          }
1204
+          &:hover {
1205
+            cursor: pointer;
1206
+            box-shadow: 10px 10px 20px 0 #339dff26;
1207
+          }
1208
+        }
1209
+        .device_list {
1210
+          display: flex;
1211
+          height: 80px;
1212
+          align-items: center;
1213
+          margin-right: 40px;
1214
+          .icon {
1215
+            width: 56px;
1216
+            height: 56px;
1217
+            border-radius: 6px;
1218
+            border: 1px solid #e5e5e5;
1219
+            display: flex;
1220
+            align-items: center;
1221
+            justify-content: center;
1222
+            span {
1223
+              font-size: 28px;
1224
+              color: #339dff;
1225
+            }
1226
+          }
1227
+          .title {
1228
+            width: 92px;
1229
+            margin: 0 10px;
1230
+          }
1231
+        }
1232
+        .padWifis {
1233
+          border-radius: 5px;
1234
+          border: 1px solid #339dff;
1235
+          background: #eaf5ff;
1236
+          padding: 4px 20px 4px 16px;
1237
+          height: 26px;
1238
+          margin: 0 20px 10px 0;
1239
+          position: relative;
1240
+          .title {
1241
+            line-height: 14px;
1242
+          }
1243
+          img {
1244
+            width: 16px;
1245
+            height: 16px;
1246
+            object-fit: cover;
1247
+            position: absolute;
1248
+            right: -4px;
1249
+            top: -8px;
1250
+            cursor: pointer;
1251
+          }
1252
+        }
1253
+      }
1254
+    }
1255
+    .nodata {
1256
+      color: #798cb5;
1257
+      font-size: 16px;
1258
+      line-height: 30px;
1259
+    }
1260
+  }
1261
+  .showtime {
1262
+    .week {
1263
+      display: flex;
1264
+      width: 100%;
1265
+      .day {
1266
+        width: 14.2%;
1267
+        border: 1px solid #ced9f2;
1268
+        border-right: none;
1269
+        &:last-of-type {
1270
+          border-right: 1px solid #ced9f2;
1271
+        }
1272
+        .day_title {
1273
+          width: 100%;
1274
+          height: 40px;
1275
+          line-height: 40px;
1276
+          background: #edf3ff;
1277
+          border-bottom: 1px solid #ced9f2;
1278
+          text-align: center;
1279
+        }
1280
+        .day_content {
1281
+          min-height: 50px;
1282
+          padding: 10px;
1283
+          .time {
1284
+            height: 30px;
1285
+            line-height: 30px;
1286
+            border-radius: 6px;
1287
+            background: #dbeeff;
1288
+            text-align: center;
1289
+            color: #339dff;
1290
+            font-size: 14px;
1291
+            font-weight: 500;
1292
+            margin-top: 10px;
1293
+            font-family: "SourceHanSansCN";
1294
+          }
1295
+        }
1296
+      }
1297
+    }
1298
+  }
1299
+}
564 1300
 </style>

+ 1
- 1
src/views/schoolSection/deviceManage/inLineDevice.vue View File

@@ -114,7 +114,7 @@ export default {
114 114
           align: "center"
115 115
         },
116 116
         {
117
-          title: "ID(IMEI/MEID/ESN)",
117
+          title: "SN",
118 118
           key: "sn",
119 119
           align: "center"
120 120
         },

+ 3
- 3
src/views/schoolSection/deviceManage/outControlDevice.vue View File

@@ -116,18 +116,18 @@ export default {
116 116
           align: "center"
117 117
         },
118 118
         {
119
-          title: "ID(IMEI/MEID/ESN)",
119
+          title: "SN",
120 120
           key: "sn",
121 121
           align: "center"
122 122
         },
123 123
         {
124 124
           title: "Rom版本",
125
-          key: "updatename",
125
+          key: "romVersion",
126 126
           align: "center"
127 127
         },
128 128
         {
129 129
           title: "Token更新时间",
130
-          key: "romVersion",
130
+          key: "lasttime",
131 131
           width: 190,
132 132
           align: "center"
133 133
         }

+ 1
- 1
src/views/schoolSection/deviceManage/removeControlDevice.vue View File

@@ -91,7 +91,7 @@ export default {
91 91
           align: "center"
92 92
         },
93 93
         {
94
-          title: "ID(IMEI/MEID/ESN)",
94
+          title: "SN",
95 95
           key: "sn",
96 96
           align: "center"
97 97
         },

+ 2
- 2
src/views/schoolSection/log/deviceExport.vue View File

@@ -99,7 +99,7 @@ export default {
99 99
           align: "center"
100 100
         },
101 101
         {
102
-          title: "ID(IMEI/MEID/ESN)",
102
+          title: "SN",
103 103
           key: "sn",
104 104
           align: "center"
105 105
         },
@@ -193,7 +193,7 @@ export default {
193 193
                     姓名: item.username,
194 194
                     设备号码: item.deviceMac,
195 195
                     设备型号: item.deviceModel,
196
-                    "ID(IMEI/MEID/ESN)": item.sn,
196
+                    SN: item.sn,
197 197
                     Rom版本: item.romVersion,
198 198
                     是否违规:
199 199
                       item.violated === 1

+ 64
- 52
src/views/schoolSection/setting/deviceSetting.vue View File

@@ -50,11 +50,12 @@
50 50
             <Radio :label="0">否</Radio>
51 51
           </RadioGroup>
52 52
         </FormItem>
53
-        <FormItem label="管理密码">
53
+        <FormItem label="管理密码" v-if="menuInfo.pswDetail.trend !== 1">
54 54
           <Input
55 55
             v-model="menuInfo.pswDetail.password"
56 56
             placeholder="请输入管理密码"
57 57
           ></Input>
58
+          <div style="color: #f0153f">管理密码必须是8位数字或空</div>
58 59
         </FormItem>
59 60
       </Form>
60 61
     </div>
@@ -66,24 +67,24 @@
66 67
             <Radio :label="0">否</Radio>
67 68
           </RadioGroup>
68 69
         </FormItem>
69
-        <FormItem label="启动SD卡功能">
70
+        <!-- <FormItem label="启动SD卡功能">
70 71
           <RadioGroup v-model="menuInfo.setDetail.sdcard">
71 72
             <Radio :label="1">是</Radio>
72 73
             <Radio :label="0">否</Radio>
73 74
           </RadioGroup>
74
-        </FormItem>
75
+        </FormItem> -->
75 76
         <FormItem label="启用电话短信">
76 77
           <RadioGroup v-model="menuInfo.setDetail.simcard">
77 78
             <Radio :label="1">是</Radio>
78 79
             <Radio :label="0">否</Radio>
79 80
           </RadioGroup>
80 81
         </FormItem>
81
-        <FormItem label="启用数据流量">
82
+        <!-- <FormItem label="启用数据流量">
82 83
           <RadioGroup v-model="menuInfo.setDetail.dataFlow">
83 84
             <Radio :label="1">是</Radio>
84 85
             <Radio :label="0">否</Radio>
85 86
           </RadioGroup>
86
-        </FormItem>
87
+        </FormItem> -->
87 88
         <FormItem label="是否禁用注销">
88 89
           <RadioGroup v-model="menuInfo.setDetail.logout">
89 90
             <Radio :label="1">是</Radio>
@@ -102,30 +103,30 @@
102 103
             <Radio :label="0">否</Radio>
103 104
           </RadioGroup>
104 105
         </FormItem>
105
-        <FormItem label="开启手势密码">
106
+        <!-- <FormItem label="开启手势密码">
106 107
           <RadioGroup v-model="menuInfo.setDetail.gesturePwd">
107 108
             <Radio :label="1">是</Radio>
108 109
             <Radio :label="0">否</Radio>
109 110
           </RadioGroup>
110
-        </FormItem>
111
-        <FormItem label="启用wifi高级选项">
111
+        </FormItem> -->
112
+        <!-- <FormItem label="启用wifi高级选项">
112 113
           <RadioGroup v-model="menuInfo.setDetail.wifiAdvanced">
113 114
             <Radio :label="1">是</Radio>
114 115
             <Radio :label="0">否</Radio>
115 116
           </RadioGroup>
116
-        </FormItem>
117
+        </FormItem> -->
117 118
         <FormItem label="启用截屏">
118 119
           <RadioGroup v-model="menuInfo.setDetail.screenshots">
119 120
             <Radio :label="1">是</Radio>
120 121
             <Radio :label="0">否</Radio>
121 122
           </RadioGroup>
122 123
         </FormItem>
123
-        <FormItem label="启用客户端管理员">
124
+        <!-- <FormItem label="启用客户端管理员">
124 125
           <RadioGroup v-model="menuInfo.setDetail.clientAdmin">
125 126
             <Radio :label="1">是</Radio>
126 127
             <Radio :label="0">否</Radio>
127 128
           </RadioGroup>
128
-        </FormItem>
129
+        </FormItem> -->
129 130
         <FormItem label="隐藏自动旋转">
130 131
           <RadioGroup v-model="menuInfo.setDetail.rotateSetting">
131 132
             <Radio :label="1">是</Radio>
@@ -147,12 +148,12 @@
147 148
             v-model="menuInfo.setDetail.duration"
148 149
           ></InputNumber>
149 150
         </FormItem>
150
-        <FormItem label="启用OTG功能">
151
+        <!-- <FormItem label="启用OTG功能">
151 152
           <RadioGroup v-model="menuInfo.setDetail.otg">
152 153
             <Radio :label="1">是</Radio>
153 154
             <Radio :label="0">否</Radio>
154 155
           </RadioGroup>
155
-        </FormItem>
156
+        </FormItem> -->
156 157
       </Form>
157 158
       <Form :label-width="200">
158 159
         <FormItem label="隐藏图库">
@@ -173,7 +174,7 @@
173 174
             <Radio :label="0">否</Radio>
174 175
           </RadioGroup>
175 176
         </FormItem>
176
-        <FormItem label="隐藏日">
177
+        <FormItem label="隐藏日">
177 178
           <RadioGroup v-model="menuInfo.setDetail.calendar">
178 179
             <Radio :label="1">是</Radio>
179 180
             <Radio :label="0">否</Radio>
@@ -185,36 +186,36 @@
185 186
             <Radio :label="0">否</Radio>
186 187
           </RadioGroup>
187 188
         </FormItem>
188
-        <FormItem label="限制安装来源">
189
+        <!-- <FormItem label="限制安装来源">
189 190
           <RadioGroup v-model="menuInfo.setDetail.installStore">
190 191
             <Radio :label="1">是</Radio>
191 192
             <Radio :label="0">否</Radio>
192 193
           </RadioGroup>
193
-        </FormItem>
194
+        </FormItem> -->
194 195
         <FormItem label="允许用户改密码">
195 196
           <RadioGroup v-model="menuInfo.setDetail.changePwd">
196 197
             <Radio :label="1">是</Radio>
197 198
             <Radio :label="0">否</Radio>
198 199
           </RadioGroup>
199 200
         </FormItem>
200
-        <FormItem label="组织部门显示">
201
+        <FormItem label="学校班级展示">
201 202
           <RadioGroup v-model="menuInfo.setDetail.schoolClass">
202 203
             <Radio :label="1">是</Radio>
203 204
             <Radio :label="0">否</Radio>
204 205
           </RadioGroup>
205 206
         </FormItem>
206
-        <FormItem label="启用GPS">
207
+        <!-- <FormItem label="启用GPS">
207 208
           <RadioGroup v-model="menuInfo.setDetail.gps">
208 209
             <Radio :label="1">是</Radio>
209 210
             <Radio :label="0">否</Radio>
210 211
           </RadioGroup>
211
-        </FormItem>
212
-        <FormItem label="显示隐私声明">
212
+        </FormItem> -->
213
+        <!-- <FormItem label="显示隐私声明">
213 214
           <RadioGroup v-model="menuInfo.setDetail.privacyStatement">
214 215
             <Radio :label="1">是</Radio>
215 216
             <Radio :label="0">否</Radio>
216 217
           </RadioGroup>
217
-        </FormItem>
218
+        </FormItem> -->
218 219
       </Form>
219 220
     </div>
220 221
     <div class="bottom_btns">
@@ -258,30 +259,30 @@ export default {
258 259
           dsid: null,
259 260
           rversion: null,
260 261
           forceBind: 1,
261
-          sdcard: 1,
262
+          // sdcard: 1,
262 263
           simcard: 1,
263
-          dataFlow: 1,
264
+          // dataFlow: 1,
264 265
           logout: 1,
265 266
           cleanup: 1,
266 267
           accelerate: 1,
267
-          gesturePwd: 1,
268
-          wifiAdvanced: 1,
268
+          // gesturePwd: 1,
269
+          // wifiAdvanced: 1,
269 270
           screenshots: 1,
270
-          clientAdmin: 1,
271
+          // clientAdmin: 1,
271 272
           rotateSetting: 1,
272 273
           gallery: 1,
273 274
           camera: 1,
274 275
           alarmClock: 1,
275 276
           calendar: 1,
276 277
           protectedEyes: 1,
277
-          installStore: 1,
278
+          // installStore: 1,
278 279
           changePwd: 1,
279 280
           schoolClass: 1,
280
-          gps: 1,
281
-          privacyStatement: 1,
281
+          // gps: 1,
282
+          // privacyStatement: 1,
282 283
           remindDuration: 1,
283
-          duration: 30,
284
-          otg: 1
284
+          duration: 30
285
+          // otg: 1
285 286
         }
286 287
       }
287 288
     };
@@ -376,30 +377,30 @@ export default {
376 377
               dsid: null,
377 378
               rversion: null,
378 379
               forceBind: 1,
379
-              sdcard: 1,
380
+              // sdcard: 1,
380 381
               simcard: 1,
381
-              dataFlow: 1,
382
+              // dataFlow: 1,
382 383
               logout: 1,
383 384
               cleanup: 1,
384 385
               accelerate: 1,
385
-              gesturePwd: 1,
386
-              wifiAdvanced: 1,
386
+              // gesturePwd: 1,
387
+              // wifiAdvanced: 1,
387 388
               screenshots: 1,
388
-              clientAdmin: 1,
389
+              // clientAdmin: 1,
389 390
               rotateSetting: 1,
390 391
               gallery: 1,
391 392
               camera: 1,
392 393
               alarmClock: 1,
393 394
               calendar: 1,
394 395
               protectedEyes: 1,
395
-              installStore: 1,
396
+              // installStore: 1,
396 397
               changePwd: 1,
397 398
               schoolClass: 1,
398
-              gps: 1,
399
-              privacyStatement: 1,
399
+              // gps: 1,
400
+              // privacyStatement: 1,
400 401
               remindDuration: 1,
401
-              duration: 30,
402
-              otg: 1
402
+              duration: 30
403
+              // otg: 1
403 404
             };
404 405
           }
405 406
         } else {
@@ -415,12 +416,23 @@ export default {
415 416
       }
416 417
     },
417 418
     savePswDetail() {
419
+      if (
420
+        this.menuInfo.pswDetail.trend !== 1 &&
421
+        this.menuInfo.pswDetail.password &&
422
+        !/^\d{8}$/.test(this.menuInfo.pswDetail.password)
423
+      ) {
424
+        this.$Message.error("密码格式不正确");
425
+        return;
426
+      }
418 427
       password_edit({
419 428
         rtype: this.powerParams.rtype,
420 429
         objectid: this.powerParams.objectid,
421 430
         schoolid: this.powerParams.objectid,
422 431
         trend: this.menuInfo.pswDetail.trend,
423
-        password: this.menuInfo.pswDetail.password,
432
+        password:
433
+          this.menuInfo.pswDetail.trend !== 1
434
+            ? this.menuInfo.pswDetail.password
435
+            : null,
424 436
         pwid: this.menuInfo.pswDetail.pwid,
425 437
         rversion: this.menuInfo.pswDetail.rversion
426 438
       }).then((data) => {
@@ -440,30 +452,30 @@ export default {
440 452
         dsid: this.menuInfo.setDetail.dsid,
441 453
         rversion: this.menuInfo.setDetail.rversion,
442 454
         forceBind: this.menuInfo.setDetail.forceBind,
443
-        sdcard: this.menuInfo.setDetail.sdcard,
455
+        // sdcard: this.menuInfo.setDetail.sdcard,
444 456
         simcard: this.menuInfo.setDetail.simcard,
445
-        dataFlow: this.menuInfo.setDetail.dataFlow,
457
+        // dataFlow: this.menuInfo.setDetail.dataFlow,
446 458
         logout: this.menuInfo.setDetail.logout,
447 459
         cleanup: this.menuInfo.setDetail.cleanup,
448 460
         accelerate: this.menuInfo.setDetail.accelerate,
449
-        gesturePwd: this.menuInfo.setDetail.gesturePwd,
450
-        wifiAdvanced: this.menuInfo.setDetail.wifiAdvanced,
461
+        // gesturePwd: this.menuInfo.setDetail.gesturePwd,
462
+        // wifiAdvanced: this.menuInfo.setDetail.wifiAdvanced,
451 463
         screenshots: this.menuInfo.setDetail.screenshots,
452
-        clientAdmin: this.menuInfo.setDetail.clientAdmin,
464
+        // clientAdmin: this.menuInfo.setDetail.clientAdmin,
453 465
         rotateSetting: this.menuInfo.setDetail.rotateSetting,
454 466
         gallery: this.menuInfo.setDetail.gallery,
455 467
         camera: this.menuInfo.setDetail.camera,
456 468
         alarmClock: this.menuInfo.setDetail.alarmClock,
457 469
         calendar: this.menuInfo.setDetail.calendar,
458 470
         protectedEyes: this.menuInfo.setDetail.protectedEyes,
459
-        installStore: this.menuInfo.setDetail.installStore,
471
+        // installStore: this.menuInfo.setDetail.installStore,
460 472
         changePwd: this.menuInfo.setDetail.changePwd,
461 473
         schoolClass: this.menuInfo.setDetail.schoolClass,
462
-        gps: this.menuInfo.setDetail.gps,
463
-        privacyStatement: this.menuInfo.setDetail.privacyStatement,
474
+        // gps: this.menuInfo.setDetail.gps,
475
+        // privacyStatement: this.menuInfo.setDetail.privacyStatement,
464 476
         remindDuration: this.menuInfo.setDetail.remindDuration,
465
-        duration: this.menuInfo.setDetail.duration,
466
-        otg: this.menuInfo.setDetail.otg
477
+        duration: this.menuInfo.setDetail.duration
478
+        // otg: this.menuInfo.setDetail.otg
467 479
       }).then((data) => {
468 480
         if (data.code === 0) {
469 481
           this.$Message.success(data.msg);

Loading…
Cancel
Save