更新记录

1.0.5(2024-09-09) 下载此版本

  • 更新依赖插件

1.0.4(2024-03-26) 下载此版本

  • 支持支付宝小程序云

1.0.3(2023-08-16) 下载此版本

  • 优化小程序端细节问题
查看更多

平台兼容性

阿里云 腾讯云 支付宝云
Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.8.5 app-vue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
×

云函数类插件通用教程

使用云函数类插件的前提是:使用HBuilderX 2.9+


uni-vote是全端的、开源的、云端一体的问卷投票项目模板用户端。

介绍

uni-vote:用户端,包含问卷列表和问题列表。

uni-vote-admin:管理端,包含问卷管理、问题管理、问题选项管理、问卷结果统计等。插件地址

  • 开源免费,支持多端,包括小程序、Web、App等,自动兼容pc宽屏。
  • 基于uniCloud,serverless,无需复杂的服务器部署,无需关心服务器运维。
  • 问卷:可以设置有效期,默认是不限制,在admin端发布问卷时可以选择。
  • 问卷问题:支持发布单选或多选问题(多选可包含【其他】项,用户输入内容),应用场景:问卷、投票等。
  • 问卷规则:统一在uniCloud/cloudfunctions/uni-vote-co/checkRule.js,目前默认包含的规则:

    可根据自己应用场景开启/关闭对应规则、添加自定义规则

    • 新用户投票时间限制,比如:禁止注册时间在4小时内的新用户投票
    • 投票时间段限制,比如:晚上8点后到早上8点,期间不能投票
    • 多问题问卷投票次数限制,比如:每个问卷每个用户只能投票1次
    • 单问题问卷投票次数限制,比如:每个问卷每个用户,1个月内,最多投票2次
  • 问卷结果统计图在admin端查看。

案例体验

DCloud的产品投票,都是基于uni-vote开发的,体验地址:https://vote.dcloud.net.cn/

用户端界面

pc宽屏效果

移动端效果

使用指南

说明:本插件依赖于uni-id-pages用户注册登录。

  1. 安装uni-vote用户端插件
    • 在插件市场打开本插件页面,在右侧点击使用 HBuilderX 导入插件,选择你的 uni-app用户端项目点击确定导入。
  2. 当导入插件到项目工程时,插件里pages_init会自动合并本插件的页面路由到项目的pages.json,如果没有合并成功,在pages.json中添加以下页面:
    {
    "topWindow": {
        "path": "uni_modules/uni-vote/windows/top-window",
        "style": {
            "height": "100px"
        }
    },
    "rightWindow": {
        "path": "uni_modules/uni-vote/pages/vote-items/vote-items",
        "style": {
            "width": "calc(100vw - 450px)",
            "navigationBarTitleText": "详情",
            "backgroundColor":"#F8F8F8"
        },
        "matchMedia": {
            "minWidth": 750
        }
    },
    "pages": [
        {
            "path": "uni_modules/uni-vote/pages/vote/vote",
            "style": {
                "h5": {
                    "titleNView": {
                        "backgroundColor": "#FFFFFF",
                        "titleText": "问卷列表"
                    }
                },
                "app-plus": {
                    "titleNView": {
                        "titleText": "问卷列表"
                    },
                    "bounce": "none",
                    "softinputmode": "adjustResize"
                },
                "enablePullDownRefresh": true
            }
        }, {
            "path": "uni_modules/uni-vote/pages/vote-items/vote-items",
            "style": {
                "navigationBarTitleText": "详情",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "uni_modules/uni-id-pages/pages/login/login-withoutpwd",
            "style": {
                "topWindow": false,
                "rightWindow": false,
                "navigationBarTitleText": ""
            }
        }, {
            "path": "uni_modules/uni-id-pages/pages/login/login-withpwd",
            "style": {
                "topWindow": false,
                "rightWindow": false,
                "navigationBarTitleText": ""
            }
        },  {
            "path": "uni_modules/uni-id-pages/pages/register/register",
            "style": {
                "topWindow": false,
                "rightWindow": false,
                "navigationBarTitleText": "注册"
            }
        }
    ],
    "uniIdRouter": {
        "loginPage": "uni_modules/uni-id-pages/pages/login/login-withpwd",
        "needLogin": [
            "uni_modules/uni-vote/pages/vote/vote",
            "uni_modules/uni-vote/pages/vote-items/vote-items"
        ]
    }
    }
  3. 在uniCloud目录上右键,点击关联云服务空间或项目,注意管理端和用户端是两个项目,但是连接同一个服务空间。
  4. 初始化数据库、上传云函数
    • 如果是导入新项目,在uniCloud右键云服务空间初始化向导
    • 如果是导入已有项目
      • 在项目uniCloud--》cloudfunctions目录,上传云对象uni-vote-co
      • 在项目uniCloud--》database目录,上传
        • uni-vote.schema.json
        • uni-vote-questions.schema.json
        • uni-vote-questions-options.schema.json
        • uni-vote-records.schema.json
        • uni-vote-questions-records.schema.json
  5. 在插件市场中找到uni-vote-admin插件,将插件导入至uni-admin管理端项目中,管理端关联用户端项目,共用一个服务空间。
  6. uni-admin管理端运行启动,在web管理后台,点击左侧菜单栏的菜单管理,添加“投票管理”菜单,注意开启菜单。导入后刷新页面,在uni-admin左侧菜单,可看到投票管理的菜单项,点击即可进入相关页面添加问卷问题。
  7. 在admin端添加完问卷和问题后,在用户端运行至相应平台即可体验。
  8. 如需更改问卷规则限制,在uniCloud/cloudfunctions/uni-vote-co/checkRule.js根据自己应用场景开启对应规则或者添加规则,配置完成后在uni-vote-co右键上传部署。

注意事项

如果出现报错Error: Invalid uni-id config file,需添加uni-id配置文件,在uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json参考文档,如果uni-config-center下没有uni-id,需自行创建。

架构说明和二次开发

uni-vote,有问卷、问卷问题和问卷问题选项这3个概念。问卷问题下的选项可以是单选,也可以是多选。

  • 每个问卷下只有单个问题时,应用场景:需求投票等。
  • 每个问卷下多个问题时,所有问题组成一个问卷,回答所有问题后提交答案,应用场景:问卷调查等。

uni-vote目前没有的功能:

  1. 投票结果打分。目前只支持统计票数,不支持答案正确对比,不支持计分。
  2. 投票问题发起只能在admin端,不支持用户自己发起投票问题。

如果目前的 uni-vote 不能满足你的需求,你可以基于 uni-vote 进行二次开发。

  • 问卷查询投票等逻辑在uniCloud/cloudfunctions/uni-vote-co/index.obj.js中,可结合自己业务场景在_before添加自定义前置规则。
  • 问卷的所有规则在uniCloud/cloudfunctions/uni-vote-co/checkRule.js中,可根据自己业务场景开启/关闭已有规则或者添加自定义规则。

目录结构

uni-vote 用户端插件

uni-vote                                // uni-vote 插件
├── pages                               // 页面
│   ├── vote                              
│   │   └── vote.vue                    // 投票问题页面
│   └── vote-items                        
│       └── vote-items.vue              // 投票项页面
├── pages_init.json                     // 页面初始化配置
├── package.json                        // 插件配置
├── changelog.md                        // 插件更新日志
├── readme.md                           // 插件文档
└── uniCloud                            
   ├── cloudfunctions                   // 云函数
   │   └── uni-vote-co                  // uni-vote云对象
   │   │   ├── checkRule.js             // 问卷规则
   │   │   ├── index.js                 // 云对象入口
   │   │   └── package.json    
   └── database                                      // 数据库
       ├── uni-vote.schema.json                      // 问卷表
       ├── uni-vote-questions.schema.json            // 问题表
       ├── uni-vote-questions-options.schema.json    // 问题选项表
       ├── uni-vote-records.schema.json              // 问卷记录表
       └── uni-vote-questions-records.schema.json    // 问题回答记录表

uni-vote-admin 管理端插件

uni-vote-admin                         // uni-vote-admin 管理端插件
├── menu.json                          // 菜单初始化配置,通过menu.json注册动态菜单
├── package.json                       // 插件配置
├── changelog.md                       // 插件更新日志
├── readme.md                          // 插件文档
├── pages                              // 页面   
│   ├── uni-vote                       // 问卷管理
│   │   ├── add.vue                    // 添加问卷
│   │   ├── edit.vue                   // 编辑问卷
│   │   └── list.vue                   // 问卷列表
│   ├── uni-vote-questions             // 问题管理
│   │   ├── add.vue                    // 添加问题
│   │   ├── edit.vue                   // 编辑问题
│   │   └── list.vue                   // 问题列表
│   ├── uni-vote-questions-options     // 问题项管理
│   │   ├── add.vue                    // 添加问题项
│   │   ├── edit.vue                   // 编辑问题项
│   │   └── list.vue                   // 问题项列表
│   └── uni-vote-records               // 问卷记录管理
│       ├── detail.vue                 // 其他选项内容
│       └── list.vue                   // 问卷结果统计
└── uniCloud                           // 云函数
    ├── cloudfunctions       
    │   ├── uni-vote-co                // uni-vote云对象
    │   │   ├── checkRule.js           // 问卷规则
    │   │   ├── index.obj.js           // 云对象入口
    │   │   └── package.json    
    │   │── common                     // 公共模块
    │   │   ├── uni-config-center      // 服务端配置中心
    │   │   │   └── uni-id             //uni-id模块配置目录
    │   │   │       └── config.json    // uni-id对应的配置数据
    │   │   ├── index.js               // config-center入口文件
    │   │   └── package.json      
    └── database                                    // 数据库
       ├── uni-vote.schema.json                     // 问卷表
       ├── uni-vote-questions.schema.json           // 问题表
       ├── uni-vote-questions-options.schema.json   // 问题选项表
       ├── uni-vote-records.schema.json             // 问卷记录表
       └── uni-vote-questions-records.schema.json   // 问题回答记录表

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

uni-vote(以下简称软件)源码使用许可协议

2022年10月

本许可协议,是数字天堂(北京)网络技术有限公司(以下简称DCloud)对其所拥有著作权的“软件”,提供的使用许可协议。

您对“软件”的复制、使用、修改及分发受本许可协议的条款的约束,如您不接受本协议,则不能使用、复制、修改本软件。

授权许可范围

a) 授予您永久性的、全球性的、免费的、非独占的、不可撤销的本软件的源码使用许可,您可以使用这些源码制作自己的应用。

b) 您只能在DCloud产品体系内使用本软件及其源码。您不能将源码修改后运行在DCloud产品体系之外的环境,比如客户端脱离uni-app,或服务端脱离uniCloud(如涉及uniCloud)。

c) DCloud未向您授权商标使用许可。您在根据本软件源码制作自己的应用时,需以自己的名义发布软件,而不是以DCloud名义发布。

d) 本协议不构成代理关系。

DCloud的责任限制 “软件”在提供时不带任何明示或默示的担保。在任何情况下,DCloud不对任何人因使用“软件”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。

您的责任限制

a) 您需要在授权许可范围内使用软件。

b) 您在分发自己的应用时,不得侵犯DCloud商标和名誉权利。

c) 您不得进行破解、反编译、套壳等侵害DCloud知识产权的行为。您不得利用DCloud系统漏洞谋利或侵害DCloud利益,如您发现DCloud系统漏洞应第一时间通知DCloud。您不得进行攻击DCloud的服务器、网络等妨碍DCloud运营的行为。未经书面许可,您不得利用DCloud的产品进行与DCloud争夺开发者的行为。

d) 如您违反本许可协议,需承担因此给DCloud造成的损失。

本协议签订地点为中华人民共和国北京市海淀区。

根据发展,DCloud可能会对本协议进行修改。修改时,DCloud会在产品或者网页中显著的位置发布相关信息以便及时通知到用户。如果您选择继续使用本框架,即表示您同意接受这些修改。

条款结束

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问