HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

#插件分享# 头像昵称填写能力适配】登录获取用户信息 - 武汉今鱼乐娱网络

微信登录 uniapp插件

欢迎大家使用,有任何问题可及时反馈出来。多多支持一下,谢谢~!
插件地址:
https://ext.dcloud.net.cn/plugin?id=11016

欢迎大家使用,有任何问题可及时反馈出来。多多支持一下,谢谢~!
插件地址:
https://ext.dcloud.net.cn/plugin?id=11016

热云-TrackingIOPlugin-打包报错

[PackagePath]/app/assets/supplierconfig.json [PackagePath]/wgtRoot/UNIE240ACE/nativeplugins/TrackingIOPlugin/android/assets/supplierconfig.json: Error: Duplicate resources

当你遇到这个文件冲突,你只需要删除supplierconfig.json即可,踩了2个小时坑,分享给大家

继续阅读 »

[PackagePath]/app/assets/supplierconfig.json [PackagePath]/wgtRoot/UNIE240ACE/nativeplugins/TrackingIOPlugin/android/assets/supplierconfig.json: Error: Duplicate resources

当你遇到这个文件冲突,你只需要删除supplierconfig.json即可,踩了2个小时坑,分享给大家

收起阅读 »

【不需要使用插件、不依赖第三方服务】uni-app端直传腾讯云对象存储 COS上传图片/视频/文件

需求:app(vue/nvue混合)有上传图片/视频/文件到腾讯云对象存储COS的需求,要求app内可以点对点直传,不依赖云端或者第三方服务。

发现问题:尝试了cos的网页端官方SDK无法运行;尝试了小程序的SDK,发现只能运行在Debug模式下,打包后无法运行;尝试了内嵌一个webview然后使用网页SDK,可以实现但是和app通信不方便太繁琐,对文件/图片/视频的选择功能受限(webview安全限制)。

解决方法:按照腾讯云官方文档:https://cloud.tencent.com/document/product/436/14690,使用uni.chooseFile/image/video方法,获取文件之后,按照链接内官方文档的要求构造请求参数,就可以使用标准的http方式上传了。

按照这个思路目前已经在app 内成功实现直传图片和文件功能,很方便,在这里分享给有需要的人,不用再重复尝试和劳动。

继续阅读 »

需求:app(vue/nvue混合)有上传图片/视频/文件到腾讯云对象存储COS的需求,要求app内可以点对点直传,不依赖云端或者第三方服务。

发现问题:尝试了cos的网页端官方SDK无法运行;尝试了小程序的SDK,发现只能运行在Debug模式下,打包后无法运行;尝试了内嵌一个webview然后使用网页SDK,可以实现但是和app通信不方便太繁琐,对文件/图片/视频的选择功能受限(webview安全限制)。

解决方法:按照腾讯云官方文档:https://cloud.tencent.com/document/product/436/14690,使用uni.chooseFile/image/video方法,获取文件之后,按照链接内官方文档的要求构造请求参数,就可以使用标准的http方式上传了。

按照这个思路目前已经在app 内成功实现直传图片和文件功能,很方便,在这里分享给有需要的人,不用再重复尝试和劳动。

收起阅读 »

关于HTML便签的拼接注意

html
1.标签属性在拼接属性值时可以打引号(单双引号都可以,最终显示时还是双引号),属性与属性要有空格,否则会被视为一体的  
列如:  
var tit ="23",alts = "提示";  
”<a title="+tit+"  alt="+alts+">“+"</a>" ---><a title="23" alt="提示"></a>  
var tit ="2 3",alts = "提示";  
”<a title="+tit+"  alt="+alts+">“+"</a>" ---><a title="2" 3 alt="提示"></a>//这种title是2,不是23;  
var tit ="2 3",alts = "提示";  
”<a title='"+tit+"'  alt='"+alts+"'>“+"</a>" ---><a title="23" alt="提示"></a>//加上引号后就不会出现上处问题了;  
2.标签属性值可以不分单双引号,但是建议用双引号,甚至可以不用打引号,但是属性与属性就必须要有空格,否则会被视为一体的。  
列如:  
<a title="23"  alt="提示"></a> --><a title="23" alt="提示"></a>  

<a title='23'  alt="提示"></a> --><a title="23" alt="提示"></a>  

<a title=23  alt=提示></a> --><a title="23" alt="提示"></a>  

<a title=23alt=提示></a> --><a title="23alt=提示"></a>  

<a title=23alt="提示"></a> --><a title="23alt="提示""></a>  

<a title=23alt='提示'></a> --><a title="23alt='提示'"></a>  

所以在标签拼接和写标签时要注意!!!  
继续阅读 »
1.标签属性在拼接属性值时可以打引号(单双引号都可以,最终显示时还是双引号),属性与属性要有空格,否则会被视为一体的  
列如:  
var tit ="23",alts = "提示";  
”<a title="+tit+"  alt="+alts+">“+"</a>" ---><a title="23" alt="提示"></a>  
var tit ="2 3",alts = "提示";  
”<a title="+tit+"  alt="+alts+">“+"</a>" ---><a title="2" 3 alt="提示"></a>//这种title是2,不是23;  
var tit ="2 3",alts = "提示";  
”<a title='"+tit+"'  alt='"+alts+"'>“+"</a>" ---><a title="23" alt="提示"></a>//加上引号后就不会出现上处问题了;  
2.标签属性值可以不分单双引号,但是建议用双引号,甚至可以不用打引号,但是属性与属性就必须要有空格,否则会被视为一体的。  
列如:  
<a title="23"  alt="提示"></a> --><a title="23" alt="提示"></a>  

<a title='23'  alt="提示"></a> --><a title="23" alt="提示"></a>  

<a title=23  alt=提示></a> --><a title="23" alt="提示"></a>  

<a title=23alt=提示></a> --><a title="23alt=提示"></a>  

<a title=23alt="提示"></a> --><a title="23alt="提示""></a>  

<a title=23alt='提示'></a> --><a title="23alt='提示'"></a>  

所以在标签拼接和写标签时要注意!!!  
收起阅读 »

<icon type="search" :size='15'...为什么在 APP端不显示

icon

<icon type="search" :size='15'...为什么在 APP端不显示
为什么只有[‘success’, ‘success_no_circle’, ‘warn’, ‘waiting’, ‘cancel’]

[ ‘info’, ‘download’, ‘search’,‘clear’]图标显示不了,不知道为什么

继续阅读 »

<icon type="search" :size='15'...为什么在 APP端不显示
为什么只有[‘success’, ‘success_no_circle’, ‘warn’, ‘waiting’, ‘cancel’]

[ ‘info’, ‘download’, ‘search’,‘clear’]图标显示不了,不知道为什么

收起阅读 »

uniapp 配置tabBar后微信小程序不显示导航栏

以下是tabbar配置,页面和图片资源都存在,尝试用真机调试也不显示底部导航栏

"tabBar": {  
        "custom":false,  
        // "position":"bottom",  
        "borderStyle": "black",  
        "backgroundColor": "#ffffff",  
        "selectedColor": "#00aa00",  
        // "height": "60px",  
        "color": "#444444",  
        "list": [  
            {  
                "pagePath": "pages/pre/pre",  
                "iconPath": "static/images/pre.png",  
                "selectedIconPath": "static/images/pre_s.png",  
                "text": "预约"  
            },  
            {  
                "pagePath": "pages/user/user",  
                "iconPath": "static/images/me.png",  
                "selectedIconPath": "static/images/me_s.png",  
                "text": "我的"  
            }  
        ],  
    },  
继续阅读 »

以下是tabbar配置,页面和图片资源都存在,尝试用真机调试也不显示底部导航栏

"tabBar": {  
        "custom":false,  
        // "position":"bottom",  
        "borderStyle": "black",  
        "backgroundColor": "#ffffff",  
        "selectedColor": "#00aa00",  
        // "height": "60px",  
        "color": "#444444",  
        "list": [  
            {  
                "pagePath": "pages/pre/pre",  
                "iconPath": "static/images/pre.png",  
                "selectedIconPath": "static/images/pre_s.png",  
                "text": "预约"  
            },  
            {  
                "pagePath": "pages/user/user",  
                "iconPath": "static/images/me.png",  
                "selectedIconPath": "static/images/me_s.png",  
                "text": "我的"  
            }  
        ],  
    },  
收起阅读 »

stopPropagation的替代方案

uni小程序

因为小程序端的click事件不能通过stopPropagation在监听事件里动态阻止事件冒泡,最多只能通过@click.stop去在catch阶段处理事件。在需要根据情况动态决定是否阻止事件冒泡时,只能通过v-if去生成两个不同的组件,一个@click另一个@click.stop,这样显然会加重资源消耗。

由此我实现了一个stopPropagation的替代方案,去动态的阻止冒泡。核心的原理是pointer-events这个css样式,这个样式可以用来控制元素是否可以响应事件。给需要stopPropagation的区域通过@click.stop去绑定事件,默认情况下会一直阻止事件冒泡。在需要事件冒泡的时候,就通过动态样式控制,把区域的pointer-events设为none,就隔绝了@click.stop的捕获处理。这样这个事件就可以向外冒泡了。

这个方案有一种情况是不适用的,就是stopPropagation区域内部有子元素需要绑定事件。因为即使给子元素的pointer-events设置成auto,事件仍会受@click.stop的影响,只能触发到区域这一层不能向外冒泡。

继续阅读 »

因为小程序端的click事件不能通过stopPropagation在监听事件里动态阻止事件冒泡,最多只能通过@click.stop去在catch阶段处理事件。在需要根据情况动态决定是否阻止事件冒泡时,只能通过v-if去生成两个不同的组件,一个@click另一个@click.stop,这样显然会加重资源消耗。

由此我实现了一个stopPropagation的替代方案,去动态的阻止冒泡。核心的原理是pointer-events这个css样式,这个样式可以用来控制元素是否可以响应事件。给需要stopPropagation的区域通过@click.stop去绑定事件,默认情况下会一直阻止事件冒泡。在需要事件冒泡的时候,就通过动态样式控制,把区域的pointer-events设为none,就隔绝了@click.stop的捕获处理。这样这个事件就可以向外冒泡了。

这个方案有一种情况是不适用的,就是stopPropagation区域内部有子元素需要绑定事件。因为即使给子元素的pointer-events设置成auto,事件仍会受@click.stop的影响,只能触发到区域这一层不能向外冒泡。

收起阅读 »

如果动态修改uni.scss、动态自定义全页面的css颜色方案

scss 主题

动态设置主题 css,找了些方案,感觉这个最方便,分享给大家~点个赞吧!

  1. 动态设置uni.scss(这个官方不支持,所以换方案)
  2. 用js控制css变量(最佳最好的方向)

那我们就用第二种方案,如果js控制css呢? 上方案!

首先要在顶部声明:<component is="style">:root {--bg-color: {{bgColor}}}</component> (为什么用这个 去看下vue文档)

然后具体看代码

<template>  
    <view class="content">  
        <component is="style">:root {--bg-color: {{bgColor}}}</component>  
        <!-- 布局 -->  
        <view class="theme">测试</view>  
        <view>文字1234</view>  
        <view @click="btn">更改</view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                bgColor: "#4FAD50",  
            }  
        },  
        methods: {  
            btn() {  
                this.bgColor = 'red'  
            },  
        }  
    }  
</script>  

<style lang="scss" scoped>  
    .theme {  
        color: var(--bg-color);  
    }  
</style>  

这样,当你点击更改的时候 颜色就被更改了!很方便 很灵活!

页面的侵入也不复杂 加个component, 给对应的文字加个css .theme 解决!后续通过vuex想怎么改 怎么改!

好了~方案到此结束! 点个赞吧!~

继续阅读 »

动态设置主题 css,找了些方案,感觉这个最方便,分享给大家~点个赞吧!

  1. 动态设置uni.scss(这个官方不支持,所以换方案)
  2. 用js控制css变量(最佳最好的方向)

那我们就用第二种方案,如果js控制css呢? 上方案!

首先要在顶部声明:<component is="style">:root {--bg-color: {{bgColor}}}</component> (为什么用这个 去看下vue文档)

然后具体看代码

<template>  
    <view class="content">  
        <component is="style">:root {--bg-color: {{bgColor}}}</component>  
        <!-- 布局 -->  
        <view class="theme">测试</view>  
        <view>文字1234</view>  
        <view @click="btn">更改</view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                bgColor: "#4FAD50",  
            }  
        },  
        methods: {  
            btn() {  
                this.bgColor = 'red'  
            },  
        }  
    }  
</script>  

<style lang="scss" scoped>  
    .theme {  
        color: var(--bg-color);  
    }  
</style>  

这样,当你点击更改的时候 颜色就被更改了!很方便 很灵活!

页面的侵入也不复杂 加个component, 给对应的文字加个css .theme 解决!后续通过vuex想怎么改 怎么改!

好了~方案到此结束! 点个赞吧!~

收起阅读 »

uniapp开发app关于navigateTo的踩坑分享,not found

navigateto

这里分享一下老弟碰到的一个坑,在网上搜索不太搜索得到。
因为一般navigateTo跳转,发生not found,肯定是程序没找对应文件。
所以能查到的答案主要是这几个:
1、检查一下自己的路径到底有没有写错
2、检查一下自己写的路劲是绝对路径还是相对路径,看看是不是搞错了。
3、检查一下如果是手写的页面,是不是没有在pages.json文件里注册

今天我碰到的就是这几个情况都ok的情况下发生。
描述一下我项目的情况,为了项目文件目录的管理,在深层目录,用HbuilderX新建页面后,重新编译后,无法跳转。
经过多次测试,发现:
1、如果新建页面在pages目录下的一级目录,则编译后可以直接naviagte跳转,路径如:”pages/index/index“
2、如果新建页面在pages目录下是多级目录,则无法直接编译后跳转,需要重启项目才会生效,路径如:”pages/index/list/list“

继续阅读 »

这里分享一下老弟碰到的一个坑,在网上搜索不太搜索得到。
因为一般navigateTo跳转,发生not found,肯定是程序没找对应文件。
所以能查到的答案主要是这几个:
1、检查一下自己的路径到底有没有写错
2、检查一下自己写的路劲是绝对路径还是相对路径,看看是不是搞错了。
3、检查一下如果是手写的页面,是不是没有在pages.json文件里注册

今天我碰到的就是这几个情况都ok的情况下发生。
描述一下我项目的情况,为了项目文件目录的管理,在深层目录,用HbuilderX新建页面后,重新编译后,无法跳转。
经过多次测试,发现:
1、如果新建页面在pages目录下的一级目录,则编译后可以直接naviagte跳转,路径如:”pages/index/index“
2、如果新建页面在pages目录下是多级目录,则无法直接编译后跳转,需要重启项目才会生效,路径如:”pages/index/list/list“

收起阅读 »

寻找合作人

uni_app HBuilderX

有没有人可以加入我们研发软件的人员部
强势收人,只要有编程基础都可以来
目前招收JS,HTML,CSS人员各十名,欢迎各路英雄豪杰
HBuilderX,uni-app都可以来

联系方式:
QQ:3561109017
邮箱:luyeyyds666@163.com

继续阅读 »

有没有人可以加入我们研发软件的人员部
强势收人,只要有编程基础都可以来
目前招收JS,HTML,CSS人员各十名,欢迎各路英雄豪杰
HBuilderX,uni-app都可以来

联系方式:
QQ:3561109017
邮箱:luyeyyds666@163.com

收起阅读 »

uni-app项目重启后突然报错,说找不到main.js文件。。

uni_app项目

重启项目后突然报错,找不到main.js文件。。
运行到哪个环境都一样。
执行
> npm init

再运行后就可以了。。
不知道为什么这样就可以解决TT

环境:
os: macbook pro
node: v14.16.0
HBuilderX: 3.6.18

继续阅读 »

重启项目后突然报错,找不到main.js文件。。
运行到哪个环境都一样。
执行
> npm init

再运行后就可以了。。
不知道为什么这样就可以解决TT

环境:
os: macbook pro
node: v14.16.0
HBuilderX: 3.6.18

收起阅读 »

vscode深色主题代码颜色分享

主题

cscode的插件功能很是丰富,平时开发时喜欢用vscode写代码,由HB调试uniCloud功能。来回切换的时候代码颜色差距太大,找代码很费力。于是花20分钟修改HB的代码颜色。分享给需要的人。

设置方法:工具→设置→源码视图 粘贴到右侧 ,覆盖的是雅蓝主题

{  
  "editor.colorScheme": "Atom One Dark",  
  "explorer.iconTheme": "hx-file-icons-colorful",  
  "workbench.colorCustomizations": {  
    "[Atom One Dark]": {  
      "editor.background": "#1e1e1e",  
      "editor.foreground": "#999999",  
      "editor.indentguide": "#003366",  
      "editor.indicator.matchtag": "#ffffe6",  
      "editor.indicator.sameword": "#ffc34d",  
      "editor.whitespace": "#004080",  
      "editorGroup.border": "#1e1e1e",  
      "list.activeSelectionBackground": "#003366",  
      "list.highlightForeground": "#f2f2f2",  
      "list.hoverBackground": "#1e1e1e",  
      "minimap.handle.background": "#cccccc",  
      "sideBar.background": "#282c35",  
      "sideBar.border": "#282c35",  
      "tab.border": "#1e1e1e",  
      "toolBar.background": "#282c35",  
      "toolBar.border": "#171717"  
    }  
  },  
  "editor.tokenColorCustomizations": {  
    "[Atom One Dark]": {  
      "rules": [  
        {  
          "scope": "comment",  
          "settings": {  
            "fontStyle": "italic",  
            "foreground": "#248C85"  
          }  
        },  
        {  
          "scope": "punctuation.definition.comment",  
          "settings": {  
            "fontStyle": "italic",  
            "foreground": "#248C85"  
          }  
        },  
        {  
          "scope": ["meta.tag"],  
          "settings": {  
            "foreground": "#676767"  
          }  
        },  
        {  
          "scope": [  
            "punctuation.definition.tag",  
            "punctuation.definition.tag.begin",  
            "punctuation.definition.tag.end"  
          ],  
          "settings": {  
            "foreground": "#3385ff"  
          }  
        },  
        {  
          "scope": ["entity.name.tag"],  
          "settings": {  
            "foreground": "#569cd6"  
          }  
        },  
        {  
          "scope": ["entity.other.attribute-name"],  
          "settings": {  
            "foreground": "#9cdcf0"  
          }  
        },  
        {  
          "scope": ["string"],  
          "settings": {  
            "foreground": "#ce916a"  
          }  
        },  
        {  
          "scope": ["support.type.property-name.json"],  
          "settings": {  
            "foreground": "#5fc1fe"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.readwrite.tsx",  
            "variable.other.readwrite.ts",  
            "variable.other.readwrite.js"  
          ],  
          "settings": {  
            "foreground": "#4fb8ee"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.readwrite.alias.ts",  
            "variable.other.readwrite.alias.tsx",  
            "variable.other.readwrite.alias.jsx",  
            "variable.other.readwrite.alias.js"  
          ],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": ["meta.method-call", "meta.method"],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": ["variable"],  
          "settings": {  
            "foreground": "#dcdcaa"  
          }  
        },  
        {  
          "scope": ["text.html.vue"],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.constant.ts",  
            "variable.other.constant.js",  
            "variable.other.constant.jsx",  
            "variable.other.constant.tsx"  
          ],  
          "settings": {  
            "foreground": "#669ad1"  
          }  
        },  
        {  
          "scope": ["comment.line.double-slash", "comment.block"],  
          "settings": {  
            "foreground": "#6a9955"  
          }  
        },  
        {  
          "scope": ["support.type.property-name"],  
          "settings": {  
            "foreground": "#669ad1"  
          }  
        },  
        {  
          "scope": ["support.constant.property-value.css"],  
          "settings": {  
            "foreground": "#ce916a"  
          }  
        }  
      ]  
    }  
  }  
}  
继续阅读 »

cscode的插件功能很是丰富,平时开发时喜欢用vscode写代码,由HB调试uniCloud功能。来回切换的时候代码颜色差距太大,找代码很费力。于是花20分钟修改HB的代码颜色。分享给需要的人。

设置方法:工具→设置→源码视图 粘贴到右侧 ,覆盖的是雅蓝主题

{  
  "editor.colorScheme": "Atom One Dark",  
  "explorer.iconTheme": "hx-file-icons-colorful",  
  "workbench.colorCustomizations": {  
    "[Atom One Dark]": {  
      "editor.background": "#1e1e1e",  
      "editor.foreground": "#999999",  
      "editor.indentguide": "#003366",  
      "editor.indicator.matchtag": "#ffffe6",  
      "editor.indicator.sameword": "#ffc34d",  
      "editor.whitespace": "#004080",  
      "editorGroup.border": "#1e1e1e",  
      "list.activeSelectionBackground": "#003366",  
      "list.highlightForeground": "#f2f2f2",  
      "list.hoverBackground": "#1e1e1e",  
      "minimap.handle.background": "#cccccc",  
      "sideBar.background": "#282c35",  
      "sideBar.border": "#282c35",  
      "tab.border": "#1e1e1e",  
      "toolBar.background": "#282c35",  
      "toolBar.border": "#171717"  
    }  
  },  
  "editor.tokenColorCustomizations": {  
    "[Atom One Dark]": {  
      "rules": [  
        {  
          "scope": "comment",  
          "settings": {  
            "fontStyle": "italic",  
            "foreground": "#248C85"  
          }  
        },  
        {  
          "scope": "punctuation.definition.comment",  
          "settings": {  
            "fontStyle": "italic",  
            "foreground": "#248C85"  
          }  
        },  
        {  
          "scope": ["meta.tag"],  
          "settings": {  
            "foreground": "#676767"  
          }  
        },  
        {  
          "scope": [  
            "punctuation.definition.tag",  
            "punctuation.definition.tag.begin",  
            "punctuation.definition.tag.end"  
          ],  
          "settings": {  
            "foreground": "#3385ff"  
          }  
        },  
        {  
          "scope": ["entity.name.tag"],  
          "settings": {  
            "foreground": "#569cd6"  
          }  
        },  
        {  
          "scope": ["entity.other.attribute-name"],  
          "settings": {  
            "foreground": "#9cdcf0"  
          }  
        },  
        {  
          "scope": ["string"],  
          "settings": {  
            "foreground": "#ce916a"  
          }  
        },  
        {  
          "scope": ["support.type.property-name.json"],  
          "settings": {  
            "foreground": "#5fc1fe"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.readwrite.tsx",  
            "variable.other.readwrite.ts",  
            "variable.other.readwrite.js"  
          ],  
          "settings": {  
            "foreground": "#4fb8ee"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.readwrite.alias.ts",  
            "variable.other.readwrite.alias.tsx",  
            "variable.other.readwrite.alias.jsx",  
            "variable.other.readwrite.alias.js"  
          ],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": ["meta.method-call", "meta.method"],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": ["variable"],  
          "settings": {  
            "foreground": "#dcdcaa"  
          }  
        },  
        {  
          "scope": ["text.html.vue"],  
          "settings": {  
            "foreground": "#9cdcfe"  
          }  
        },  
        {  
          "scope": [  
            "variable.other.constant.ts",  
            "variable.other.constant.js",  
            "variable.other.constant.jsx",  
            "variable.other.constant.tsx"  
          ],  
          "settings": {  
            "foreground": "#669ad1"  
          }  
        },  
        {  
          "scope": ["comment.line.double-slash", "comment.block"],  
          "settings": {  
            "foreground": "#6a9955"  
          }  
        },  
        {  
          "scope": ["support.type.property-name"],  
          "settings": {  
            "foreground": "#669ad1"  
          }  
        },  
        {  
          "scope": ["support.constant.property-value.css"],  
          "settings": {  
            "foreground": "#ce916a"  
          }  
        }  
      ]  
    }  
  }  
}  
收起阅读 »