index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="10">
  4. <!--机构数据-->
  5. <el-col :span="4" :xs="24">
  6. <org-tree
  7. v-model="queryParams.orgId"
  8. @defaultKey="getDefaultKey"
  9. @defaultOrg="getDefaultOrg"
  10. @checkChange="checkChange"
  11. @click="clickTreeNode"
  12. ></org-tree>
  13. </el-col>
  14. <el-col :span="20" :xs="24">
  15. <div class="main-right-box">
  16. <div class="main-search-box">
  17. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
  18. label-width="68px">
  19. <el-form-item label="设备名称" prop="deviceName">
  20. <el-input v-model="queryParams.deviceName" placeholder="请输入关键字" maxlength="50"
  21. @keyup.enter.native="handleQuery" />
  22. </el-form-item>
  23. <el-form-item label="设备类别" prop="assetType">
  24. <el-select style="width: 100%;" v-model="queryParams.assetType" placeholder="请选择设备类别"
  25. @change="searchChangeSelectDevice">
  26. <el-option v-for="dict in dict.type.sys_asset_type" :key="dict.value" :label="dict.label"
  27. :value="`${dict.value}`"></el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="设备分类" prop="deviceType">
  31. <el-select style="width: 100%;" v-model="queryParams.deviceType" placeholder="请选择设备种类">
  32. <el-option v-for="item in searchDevices" :key="item.dictValue" :label="item.dictLabel"
  33. :value="item.dictValue"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item>
  37. <el-button
  38. type="primary"
  39. icon="el-icon-search"
  40. size="mini"
  41. @click="handleQuery"
  42. >搜索</el-button
  43. >
  44. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  45. >重置</el-button
  46. >
  47. </el-form-item>
  48. </el-form>
  49. <el-row :gutter="10">
  50. <el-col :span="1.5">
  51. <el-button
  52. type="primary"
  53. icon="el-icon-plus"
  54. size="mini"
  55. @click="handleAdd"
  56. v-hasPermi="['system:device:add']"
  57. >新增设备</el-button
  58. >
  59. </el-col>
  60. <el-col :span="1.5">
  61. <el-button
  62. type="primary"
  63. icon="el-icon-upload"
  64. size="mini"
  65. @click="handleImport"
  66. v-hasPermi="['system:device:importData']"
  67. >导入设备</el-button
  68. >
  69. </el-col>
  70. <el-col :span="1.5">
  71. <el-button
  72. type="primary"
  73. icon="el-icon-download"
  74. size="mini"
  75. @click="handleOut"
  76. v-hasPermi="['system:user:export']"
  77. >导出模版</el-button
  78. >
  79. </el-col>
  80. <right-toolbar
  81. :showSearch.sync="showSearch"
  82. @queryTable="getList"
  83. ></right-toolbar>
  84. </el-row>
  85. </div>
  86. <el-table
  87. border
  88. height="650"
  89. size="small"
  90. v-loading="loading"
  91. :data="deviceList"
  92. @selection-change="handleSelectionChange"
  93. >
  94. <!-- :header-cell-style="{backgroundColor:'#CCE8F7'}" -->
  95. <!--<el-table-column type="selection" width="55" align="center" />-->
  96. <el-table-column label="序号" align="center" min-width="50">
  97. <template v-slot:default="scope">
  98. <span v-text="getPageIndex(scope.$index)"> </span>
  99. </template>
  100. </el-table-column>
  101. <el-table-column label="所属机构" align="left" prop="orgName" />
  102. <el-table-column
  103. label="设备类别"
  104. align="center"
  105. key="assetType"
  106. prop="assetType"
  107. >
  108. <template slot-scope="scope">
  109. <dict-tag
  110. :options="dict.type.sys_asset_type"
  111. :value="scope.row.assetType"
  112. />
  113. </template>
  114. </el-table-column>
  115. <el-table-column
  116. label="设备分类"
  117. align="center"
  118. key="deviceType"
  119. prop="deviceType"
  120. >
  121. <template slot-scope="scope">
  122. <dict-tag
  123. :options="dict.type.sys_device_type"
  124. :value="scope.row.deviceType"
  125. />
  126. </template>
  127. </el-table-column>
  128. <el-table-column label="设备名称" align="center" prop="deviceName" />
  129. <!-- <el-table-column label="设备品牌" align="center" prop="deviceBrand" />
  130. <el-table-column
  131. label="有效期至"
  132. align="center"
  133. prop="checkTime"
  134. width="160"
  135. >
  136. </el-table-column> -->
  137. <!-- <el-table-column label="保修期限" align="center" prop="maintenanceTerm" /> -->
  138. <el-table-column
  139. label="操作"
  140. align="center"
  141. class-name="small-padding fixed-width"
  142. >
  143. <template slot-scope="scope">
  144. <el-button
  145. size="mini"
  146. type="text"
  147. icon="el-icon-edit-outline"
  148. @click="handleUpdate(scope.row)"
  149. v-hasPermi="['system:device:edit']"
  150. >编辑</el-button
  151. >
  152. <el-divider direction="vertical"></el-divider>
  153. <el-button
  154. size="mini"
  155. type="text"
  156. icon="el-icon-delete"
  157. @click="handleDelete(scope.row)"
  158. v-hasPermi="['system:device:remove']"
  159. >删除</el-button
  160. >
  161. </template>
  162. </el-table-column>
  163. </el-table>
  164. <pagination
  165. v-show="total > 0"
  166. :total="total"
  167. :page.sync="queryParams.pageNum"
  168. :limit.sync="queryParams.pageSize"
  169. @pagination="getList"
  170. />
  171. </div>
  172. </el-col>
  173. </el-row>
  174. <!-- 添加或修改【请填写功能名称】对话框 -->
  175. <DialogCom
  176. :title="title"
  177. :visible.sync="open"
  178. width="700px"
  179. @close="closeHandler"
  180. append-to-body
  181. >
  182. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  183. <el-row>
  184. <el-col :span="20">
  185. <el-form-item label="所属机构" prop="orgId">
  186. <tree-select
  187. v-model="form.orgId"
  188. :options="deptOptions"
  189. :show-count="true"
  190. :normalizer="tenantIdnormalizer"
  191. :props="{ checkStrictly: true, label: 'name' }"
  192. placeholder="请选择归属机构"
  193. @select="changeSelect"
  194. clearValueText="清除"
  195. :noChildrenText="''"
  196. noOptionsText="没有数据"
  197. noResultsText="没有搜索结果"
  198. />
  199. </el-form-item>
  200. </el-col>
  201. </el-row>
  202. <el-row>
  203. <el-col :span="12">
  204. <el-form-item label="设备类别" prop="assetType">
  205. <el-select
  206. style="width: 100%"
  207. v-model="form.assetType"
  208. placeholder="请选择设备类别"
  209. @change="changeSelectDevice"
  210. >
  211. <el-option
  212. v-for="dict in dict.type.sys_asset_type"
  213. :key="dict.value"
  214. :label="dict.label"
  215. :value="`${dict.value}`"
  216. ></el-option>
  217. </el-select>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="12">
  221. <el-form-item label="设备分类" prop="deviceType">
  222. <el-select
  223. style="width: 100%"
  224. v-model="form.deviceType"
  225. placeholder="请选择设备分类"
  226. >
  227. <el-option
  228. v-for="item in devices"
  229. :key="item.dictValue"
  230. :label="item.dictLabel"
  231. :value="item.dictValue"
  232. ></el-option>
  233. </el-select>
  234. </el-form-item>
  235. </el-col>
  236. </el-row>
  237. <el-row>
  238. <el-col :span="12">
  239. <el-form-item label="设备名称" prop="deviceName">
  240. <el-input
  241. v-model="form.deviceName"
  242. placeholder="请进行设备命名"
  243. maxlength="50"
  244. />
  245. </el-form-item>
  246. </el-col>
  247. <el-col :span="12">
  248. <el-form-item label="设备品牌" prop="deviceBrand">
  249. <el-input v-model="form.deviceBrand" placeholder="请输入设备品牌" maxlength="50" />
  250. </el-form-item>
  251. </el-col>
  252. </el-row>
  253. <el-row>
  254. <el-col :span="12">
  255. <el-form-item
  256. v-if="form.deviceType == 2"
  257. label="硬盘录像机"
  258. prop="hostId"
  259. >
  260. <el-select
  261. style="width: 100%"
  262. v-model="form.hostId"
  263. placeholder="请选择关联主机"
  264. >
  265. <el-option
  266. v-for="item in hostList"
  267. :key="item.id"
  268. :label="item.deviceName"
  269. :value="item.id"
  270. ></el-option>
  271. </el-select>
  272. </el-form-item>
  273. </el-col>
  274. <el-col :span="12">
  275. <el-form-item
  276. v-if="form.deviceType == 2"
  277. label="通道号"
  278. prop="channel"
  279. >
  280. <el-input
  281. type="number"
  282. max="64"
  283. min="0"
  284. oninput="if(value<=0)value=null;if(value>=64)value=64;value=parseInt(value)"
  285. v-model="form.channel"
  286. placeholder="请输入关联通道号"
  287. />
  288. </el-form-item>
  289. </el-col>
  290. </el-row>
  291. <el-row>
  292. <el-col :span="12">
  293. <el-form-item
  294. v-if="form.assetType == 0"
  295. label="有效期至"
  296. prop="checkTime"
  297. >
  298. <el-date-picker
  299. style="width: 100%"
  300. clearable
  301. v-model="form.checkTime"
  302. type="date"
  303. value-format="yyyy-MM-dd HH:mm:ss"
  304. placeholder="请选择到期时间"
  305. >
  306. </el-date-picker>
  307. </el-form-item>
  308. </el-col>
  309. </el-row>
  310. <el-row> </el-row>
  311. </el-form>
  312. <div slot="footer" class="dialog-footer">
  313. <el-button type="primary" @click="submitForm">确 定</el-button>
  314. <el-button @click="cancel">取 消</el-button>
  315. </div>
  316. </DialogCom>
  317. <!-- 设备导入对话框 -->
  318. <DialogCom
  319. :title="upload.title"
  320. :visible.sync="upload.open"
  321. width="400px"
  322. append-to-body
  323. >
  324. <el-upload
  325. ref="upload"
  326. :limit="1"
  327. accept=".xlsx, .xls"
  328. :headers="upload.headers"
  329. :action="upload.url"
  330. :disabled="upload.isUploading"
  331. :on-progress="handleFileUploadProgress"
  332. :on-success="handleFileSuccess"
  333. :auto-upload="false"
  334. drag
  335. >
  336. <i class="el-icon-upload"></i>
  337. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  338. </el-upload>
  339. <div slot="footer" class="dialog-footer">
  340. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  341. <el-button @click="upload.open = false">取 消</el-button>
  342. </div>
  343. </DialogCom>
  344. </div>
  345. </template>
  346. <script>
  347. import { getToken } from "@/utils/auth";
  348. import orgDropDown from "../../../components/orgTree/orgDropDown.vue";
  349. import OrgTree from "@/components/orgTree";
  350. import tableList from "@/mixins/tableList";
  351. import treeselect from "@riophae/vue-treeselect";
  352. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  353. import { deptTreeSelect } from "@/api/system/public";
  354. import { getDeviceType } from "@/api/system/dict/data";
  355. import {
  356. listDevice,
  357. getDevice,
  358. delDevice,
  359. addDevice,
  360. updateDevice,
  361. getHostByOrgId,
  362. downInCharge,
  363. } from "@/api/system/device";
  364. export default {
  365. /** 引入基础minxins*/
  366. mixins: [tableList],
  367. dicts: ["sys_asset_type", "sys_device_type"],
  368. name: "Device",
  369. components: { OrgTree, treeselect, orgDropDown },
  370. data() {
  371. return {
  372. checkList: [],
  373. roleOptions: [],
  374. defaultKeys: [],
  375. //是否关联下级
  376. checked: false,
  377. defaultProps: {
  378. children: "children",
  379. label: "name",
  380. },
  381. rules: {
  382. deviceName: [
  383. { required: true, message: "请输入设备名称", trigger: "change" },
  384. ],
  385. orgId: [{ required: true, message: "请选择所属机构", trigger: "blur" }],
  386. assetType: [
  387. { required: true, message: '请选择资产类别', trigger: 'change' },
  388. ],
  389. hostId: [{ required: true, message: '请选择主机', trigger: 'change' }],
  390. channel: [{ required: true, message: '请输入通道号', trigger: 'change' }],
  391. deviceType: [
  392. { required: true, message: "请选择设备分类", trigger: "change" },
  393. ],
  394. checkTime: [
  395. { required: true, message: "请选择有效期", trigger: "blur" },
  396. ],
  397. },
  398. // 遮罩层
  399. loading: true,
  400. // 选中数组
  401. ids: [],
  402. // 非单个禁用
  403. single: true,
  404. //搜索tree
  405. deptName: null,
  406. // 非多个禁用
  407. multiple: true,
  408. // 显示搜索条件
  409. showSearch: true,
  410. // 总条数
  411. total: 0,
  412. inparm: 0,
  413. // 【请填写功能名称】表格数据
  414. deviceList: [],
  415. devices: null,
  416. searchDevices:null,
  417. //主机集合
  418. hostList: [],
  419. deviceType: 0,
  420. // 弹出层标题
  421. title: "",
  422. // 是否显示弹出层
  423. open: false,
  424. // 查询参数
  425. dept: {
  426. id: null,
  427. },
  428. queryParams: {
  429. pageNum: 1,
  430. pageSize: 10,
  431. orgId: null,
  432. orgName: null,
  433. deviceName: null,
  434. assetType: null,
  435. deviceType: null,
  436. deviceBrand: null,
  437. checkTime: null,
  438. maintenanceTerm: null,
  439. hostId: null,
  440. channel: null,
  441. checkSub: true,
  442. },
  443. // 设备导入参数
  444. upload: {
  445. // 是否显示弹出层(用户导入)
  446. open: false,
  447. // 弹出层标题(用户导入)
  448. title: "",
  449. // 是否禁用上传
  450. isUploading: false,
  451. // 设置上传的请求头部
  452. headers: { Authorization: "Bearer " + getToken() },
  453. // 上传的地址
  454. url:
  455. process.env.NODE_ENV === "development"
  456. ? process.env.VUE_APP_BASE_API + "/system/device/importData"
  457. : window.origin + "/system/device/importData",
  458. },
  459. // 表单参数
  460. form: {
  461. orgId: null,
  462. deviceName: null,
  463. assetType: null,
  464. deviceType: null,
  465. deviceBrand: null,
  466. checkTime: null,
  467. maintenanceTerm: null,
  468. hostId: null,
  469. channel: null,
  470. },
  471. // 表单校验
  472. //修改新增中的机构树
  473. deptOptions: [],
  474. selectOrgId: null,
  475. };
  476. },
  477. created() {
  478. this.getDeptTree();
  479. //this.getList();
  480. },
  481. watch: {
  482. // 根据名称筛选部门树
  483. deptName(val) {
  484. this.$refs.tree.filter(val);
  485. },
  486. },
  487. methods: {
  488. onOrgSelect(node) {
  489. this.form.orgPath = node.path;
  490. debugger;
  491. this.form.orgName = node.name;
  492. },
  493. // 文件上传中处理
  494. handleFileUploadProgress(event, file, fileList) {
  495. this.upload.isUploading = true;
  496. },
  497. handleImport() {
  498. this.upload.title = "设备导入";
  499. this.upload.open = true;
  500. },
  501. // 文件上传成功处理
  502. handleFileSuccess(response, file, fileList) {
  503. this.upload.open = false;
  504. this.upload.isUploading = false;
  505. this.$refs.upload.clearFiles();
  506. this.$alert(
  507. "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
  508. response.msg +
  509. "</div>",
  510. "导入结果",
  511. { dangerouslyUseHTMLString: true }
  512. );
  513. this.getList();
  514. },
  515. getDefaultOrg(org) {
  516. this.orgName = org.name;
  517. },
  518. getDefaultKey(key) {
  519. this.queryParams.orgId = key;
  520. this.getList();
  521. },
  522. //单选框状态改变
  523. checkChange(state) {
  524. this.queryParams.checkSub = state;
  525. this.handleQuery();
  526. },
  527. getPageIndex($index) {
  528. //表格序号
  529. return (
  530. (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
  531. );
  532. },
  533. /** 下穿状态改变*/
  534. changeCheckBox() {
  535. this.getList();
  536. },
  537. // 筛选节点
  538. filterNode(value, data) {
  539. if (!value) return true;
  540. return data.name.indexOf(value) !== -1;
  541. },
  542. /** 查询机构树数据 */
  543. // 节点单击事件
  544. handleNodeClick(data) {
  545. this.queryParams.orgId = data.id;
  546. this.selectOrgId = data.id;
  547. this.changeSelect(data);
  548. this.handleQuery();
  549. },
  550. changeSelect(val) {
  551. getHostByOrgId(val).then((response) => {
  552. this.form.hostId = null;
  553. this.hostList = response.data;
  554. });
  555. },
  556. handleOut() {
  557. this.download(
  558. "system/device/downInChargeOfTemplate",
  559. {
  560. ...this.queryParams,
  561. },
  562. `${
  563. this.orgName + "-设备导入模版-" + this.formatTime(new Date(), "YYYYMMhh")
  564. }.xlsx`
  565. );
  566. },
  567. /** 查询【请填写功能名称】列表 */
  568. getList() {
  569. this.loading = true;
  570. listDevice(this.queryParams).then((response) => {
  571. this.deviceList = response.rows;
  572. this.total = response.total;
  573. this.loading = false;
  574. });
  575. },
  576. /** 查询部门下拉树结构 */
  577. getDeptTree() {
  578. deptTreeSelect().then((response) => {
  579. this.deptOptions = response.data;
  580. this.defaultKeys.push(response.data[0].id);
  581. this.queryParams.orgId = response.data[0].id;
  582. this.selectOrgId = response.data[0].id;
  583. this.handleQuery();
  584. });
  585. },
  586. // 节点单击事件
  587. clickTreeNode(data) {
  588. this.queryParams.orgId = data.id;
  589. this.handleQuery();
  590. },
  591. /** treeSelect组件自定义数据*/
  592. tenantIdnormalizer(node, instanceId) {
  593. if (node.children && !node.children.length) {
  594. delete node.children;
  595. }
  596. return {
  597. id: node.id,
  598. label: node.shortName,
  599. children: node.children,
  600. };
  601. },
  602. // 取消按钮
  603. cancel() {
  604. this.open = false;
  605. this.reset();
  606. },
  607. closeHandler() {
  608. this.reset();
  609. },
  610. // 表单重置
  611. reset() {
  612. this.form = {
  613. id: null,
  614. orgId: null,
  615. orgName: null,
  616. deviceName: null,
  617. assetType: null,
  618. deviceType: null,
  619. deviceBrand: null,
  620. checkTime: null,
  621. maintenanceTerm: null,
  622. createTime: null,
  623. updateTime: null,
  624. createBy: null,
  625. updateBy: null,
  626. delFlag: null,
  627. hostId: null,
  628. channel: null,
  629. };
  630. this.resetForm("form");
  631. },
  632. /** 搜索按钮操作 */
  633. handleQuery() {
  634. this.queryParams.pageNum = 1;
  635. this.getList();
  636. },
  637. /** 重置按钮操作 */
  638. resetQuery() {
  639. this.devices = null;
  640. this.resetForm("queryForm");
  641. this.handleQuery();
  642. },
  643. // 多选框选中数据
  644. handleSelectionChange(selection) {
  645. this.ids = selection.map((item) => item.id);
  646. this.names = selection.map((item) => item.deviceName);
  647. this.single = selection.length !== 1;
  648. this.multiple = !selection.length;
  649. },
  650. /** 新增按钮操作 */
  651. handleAdd(val) {
  652. this.open = true;
  653. this.title = "新增设备信息";
  654. this.form.orgId = this.selectOrgId;
  655. this.dept.id = this.selectOrgId;
  656. this.changeSelect(this.dept);
  657. this.devices = null;
  658. },
  659. changeSelectDevice(val) {
  660. if (val) {
  661. getDeviceType(val).then((response) => {
  662. this.devices = response.data;
  663. this.form.deviceType = null;
  664. this.queryParams.deviceType = null;
  665. });
  666. }
  667. },
  668. searchChangeSelectDevice(val) {
  669. if (val) {
  670. getDeviceType(val).then(response => {
  671. this.searchDevices = response.data;
  672. this.form.deviceType = null;
  673. this.queryParams.deviceType = null;
  674. })
  675. }
  676. },
  677. /** 修改按钮操作 */
  678. handleUpdate(row) {
  679. this.reset();
  680. const id = row.id || this.ids;
  681. getDevice(id).then((response) => {
  682. this.form = response.data;
  683. this.devices = response.devices;
  684. this.hostList = response.hostList;
  685. this.open = true;
  686. this.title = "编辑设备信息";
  687. });
  688. },
  689. /** 提交按钮 */
  690. submitForm() {
  691. this.$refs["form"].validate((valid) => {
  692. if (valid) {
  693. if (this.form.id != null) {
  694. updateDevice(this.form).then((response) => {
  695. this.$modal.msgSuccess("处理成功");
  696. this.open = false;
  697. this.getList();
  698. });
  699. } else {
  700. addDevice(this.form).then((response) => {
  701. this.$modal.msgSuccess("处理成功");
  702. this.open = false;
  703. this.getList();
  704. });
  705. }
  706. }
  707. });
  708. },
  709. /** 删除按钮操作 */
  710. handleDelete(row) {
  711. const ids = row.id || this.ids;
  712. const names = row.deviceName || this.names;
  713. this.$modal
  714. .confirm('是否确认删除名称为"' + names + '"的数据项?')
  715. .then(function () {
  716. return delDevice(ids);
  717. })
  718. .then(() => {
  719. this.getList();
  720. this.$modal.msgSuccess("删除成功");
  721. })
  722. .catch(() => {});
  723. },
  724. // 提交上传文件
  725. submitFileForm() {
  726. this.$refs.upload.submit();
  727. },
  728. /** 导出按钮操作 */
  729. handleExport() {
  730. this.download(
  731. "system/device/export",
  732. {
  733. ...this.queryParams,
  734. },
  735. `device_${new Date().getTime()}.xlsx`
  736. );
  737. },
  738. },
  739. };
  740. </script>