├── .vscode
└── settings.json
├── .gitignore
├── .prettierrc
├── .wepyignore
├── src
├── image
│ ├── my.png
│ ├── my2.png
│ ├── near.png
│ ├── avatar.jpeg
│ ├── near2.png
│ ├── result.png
│ ├── result2.png
│ └── share.png
├── common
│ ├── config.js
│ ├── login.js
│ ├── api.js
│ ├── makeGroup.js
│ ├── util.js
│ └── common.less
├── pages
│ ├── custom
│ │ ├── itemList.wpy
│ │ ├── baseInfo.wpy
│ │ └── custom.wpy
│ ├── index
│ │ ├── index.wpy
│ │ └── nearMatch.wpy
│ ├── auth
│ │ └── auth.wpy
│ ├── about
│ │ └── about.wpy
│ ├── main
│ │ ├── main.wpy
│ │ ├── mygame.wpy
│ │ └── createNewAgainst.wpy
│ ├── detail
│ │ └── detail.wpy
│ └── live
│ │ └── live.wpy
├── util
│ └── util.js
├── index.template.html
├── app.wpy
├── components
│ ├── header.wpy
│ ├── matchBaseInfo.wpy
│ ├── twoSide.wpy
│ ├── item2colunm.wpy
│ ├── cycleProgressBar.wpy
│ ├── playersList.wpy
│ ├── matchInfo.wpy
│ ├── matchActive.wpy
│ ├── matchResult.wpy
│ ├── matchDataSet.wpy
│ └── againstTable.wpy
└── tags
├── .editorconfig
├── README.md
├── .wepycache
├── package.json
└── wepy.config.js
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .DB_store
4 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
4 |
--------------------------------------------------------------------------------
/.wepyignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .DB_store
4 | *.wpy___jb_tmp___
5 |
--------------------------------------------------------------------------------
/src/image/my.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/my.png
--------------------------------------------------------------------------------
/src/image/my2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/my2.png
--------------------------------------------------------------------------------
/src/image/near.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/near.png
--------------------------------------------------------------------------------
/src/image/avatar.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/avatar.jpeg
--------------------------------------------------------------------------------
/src/image/near2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/near2.png
--------------------------------------------------------------------------------
/src/image/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/result.png
--------------------------------------------------------------------------------
/src/image/result2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/result2.png
--------------------------------------------------------------------------------
/src/image/share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasscia/newBadminton/HEAD/src/image/share.png
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/src/common/config.js:
--------------------------------------------------------------------------------
1 |
2 | const bgColorList = ['#4BC8C3', '#75C85A', '#F56E27', '#4E96F3', '#F5A623', '#FF6A6A']
3 | const statusList = ['报名中','报名结束','正在比赛','比赛结束']
4 |
5 | export {
6 | bgColorList,
7 | statusList
8 | }
--------------------------------------------------------------------------------
/src/pages/custom/itemList.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
14 |
--------------------------------------------------------------------------------
/src/util/util.js:
--------------------------------------------------------------------------------
1 | Array.prototype.remove = function (val) {
2 | var index = this.indexOf(val);
3 | if (index > -1) {
4 | this.splice(index, 1);
5 | }
6 | }
7 |
8 | Array.prototype.change = function (oldval, val) {
9 | var index = this.indexOf(oldval);
10 | if (index > -1) {
11 | this[index] = val;
12 | }
13 | }
14 |
15 | Array.prototype.numToString = function(stringArr){
16 | for(let num of this){
17 | if(Array.isArray(num)){
18 | Array.prototype.numToString.call(num, stringArr)
19 | }else{
20 | if(num > stringArr.length){
21 | }else{
22 | this.change(num, stringArr[num - 1])
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/index.template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 转 WEB DEMO
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 羽球自由赛
2 | 采用微信小程序 wepy框架编写 实现了业余羽毛球爱好者 组织团体赛的一系列功能 包括创建、报名、邀请好友、生成对阵方案、计分、统计排名等功能
3 | ## 二维码
4 | 
5 | ## 关键技术问题
6 | * 父子组件通信
7 | * 页面间通信
8 | * 翻牌动画
9 | * 圆形进度条实现
10 | ## 遇到的一些坑
11 | * 使用wepy框架 务必将开发者工具中 关闭关闭ES6转ES5 关闭上传代码时样式自动补全 关闭代码压缩上传
12 | * 标签闭合不正确 经常会导致 找不到页面 File not found: ./../../components/matchActive.wxss一般问题出在他本身或者他所引用的组件的标签没有闭合 导致 解析文件css 或者 js出错
13 | * 父子组件动态传参 传参方和受参方 设置一定要注意,type写错 可能会收不到参数 而报错 如 Right-hand side of 'instanceof' is not an object
14 | * 同一个组件 被多次引用 组件中的Data是共用的,一个引用的地方改变了他 会影响到其他组件,所以要想私有化 可以通过props 或者 引用的时候起个别名 实现
15 | * 组件引用错误 或者引用没有被定义的组件 可能会报错 如下 unexpected attribute name, near `.sync`
16 | * 尽量少用watch 比较容易出现没有按照预期更改的现象 尤其是当出现循环引用 的时候,另外 watch中改变组件Data后 要用this.$apply()使其生效
17 | * 异步函数中 改变Data this.$apply()使其生效
18 | * 路由栈 只是针对单个的tabBar的 拿不到其他tab的栈信息
19 | * 生命周期是个需要慢慢琢磨的东西
20 | ## 运行程序
21 | 克隆到本地 然后进入本地文件
22 | * npm install wepy-cli -g(如果之前安装过 请忽略)
23 | * npm install
24 | * wepy build -w
25 | * 将生成的dist 文件添加到微信开发者工具的项目中
26 | * do what you want you to
27 |
--------------------------------------------------------------------------------
/.wepycache:
--------------------------------------------------------------------------------
1 | {"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/wepy.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy-async-function/index.js":1517302333000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/app.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/page.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/component.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/event.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/base.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/util.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/mixin.js":1519786782000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy-async-function/global.js":1517302333000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/promise-polyfill/promise.js":1511627065000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/regenerator-runtime/runtime.js":1493390741000,"/Users/kunkun/qwork/badmintonAgainstPlan/node_modules/wepy/lib/native.js":1519786782000}
--------------------------------------------------------------------------------
/src/common/login.js:
--------------------------------------------------------------------------------
1 | import { api_getToken } from "./api";
2 |
3 | let userInfo = wx.getStorageSync('userInfo')
4 |
5 | //获取登录凭证code
6 | const _login = function(){
7 | return new Promise((resolve, reject = () => {console.log('wx.login fail')}) => {
8 | wx.login({
9 | success: (res) => {
10 | console.log('wx.login success')
11 | resolve(res.code)
12 | },
13 | fail: reject
14 | })
15 | })
16 | }
17 |
18 | //获取用户信息(无需登录)
19 | // const _getUserInfo = function(){
20 | // return new Promise((resolve,reject)=>{
21 | // wx.getUserInfo({
22 | // success: (res) => {
23 | // console.log('get user info success')
24 | // resolve(res.userInfo)
25 | // },
26 | // fail: reject
27 | // })
28 | // })
29 | // }
30 |
31 | const auth = async function(wxUserInfo) {
32 | let code = await _login()
33 | let userInfoWidthToken = await api_getToken(code, wxUserInfo.nickName, wxUserInfo.avatarUrl) || null
34 | if (userInfoWidthToken.token) {
35 | userInfo = userInfoWidthToken
36 | wx.setStorage({
37 | key: 'userInfo',
38 | data: userInfoWidthToken
39 | });
40 | return true
41 | }
42 | }
43 |
44 | export {
45 | auth,
46 | userInfo,
47 | }
48 |
--------------------------------------------------------------------------------
/src/pages/index/index.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
46 |
--------------------------------------------------------------------------------
/src/app.wpy:
--------------------------------------------------------------------------------
1 |
47 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "badminton",
3 | "version": "0.0.1",
4 | "description": "A WePY project",
5 | "main": "dist/app.js",
6 | "scripts": {
7 | "dev": "wepy build --watch",
8 | "build": "cross-env NODE_ENV=production wepy build --no-cache",
9 | "dev:web": "wepy build --output web",
10 | "clean": "find ./dist -maxdepth 1 -not -name 'project.config.json' -not -name 'dist' | xargs rm -rf",
11 | "test": "echo \"Error: no test specified\" && exit 1"
12 | },
13 | "wepy": {
14 | "module-a": false,
15 | "./src/components/list": "./src/components/wepy-list.wpy"
16 | },
17 | "author": "Jassica <1648511816@qq.com>",
18 | "license": "MIT",
19 | "dependencies": {
20 | "redux": "^3.7.2",
21 | "redux-actions": "^2.2.1",
22 | "redux-promise": "^0.5.3",
23 | "wepy": "^1.7.1",
24 | "wepy-async-function": "^1.4.4",
25 | "wepy-com-toast": "^1.0.2",
26 | "wepy-redux": "^1.5.3"
27 | },
28 | "devDependencies": {
29 | "babel-eslint": "^7.2.1",
30 | "babel-plugin-transform-class-properties": "^6.24.1",
31 | "babel-plugin-transform-decorators-legacy": "^1.3.4",
32 | "babel-plugin-transform-export-extensions": "^6.22.0",
33 | "babel-plugin-transform-object-rest-spread": "^6.26.0",
34 | "babel-preset-env": "^1.6.1",
35 | "cross-env": "^5.1.3",
36 | "wepy-compiler-babel": "^1.5.1",
37 | "wepy-compiler-less": "^1.3.10",
38 | "wepy-eslint": "^1.5.4",
39 | "wepy-plugin-imagemin": "^1.5.3",
40 | "wepy-plugin-uglifyjs": "^1.3.7"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/components/header.wpy:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
33 |
61 |
62 |
--------------------------------------------------------------------------------
/wepy.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | var prod = process.env.NODE_ENV === 'production';
3 |
4 | module.exports = {
5 | wpyExt: '.wpy',
6 | eslint: false,
7 | cliLogs: !prod,
8 | build: {
9 | web: {
10 | htmlTemplate: path.join('src', 'index.template.html'),
11 | htmlOutput: path.join('web', 'index.html'),
12 | jsOutput: path.join('web', 'index.js')
13 | }
14 | },
15 | resolve: {
16 | alias: {
17 | counter: path.join(__dirname, 'src/components/counter'),
18 | '@': path.join(__dirname, 'src')
19 | },
20 | aliasFields: ['wepy'],
21 | modules: ['node_modules']
22 | },
23 | compilers: {
24 | less: {
25 | compress: prod
26 | },
27 | /*sass: {
28 | outputStyle: 'compressed'
29 | },*/
30 | babel: {
31 | sourceMap: !prod,
32 | presets: [
33 | 'env'
34 | ],
35 | plugins: [
36 | 'transform-class-properties',
37 | 'transform-decorators-legacy',
38 | 'transform-object-rest-spread',
39 | 'transform-export-extensions',
40 | ]
41 | }
42 | },
43 | plugins: {
44 | },
45 | appConfig: {
46 | noPromiseAPI: ['createSelectorQuery']
47 | }
48 | }
49 |
50 | if (prod) {
51 |
52 | // 压缩sass
53 | // module.exports.compilers['sass'] = {outputStyle: 'compressed'}
54 |
55 | // 压缩js
56 | module.exports.plugins = {
57 | uglifyjs: {
58 | filter: /\.js$/,
59 | config: {
60 | }
61 | },
62 | imagemin: {
63 | filter: /\.(jpg|png|jpeg)$/,
64 | config: {
65 | jpg: {
66 | quality: 80
67 | },
68 | png: {
69 | quality: 80
70 | }
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/components/matchBaseInfo.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 时间
6 | {{matchInfo.begintime}}
7 |
8 |
9 | 地点
10 | {{matchInfo.address}}
11 |
12 |
13 | 创建者
14 | {{matchInfo.owner.real_name || matchInfo.owner.nick_name}}
15 |
16 |
17 | 状态
18 | {{matchInfo.status}}
19 |
20 |
21 | 报名人数
22 | {{matchInfo.players.length}}人已报名
23 |
24 |
25 |
26 |
27 |
52 |
53 |
--------------------------------------------------------------------------------
/src/pages/auth/auth.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
为继续操作,需提供以下授权:
8 |
9 | - 获取你的公开信息(昵称,头像等)
10 |
11 |
13 |
请升级微信版本
14 |
15 |
16 |
17 |
36 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/src/pages/about/about.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 | 赛制规制
4 |
5 | 采用“轮转制”
6 | 根据参赛人数和每人场次,自动生成对阵方案,使每个人都尽量多地与不同人搭档、对垒
7 | 兼具趣味性、竞技性
8 | 只针适用于双打比赛
9 |
10 | 使用方法
11 |
12 | 创建比赛
13 | 邀请好友参加比赛,满员后即可开赛
14 | 点击生成对阵表,程序将为您呈现所有的布阵方案
15 | 进入赛事界面,根据依次布阵方案,完成比赛,并将对阵双方得分计入程序
16 | 完成所有比赛后,可以查看比赛结果排名榜
17 |
18 |
23 |
24 |
25 |
26 |
51 |
64 |
--------------------------------------------------------------------------------
/src/components/twoSide.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
33 |
71 |
72 |
--------------------------------------------------------------------------------
/src/pages/main/main.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/src/components/item2colunm.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{item.value}}
6 |
7 |
8 |
9 |
10 |
11 |
38 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/src/pages/index/nearMatch.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 近期没什么的赛事
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
37 |
38 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/src/pages/detail/detail.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
44 |
45 |
--------------------------------------------------------------------------------
/src/pages/custom/baseInfo.wpy:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
97 |
--------------------------------------------------------------------------------
/src/components/cycleProgressBar.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{value}}
10 |
11 |
12 |
13 |
14 |
15 |
86 |
87 |
109 |
--------------------------------------------------------------------------------
/src/pages/main/mygame.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 没有参加任何比赛
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
64 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/src/components/playersList.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 长按人名删除
5 |
6 |
7 |
8 |
9 | {{playerInfo.user.real_name ||playerInfo.user.nick_name}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
65 |
66 |
67 |
146 |
--------------------------------------------------------------------------------
/src/components/matchInfo.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{matchInfo.status}}
5 | {{matchInfo.ifIn?"已报名":"未报名"}}
6 |
7 |
8 |
9 | 人数小于4,尚未达到开赛条件
10 | {{matchInfo.status}}
11 |
12 | {{matchInfo.gamename}}
13 | 创建者-{{matchInfo.owner.real_name||matchInfo.owner.nick_name}}
14 |
15 | {{matchInfo.begintime}}
16 | {{matchInfo.address}}
17 |
18 | {{matchInfo.players.length}}人已报名
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
119 |
145 |
146 |
--------------------------------------------------------------------------------
/src/components/matchActive.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
51 |
139 |
140 |
--------------------------------------------------------------------------------
/src/pages/live/live.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
125 |
126 |
--------------------------------------------------------------------------------
/src/common/api.js:
--------------------------------------------------------------------------------
1 | import {userInfo} from './login'
2 | import {fmtMatchInfo} from './util'
3 |
4 | const host = "https://kkiqq.cn/"
5 | const urlList={
6 | gameInfo: host + "api/badminton/game",
7 | gameList: {
8 | mycreate: host + "api/badminton/game",
9 | myjoin: host + "api/badminton/signuplist",
10 | all: host + "api/badminton/gamelist",
11 | },
12 | groupList: host + 'api/badminton/group',
13 | addPlayer: host + "api/badminton/game/addplayer",
14 | cancelPlayer: host + "api/badminton/game/cancel",
15 | deletePlayer: host + "api/badminton/player",
16 | getToken: host + 'api/badminton/qlogin',
17 | changeRealname: host + 'api/badminton/userrename',
18 | getPersonalInfo: host + 'api/badminton/personalinfo'
19 | };
20 |
21 | const htr = function(url , method, data){
22 | wx.showLoading({})
23 | return new Promise((resolve, reject = () => {
24 | wx.hideLoading({})
25 | }) => {
26 | wx.request({
27 | url,
28 | method,
29 | data: Object.assign(data || {}, url == urlList.getToken ? {} : {token: data && data.token || userInfo.token}),
30 | success: (res) => {
31 | let statusCode = res.statusCode
32 | let data = res.data
33 | if (statusCode >= 200 && statusCode < 300 || statusCode == 304) {
34 | if (url == urlList.getToken && data.token) {
35 | wx.hideLoading({})
36 | resolve(data)
37 | } else if (data && data.code == 1) {
38 | wx.hideLoading({})
39 | resolve(data.data || data.message)
40 | } else if (data && data.code == 401) {
41 | wx.navigateTo({
42 | url: '/pages/auth/auth',
43 | })
44 | } else {
45 | reject()
46 | }
47 | } else {
48 | reject()
49 | }
50 | },
51 | fail: reject
52 | })
53 | })
54 | }
55 | //获取token
56 | //show loading
57 | //xhr请求
58 | //hide loading
59 | const api_getToken = async function(code, nickName, avatarUrl){
60 | let url = urlList.getToken,
61 | method="GET",
62 | data={code: code,
63 | nick_name: nickName,
64 | avatar_url: avatarUrl}
65 | let res = await htr(url, method, data);
66 | return res;
67 | }
68 |
69 | const api_getMatchInfoList = async function(type, data) {
70 | let url = urlList.gameList[type];
71 | let res = await htr(url , 'GET', data);
72 | res = res || []
73 | res.map((matchInfo) => {
74 | return fmtMatchInfo(matchInfo)
75 | })
76 | return res || []
77 | }
78 |
79 | const api_getMatchInfo = async function(gameid, data) {
80 | let url = urlList.gameInfo +'\/'+gameid;
81 | let res = await htr(url, 'GET', data);
82 | res = fmtMatchInfo(res)
83 | return res || {}
84 | }
85 |
86 | const api_updateMatchInfo = async function(gameid, data) {
87 | let url = urlList.gameInfo +'\/'+gameid;
88 | let res = await htr(url, 'PUT', data);
89 | return res || {}
90 | }
91 |
92 | const api_addPlayer=async function(data){
93 | let url = urlList.addPlayer
94 | let res = await htr(url, 'POST', data)
95 | return res || {}
96 | }
97 |
98 | const api_cancelPlayer=async function(data){
99 | let url = urlList.cancelPlayer
100 | let res = await htr(url, 'DELETE', data)
101 | return res || {}
102 | }
103 |
104 | const api_deletePlayer=async function(data){
105 | let url = urlList.deletePlayer
106 | let res = await htr(url, 'DELETE', data)
107 | return res || {}
108 | }
109 |
110 | const api_changeRealname=async function(data){
111 | let url = urlList.changeRealname;
112 | let res = await htr(url, 'POST', data);
113 | return res || {}
114 | }
115 |
116 | const api_createGame = async function(data){
117 | // data={
118 | // token:token,
119 | // gamename:formData.theme,
120 | // status:0,
121 | // note:null,
122 | // address:formData.address,
123 | // begintime:formData.begintime,
124 | // auto_signup:formData.auto_signup
125 | // };
126 | let url = urlList.gameInfo;
127 | let res = await htr(url, 'POST',data);
128 | return res || {}
129 | }
130 |
131 | const api_postGroupList = async function(data) {
132 | let url = urlList.groupList;
133 | let res = await htr(url, 'POST',data);
134 | return res || {}
135 | }
136 |
137 | const api_getGroupList = async function(data) {
138 | let url = urlList.groupList;
139 | let res = await htr(url, 'GET',data);
140 | return res || {}
141 | }
142 |
143 | const api_putGroupInfo = async function(groupid, data){
144 | let url = urlList.groupList+'\/'+groupid
145 | let res=await htr(url, 'PUT',data)
146 | return res || {}
147 | }
148 |
149 | const api_getPersonalInfo = async function(data){
150 | let url = urlList.getPersonalInfo
151 | let res= await htr(url, 'GET', data)
152 | return res || {}
153 | }
154 | export {
155 | api_getToken,
156 | api_getMatchInfoList,
157 | api_getMatchInfo,
158 | api_updateMatchInfo,
159 | api_addPlayer,
160 | api_cancelPlayer,
161 | api_deletePlayer,
162 | api_changeRealname,
163 | api_createGame,
164 | api_postGroupList,
165 | api_getGroupList,
166 | api_putGroupInfo,
167 | api_getPersonalInfo,
168 | }
169 |
--------------------------------------------------------------------------------
/src/pages/main/createNewAgainst.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 | 去看看近期的比赛
4 |
10 |
11 |
12 |
35 |
36 |
169 |
--------------------------------------------------------------------------------
/src/pages/custom/custom.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 | {{userInfo.nick_name}}
10 |
11 |
12 |
13 |
14 | 战绩数据
15 |
16 |
17 |
18 | 总场次
19 | {{myMatchData.total}}
20 |
21 |
22 | 胜利
23 | {{myMatchData.win}}
24 |
25 |
26 | 失败
27 | {{myMatchData.failed}}
28 |
29 |
30 | 胜率
31 | {{myMatchData.winrate}}%
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | 我的资料
42 | 修改
43 |
44 |
45 | 关于
46 |
47 |
48 |
49 |
50 |
51 |
52 |
140 |
--------------------------------------------------------------------------------
/src/components/matchResult.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 姓名
9 | 胜-负
10 | 净胜分
11 | 名次
12 |
13 |
14 |
15 | {{result[uid][5]||result[uid][6]}}
16 | {{result[uid][1]}}-{{result[uid][2]}}
17 | {{result[uid][0]}}
18 | {{result[uid][4]}}
19 |
20 |
21 |
22 |
23 |
85 |
183 |
184 |
185 |
--------------------------------------------------------------------------------
/src/components/matchDataSet.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{array[index]}}
7 |
8 |
9 |
10 |
11 |
12 | {{array[index] || '请选择'}}
13 |
14 |
15 |
16 |
17 | {{msg}}
18 |
19 |
21 |
22 |
23 |
24 |
63 |
64 |
65 |
189 |
--------------------------------------------------------------------------------
/src/components/againstTable.wpy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{groupInfo.id_a1.real_name||groupInfo.id_a1.nick_name}}
7 | {{groupInfo.id_a2.real_name||groupInfo.id_a2.nick_name}}
8 |
9 |
10 |
11 |
12 |
13 | {{groupInfo.score_a}}
14 |
15 | 第{{index+1}}场
16 |
17 |
18 |
19 |
20 | 第{{index+1}}场
21 |
22 | {{groupInfo.score_b}}
23 |
24 |
25 |
26 |
27 |
28 | {{groupInfo.id_b1.real_name||groupInfo.id_b1.nick_name}}
29 | {{groupInfo.id_b2.real_name||groupInfo.id_b2.nick_name}}
30 |
31 |
32 |
33 | {{msg[state]}}
34 |
35 |
36 |
37 |
152 |
153 |
154 |
220 |
--------------------------------------------------------------------------------
/src/common/makeGroup.js:
--------------------------------------------------------------------------------
1 | import {htr} from './util';
2 | //方案1-Badmin结束
3 | function Badmin(personNum,roundPer){
4 | this.personNum = personNum;//参赛人数
5 | this.roundPer = roundPer;//预设的 每人参赛场数
6 | this.maxTime = Math.ceil(roundPer / (personNum - 1), 0);//为了公平,设定的 两人组队teamMeat 在整个过程中 出现的最多次数
7 | this.minTime = Math.floor(roundPer / (personNum - 1),0);//为了公平,设定的 两人组队teamMeat 在整个过程中 出现的最少次数
8 | this.maxRepeatTeam = 0;
9 | this.round = personNum * roundPer / 4;//总共的场数 四个人算一场
10 | this.result = {};//数组用于存放 最终结果
11 | this.personList=[];
12 | this.personFlag = [];//数组用于存放 每个人在全过程中出现的次数
13 | this.teamMateList=[];
14 | this.teamMateFlag = [];//数组用于存放 每两个人组队teamMeat 在全过程中出现的次数
15 |
16 | for (let i = 0; i < this.personNum; i++) {
17 | this.personList.push(i+1);
18 | for (let j = i + 1; j < this.personNum; j++) {
19 | let teamMate = [i + 1, j + 1].join(' ');
20 | this.teamMateList.push(teamMate);//初始化 teamMate标示库
21 | }
22 | }
23 | this.maxRepeatTeam=this.round*2-this.minTime*this.teamMateList.length;
24 | this.personFlag.length=this.personList.length;
25 | this.teamMateFlag.length=this.teamMateList.length;
26 |
27 | this.start();
28 | }
29 | Badmin.prototype.start = function () {//从这里开始
30 | if (0 !== this.personNum * this.roundPer % 4) {
31 | this.result = '数据不符合要求,应该能被4整除';
32 | return
33 | }
34 | if (this.personNum < 4) {
35 | this.result = '数据不符合要求,人数不能少于4人';
36 | return
37 | }
38 | this.getRes();
39 | if (this.result.length < this.round) {
40 | this.result = "排阵失败 Try one more time!";
41 | // console.log('personflags=', this.personFlag, '\nteammateflags=', this.teamMateFlag);
42 | return
43 | }
44 | // console.log('第',tryTimes_1,'次 计算出结果');
45 | console.log('personflags=', this.personFlag, '\nteammateflags=', this.teamMateFlag);
46 | }
47 | Badmin.prototype.init = function () {
48 | this.result = {1:[],2:[],3:[],4:[]};//初始化结果数组
49 | this.personFlag.fill(0)
50 | this.teamMateFlag.fill(0)
51 | }
52 | Badmin.prototype.getRes=function(){
53 | let tryTimes_1 = 0;//标示整体的尝试次数
54 | do{
55 | this.init();
56 | for(let round=0;round{
74 | return value>=this.maxTime
75 | })
76 | if(upToLimit.length>=this.maxRepeatTeam){
77 | limit=this.minTime;
78 | }
79 | if(verTeamMateFlag[index_teamMate]<=limit){
80 | // if(this.teamMateFlag[index_teamMate]item[1]){
95 | swip(item,0,1)
96 | }
97 | if(item[2]>item[3]){
98 | swip(item,2,3)
99 | }
100 | this.update(item)
101 | }
102 | }
103 | tryTimes_1++
104 | } while (this.result[1].lengthi && !flag;j--){//item[1]
186 | for(let k=0;kk && !flag;l--){//item[3]
189 | if(l!==i && l!==j){
190 | let item;
191 | if(this.nextItem){
192 | item=this.nextItem;
193 | flag=this.judge(item);
194 | }
195 | if(!flag){
196 | item=[this.restPerson[i],this.restPerson[j],this.restPerson[k],this.restPerson[l]]
197 | flag=this.judge(item)
198 | }
199 | if(flag){
200 | this.update()
201 | }
202 | }
203 | }
204 | }
205 | }
206 | }
207 | }
208 | }while(this.result[1].length < this.round && flag)
209 | }
210 | //判断 已经组队的 是否满足规则
211 | badmin.prototype.judge = function (item) {
212 | // 规则2:同两个人 在所有组队中 出现的次数最多为max
213 | let teamA = item.slice(0, 2).join(' ');
214 | let teamB = item.slice(2, 4).join(' ');
215 | if (Math.max(this.teamMateFlag[teamA], this.teamMateFlag[teamB])+1 > this.maxTime) {
216 | return false
217 | }
218 | // 规则3:每一轮结束后,每个人的场次数量相差最多为1;这是一条软规则,防止最终结果排阵失败
219 | let verPersonFlag=Object.assign({},this.personFlag)
220 | for(let i=0;i<4;i++){
221 | verPersonFlag[item[i]]++
222 | }
223 | let verPersonFlag_arr=Object.values(verPersonFlag)
224 | if(Math.max(...verPersonFlag_arr)-Math.min(...verPersonFlag_arr)>1){
225 | return false
226 | }
227 | // 规则4:每一轮结束后,每组队员的场次数量相差最多为1;这是一条软规则,防止最终结果排阵失败,
228 | let verTeamMateFlag=Object.assign({},this.teamMateFlag)
229 | verTeamMateFlag[teamA]++;
230 | verTeamMateFlag[teamB]++;
231 | let verTeamMateFlag_arr=Object.values(verTeamMateFlag);
232 | let max=Math.max(...verTeamMateFlag_arr);
233 | let min=Math.min(...verTeamMateFlag_arr)
234 | if(max-min>1){
235 | return false
236 | }
237 | //规则5:当试排后 personFlag标示 只有4个人可选的时候,看下一下这4的人是否能够组队 如果不能组队,则试排失败
238 | let minFlag=Math.min(...Object.values(verPersonFlag))
239 | let optPerson=[];
240 | for(let key in verPersonFlag){
241 | if(verPersonFlag[key]==minFlag){
242 | optPerson.push(parseInt(key))
243 | }
244 | }
245 | if(optPerson.length===4){
246 | this.nextItem=null;
247 | for(let i=1;i<4;i++){//第1位和其他三位均尝试组合
248 | let j,k;
249 | for(let m=1;m<4;m++){//找出剩余的2位
250 | if(m!==i){
251 | if(!j){
252 | j=m
253 | }else if(!k){
254 | k=m
255 | }
256 | }
257 | }
258 | let a1=optPerson[0],a2=optPerson[i],b1=optPerson[j],b2=optPerson[k];
259 | let verTeamA=[a1,a2].join(' ');
260 | let verTeamB=[b1,b2].join(' ');
261 | if(Math.max(verTeamMateFlag[verTeamA],verTeamMateFlag[verTeamB])==min){
262 | i=4
263 | this.nextItem=[a1,a2,b1,b2]
264 | }
265 | }
266 | if(!this.nextItem){
267 | return false
268 | }
269 | }
270 | this.currentItem=item
271 | return true
272 | }
273 | badmin.prototype.update=function(){
274 | //当满足以上4个规则时候,跟新数据状态
275 | for(let i=0;i<4;i++){
276 | this.result[i+1].push(this.currentItem[i]);//更新result
277 | this.personFlag[this.currentItem[i]]++;//更新personFlag
278 | if ((this.personFlag[this.currentItem[i]] == this.roundPer)) {//更新restPerson的数据
279 | let index=this.restPerson.indexOf(this.currentItem[i]);
280 | this.restPerson.splice(index, 1);
281 | }
282 | }
283 | //依次更新 teamMateflag的数据
284 | let teamA = this.currentItem.slice(0, 2).join(' ');
285 | let teamB = this.currentItem.slice(2, 4).join(' ');
286 | this.teamMateFlag[teamA]++;
287 | this.teamMateFlag[teamB]++;
288 | // return true
289 | }
290 | //方案1-badmin结束
291 |
292 | //方案2
293 | const requestTableList = async function(personCount,roundCount) {
294 | let url = `https://gzbtestsystem.cn/badminton/againsttable?NumberOfPeople=${personCount}&RoundsOfPerson=${roundCount}&format=json`;
295 | let method = "GET";
296 | let data={};
297 | let res=await htr(url,method,data);
298 | if(res.data.AgainstTable){
299 | return res.data.AgainstTable
300 | }
301 | if(res.data.ResponseStatus){
302 | // console.log(res.data.ResponseStatus.Message)
303 | return res.data.ResponseStatus.Message
304 | }
305 | }
306 | //方案结束
307 |
308 | export { Badmin,badmin,requestTableList}
309 |
--------------------------------------------------------------------------------
/src/common/util.js:
--------------------------------------------------------------------------------
1 | import {userInfo} from './login'
2 | import {statusList} from './config'
3 |
4 | const share = function(path){
5 | return {
6 | path: path,
7 | imageUrl: '/image/share.png',
8 | success: function(res) {
9 | console.log("转发成功",res,path)
10 | },
11 | fail: function(res) {
12 | console.log("转发失败",res,path)
13 | }
14 | }
15 | }
16 |
17 | const fmtMatchInfo = function(matchInfo){
18 | matchInfo.progressData = calcprogress(matchInfo)
19 | matchInfo.ifIn = _judgeIfIn(matchInfo)
20 | matchInfo.groupWithInfo = _getGroupListWithPlayerInfo(matchInfo)
21 | matchInfo.contorlAttr = _calcContorlAttr(matchInfo)
22 | matchInfo.limitForLive = _calcLimitForLive(matchInfo)
23 |
24 | _transStatus(matchInfo)
25 | _transTime(matchInfo)
26 | return matchInfo;
27 | }
28 |
29 | const formateDate=(time)=>{
30 | const days=['星期日', '星期一','星期二','星期三','星期四','星期五','星期六']
31 | const day = days[time.getDay()]
32 | const month = time.getMonth() + 1
33 | const date = time.getDate()
34 | const hour = formatNumber(time.getHours())
35 | const minute = formatNumber(time.getMinutes())
36 | const joincode=[' ' , '月', '日 ', ':', '']
37 | return [day, month, date, hour, minute].reduce((string,curValue,curKey)=>{
38 | return string + curValue + joincode[curKey]
39 | }, '')
40 | }
41 |
42 | const formateTime =(date, mark='/') => {
43 | const year = date.getFullYear()
44 | const month = date.getMonth() + 1
45 | const day = date.getDate()
46 | const hour = date.getHours()
47 | const minute = date.getMinutes()
48 | const second = date.getSeconds()
49 |
50 | return [year, month, day].map(formatNumber).join(mark) + ' ' + [hour, minute, second].map(formatNumber).join(':')
51 | }
52 |
53 | const formatNumber = n => {
54 | //改成两位数
55 | n = n.toString()
56 | return n[1] ? n : '0' + n
57 | }
58 |
59 |
60 | const calcprogress=function(matchInfo){
61 | let doneNum=0
62 | let totalNum=0
63 | let progress=0
64 | let groupList=matchInfo.group
65 | if(!groupList || !groupList.length){
66 | return{doneNum,totalNum,progress}
67 | }
68 | let doneList=groupList.filter(groupInfo => {
69 | return groupInfo.status
70 | });
71 | doneNum=doneList.length
72 | totalNum=groupList.length
73 | if(totalNum){
74 | progress=Math.round(doneNum/totalNum*100,2)
75 | }
76 | return {doneNum, totalNum, progress}
77 | }
78 |
79 | export {
80 | formateDate,
81 | formateTime,
82 | fmtMatchInfo,
83 | formatNumber,
84 | share,
85 | calcprogress
86 | }
87 |
88 | const _judgeIfIn=function(matchInfo){
89 | let players=matchInfo.players
90 | let uid=wx.getStorageSync('userInfo').uid
91 | let ifIn=false;
92 | if(Array.isArray(players)){
93 | ifIn=players.some((player)=>{return player.user.uid===uid})
94 | }
95 | return ifIn
96 | }
97 |
98 | const _getGroupListWithPlayerInfo=function(matchInfo){
99 | let groupListOnlyPlayerUid=[]
100 | let groupListWithPlayerInfo=[]
101 | let playersList=[]
102 | if(matchInfo.players){
103 | playersList=matchInfo.players
104 | }else{return []}
105 | if(matchInfo.group){
106 | groupListOnlyPlayerUid=matchInfo.group
107 | }else{return []}
108 |
109 | let uKey=['id_a1','id_a2','id_b1','id_b2']
110 | groupListOnlyPlayerUid.forEach((groupInfo,index)=>{
111 | groupListWithPlayerInfo[index]=groupInfo
112 | for(let key of uKey){
113 | let uid=groupInfo[key]
114 | groupListWithPlayerInfo[index][key] = _getUserInfoByUid(uid,playersList)
115 | }
116 | })
117 | return groupListWithPlayerInfo
118 | }
119 |
120 | const _calcContorlAttr=function(matchInfo){
121 | let contorlAttr={}
122 | if(!matchInfo){return {}}
123 | let userInfo=wx.getStorageSync('userInfo')
124 | contorlAttr.ifOwner= matchInfo.owner.uid===userInfo.uid
125 | contorlAttr.ifDone=matchInfo.status === 3
126 | contorlAttr.ifGoingon=(matchInfo.status === 2)
127 | contorlAttr.ifStarted=(matchInfo.status > 1)
128 | contorlAttr.ifStopSingup=(matchInfo.status >=1 || matchInfo.players.length >= 16 )
129 | contorlAttr.ifOkToStart=(matchInfo.players.length >=4 && contorlAttr.ifOwner && matchInfo.status < 2)
130 | contorlAttr.ifOktoSignup=(!matchInfo.ifIn &&! contorlAttr.ifStopSingup)
131 | contorlAttr.ifOktoSignout=(matchInfo.ifIn &&! contorlAttr.ifStopSingup)
132 | contorlAttr.ifOktoShare=contorlAttr.ifStarted
133 | contorlAttr.ifOktoInviate=!contorlAttr.ifStopSingup
134 | return contorlAttr
135 | }
136 | //判断权限
137 | const _calcLimitForLive=function(matchInfo){
138 | let my_uid=wx.getStorageSync('userInfo').uid
139 | if(!my_uid){//
140 | return 'readOnly'
141 | }
142 | if(matchInfo.owner.uid!==my_uid){
143 | return'readOnly'
144 | }
145 | if(matchInfo.status===3){
146 | return'readOnly'
147 | }
148 | if(matchInfo.status===2){
149 | return'writableOnlyScore'
150 | }
151 | return'writableAll'
152 | }
153 |
154 | //修改状态
155 | const _transStatus = function(matchInfo) {
156 | matchInfo.status = statusList[matchInfo.status || 0]
157 | }
158 |
159 | const _transTime = function(matchInfo) {
160 | matchInfo.begintime=formateDate(new Date(matchInfo.begintime));
161 | matchInfo.created_at=formateDate(new Date(matchInfo.created_at));
162 | matchInfo.updated_at=formateDate(new Date(matchInfo.updated_at));
163 | }
164 |
165 | const _getUserInfoByUid = function(uid, playersList){
166 | let results = playersList.filter(playerInfo=>{
167 | return playerInfo.userid===uid
168 | })
169 | if(results.length){
170 | let userInfo={...results[0].user}
171 | userInfo.uid=results[0].userid;
172 | return userInfo
173 | }
174 | }
--------------------------------------------------------------------------------
/src/tags:
--------------------------------------------------------------------------------
1 | !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2 | !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3 | !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
4 | !_TAG_PROGRAM_NAME Exuberant Ctags //
5 | !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
6 | !_TAG_PROGRAM_VERSION 5.8 //
7 | 0 common/makeGroup.js /^ swip(item,0,1)$/;" v
8 | 2 common/makeGroup.js /^ swip(item,2,3)$/;" v
9 | Array util/util.js /^Array.prototype.remove = function (val) {$/;" c
10 | Array.Array util/util.js /^ if(Array.isArray(num)){$/;" c
11 | Array.change util/util.js /^Array.prototype.change = function (oldval, val) {$/;" m
12 | Array.numToString util/util.js /^Array.prototype.numToString = function(stringArr){$/;" m
13 | Array.remove util/util.js /^Array.prototype.remove = function (val) {$/;" m
14 | Badmin common/makeGroup.js /^ function Badmin(personNum,roundPer){$/;" c
15 | Badmin common/makeGroup.js /^ function Badmin(personNum,roundPer){$/;" f
16 | Badmin.init common/makeGroup.js /^ Badmin.prototype.init = function () {$/;" m
17 | Badmin.start common/makeGroup.js /^ Badmin.prototype.start = function () {\/\/从这里开始$/;" m
18 | Badmin.this.result.1 common/makeGroup.js /^ this.result = {1:[],2:[],3:[],4:[]};\/\/初始化结果数组$/;" p
19 | a1 common/makeGroup.js /^ let a1=optPerson[0],a2=optPerson[i],b1=optPerson[j],b2=optPerson[k];$/;" v
20 | a2 common/makeGroup.js /^ this.nextItem=[a1,a2,b1,b2]$/;" v
21 | addPlayer common/common.js /^ addPlayer,$/;" v
22 | addplayerURL common/api.js /^ addplayerURL:"https:\/\/kkiqq.cn\/api\/badminton\/game\/addplayer",$/;" v
23 | addplayerURL common/util.js /^ addplayerURL:"https:\/\/kkiqq.cn\/api\/badminton\/game\/addplayer",$/;" v
24 | address common/common.js /^ address:formData.address,$/;" v
25 | auto_signup common/common.js /^ auto_signup:formData.auto_signup$/;" v
26 | avatarUrl common/common.js /^ let avatarUrl=resOfuserInfo.userInfo.avatarUrl$/;" v
27 | avatar_url common/api.js /^ avatar_url:avatarUrl}$/;" v
28 | avatar_url common/util.js /^ avatar_url:avatarUrl}$/;" v
29 | badmin common/makeGroup.js /^ function badmin(personNum, roundPer) {$/;" f
30 | badmin common/makeGroup.js /^ }$/;" c
31 | badmin common/makeGroup.js /^ export { Badmin,badmin,requestTableList}$/;" v
32 | badmin.getRes common/makeGroup.js /^ badmin.prototype.getRes = function () {$/;" m
33 | badmin.init common/makeGroup.js /^ badmin.prototype.init = function () {$/;" m
34 | badmin.start common/makeGroup.js /^ badmin.prototype.start = function () {\/\/从这里开始$/;" m
35 | badmin.this.result.1 common/makeGroup.js /^ this.result = { 1: [], 2: [], 3: [], 4: [] };\/\/初始化结果数组$/;" p
36 | begintime common/api.js /^ matchInfo.begintime=formateDate(new Date(matchInfo.begintime));$/;" v
37 | begintime common/common.js /^ begintime:formData.begintime,$/;" v
38 | begintime common/util.js /^ matchInfo.begintime=formateDate(new Date(matchInfo.begintime));$/;" v
39 | biger common/makeGroup.js /^ let biger=Math.max(item[i-1],this.personList[index_person]);$/;" v
40 | change util/util.js /^Array.prototype.change = function (oldval, val) {$/;" f
41 | change util/util.js /^Array.prototype.change = function (oldval, val) {$/;" v
42 | changeRealname common/common.js /^ changeRealname,$/;" v
43 | changeRealnameURl common/api.js /^ changeRealnameURl:'https:\/\/kkiqq.cn\/api\/badminton\/userrename',$/;" v
44 | changeRealnameURl common/util.js /^ changeRealnameURl:'https:\/\/kkiqq.cn\/api\/badminton\/userrename',$/;" v
45 | code common/common.js /^ let code=resOfcode.code;$/;" v
46 | const common/api.js /^$/;" f
47 | const common/common.js /^}$/;" f
48 | const common/util.js /^$/;" f
49 | const.addplayerURL common/api.js /^ getGameListAllURL:"https:\/\/kkiqq.cn\/api\/badminton\/gamelist",$/;" p
50 | const.addplayerURL common/util.js /^ getGameListAllURL:"https:\/\/kkiqq.cn\/api\/badminton\/gamelist",$/;" p
51 | const.changeRealnameURl common/api.js /^ getTokenURl:'https:\/\/kkiqq.cn\/api\/badminton\/qlogin',$/;" p
52 | const.changeRealnameURl common/util.js /^ getTokenURl:'https:\/\/kkiqq.cn\/api\/badminton\/qlogin',$/;" p
53 | const.getGameInfoURL common/api.js /^const URLList={$/;" p
54 | const.getGameInfoURL common/util.js /^const URLList={$/;" p
55 | const.getGameListAllURL common/api.js /^ getGameListMyjoinURL:"https:\/\/kkiqq.cn\/api\/badminton\/signuplist",$/;" p
56 | const.getGameListAllURL common/util.js /^ getGameListMyjoinURL:"https:\/\/kkiqq.cn\/api\/badminton\/signuplist",$/;" p
57 | const.getGameListMyURL common/api.js /^ postGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
58 | const.getGameListMyURL common/util.js /^ postGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
59 | const.getGameListMyjoinURL common/api.js /^ getGameListMyURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
60 | const.getGameListMyjoinURL common/util.js /^ getGameListMyURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
61 | const.getGroupInfoURl common/api.js /^ postGroupListURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
62 | const.getGroupInfoURl common/util.js /^ postGroupListURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
63 | const.getMyMatchDataURL common/api.js /^ putGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
64 | const.getMyMatchDataURL common/util.js /^ putGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
65 | const.getTokenURl common/api.js /^ addplayerURL:"https:\/\/kkiqq.cn\/api\/badminton\/game\/addplayer",$/;" p
66 | const.getTokenURl common/util.js /^ addplayerURL:"https:\/\/kkiqq.cn\/api\/badminton\/game\/addplayer",$/;" p
67 | const.postGameInfoURL common/api.js /^ putGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
68 | const.postGameInfoURL common/util.js /^ putGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
69 | const.postGroupListURl common/api.js /^ changeRealnameURl:'https:\/\/kkiqq.cn\/api\/badminton\/userrename',$/;" p
70 | const.postGroupListURl common/util.js /^ changeRealnameURl:'https:\/\/kkiqq.cn\/api\/badminton\/userrename',$/;" p
71 | const.putGameInfoURL common/api.js /^ getGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
72 | const.putGameInfoURL common/util.js /^ getGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" p
73 | const.putGroupInfoURl common/api.js /^ getGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
74 | const.putGroupInfoURl common/util.js /^ getGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" p
75 | contorlAttr common/common.js /^ matchInfo.contorlAttr=calcContorlAttr(matchInfo)$/;" v
76 | contorlAttr common/common.js /^ matchInfo.contorlAttr=calcContorlAttr(matchInfo)$/;" v
77 | contorlAttr common/common.js /^ let contorlAttr={}$/;" v
78 | createGame common/common.js /^ createGame,$/;" v
79 | created_at common/api.js /^ matchInfo.created_at=formateDate(new Date(matchInfo.created_at));$/;" v
80 | created_at common/util.js /^ matchInfo.created_at=formateDate(new Date(matchInfo.created_at));$/;" v
81 | currentItem common/makeGroup.js /^ this.currentItem,$/;" v
82 | currentItem common/makeGroup.js /^ this.currentItem=item$/;" v
83 | data common/api.js /^ data={code:code,$/;" v
84 | data common/api.js /^ data,$/;" v
85 | data common/api.js /^ data: data$/;" v
86 | data common/common.js /^ data=options;$/;" v
87 | data common/common.js /^ data={$/;" v
88 | data common/common.js /^ data={token:token,$/;" v
89 | data common/common.js /^ data={};$/;" v
90 | data common/common.js /^ let data={token}$/;" v
91 | data common/common.js /^ let data={};$/;" v
92 | data common/makeGroup.js /^ let data={};$/;" v
93 | data common/util.js /^ data={code:code,$/;" v
94 | data common/util.js /^ data,$/;" v
95 | data common/util.js /^ data: data$/;" v
96 | doneList common/common.js /^ let doneList=groupList.filter(groupInfo => {$/;" v
97 | doneNum common/common.js /^ doneNum=doneList.length$/;" v
98 | doneNum common/common.js /^ let doneNum=0$/;" v
99 | downLoadMatchInfo common/common.js /^ downLoadMatchInfo,$/;" v
100 | fail common/api.js /^ fail:reject$/;" v
101 | fail common/api.js /^ fail:reject$/;" v
102 | fail common/common.js /^ fail: function(res) {$/;" f
103 | fail common/common.js /^ fail: function(res) {$/;" v
104 | fail common/login.js /^ fail:reject$/;" v
105 | fail common/util.js /^ fail:reject$/;" v
106 | fail common/util.js /^ fail:reject$/;" v
107 | flag common/makeGroup.js /^ flag=this.judge(item)$/;" v
108 | flag common/makeGroup.js /^ flag=this.judge(item);$/;" v
109 | flag common/makeGroup.js /^ flag=false;$/;" v
110 | flag common/makeGroup.js /^ let flag;$/;" v
111 | formatNumber common/api.js /^ formatNumber,$/;" v
112 | formatNumber common/util.js /^ formatNumber,$/;" v
113 | formatTime common/common.js /^ formatTime,$/;" v
114 | formateDate common/api.js /^ formateDate,$/;" v
115 | formateDate common/util.js /^ formateDate,$/;" v
116 | function.badmin common/makeGroup.js /^ function badmin(personNum, roundPer) {$/;" c
117 | function.random common/makeGroup.js /^ function random(L, R) {$/;" f
118 | function.swip common/makeGroup.js /^ function swip(arr,i,j){$/;" f
119 | gameid common/common.js /^ gameid:gameid$/;" v
120 | gameid common/common.js /^ gameid:gameid,$/;" v
121 | gamename common/common.js /^ gamename:formData.theme,$/;" v
122 | getGameInfoURL common/api.js /^ getGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
123 | getGameInfoURL common/util.js /^ getGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
124 | getGameListAllURL common/api.js /^ getGameListAllURL:"https:\/\/kkiqq.cn\/api\/badminton\/gamelist",$/;" v
125 | getGameListAllURL common/util.js /^ getGameListAllURL:"https:\/\/kkiqq.cn\/api\/badminton\/gamelist",$/;" v
126 | getGameListMyURL common/api.js /^ getGameListMyURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
127 | getGameListMyURL common/util.js /^ getGameListMyURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
128 | getGameListMyjoinURL common/api.js /^ getGameListMyjoinURL:"https:\/\/kkiqq.cn\/api\/badminton\/signuplist",$/;" v
129 | getGameListMyjoinURL common/util.js /^ getGameListMyjoinURL:"https:\/\/kkiqq.cn\/api\/badminton\/signuplist",$/;" v
130 | getGroupInfo common/common.js /^ getGroupInfo,$/;" v
131 | getGroupInfoURl common/api.js /^ getGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
132 | getGroupInfoURl common/util.js /^ getGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
133 | getMyMatchData common/common.js /^ getMyMatchData,$/;" v
134 | getMyMatchDataURL common/api.js /^ getMyMatchDataURL:'https:\/\/kkiqq.cn\/api\/badminton\/personalinfo'$/;" v
135 | getMyMatchDataURL common/util.js /^ getMyMatchDataURL:'https:\/\/kkiqq.cn\/api\/badminton\/personalinfo'$/;" v
136 | getPlayersUidList common/common.js /^ getPlayersUidList,$/;" v
137 | getRes common/makeGroup.js /^ Badmin.prototype.getRes=function(){$/;" f
138 | getRes common/makeGroup.js /^ Badmin.prototype.getRes=function(){$/;" v
139 | getRes common/makeGroup.js /^ badmin.prototype.getRes = function () {$/;" f
140 | getRes common/makeGroup.js /^ badmin.prototype.getRes = function () {$/;" v
141 | getTokenURl common/api.js /^ getTokenURl:'https:\/\/kkiqq.cn\/api\/badminton\/qlogin',$/;" v
142 | getTokenURl common/util.js /^ getTokenURl:'https:\/\/kkiqq.cn\/api\/badminton\/qlogin',$/;" v
143 | getUserInfo common/user.js /^ getUserInfo$/;" v
144 | getUserInfo common/user.js /^function getUserInfo(){$/;" f
145 | getUserInfoWithToken common/api.js /^ getUserInfoWithToken,$/;" v
146 | getUserInfoWithToken common/common.js /^ getUserInfoWithToken,getUserInfoWithoutToken,login,formatNumber,setStorage} from '.\/util';$/;" v
147 | getUserInfoWithToken common/util.js /^ getUserInfoWithToken,$/;" v
148 | getUserInfoWithoutToken common/api.js /^ getUserInfoWithoutToken,$/;" v
149 | getUserInfoWithoutToken common/util.js /^ getUserInfoWithoutToken,$/;" v
150 | groupList common/common.js /^ let groupList=matchInfo.group$/;" v
151 | groupListOnlyPlayerUid common/common.js /^ groupListOnlyPlayerUid=matchInfo.group$/;" v
152 | groupListOnlyPlayerUid common/common.js /^ let groupListOnlyPlayerUid=[]$/;" v
153 | groupListWithPlayerInfo common/common.js /^ let groupListWithPlayerInfo=[]$/;" v
154 | groupWithInfo common/common.js /^ matchInfo.groupWithInfo=getGroupListWithPlayerInfo(matchInfo)$/;" v
155 | htr common/api.js /^ htr,$/;" v
156 | htr common/common.js /^import {URLList,htr,formateDate,transformStatusAndTimeOfMatchInfo,$/;" v
157 | htr common/util.js /^ htr,$/;" v
158 | i common/makeGroup.js /^ i=4$/;" v
159 | i common/makeGroup.js /^ function swip(arr,i,j){$/;" v
160 | ifDone common/common.js /^ contorlAttr.ifDone=matchInfo.status===3$/;" v
161 | ifGoingon common/common.js /^ contorlAttr.ifGoingon=(matchInfo.status===2)$/;" v
162 | ifIn common/common.js /^ ifIn=players.some((player)=>{return player.user.uid===uid})$/;" v
163 | ifIn common/common.js /^ matchInfo.ifIn=judgeIfIn(matchInfo)$/;" v
164 | ifIn common/common.js /^ let ifIn=false;$/;" v
165 | ifIn common/common.js /^ matchInfo.ifIn=judgeIfIn(matchInfo)$/;" v
166 | ifOk common/makeGroup.js /^ ifOk=true$/;" v
167 | ifOk common/makeGroup.js /^ ifOk=true$/;" v
168 | ifOk common/makeGroup.js /^ ifOk=false$/;" v
169 | ifOk common/makeGroup.js /^ let ifOk=true$/;" v
170 | ifOkToStart common/common.js /^ contorlAttr.ifOkToStart=(matchInfo.players.length>=4 && contorlAttr.ifOwner && matchInfo.status<2)$/;" v
171 | ifOktoInviate common/common.js /^ contorlAttr.ifOktoInviate=!contorlAttr.ifStopSingup$/;" v
172 | ifOktoShare common/common.js /^ contorlAttr.ifOktoShare=contorlAttr.ifStarted$/;" v
173 | ifOktoSignup common/common.js /^ contorlAttr.ifOktoSignup=(!matchInfo.ifIn&&!contorlAttr.ifStopSingup)$/;" v
174 | ifOwner common/common.js /^ contorlAttr.ifOwner= matchInfo.owner.uid===userInfo.uid$/;" v
175 | ifStarted common/common.js /^ contorlAttr.ifStarted=(matchInfo.status>1)$/;" v
176 | ifStopSingup common/common.js /^ contorlAttr.ifStopSingup=(matchInfo.status>=1)$/;" v
177 | imageUrl common/common.js /^ imageUrl:'\/image\/share.png',$/;" v
178 | index common/makeGroup.js /^ let index=this.restPerson.indexOf(this.currentItem[i]);$/;" v
179 | index util/util.js /^ var index = this.indexOf(oldval);$/;" v
180 | index util/util.js /^ var index = this.indexOf(val);$/;" v
181 | index_person common/makeGroup.js /^ let index_person=random(0,this.personNum-1)$/;" v
182 | index_teamMate common/makeGroup.js /^ let index_teamMate=this.teamMateList.indexOf(team);$/;" v
183 | init common/makeGroup.js /^ Badmin.prototype.init = function () {$/;" f
184 | init common/makeGroup.js /^ Badmin.prototype.init = function () {$/;" v
185 | init common/makeGroup.js /^ badmin.prototype.init = function () {$/;" f
186 | init common/makeGroup.js /^ badmin.prototype.init = function () {$/;" v
187 | initUserInfo common/common.js /^ initUserInfo,$/;" v
188 | item common/makeGroup.js /^ item=[this.restPerson[i],this.restPerson[j],this.restPerson[k],this.restPerson[l]]$/;" v
189 | item common/makeGroup.js /^ item=this.nextItem;$/;" v
190 | item common/makeGroup.js /^ let item;$/;" v
191 | item common/makeGroup.js /^ let item=[];$/;" v
192 | j common/makeGroup.js /^ j=m$/;" v
193 | j common/makeGroup.js /^ let j,k;$/;" v
194 | judge common/makeGroup.js /^ badmin.prototype.judge = function (item) {$/;" f
195 | judge common/makeGroup.js /^ badmin.prototype.judge = function (item) {$/;" v
196 | judgeIfIn common/common.js /^ judgeIfIn,$/;" v
197 | k common/makeGroup.js /^ k=m$/;" v
198 | key common/api.js /^ key: key,$/;" v
199 | key common/util.js /^ key: key,$/;" v
200 | len common/makeGroup.js /^ let len=this.restPerson.length;$/;" v
201 | length common/makeGroup.js /^ this.personFlag.length=this.personList.length;$/;" v
202 | length common/makeGroup.js /^ this.teamMateFlag.length=this.teamMateList.length;$/;" v
203 | limit common/makeGroup.js /^ limit=this.minTime;$/;" v
204 | limit common/makeGroup.js /^ let limit=this.maxTime$/;" v
205 | limitForLive common/common.js /^ matchInfo.limitForLive=calcLimitForLive(matchInfo)$/;" v
206 | list common/common.js /^ list:list$/;" v
207 | login common/api.js /^ login,$/;" v
208 | login common/util.js /^ login,$/;" v
209 | loginResult common/login.js /^ let loginResult = wxLogin()$/;" v
210 | mark common/common.js /^const formatTime =(date,mark='\/') => {$/;" v
211 | matchInfo common/common.js /^ let matchInfo=await downLoadMatchInfo(gameid)$/;" v
212 | matchInfo common/common.js /^ let matchInfo=res.data.data;$/;" v
213 | matchInfoList common/common.js /^ let matchInfoList=res.data.data;$/;" v
214 | max common/makeGroup.js /^ let max=Math.max(...verTeamMateFlag_arr);$/;" v
215 | maxRepeatTeam common/makeGroup.js /^ this.maxRepeatTeam = 0;$/;" v
216 | maxRepeatTeam common/makeGroup.js /^ this.maxRepeatTeam=this.round*2-this.minTime*this.teamMateList.length;$/;" v
217 | maxTime common/makeGroup.js /^ this.maxTime = Math.ceil(roundPer \/ (personNum - 1), 0);\/\/为了公平,设定的 两人组队teamMeat 在整个过程中 出现的最多次数$/;" v
218 | maxTime common/makeGroup.js /^ this.maxTime = Math.ceil(roundPer \/ (personNum - 1), 0);\/\/为了公平,设定的 两人组队teamMeat 在整个过程中 出现的最多次数$/;" v
219 | method common/api.js /^ method="GET",$/;" v
220 | method common/api.js /^ method,$/;" v
221 | method common/api.js /^ let res=await htr(url,method,data);$/;" v
222 | method common/api.js /^const htr=function(url,method,data){$/;" v
223 | method common/common.js /^ method="GET",$/;" v
224 | method common/common.js /^ method="POST",$/;" v
225 | method common/common.js /^ method="PUT",$/;" v
226 | method common/common.js /^ method='POST',$/;" v
227 | method common/common.js /^ let res=await htr(url,method,data)$/;" v
228 | method common/common.js /^ let method="GET";$/;" v
229 | method common/common.js /^ let method='GET'$/;" v
230 | method common/common.js /^ let res= await htr(url,method,data)$/;" v
231 | method common/common.js /^ let res= await htr(url,method,data);$/;" v
232 | method common/common.js /^ let res=await htr(url,method,data)$/;" v
233 | method common/common.js /^ let res=await htr(url,method,data);$/;" v
234 | method common/makeGroup.js /^ let method = "GET";$/;" v
235 | method common/makeGroup.js /^ let res=await htr(url,method,data);$/;" v
236 | method common/util.js /^ method="GET",$/;" v
237 | method common/util.js /^ method,$/;" v
238 | method common/util.js /^ let res=await htr(url,method,data);$/;" v
239 | method common/util.js /^const htr=function(url,method,data){$/;" v
240 | min common/makeGroup.js /^ let min=Math.min(...verTeamMateFlag_arr)$/;" v
241 | minFlag common/makeGroup.js /^ let minFlag=Math.min(...Object.values(verPersonFlag))$/;" v
242 | minTime common/makeGroup.js /^ this.minTime = Math.floor(roundPer \/ (personNum - 1),0);\/\/为了公平,设定的 两人组队teamMeat 在整个过程中 出现的最少次数$/;" v
243 | month common/api.js /^ return [day,month,date,hour,minute].reduce((string,curValue,curKey)=>{$/;" v
244 | month common/common.js /^ return [year, month, day].map(formatNumber).join(mark) + ' ' + [hour, minute, second].map(formatNumber).join(':')$/;" v
245 | month common/util.js /^ return [day,month,date,hour,minute].reduce((string,curValue,curKey)=>{$/;" v
246 | my_uid common/common.js /^let my_uid=wx.getStorageSync('userInfo').uid$/;" v
247 | n common/api.js /^ n = n.toString()$/;" v
248 | n common/util.js /^ n = n.toString()$/;" v
249 | nextItem common/makeGroup.js /^ this.nextItem=[a1,a2,b1,b2]$/;" v
250 | nextItem common/makeGroup.js /^ this.nextItem=null;$/;" v
251 | nextItem common/makeGroup.js /^ this.nextItem,$/;" v
252 | nickName common/api.js /^ const getUserInfoWithToken=async function(code,nickName,avatarUrl){$/;" v
253 | nickName common/common.js /^ let nickName=resOfuserInfo.userInfo.nickName;$/;" v
254 | nickName common/common.js /^ userInfo=await getUserInfoWithToken(code,nickName,avatarUrl)$/;" v
255 | nickName common/util.js /^ const getUserInfoWithToken=async function(code,nickName,avatarUrl){$/;" v
256 | nick_name common/api.js /^ nick_name:nickName,$/;" v
257 | nick_name common/util.js /^ nick_name:nickName,$/;" v
258 | note common/common.js /^ note:null,$/;" v
259 | numToString util/util.js /^Array.prototype.numToString = function(stringArr){$/;" f
260 | numToString util/util.js /^Array.prototype.numToString = function(stringArr){$/;" v
261 | optPerson common/makeGroup.js /^ let optPerson=[];$/;" v
262 | path common/common.js /^ path: path,$/;" v
263 | personFlag common/makeGroup.js /^ this.personFlag = {};\/\/数组用于存放 每个人在全过程中出现的次数$/;" v
264 | personFlag common/makeGroup.js /^ this.personFlag={};$/;" v
265 | personFlag common/makeGroup.js /^ this.personFlag = [];\/\/数组用于存放 每个人在全过程中出现的次数$/;" v
266 | personList common/makeGroup.js /^ this.personList=[];$/;" v
267 | personNum common/makeGroup.js /^ this.personNum = personNum;\/\/参赛人数$/;" v
268 | personNum common/makeGroup.js /^ this.personNum = personNum;\/\/参赛人数$/;" v
269 | players common/common.js /^ let players=matchInfo.players$/;" v
270 | playersList common/common.js /^ playersList=matchInfo.players$/;" v
271 | playersList common/common.js /^ let playersList=[]$/;" v
272 | playersList common/common.js /^ let playersList=matchInfo.players$/;" v
273 | playersUidList common/common.js /^ let playersUidList=[]$/;" v
274 | postGameInfoURL common/api.js /^ postGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
275 | postGameInfoURL common/util.js /^ postGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
276 | postGroupList common/common.js /^ postGroupList,$/;" v
277 | postGroupListURl common/api.js /^ postGroupListURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
278 | postGroupListURl common/util.js /^ postGroupListURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
279 | progress common/common.js /^ progress=Math.round(doneNum\/totalNum*100,2)$/;" v
280 | progress common/common.js /^ let progress=0$/;" v
281 | progressData common/common.js /^ matchInfo.progressData=calcprogress(matchInfo)$/;" v
282 | putGameInfoURL common/api.js /^ putGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
283 | putGameInfoURL common/util.js /^ putGameInfoURL:"https:\/\/kkiqq.cn\/api\/badminton\/game",$/;" v
284 | putGroupInfo common/common.js /^ putGroupInfo,$/;" v
285 | putGroupInfoURl common/api.js /^ putGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
286 | putGroupInfoURl common/util.js /^ putGroupInfoURl:'https:\/\/kkiqq.cn\/api\/badminton\/group',$/;" v
287 | random common/makeGroup.js /^ function random(L, R) {$/;" f
288 | real_name common/common.js /^ real_name:realName};$/;" v
289 | real_name common/common.js /^ userInfo.real_name=realName$/;" v
290 | remove util/util.js /^Array.prototype.remove = function (val) {$/;" f
291 | remove util/util.js /^Array.prototype.remove = function (val) {$/;" v
292 | res common/api.js /^ let res=await htr(url,method,data);$/;" v
293 | res common/common.js /^ console.log("转发失败",res,path)$/;" v
294 | res common/common.js /^ console.log("转发成功",res,path)$/;" v
295 | res common/common.js /^ let res=await htr(url,method,data)$/;" v
296 | res common/common.js /^ let res= await htr(url,method,data)$/;" v
297 | res common/common.js /^ let res= await htr(url,method,data);$/;" v
298 | res common/common.js /^ let res=await htr(url,method,data)$/;" v
299 | res common/common.js /^ let res=await htr(url,method,data);$/;" v
300 | res common/makeGroup.js /^ let res=await htr(url,method,data);$/;" v
301 | res common/util.js /^ let res=await htr(url,method,data);$/;" v
302 | resOfcode common/common.js /^ let resOfcode=await login();\/\/先登录获取 临时code$/;" v
303 | resOfuserInfo common/common.js /^ resOfuserInfo = e.detail$/;" v
304 | resOfuserInfo common/common.js /^ resOfuserInfo=await getUserInfoWithoutToken();\/\/获取登录后授权使用的 头像 昵称信息$/;" v
305 | resOfuserInfo common/common.js /^ let resOfuserInfo;$/;" v
306 | restPerson common/makeGroup.js /^ this.restPerson = [];\/\/计算过程中,每次随机取值,都从这个数组中取值,当某个人打满预设场次的时候,就会从这个数组总剔除$/;" v
307 | restPerson common/makeGroup.js /^ this.restPerson=[];$/;" v
308 | result common/makeGroup.js /^ this.result = "排阵失败 Try one more time!";$/;" v
309 | result common/makeGroup.js /^ this.result = '数据不符合要求,人数不能少于4人';$/;" v
310 | result common/makeGroup.js /^ this.result = '数据不符合要求,应该能被4整除';$/;" v
311 | result common/makeGroup.js /^ this.result = { 1: [], 2: [], 3: [], 4: [] };\/\/初始化结果数组$/;" v
312 | result common/makeGroup.js /^ this.result = {1:[],2:[],3:[],4:[]};\/\/初始化结果数组$/;" v
313 | result common/makeGroup.js /^ this.result = {};\/\/数组用于存放 最终结果$/;" v
314 | result common/makeGroup.js /^ this.result = {};\/\/数组用于存放 最终结果$/;" v
315 | results common/common.js /^ let results=playersList.filter(playerInfo=>{$/;" v
316 | return common/common.js /^ return ;$/;" v
317 | return common/makeGroup.js /^ return$/;" v
318 | round common/makeGroup.js /^ this.round = personNum * roundPer \/ 4;\/\/总共的场数 四个人算一场$/;" v
319 | round common/makeGroup.js /^ this.round = personNum * roundPer \/ 4;\/\/总共的场数 四个人算一场$/;" v
320 | roundPer common/makeGroup.js /^ this.roundPer = roundPer;\/\/预设的 每人参赛场数$/;" v
321 | roundPer common/makeGroup.js /^ this.roundPer = roundPer;\/\/预设的 每人参赛场数$/;" v
322 | serverLogin common/login.js /^async function serverLogin(){$/;" f
323 | share common/common.js /^ share,$/;" v
324 | smaller common/makeGroup.js /^ let smaller=Math.min(item[i-1],this.personList[index_person]);$/;" v
325 | start common/makeGroup.js /^ badmin.prototype.start = function () {\/\/从这里开始$/;" f
326 | start common/makeGroup.js /^ badmin.prototype.start = function () {\/\/从这里开始$/;" v
327 | start common/makeGroup.js /^ Badmin.prototype.start = function () {\/\/从这里开始$/;" f
328 | start common/makeGroup.js /^ Badmin.prototype.start = function () {\/\/从这里开始$/;" v
329 | status common/api.js /^ matchInfo.status=status[matchInfo.status]$/;" v
330 | status common/api.js /^ let status=['报名中','报名结束','正在比赛','比赛结束']; $/;" v
331 | status common/common.js /^ matchInfo.status=1$/;" v
332 | status common/common.js /^ status:0,$/;" v
333 | status common/common.js /^ matchInfo.status=1$/;" v
334 | status common/util.js /^ matchInfo.status=status[matchInfo.status]$/;" v
335 | status common/util.js /^ let status=['报名中','报名结束','正在比赛','比赛结束']; $/;" v
336 | success common/api.js /^ success:resolve,$/;" v
337 | success common/api.js /^ success:resolve,$/;" v
338 | success common/common.js /^ success: function(res) {$/;" f
339 | success common/common.js /^ success: function(res) {$/;" v
340 | success common/login.js /^ success:resolve,$/;" v
341 | success common/util.js /^ success:resolve,$/;" v
342 | success common/util.js /^ success:resolve,$/;" v
343 | swip common/makeGroup.js /^ function swip(arr,i,j){$/;" f
344 | team common/makeGroup.js /^ let team=[smaller,biger].join(' ');$/;" v
345 | teamA common/makeGroup.js /^ let teamA = item.slice(0, 2).join(' ');$/;" v
346 | teamA common/makeGroup.js /^ let teamA = this.currentItem.slice(0, 2).join(' ');$/;" v
347 | teamA common/makeGroup.js /^ let teamA=[item[0],item[1]].join(' ');$/;" v
348 | teamB common/makeGroup.js /^ let teamB = item.slice(2, 4).join(' ');$/;" v
349 | teamB common/makeGroup.js /^ let teamB = this.currentItem.slice(2, 4).join(' ');$/;" v
350 | teamB common/makeGroup.js /^ let teamB=[item[2],item[3]].join(' ');$/;" v
351 | teamMate common/makeGroup.js /^ teamMate = [i + 1, j + 1].join(' ');$/;" v
352 | teamMate common/makeGroup.js /^ let teamMate = [i + 1, j + 1].join(' ');$/;" v
353 | teamMateFlag common/makeGroup.js /^ this.teamMateFlag = {};\/\/数组用于存放 每两个人组队teamMeat 在全过程中出现的次数$/;" v
354 | teamMateFlag common/makeGroup.js /^ this.teamMateFlag={};$/;" v
355 | teamMateFlag common/makeGroup.js /^ this.teamMateFlag = [];\/\/数组用于存放 每两个人组队teamMeat 在全过程中出现的次数$/;" v
356 | teamMateList common/makeGroup.js /^ this.teamMateList=[];$/;" v
357 | temp common/makeGroup.js /^ let temp=arr[i];$/;" v
358 | token common/common.js /^ token:token,$/;" v
359 | token common/common.js /^ data.token=token$/;" v
360 | token common/common.js /^ token=await getToken();$/;" v
361 | token common/common.js /^ data.token=token;$/;" v
362 | token common/common.js /^ let token;$/;" v
363 | token common/common.js /^ let token=await getToken();$/;" v
364 | token common/common.js /^ let token=userInfo.token;$/;" v
365 | totalNum common/common.js /^ return{doneNum,totalNum,progress}$/;" v
366 | totalNum common/common.js /^ let totalNum=0$/;" v
367 | totalNum common/common.js /^ return {doneNum,totalNum,progress}$/;" v
368 | totalNum common/common.js /^ totalNum=groupList.length$/;" v
369 | transformStatusAndTimeOfMatchInfo common/api.js /^ transformStatusAndTimeOfMatchInfo,$/;" v
370 | transformStatusAndTimeOfMatchInfo common/util.js /^ transformStatusAndTimeOfMatchInfo,$/;" v
371 | tryTimes_1 common/makeGroup.js /^ \/\/ console.log('第',tryTimes_1,'次 计算出结果');$/;" v
372 | tryTimes_1 common/makeGroup.js /^ let tryTimes_1 = 0;\/\/标示整体的尝试次数$/;" v
373 | tryTimes_2 common/makeGroup.js /^ let tryTimes_2=0;\/\/标示某一个位置的尝试次数$/;" v
374 | uKey common/common.js /^ let uKey=['id_a1','id_a2','id_b1','id_b2']$/;" v
375 | uid common/common.js /^ let uid=groupInfo[key]$/;" v
376 | uid common/common.js /^ let uid=wx.getStorageSync('userInfo').uid$/;" v
377 | uid common/common.js /^ userInfo.uid=results[0].userid;$/;" v
378 | upToLimit common/makeGroup.js /^ let upToLimit=verTeamMateFlag.filter(value=>{$/;" v
379 | update common/makeGroup.js /^ Badmin.prototype.update=function(item){$/;" f
380 | update common/makeGroup.js /^ Badmin.prototype.update=function(item){$/;" v
381 | update common/makeGroup.js /^ badmin.prototype.update=function(){$/;" f
382 | update common/makeGroup.js /^ badmin.prototype.update=function(){$/;" v
383 | updateMatchInfo common/common.js /^ updateMatchInfo,$/;" v
384 | updated_at common/api.js /^ matchInfo.updated_at=formateDate(new Date(matchInfo.updated_at));$/;" v
385 | updated_at common/util.js /^ matchInfo.updated_at=formateDate(new Date(matchInfo.updated_at));$/;" v
386 | url common/api.js /^ url,$/;" v
387 | url common/api.js /^ let url=URLList.getTokenURl,$/;" v
388 | url common/common.js /^ let url;$/;" v
389 | url common/common.js /^ let url=URLList.addplayerURL,$/;" v
390 | url common/common.js /^ let url=URLList.changeRealnameURl,$/;" v
391 | url common/common.js /^ let url=URLList.getGameInfoURL+'\\\/'+gameid,$/;" v
392 | url common/common.js /^ let url=URLList.getGroupInfoURl,$/;" v
393 | url common/common.js /^ let url=URLList.getMyMatchDataURL$/;" v
394 | url common/common.js /^ let url=URLList.postGameInfoURL,$/;" v
395 | url common/common.js /^ let url=URLList.postGroupListURl+'\\\/'+groupid,$/;" v
396 | url common/common.js /^ let url=URLList.postGroupListURl,$/;" v
397 | url common/common.js /^ let url=URLList.putGameInfoURL+'\\\/'+gameid,$/;" v
398 | url common/makeGroup.js /^ let url = `https:\/\/gzbtestsystem.cn\/badminton\/againsttable?NumberOfPeople=${personCount}&RoundsOfPerson=${roundCount}&format=json`;$/;" v
399 | url common/util.js /^ url,$/;" v
400 | url common/util.js /^ let url=URLList.getTokenURl,$/;" v
401 | userInfo common/common.js /^ let userInfo={...results[0].user}$/;" v
402 | userInfo common/common.js /^ userInfo=await getUserInfoWithToken(code,nickName,avatarUrl)$/;" v
403 | userInfo common/common.js /^ let userInfo=await initUserInfo()$/;" v
404 | userInfo common/common.js /^ let userInfo=wx.getStorageSync('userInfo')$/;" v
405 | userInfo common/common.js /^ let userInfo=wx.getStorageSync('userInfo')\/\/先看是否已经缓存了 用户信息$/;" v
406 | verPersonFlag common/makeGroup.js /^ let verPersonFlag=Object.assign({},this.personFlag)$/;" v
407 | verPersonFlag_arr common/makeGroup.js /^ let verPersonFlag_arr=Object.values(verPersonFlag)$/;" v
408 | verTeamA common/makeGroup.js /^ let verTeamA=[a1,a2].join(' ');$/;" v
409 | verTeamB common/makeGroup.js /^ let verTeamB=[b1,b2].join(' ');$/;" v
410 | verTeamMateFlag common/makeGroup.js /^ let verTeamMateFlag=this.teamMateFlag.slice()$/;" v
411 | verTeamMateFlag common/makeGroup.js /^ let verTeamMateFlag=Object.assign({},this.teamMateFlag)$/;" v
412 | verTeamMateFlag_arr common/makeGroup.js /^ let verTeamMateFlag_arr=Object.values(verTeamMateFlag);$/;" v
413 | wxLogin common/login.js /^function wxLogin(){$/;" f
414 |
--------------------------------------------------------------------------------
/src/common/common.less:
--------------------------------------------------------------------------------
1 | // @bgc:#eee;
2 | // @bgc-card:#fff;
3 | // @font:#000;
4 | // @font-side:#999;
5 | // @btn:cadetblue;
6 | @btn-em:orange;
7 | @black: #000;
8 | @white: #fff;
9 | @red: #f44;
10 | @blue: cadetblue;
11 | @orange: orange;
12 | @green: lightgreen;
13 | @gray-lighter: #efefef;
14 | @gray-light: #e5e5e5;
15 | @gray: #c9c9c9;
16 | @gray-dark: #999;
17 | @gray-darker: #666;
18 | @yellow-light:lightgoldenrodyellow;
19 |
20 | .border-right {
21 | border-right: solid 1rpx @gray-light;
22 | }
23 |
24 | .border-left {
25 | border-left: solid 1rpx @gray-light;
26 | }
27 |
28 | .border-top {
29 | border-top: solid 1rpx @gray-light;
30 | }
31 |
32 | .border-bottom {
33 | border-bottom: solid 1px @gray-light;
34 | }
35 |
36 | .border {
37 | border: solid 1rpx @gray-light;
38 | }
39 |
40 | .button-hover {
41 | background-color: rgba(255, 0, 0, 0.1);
42 | opacity: 0.7;
43 | }
44 |
45 | .card {
46 | background: @white;
47 | }
48 |
49 | .text-positive {
50 | color: @green;
51 | background: transparent;
52 | padding: 0 1em;
53 | }
54 |
55 | .text-negative {
56 | color: @red;
57 | background: transparent;
58 | padding:0 1em;
59 | }
60 |
61 | .text-info {
62 | color: @yellow-light;
63 | background: transparent;
64 | padding:0 1em;
65 | }
66 |
67 | .text-warn {
68 | color: @orange;
69 | background: transparent;
70 | padding:0 1em;
71 | }
72 |
73 | .label-positive {
74 | background: @green;
75 | color: @gray-darker;
76 | padding: 0 1em;
77 | }
78 |
79 | .label-negative {
80 | background: @red;
81 | color: @gray-lighter;
82 | padding:0 1em;
83 | }
84 |
85 | .label-info {
86 | background: @yellow-light;
87 | color: @gray-darker;
88 | padding:0 1em;
89 | }
90 |
91 | .label-warn {
92 | background: @orange;
93 | color: @white;
94 | padding:0 1em;
95 | }
96 |
97 | .btn-positive {
98 | background: @green;
99 | color: @white;
100 | padding: 0 1em;
101 | }
102 |
103 | .btn-negative {
104 | background: @red;
105 | color: @white;
106 | padding:0 1em;
107 | }
108 |
109 | .btn-info {
110 | background: @yellow-light;
111 | color: @white;
112 | padding:0 1em;
113 | }
114 |
115 | .btn-warn {
116 | background: @orange;
117 | color: @white;
118 | padding:0 1em;
119 | }
120 |
121 | .container{
122 | display: flex;
123 | flex-direction: column;
124 | background: @gray-lighter;
125 | }
126 |
127 | /* This stylesheet generated by Transfonter (https://transfonter.org) on April 13, 2018 4:50 PM */
128 |
129 | // @font-face {
130 | // font-family: 'iconfont';
131 | // src: url('hinted-iconfont.eot');
132 | // font-weight: normal;
133 | // font-style: normal;
134 | // }
135 | @font-face {
136 | font-family: 'iconfont';
137 | src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'),
138 | url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),
139 | url('hinted-iconfont.ttf') format('truetype'),
140 | url('hinted-iconfont.svg#iconfont') format('svg');
141 | font-weight: normal;
142 | font-style: normal;
143 | }
144 |
--------------------------------------------------------------------------------