├── .vuepress ├── public │ ├── CNAME │ ├── favicon.ico │ └── img │ │ ├── banner.png │ │ ├── logo.png │ │ ├── banner-logo.png │ │ ├── 114533_b7f16f5b_1674451.png │ │ ├── 171259_1ef11014_1674451.png │ │ └── logo.svg ├── styles │ └── palette.styl └── config.js ├── guide ├── close-wx.md ├── front-config.md ├── storage-config.md ├── api-security.md ├── local-run.md ├── api-config.md ├── faq.md ├── deploy.md ├── close-validate.md └── README.md ├── .gitignore ├── package.json ├── README.md ├── log └── README.md └── .travis.yml /.vuepress/public/CNAME: -------------------------------------------------------------------------------- 1 | doc.tduckapp.com -------------------------------------------------------------------------------- /.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /.vuepress/public/img/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/img/banner.png -------------------------------------------------------------------------------- /.vuepress/public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/img/logo.png -------------------------------------------------------------------------------- /.vuepress/public/img/banner-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/img/banner-logo.png -------------------------------------------------------------------------------- /.vuepress/public/img/114533_b7f16f5b_1674451.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/img/114533_b7f16f5b_1674451.png -------------------------------------------------------------------------------- /.vuepress/public/img/171259_1ef11014_1674451.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TDuckCloud/tduck-doc/HEAD/.vuepress/public/img/171259_1ef11014_1674451.png -------------------------------------------------------------------------------- /guide/close-wx.md: -------------------------------------------------------------------------------- 1 | # 微信功能 2 | 3 | ### 微信配置比较麻烦 如果无需使用 需要关闭可以在如下配置关闭 4 | .env.development # 本地环境配置 5 | .env.production # 正式环境配置 6 | 7 | ```yaml 8 | # 微信功能开关 开启设置 ON,关闭设置 OFF 9 | VUE_APP_WX = ON 10 | 11 | ``` 12 | 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ project files 2 | .idea/ 3 | *.iml 4 | *.ipr 5 | *.iws 6 | out 7 | gem 8 | 9 | # VS Code project files 10 | .vscode/ 11 | 12 | # MacOS files 13 | .DS_Store 14 | Thumbs.db 15 | 16 | # Node files 17 | node_modules/ 18 | docs/ -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tduck-doc", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vuepress dev", 7 | "build": "vuepress build" 8 | }, 9 | "devDependencies": { 10 | "@vuepress/plugin-back-to-top": "^1.8.0", 11 | "vuepress": "^1.8.0" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /guide/front-config.md: -------------------------------------------------------------------------------- 1 | # 前端项目配置 2 | 3 | 4 | tduck-front 项目中 src目录下 5 | 6 | - .env.development 开发环境配置 7 | - .env.production 正式环境配置 8 | 9 | ``` 10 | # 页面标题 11 | VUE_APP_TITLE = 填鸭测试环境 12 | # 接口请求地址,会设置到 axios 的 baseURL 参数上 13 | VUE_APP_API_ROOT = /tduck-api 14 | # 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空 15 | VUE_APP_DEBUG_TOOL = 16 | # 高德地图key 17 | VUE_APP_MAP_KEY = f2200337d0d08538e78729572749882d 18 | # 微信功能开关 开启设置 ON,关闭设置 OFF 19 | VUE_APP_WX = ON 20 | 21 | ``` 22 | 23 | -------------------------------------------------------------------------------- /.vuepress/styles/palette.styl: -------------------------------------------------------------------------------- 1 | // 颜色 2 | $accentColor = #409EFF 3 | $textColor = #2c3e50 4 | $borderColor = #eaecef 5 | $codeBgColor = #282c34 6 | $arrowBgColor = #ccc 7 | $badgeTipColor = #42b983 8 | $badgeWarningColor = darken(#ffe564, 35%) 9 | $badgeErrorColor = #DA5961 10 | 11 | // 布局 12 | $navbarHeight = 3.6rem 13 | $sidebarWidth = 20rem 14 | $contentWidth = 740px 15 | $homePageWidth = 960px 16 | 17 | // 响应式变化点 18 | $MQNarrow = 959px 19 | $MQMobile = 719px 20 | $MQMobileNarrow = 419px 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | heroImage: /img/banner.png 4 | actionText: 快速开始 → 5 | actionLink: /guide/ 6 | features: 7 | - title: 新建表单 8 | details: 自定义可拖拽式表单设计 9 | - title: 表单设置 10 | details: 支持多种收集方式设置 11 | - title: 反馈统计 12 | details: 多维度统计收集的反馈数据。 13 | footer: Apache License 2.0 | © 2019-2021 tduckapp 14 | --- 15 | 16 | 17 | 18 |

19 | Hosted by Coding Pages & Github Pages & Idea 20 |
21 | 湘ICP备18023961号-2 22 |

23 | -------------------------------------------------------------------------------- /log/README.md: -------------------------------------------------------------------------------- 1 | # V2 2 | v2.0 更新 2020-6-24 3 | 4 | 【表单逻辑】支持对单选,多选框,下拉框等组件进行逻辑设置,目前仅支持选中 未选中等逻辑关系 5 | 6 | 【表单分页】支持对问卷问题较多时,进行分页 7 | 8 | 【手写签名】支持手写签名保存上传 9 | 10 | 【位置选择】支持高德地图进行地理位置选择 11 | 12 | 【手机验证】支持对输入手机号进行短信验证 验证通过则能保存 13 | 14 | 【省市联动】支持省市县联动选择输入 15 | 16 | 【图形选择】图片选择组件,支持单选多选 17 | 18 | 【图片展示】图片展示组件,展示二维码引流等 19 | 20 | 【图片轮播】图片轮播组件,图片和文字轮播显示 21 | 22 | 【文字描述】文件描述组件,支持颜色,位置设置 23 | 24 | 【分割线】 内容分割线 25 | 26 | 【联系人】 手机号,邮箱,身份证输入 格式校验 27 | 28 | 【公开反馈结果】 公开反馈结果设置,开启后填写完成将看到他人填写结果 29 | 30 | 【附件导出】填写完成后可对收集的附件进行导出zip下载 31 | 32 | 【统计筛选】可对填写完的结果进行筛选查询 支持模糊等 33 | 34 | 【表单预览】添加预览按钮,实时预览内容,预览二维码 35 | 36 | 【另存为模板】添加另存为模板按钮,保存项目为模板 37 | 38 | 【UI重构】项目整体UI全面重构,更美观,更简洁 39 | 40 | 【验证码】验证逻辑重构,支持验证码开关 41 | 42 | 【微信功能】 微信功能增加开关配置,可配置关闭微信功能 43 | 44 | 【代码优化】对前后端代码进行部分优化,结构调整 45 | -------------------------------------------------------------------------------- /guide/storage-config.md: -------------------------------------------------------------------------------- 1 | # 文件存储配置 2 | 3 | 项目目前支持 七牛云oss 阿里云oss 又拍云 本地存储方式存储文件 4 | 5 | 6 | 7 | 1. Oss存储(以七牛云为例) 8 | 9 | ```yaml 10 | oss: 11 | ossType: 1 # 0:阿里云 1:七牛云 2:又拍云 3:本地存储 12 | endpoint: # 阿里云需配置 13 | accessKeyId: # 平台认证参数 需要去对应oss提供平台获取 14 | accessKeySecret: # 平台认证参数 需要去对应oss提供平台获取 15 | bucketName: tduck-cloud #oss存储桶名 16 | domain: https://qiniu.smileyi.top #oss可供访问的域名 17 | ``` 18 | 19 | 20 | 21 | 2.本地存储 使用项目本身对外提供文件访问 22 | 23 | ```yaml 24 | oss: 25 | ossType: 3 # 3表示使用本地存储 26 | endpoint: 27 | accessKeyId: 28 | accessKeySecret: 29 | bucketName: 30 | domain: http://localhost:8999/tduck-api/u/ #对外访问的地址 使用后端项目部署的ip+端口 后面可以固定 31 | upload-folder: C:\temp #文件存放的位置 32 | access-path-pattern: /u/** # 文件访问路径前缀 这里更改domain也需要更改 33 | ``` 34 | 35 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | sudo: false 4 | 5 | node_js: 6 | - "14" 7 | 8 | cache: 9 | yarn: true 10 | directories: 11 | - node_modules 12 | 13 | branches: 14 | only: 15 | - master 16 | 17 | env: 18 | global: 19 | - GITHUB_REPO: github.com/TDuckCloud/tduck-doc.git 20 | 21 | before_install: 22 | - export TZ=Asia/Shanghai 23 | 24 | install: 25 | - yarn 26 | 27 | script: 28 | - yarn run build 29 | 30 | after_success: 31 | - git config user.name "smalljop" 32 | - git config user.email "smalljop@gmail.com" 33 | - git clone https://${CI_USERNAME}:${CI_TOKEN}@${GITHUB_REPO} ./old-docs 34 | - cp -r ./old-docs/.git ./docs 35 | - cd ./docs 36 | - git add -A 37 | - git commit -m "deploy at `date +\"%Y-%m-%d %H:%M:%S\"`" 38 | - git push --force --quiet "https://${CI_USERNAME}:${CI_TOKEN}@${GITHUB_REPO}" master:gh-pages 39 | -------------------------------------------------------------------------------- /guide/api-security.md: -------------------------------------------------------------------------------- 1 | ### 接口安全配置 2 | 3 | 为了保证接口调用的安全性,防止恶意请求接口,项目对接口进行了签名验证,接口请求时对参数进行排序加密计算签名,后端对签名进行校验,如果校验失败,则提示非法请求。 4 | 5 | 项目配置如下 6 | 7 | ```yaml 8 | platform: 9 | sign: 10 | enable: true # 是否启用签名校验 关闭之后所有请求无需校验 本地调试方便可以设置false 11 | secret: 916lWh2WMcbSWiHv # 签名秘钥 12 | ignore-urls: # 签名校验忽略的地址 13 | - /tduck-api/webjars/** 14 | - /tduck-api/swagger/** 15 | ``` 16 | 17 | #### 实现部分 18 | 19 | 前端:**/src/api/index.js** 20 | 21 | 使用axios在请求前统一计算签名 22 | 23 | 签名具体算法如下 24 | 25 | 请求参数统一添加当前时间戳,然后根据key做升序 26 | 27 | ( 签名秘钥(secret)+ 请求参数json字符串)做MD5然后转小写 28 | 29 | 拼接的秘钥和参数 30 | 31 | `916lWh2WMcbSWiHv{"current":"1","name":"","size":"10","timestamp":"1616904031441"}` 32 | 33 | md5之后 34 | 35 | 81deff67b73d2669f04e48f45faa20ac 36 | 37 | 38 | 39 | 后端请参考**SignAuthFilter.java** 40 | 41 | **如果正常情况下出现提示“非法访问,请检查请求信息” 请检查部署环境时间是否正常** 42 | 43 | -------------------------------------------------------------------------------- /guide/local-run.md: -------------------------------------------------------------------------------- 1 | # 本地运行 2 | 3 | 开发环境本地运行 正式环境请参考部署教程! 4 | 5 | 1. 项目运行所需环境: 6 | 7 | - [MySQL5.7或以上](https://dev.mysql.com/downloads/mysql/) 8 | - [JDK1.8或以上](http://www.oracle.com/technetwork/java/javase/overview/index.html) 9 | - [Maven](https://maven.apache.org/download.cgi) 10 | - [Nodejs](https://nodejs.org/en/download/) 11 | 12 | 2. 创建一个tduck的数据库,并执行项目目录下doc/tduck.sql文件 13 | 14 | 3. 启动后端服务 15 | 16 | 拉取后端代码 17 | 18 | `git clone https://gitee.com/TDuckApp/tduck-platform.git` 19 | 20 | 打开命令行,输入以下命令 21 | 22 | ``` 23 | mvn clean install -DskipTests 24 | cd tduck-platform/tduck-api 25 | mvn clean package -DskipTests 26 | java -Dfile.encoding=UTF-8 -jar tduck-api.jar 27 | ``` 28 | 29 | 4. 启动前端项目 30 | 31 | 拉取前端代码 32 | 33 | `git clone https://gitee.com/TDuckApp/tduck-front.git` 34 | 35 | 5. 打开命令行,输入以下命令 36 | 37 | ``` 38 | npm install -g cnpm --registry=https://registry.npm.taobao.org 39 | cd tduck-front 40 | cnpm install 41 | cnpm run serve 42 | ``` 43 | 44 | 此时,浏览器打开,输入网址`http://localhost:8888`, 进入页面 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /guide/api-config.md: -------------------------------------------------------------------------------- 1 | # 后端项目配置 2 | 3 | 4 | 5 | #### 必要配置 6 | 7 | ```yaml 8 | spring: 9 | datasource: 10 | driver-class-name: com.mysql.cj.jdbc.Driver 11 | url: #数据库地址 12 | username: #用户名 13 | password: #密码 14 | redis: 15 | database: 1 16 | host: #地址 17 | port: #端口 18 | password: # 密码(默认为空) 19 | ``` 20 | 21 | #### 文件存储配置 22 | 23 | 不配置文件存储系统中上传文件无法使用 24 | 25 | ```yaml 26 | oss: 27 | ossType: #oss类型 0:阿里云 1:七牛云 28 | endpoint: 29 | accessKeyId: 30 | accessKeySecret: 31 | bucketName: 32 | domain: 33 | ``` 34 | 35 | #### 微信公众号配置 36 | 37 | 不配置在使用微信公众号相关功能时会抛出异常(登录,微信通知,微信中分享信息定义等),可以申请微信测试公众号 38 | 39 | https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 40 | 41 | ``` 42 | wx: 43 | mp: 44 | configs: 45 | - appId: 46 | secret: 47 | token: 48 | aesKey: 49 | ``` 50 | 51 | ![输入图片说明](https://images.gitee.com/uploads/images/2021/0318/174301_a94222ba_1495174.png "屏幕截图.png") 52 | 如图所示 把对应参数appId等配置到项目中,然后启动项目,本地可以使用内网穿透 53 | 微信接口配置信息 54 | url填入 外网可访问地址/tduck-api/wx/mp/portal/你的appId 55 | token可自行定义 需要与项目中token相同 56 | 57 | 如果提示配置失败请仔细检查项目中参数是否配置正确 58 | 59 | 60 | 61 | #### 邮箱配置 62 | 63 | 具体配置去对应邮箱**客户端设置**中查看 我这里以88完美邮箱为例 64 | 65 | 经测试 163等邮箱对发送次数上限比较低 目前88邮箱限制还比较低 66 | 67 | 68 | 69 | ![enter image description here](https://images.gitee.com/uploads/images/2021/0327/205930_b43a1860_1495174.png "屏幕截图.png") 70 | 71 | ```yaml 72 | mail: 73 | host: smtp.88.com #邮箱服务提供者 74 | username: tduck 75 | password: 12345678 76 | ``` 77 | 78 | -------------------------------------------------------------------------------- /guide/faq.md: -------------------------------------------------------------------------------- 1 | # 常见问题 2 | 3 | ## 1.Q:mvn clean package -DskipTests时报错 4 | 5 | ``` 6 | [ERROR] Failed to execute goal on project tduck-api: Could not resolve dependencies for project com.tduck:tduck-api:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.tduck:tduck-common:jar:0.0.1-SNAPSHOT, com.tduck:tduck-project:jar:0.0.1-SNAPSHOT, com.tduck:tduck-account:jar:0.0.1-SNAPSHOT, com.tduck:tduck-storage:jar:0.0.1-SNAPSHOT, com.tduck:tduck-wx-mp:jar:0.0.1-SNAPSHOT: Failure to find com.tduck:tduck-common:jar:0.0.1-SNAPSHOT in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of public has elapsed or updates are forced -> [Help 1] 7 | [ERROR] 8 | [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 9 | [ERROR] Re-run Maven using the -X switch to enable full debug logging. 10 | [ERROR] 11 | [ERROR] For more information about the errors and possible solutions, please read the following articles: 12 | [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException 13 | ``` 14 | 15 | 16 | 17 | #### 解决方法:把maven的中央源换成阿里源就行 18 | 19 | ##2.部署成功之后,访问登录页一直弹出ERROR 20 | 21 | #### 解决方法:需要设置正确的微信公众号appid,secret,token;请注意,图中示例对应参数已经加密,参数也可以支持不加密填写 22 | ![enter image description here](https://images.gitee.com/uploads/images/2021/0413/111637_100aa7b5_1674451.png "屏幕截图.png") 23 | 24 | ## 3.启动的时候报错:Createing bean with name "wxMpService" defined in Class path ..... 25 | #### 解决方法:检查你的配置文件,是否已经配置了微信登录的参数,具体请查看:[部署文档-后端-微信参数配置](https://gitee.com/TDuckApp/tduck-platform/wikis/%E5%90%8E%E7%AB%AF%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE?sort_id=3681757) 26 | 27 | ## 为什么我的滑动验证码出不来 28 | 29 | #### 滑动验证码无需请求第三方平台,无法显示请检查后台接口请求是否正常,多半是nginx配置错误 30 | -------------------------------------------------------------------------------- /guide/deploy.md: -------------------------------------------------------------------------------- 1 | # 线上部署 2 | 3 | ## 后端部署 4 | 5 | `mvn clean install -DskipTests` 6 | `cd tduck-platform/tduck-api` 7 | `mvn clean package -DskipTests` 8 | `nohup -Dfile.encoding=UTF-8 -jar tduck-api.jar &` 9 | 10 | nohup意为后台不挂断运行,与是否账号退出无关 11 | 12 | ## 前端部署 13 | 14 | 拉取前端代码 15 | 进入tduck-front目录执行命令 16 | 试用cnpm或者yarn都可以 推荐使用yarn 17 | yarn命令 18 | ``` 19 | npm install -g yarn 20 | yarn install 21 | yarn run build 22 | ``` 23 | 24 | cnpm 命令 25 | 26 | ``` 27 | npm install -g cnpm --registry=https://registry.npm.taobao.org 28 | cnpm install 29 | cnpm run build 30 | ``` 31 | 32 | 33 | 构建打包成功之后,会在根目录生成 `dist` 文件夹,里面就是构建打包好的文件,通常是 `***.js` 、`***.css`、`index.html` 等静态文件。 34 | 35 | 通常情况下 `dist` 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 `index.html` 是项目的入口页面。 36 | 37 | #### nginx配置 38 | 39 | ```nginx 40 | worker_processes 1; 41 | 42 | events { 43 | worker_connections 1024; 44 | } 45 | 46 | http { 47 | include mime.types; 48 | default_type application/octet-stream; 49 | sendfile on; 50 | keepalive_timeout 65; 51 | 52 | server { 53 | listen 80; 54 | server_name localhost; 55 | 56 | location / { 57 | # 静态文件地址 58 | root /usr/share/nginx/html/tduck; 59 | try_files $uri $uri/ /index.html; 60 | index index.html index.htm; 61 | } 62 | 63 | location /tduck-api/{ 64 | proxy_set_header Host $http_host; 65 | proxy_set_header X-Real-IP $remote_addr; 66 | proxy_set_header REMOTE-HOST $remote_addr; 67 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 68 | # 改为你后端接口地址 http://xxxx/tduck-api/ 69 | proxy_pass http://localhost:8999/tduck-api/; 70 | } 71 | 72 | error_page 500 502 503 504 /50x.html; 73 | location = /50x.html { 74 | root html; 75 | } 76 | } 77 | } 78 | ``` 79 | 80 | -------------------------------------------------------------------------------- /guide/close-validate.md: -------------------------------------------------------------------------------- 1 | # 图形验证码 2 | 3 | ### 图形验证码能使敏感操作更安全,建议开启。 4 | 如需关闭请打开tduck-platform/tduck-api/src/main/resources/application.yml 5 | ```yaml 6 | 7 | aj: 8 | captcha: 9 | enable: true # 关闭验证码 10 | ``` 11 | 12 | ### 验证码拦截逻辑 13 | tduck-api/src/main/java/com/tduck/cloud/api/web/filter/ValidateCodeFilter.java 14 | ``` 15 | public class ValidateCodeFilter implements Filter { 16 | 17 | //需要进行滑动验证的接口 18 | private List validateUrls = Lists.newArrayList( 19 | "/login/account", 20 | "/retrieve/password/email", 21 | "/retrieve/password/phone/code"); 22 | 23 | @Override 24 | public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 25 | HttpServletRequest httpServletRequest = (HttpServletRequest) request; 26 | // 如果不是需要拦截的 则不拦截 27 | if (!StrUtil.containsAnyIgnoreCase(httpServletRequest.getRequestURI(), 28 | validateUrls.toArray(new String[validateUrls.size()]))) { 29 | filterChain.doFilter(request, response); 30 | return; 31 | } 32 | // 判断是否携带滑动验证码验证 33 | String code = request.getParameter("slideCode"); 34 | if (StrUtil.isBlank(code)) { 35 | ResponseUtils.outJson(response, Result.failed(ResponseCodeConstants.NEED_VERIFICATION, "")); 36 | return; 37 | } 38 | CaptchaService captchaService = SpringContextUtils.getBean(CaptchaService.class); 39 | CaptchaVO vo = new CaptchaVO(); 40 | vo.setCaptchaVerification(code); 41 | if (!captchaService.verification(vo).isSuccess()) { 42 | ResponseUtils.outJson(response, Result.failed(ResponseCodeConstants.FAIL, ResponseCodeConstants.VALIDATE_CODE_FAIL_MSG)); 43 | return; 44 | } 45 | filterChain.doFilter(request, response); 46 | } 47 | 48 | } 49 | 50 | ``` 51 | -------------------------------------------------------------------------------- /.vuepress/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | dest: "docs", 3 | base: "/", 4 | markdown: { 5 | externalLinks: { 6 | target: "_blank", 7 | rel: "noopener noreferrer" 8 | } 9 | }, 10 | locales: { 11 | "/": { 12 | lang: "zh-CN", 13 | title: "Tduck填鸭", 14 | description: "企业表单问卷收集" 15 | } 16 | }, 17 | head: [ 18 | ["link", {rel: "icon", href: `/favicon.ico`}] 19 | ], 20 | themeConfig: { 21 | repo: "TDuckCloud/tduck-platform", 22 | docsRepo: "TDuckCloud/tduck-doc", 23 | editLinks: true, 24 | locales: { 25 | "/": { 26 | label: "简体中文", 27 | selectText: "Languages", 28 | editLinkText: "在 GitHub 上编辑此页", 29 | lastUpdated: "上次更新", 30 | nav: [ 31 | { 32 | text: "指南", 33 | link: "/guide/" 34 | }, 35 | { 36 | text: "更新日志", 37 | link: "/log/" 38 | } 39 | ], 40 | sidebar: { 41 | "/guide/": genGuideSidebar(true), 42 | "/log/": genUpdateLogSidebar(true) 43 | } 44 | } 45 | } 46 | }, 47 | plugins: [] 48 | }; 49 | 50 | function genGuideSidebar(isZh) { 51 | return [ 52 | { 53 | title: isZh ? "快速入门" : "Getting Start", 54 | collapsable: false, 55 | children: ["", "local-run", "deploy",] 56 | }, 57 | { 58 | title: isZh ? "项目架构" : "Core", 59 | collapsable: false, 60 | children: [ 61 | ] 62 | }, 63 | { 64 | title: isZh ? "系统配置" : "Core", 65 | collapsable: false, 66 | children: [ 67 | "api-config", 68 | "storage-config", 69 | "front-config", 70 | "api-security", 71 | "close-validate", 72 | "close-wx", 73 | ] 74 | }, 75 | { 76 | title: "FAQ", 77 | collapsable: false, 78 | children: ["faq"] 79 | } 80 | ]; 81 | } 82 | 83 | 84 | 85 | function genUpdateLogSidebar(isZh) { 86 | return [ 87 | { 88 | title: isZh ? "更新日志" : "Config", 89 | collapsable: false, 90 | children: [""] 91 | } 92 | ]; 93 | } 94 | -------------------------------------------------------------------------------- /guide/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | ![relationship](/img/banner-logo.png) 3 |

Tduck 填鸭 —— 表单收集器

4 | 5 | 6 | 7 | ![ ](https://img.shields.io/:license-apache-blue.svg) 8 | ![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) 9 | ![ ](https://img.shields.io/badge/BY-SpringBoot-green) 10 | ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) 11 | [![star](https://gitee.com/TDuckApp/tduck-platform/badge/star.svg?theme=white)](https://gitee.com/TDuckApp/tduck-platform/stargazers) 12 | ### 联系作者/加入社群 13 | ![relationship](/img/171259_1ef11014_1674451.png) 14 | 15 |

16 | 17 | ### 平台简介 18 | 19 | Tduck, Form collection system 20 | 21 | Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 22 | 23 | 24 | ### 应用场景 25 | 26 | 主要应用与泛零售、电商、金融、调研、资料收集等行业用户,提供多种工具、多渠道、多方式收集有效信息,更好的提升客户服务,增加客户满意度。 27 | 28 | 29 | ### 功能特性 30 | ##### 界面美观,全新element-ui支持,使用流畅 31 | - 以一种全新的设计体验,告别繁琐的设计流程 32 | - 通过简单有趣的方式,轻轻松松完成表单设计 33 | - 支持表单样式模板选择,只为显现更精美的表单 34 | 35 | ##### 三大模块助力企业能力升级: 36 | - 新建表单:自定义可拖拽式表单设计 37 | - 表单设置:支持多种收集方式设置 38 | - 反馈统计:多维度统计收集的反馈数据 39 | 40 | 41 | ## 在线体验 42 | ![首页](https://images.gitee.com/uploads/images/2021/0120/121740_1fcdc627_1674451.png "屏幕截图.png") 43 | 44 | 演示地址: 45 | https://tduck.smileyi.top 46 | 47 | 演示账号/密码:可注册登录或使用测试账号 test@tduck.com/12345678 48 | 49 | ## 技术体系 50 | 51 | ### 服务端 52 | 53 | 54 | ``` 55 | - SpringBoot 56 | - Mybatis-Plus 57 | - Lombok 58 | - Hutool 59 | - Guava 60 | ``` 61 | 62 | 63 | ### 客户端 64 | 65 | ``` 66 | - Vue2 67 | - ElementUI 68 | - Echarts 69 | - Axios 70 | - nprogress 71 | ``` 72 | 73 | 74 | 75 | ### 后端项目结构 76 | 77 | - tduck-common 通用模块 78 | - tduck-account 账号模块 79 | - tduck-storage 存储模块 80 | - tduck-project 项目模块 81 | - tduck-wx-mp 微信公众号模块 82 | - tduck-api 客户端API 83 | 84 | 85 | 86 | 87 | #### 项目源码 88 | 89 | | 后端源码 | 前端源码 | 90 | |--- | --- | 91 | | https://gitee.com/TDuckApp/tduck-platform | https://gitee.com/TDuckApp/tduck-front | 92 | 93 | ## 项目规划 94 | ![tduck登录页](https://images.gitee.com/uploads/images/2021/0112/124009_1573a7c5_1674451.png "屏幕截图.png") 95 | ![首页](https://images.gitee.com/uploads/images/2021/0112/124033_27eb486e_1674451.png "屏幕截图.png") 96 | ![我的表单](https://images.gitee.com/uploads/images/2021/0112/124102_c1615270_1674451.png "屏幕截图.png") 97 | ![自定义编辑](https://images.gitee.com/uploads/images/2021/0112/124136_db03b4ce_1674451.png "屏幕截图.png") 98 | ![个人中心](https://images.gitee.com/uploads/images/2021/0308/141425_b5cf7846_1674451.png "微信截图_20210308141340.png") 99 | 目前完成框架,细节正在不断完善中,欢迎提出更多意见~ 100 | 101 | 102 | **TDuck 使用 Apache License 2.0 协议,源代码完全开源,无商业限制。 103 | 开源不易如果喜欢请给作者 Star 鼓励 👇** 104 | -------------------------------------------------------------------------------- /.vuepress/public/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 328 | 329 | --------------------------------------------------------------------------------