├── .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 | 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 | ![二维码](./src/image/scancode.jpg) 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 | 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 | 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 | 26 | 27 | 52 | 53 | -------------------------------------------------------------------------------- /src/pages/auth/auth.wpy: -------------------------------------------------------------------------------- 1 | 16 | 17 | 36 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/pages/about/about.wpy: -------------------------------------------------------------------------------- 1 | 25 | 26 | 51 | 64 | -------------------------------------------------------------------------------- /src/components/twoSide.wpy: -------------------------------------------------------------------------------- 1 | 11 | 12 | 33 | 71 | 72 | -------------------------------------------------------------------------------- /src/pages/main/main.wpy: -------------------------------------------------------------------------------- 1 | 7 | 13 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /src/components/item2colunm.wpy: -------------------------------------------------------------------------------- 1 | 11 | 38 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/pages/index/nearMatch.wpy: -------------------------------------------------------------------------------- 1 | 13 | 14 | 37 | 38 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /src/pages/detail/detail.wpy: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 44 | 45 | -------------------------------------------------------------------------------- /src/pages/custom/baseInfo.wpy: -------------------------------------------------------------------------------- 1 | 9 | 21 | 22 | 97 | -------------------------------------------------------------------------------- /src/components/cycleProgressBar.wpy: -------------------------------------------------------------------------------- 1 | 15 | 86 | 87 | 109 | -------------------------------------------------------------------------------- /src/pages/main/mygame.wpy: -------------------------------------------------------------------------------- 1 | 23 | 64 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /src/components/playersList.wpy: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 65 | 66 | 67 | 146 | -------------------------------------------------------------------------------- /src/components/matchInfo.wpy: -------------------------------------------------------------------------------- 1 | 29 | 30 | 119 | 145 | 146 | -------------------------------------------------------------------------------- /src/components/matchActive.wpy: -------------------------------------------------------------------------------- 1 | 15 | 16 | 51 | 139 | 140 | -------------------------------------------------------------------------------- /src/pages/live/live.wpy: -------------------------------------------------------------------------------- 1 | 2 | 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 | 12 | 35 | 36 | 169 | -------------------------------------------------------------------------------- /src/pages/custom/custom.wpy: -------------------------------------------------------------------------------- 1 | 51 | 52 | 140 | -------------------------------------------------------------------------------- /src/components/matchResult.wpy: -------------------------------------------------------------------------------- 1 | 2 | 23 | 85 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /src/components/matchDataSet.wpy: -------------------------------------------------------------------------------- 1 | 2 | 23 | 24 | 63 | 64 | 65 | 189 | -------------------------------------------------------------------------------- /src/components/againstTable.wpy: -------------------------------------------------------------------------------- 1 | 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 | --------------------------------------------------------------------------------