xiongzhu 7 years ago
parent
commit
fd191606a9
53 changed files with 328 additions and 184 deletions
  1. 1 1
      config.xml
  2. 5 0
      package-lock.json
  3. 1 0
      package.json
  4. 8 8
      platforms/android/android.json
  5. 1 1
      platforms/android/app/src/main/AndroidManifest.xml
  6. 1 1
      platforms/android/app/src/main/assets/www/dianjing.html
  7. 0 0
      platforms/android/app/src/main/assets/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css
  8. 0 0
      platforms/android/app/src/main/assets/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map
  9. 0 0
      platforms/android/app/src/main/assets/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css
  10. 0 0
      platforms/android/app/src/main/assets/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map
  11. 0 0
      platforms/android/app/src/main/assets/www/static/js/app.9b1fefaf0b900bfe8b89.js
  12. 0 0
      platforms/android/app/src/main/assets/www/static/js/app.9b1fefaf0b900bfe8b89.js.map
  13. 0 0
      platforms/android/app/src/main/assets/www/static/js/app.c90714ee0957324606eb.js
  14. 0 0
      platforms/android/app/src/main/assets/www/static/js/app.c90714ee0957324606eb.js.map
  15. 0 0
      platforms/android/app/src/main/assets/www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map
  16. 1 1
      platforms/android/app/src/main/res/xml/config.xml
  17. 1 1
      platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/drew.xcuserdatad/xcschemes/xcschememanagement.plist
  18. 5 5
      platforms/ios/ios.json
  19. 1 1
      platforms/ios/www/dianjing.html
  20. 0 0
      platforms/ios/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css
  21. 0 0
      platforms/ios/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map
  22. 0 0
      platforms/ios/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css
  23. 0 0
      platforms/ios/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map
  24. 0 0
      platforms/ios/www/static/js/app.9b1fefaf0b900bfe8b89.js
  25. 0 0
      platforms/ios/www/static/js/app.9b1fefaf0b900bfe8b89.js.map
  26. 0 0
      platforms/ios/www/static/js/app.c90714ee0957324606eb.js
  27. 0 0
      platforms/ios/www/static/js/app.c90714ee0957324606eb.js.map
  28. 0 0
      platforms/ios/www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map
  29. 1 1
      platforms/ios/元气竞技场.xcodeproj/xcuserdata/drew.xcuserdatad/xcschemes/xcschememanagement.plist
  30. 5 5
      platforms/ios/元气竞技场/Entitlements-Debug.plist
  31. 13 13
      platforms/ios/元气竞技场/Resources/JPushConfig.plist
  32. 1 1
      platforms/ios/元气竞技场/config.xml
  33. 72 72
      platforms/ios/元气竞技场/元气竞技场-Info.plist
  34. 0 1
      vue/src/components/Contact/index.js
  35. 43 12
      vue/src/components/DoubleElimination.vue
  36. 12 2
      vue/src/components/MatchData.vue
  37. 46 10
      vue/src/components/SingleElimination.vue
  38. 74 31
      vue/src/components/UploadScore/Main.vue
  39. 3 2
      vue/src/main.js
  40. 1 1
      vue/src/pages/MatchDetail.vue
  41. 26 1
      vue/src/pages/MatchInfo.vue
  42. 4 11
      vue/src/pages/MatchList.vue
  43. 1 1
      vue/src/store/index.js
  44. 1 1
      www/dianjing.html
  45. 0 0
      www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css
  46. 0 0
      www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map
  47. 0 0
      www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css
  48. 0 0
      www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map
  49. 0 0
      www/static/js/app.9b1fefaf0b900bfe8b89.js
  50. 0 0
      www/static/js/app.9b1fefaf0b900bfe8b89.js.map
  51. 0 0
      www/static/js/app.c90714ee0957324606eb.js
  52. 0 0
      www/static/js/app.c90714ee0957324606eb.js.map
  53. 0 0
      www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map

+ 1 - 1
config.xml

@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="com.izouma.yuanqijjc" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="com.izouma.yuanqijjc" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
     <name>元气竞技场</name>
     <description>        A sample Apache Cordova application that responds to the deviceready event.    </description>
     <author email="dev@cordova.apache.org" href="http://cordova.io">        Apache Cordova Team    </author>

+ 5 - 0
package-lock.json

@@ -15,6 +15,11 @@
                 "json-schema-traverse": "^0.3.0"
             }
         },
+        "alloyfinger": {
+            "version": "0.1.15",
+            "resolved": "http://registry.npm.taobao.org/alloyfinger/download/alloyfinger-0.1.15.tgz",
+            "integrity": "sha1-ERbO1yZrqSDK/HlyYSAzfYBB0so="
+        },
         "ansi-regex": {
             "version": "2.1.1",
             "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
     "author": "Apache Cordova Team",
     "license": "Apache-2.0",
     "dependencies": {
+        "alloyfinger": "^0.1.15",
         "cordova-android": "^7.1.2",
         "cordova-ios": "^4.5.5",
         "cordova-plugin-camera": "^4.0.3",

+ 8 - 8
platforms/android/android.json

@@ -10,35 +10,35 @@
           "/*": [
             {
               "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />",
-              "count": 58
+              "count": 74
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",
-              "count": 29
+              "count": 37
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",
-              "count": 29
+              "count": 37
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",
-              "count": 30
+              "count": 38
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",
-              "count": 29
+              "count": 37
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
-              "count": 30
+              "count": 38
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",
-              "count": 29
+              "count": 37
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",
-              "count": 29
+              "count": 37
             },
             {
               "xml": "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",

+ 1 - 1
platforms/android/app/src/main/AndroidManifest.xml

@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="com.izouma.yuanqijjc" xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest android:hardwareAccelerated="true" android:versionCode="10001" android:versionName="1.0.1" package="com.izouma.yuanqijjc" xmlns:android="http://schemas.android.com/apk/res/android">
     <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
     <uses-permission android:name="android.permission.INTERNET" />
     <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">

+ 1 - 1
platforms/android/app/src/main/assets/www/dianjing.html

@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.9b1fefaf0b900bfe8b89.js></script></body></html>
+<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.c90714ee0957324606eb.js></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/js/app.9b1fefaf0b900bfe8b89.js


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/js/app.9b1fefaf0b900bfe8b89.js.map


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/js/app.c90714ee0957324606eb.js


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/js/app.c90714ee0957324606eb.js.map


File diff suppressed because it is too large
+ 0 - 0
platforms/android/app/src/main/assets/www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


+ 1 - 1
platforms/android/app/src/main/res/xml/config.xml

@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="com.izouma.yuanqijjc" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="com.izouma.yuanqijjc" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
     <feature name="Camera">
         <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
     </feature>

+ 1 - 1
platforms/ios/CordovaLib/CordovaLib.xcodeproj/xcuserdata/drew.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -12,7 +12,7 @@
 		<key>CordovaLib.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>1</integer>
+			<integer>2</integer>
 		</dict>
 	</dict>
 </dict>

+ 5 - 5
platforms/ios/ios.json

@@ -10,31 +10,31 @@
           "CFBundleLocalizations": [
             {
               "xml": "<array><string>zh_CN</string></array>",
-              "count": 15
+              "count": 21
             }
           ],
           "NSCameraUsageDescription": [
             {
               "xml": "<string>需要相机权限才能继续使用</string>",
-              "count": 15
+              "count": 21
             }
           ],
           "NSPhotoLibraryUsageDescription": [
             {
               "xml": "<string>需要相册权限才能继续使用</string>",
-              "count": 15
+              "count": 21
             }
           ],
           "NSLocationWhenInUseUsageDescription": [
             {
               "xml": "<string>您的当前位置将会在地图上显示,并且用于获取周边的园区数据</string>",
-              "count": 15
+              "count": 21
             }
           ],
           "ITSAppUsesNonExemptEncryption": [
             {
               "xml": "<false />",
-              "count": 15
+              "count": 21
             }
           ],
           "UIBackgroundModes": [

+ 1 - 1
platforms/ios/www/dianjing.html

@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.9b1fefaf0b900bfe8b89.js></script></body></html>
+<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.c90714ee0957324606eb.js></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/js/app.9b1fefaf0b900bfe8b89.js


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/js/app.9b1fefaf0b900bfe8b89.js.map


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/js/app.c90714ee0957324606eb.js


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/js/app.c90714ee0957324606eb.js.map


File diff suppressed because it is too large
+ 0 - 0
platforms/ios/www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


+ 1 - 1
platforms/ios/元气竞技场.xcodeproj/xcuserdata/drew.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>元气竞技场.xcscheme</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>2</integer>
+			<integer>1</integer>
 		</dict>
 	</dict>
 </dict>

+ 5 - 5
platforms/ios/元气竞技场/Entitlements-Debug.plist

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-<dict>
-	<key>aps-environment</key>
-	<string>development</string>
-</dict>
-</plist>
+  <dict>
+    <key>aps-environment</key>
+    <string>development</string>
+  </dict>
+</plist>

+ 13 - 13
platforms/ios/元气竞技场/Resources/JPushConfig.plist

@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-<dict>
-	<key>Appkey</key>
-	<string>9c6e3cd69bd572f7c548ac83</string>
-	<key>Channel</key>
-	<string>channel name</string>
-	<key>IsProduction</key>
-	<true/>
-	<key>IsIDFA</key>
-	<false/>
-	<key>Delay</key>
-	<false/>
-</dict>
-</plist>
+  <dict>
+    <key>Appkey</key>
+    <string>9c6e3cd69bd572f7c548ac83</string>
+    <key>Channel</key>
+    <string>channel name</string>
+    <key>IsProduction</key>
+    <true/>
+    <key>IsIDFA</key>
+    <false/>
+    <key>Delay</key>
+    <false/>
+  </dict>
+</plist>

+ 1 - 1
platforms/ios/元气竞技场/config.xml

@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="com.izouma.yuanqijjc" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="com.izouma.yuanqijjc" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
     <feature name="LocalStorage">
         <param name="ios-package" value="CDVLocalStorage" />
     </feature>

+ 72 - 72
platforms/ios/元气竞技场/元气竞技场-Info.plist

@@ -1,75 +1,75 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-  <dict>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>English</string>
-    <key>CFBundleDisplayName</key>
-    <string>元气竞技场</string>
-    <key>CFBundleExecutable</key>
-    <string>${EXECUTABLE_NAME}</string>
-    <key>CFBundleIcons</key>
-    <dict/>
-    <key>CFBundleIcons~ipad</key>
-    <dict/>
-    <key>CFBundleIdentifier</key>
-    <string>com.izouma.yuanqijjc</string>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>6.0</string>
-    <key>CFBundleLocalizations</key>
-    <array>
-      <string>zh_CN</string>
-    </array>
-    <key>CFBundleName</key>
-    <string>${PRODUCT_NAME}</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleShortVersionString</key>
-    <string>1.0.0</string>
-    <key>CFBundleSignature</key>
-    <string>????</string>
-    <key>CFBundleVersion</key>
-    <string>1.0.0</string>
-    <key>ITSAppUsesNonExemptEncryption</key>
-    <false/>
-    <key>LSRequiresIPhoneOS</key>
-    <true/>
-    <key>NSAppTransportSecurity</key>
-    <dict>
-      <key>NSAllowsArbitraryLoads</key>
-      <true/>
-    </dict>
-    <key>NSCameraUsageDescription</key>
-    <string>需要相机权限才能继续使用</string>
-    <key>NSLocationWhenInUseUsageDescription</key>
-    <string>您的当前位置将会在地图上显示,并且用于获取周边的园区数据</string>
-    <key>NSMainNibFile</key>
-    <string/>
-    <key>NSMainNibFile~ipad</key>
-    <string/>
-    <key>NSPhotoLibraryUsageDescription</key>
-    <string>需要相册权限才能继续使用</string>
-    <key>UIInterfaceOrientation</key>
-    <array>
-      <string>UIInterfaceOrientationPortrait</string>
-    </array>
-    <key>UILaunchStoryboardName</key>
-    <string>CDVLaunchScreen</string>
-    <key>UIRequiresFullScreen</key>
-    <true/>
-    <key>UISupportedInterfaceOrientations</key>
-    <array>
-      <string>UIInterfaceOrientationPortrait</string>
-      <string>UIInterfaceOrientationPortraitUpsideDown</string>
-    </array>
-    <key>UISupportedInterfaceOrientations~ipad</key>
-    <array>
-      <string>UIInterfaceOrientationPortrait</string>
-      <string>UIInterfaceOrientationPortraitUpsideDown</string>
-    </array>
-    <key>UIBackgroundModes</key>
-    <array>
-      <string>remote-notification</string>
-    </array>
-  </dict>
-</plist>
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleDisplayName</key>
+	<string>元气竞技场</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIcons</key>
+	<dict/>
+	<key>CFBundleIcons~ipad</key>
+	<dict/>
+	<key>CFBundleIdentifier</key>
+	<string>com.izouma.yuanqijjc</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleLocalizations</key>
+	<array>
+		<string>zh_CN</string>
+	</array>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0.1</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>2</string>
+	<key>ITSAppUsesNonExemptEncryption</key>
+	<false/>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
+	<key>NSCameraUsageDescription</key>
+	<string>需要相机权限才能继续使用</string>
+	<key>NSLocationWhenInUseUsageDescription</key>
+	<string>您的当前位置将会在地图上显示,并且用于获取周边的园区数据</string>
+	<key>NSMainNibFile</key>
+	<string></string>
+	<key>NSMainNibFile~ipad</key>
+	<string></string>
+	<key>NSPhotoLibraryUsageDescription</key>
+	<string>需要相册权限才能继续使用</string>
+	<key>UIBackgroundModes</key>
+	<array>
+		<string>remote-notification</string>
+	</array>
+	<key>UIInterfaceOrientation</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>UILaunchStoryboardName</key>
+	<string>CDVLaunchScreen</string>
+	<key>UIRequiresFullScreen</key>
+	<true/>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+	</array>
+</dict>
+</plist>

+ 0 - 1
vue/src/components/Contact/index.js

@@ -11,7 +11,6 @@ let uploadScore = function (info) {
     })
     instance.vm = instance.$mount()
     document.body.appendChild(instance.vm.$el)
-    console.log(instance.vm)
     return instance.vm
 }
 

+ 43 - 12
vue/src/components/DoubleElimination.vue

@@ -1,13 +1,15 @@
 <template>
-    <div class="svg-map" ref="svgMap" :style="{height: svgHeight + 20 + 'px'}">
+    <div class="svg-map" ref="svgMap" :style="{height:containerHeight}">
         <svg xmlns="http://www.w3.org/2000/svg"
              :width="(loserRound + 2) * (width + xGap) / 1.2"
              :height="svgHeight"
              :viewBox="`0 0 ${(loserRound + 2) * (width + xGap)} ${loserRoundParticipantNum[0] / 2 * (height * 2 + yGap) * 3 + 2 * (titleHeight + yGap) + yGap}`"
+             ref="svgMap"
+             :style="style"
              class="svg-vs-info-double-elimination">
             <rect class="title-rect" x="20" y="0" rx="8" ry="8" :height="titleHeight" :width="(loserRound + 2) * (width + xGap) + xGap / 2 - 40"></rect>
             <text v-for="(n,i) in loserRound"
-                  :key="i"
+                  :key="`w-text-${i}`"
                   class="round-text"
                   :x="i * (width + xGap) + xGap / 2 + width / 2"
                   :y="titleHeight / 2 + 6"
@@ -54,7 +56,7 @@
                   :height="titleHeight"
                   :width="loserRound * (width + xGap) - 40"></rect>
             <text v-for="(n,i) in loserRound"
-                  :key="i"
+                  :key="`l-text-${i}`"
                   class="round-text"
                   :x="i * (width + xGap) + xGap / 2 + width / 2"
                   :y="titleHeight / 2 + 6 + roundParticipantNum[0] / 2 * (2 * height + yGap) + titleHeight + yGap"
@@ -210,7 +212,7 @@
 <script>
 import VsPair from './VsPair'
 import { mapState } from 'vuex'
-
+import AlloyFinger from 'AlloyFinger'
 export default {
     props: {
         mode: String,
@@ -224,6 +226,25 @@ export default {
         },
         admin: {}
     },
+    mounted() {
+        this.af = new AlloyFinger(this.$refs.svgMap, {
+            multipointEnd: () => {
+                this.lastZoom = this.zoom
+            },
+            pinch: evt => {
+                console.log(evt)
+                this.zoom = this.lastZoom * evt.zoom
+            },
+            pressMove: evt => {
+                this.tx += evt.deltaX;
+                this.ty += evt.deltaY;
+                evt.preventDefault();
+            }
+        })
+    },
+    beforeDestroy() {
+        this.af.destroy();
+    },
     data() {
         return {
             width: 200,
@@ -231,7 +252,12 @@ export default {
             xGap: 100,
             yGap: 20,
             titleHeight: 44,
-            switchData: []
+            switchData: [],
+            zoom: 1,
+            tx: 0,
+            ty: 0,
+            lastZoom: 1,
+            af: null
         }
     },
     computed: {
@@ -239,6 +265,14 @@ export default {
         svgHeight() {
             return (this.loserRoundParticipantNum[0] / 2 * (this.height * 2 + this.yGap) * 3 + 2 * (this.titleHeight + this.yGap) + this.yGap) / 1.2
         },
+        containerHeight() {
+            return window.innerHeight - 90 + 'px'
+        },
+        style() {
+            return {
+                transform: `matrix(${this.zoom},0,0,${this.zoom},${this.tx},${this.ty})`
+            }
+        },
         finalData() {
             return this.matchData.find(i => {
                 return i.round === this.finalNum;
@@ -432,11 +466,6 @@ export default {
         onMouseDown(e) {
             this.move = true
         },
-        onMouseMove(e) {
-            if (this.move) {
-                this.$refs.svgMap.scrollLeft -= e.movementX || 0
-            }
-        },
         onTouchMove(e) {
         },
         onMouseUp(e) {
@@ -469,13 +498,15 @@ export default {
 </script>
 <style lang="less">
 .svg-map {
-    width: 1220px;
-    overflow-x: auto;
+    width: 100%;
+    overflow: hidden;
+    box-sizing: border-box;
 }
 
 .svg-vs-info-double-elimination {
     cursor: default;
     user-select: none;
+    transform-origin: 0 0;
     .title-rect {
         fill: #192836;
     }

+ 12 - 2
vue/src/components/MatchData.vue

@@ -7,9 +7,9 @@
         </div>
         <div class="user">
             <div class="avatar-wrapper"> <img :src="avatar1" class="avatar 1" @click="showContact(1)"></div>
-            <span class="score 1">{{score1}}</span>
+            <span class="score 1" :class="{bye:item.bye1}">{{score1}}</span>
             <span class="vs">VS</span>
-            <span class="score 2">{{score2}}</span>
+            <span class="score 2" :class="{bye:item.bye2}">{{score2}}</span>
             <div class="avatar-wrapper"> <img :src="avatar2" class="avatar 2" @click="showContact(2)"></div>
         </div>
         <div class="names">
@@ -61,12 +61,18 @@ export default {
             return require('../assets/avatar.png')
         },
         score1() {
+            if (this.item.bye1) {
+                return '弃权'
+            }
             if (this.item.score1 != undefined) {
                 return this.item.score1
             }
             return '-'
         },
         score2() {
+            if (this.item.bye2) {
+                return '弃权'
+            }
             if (this.item.score2 != undefined) {
                 return this.item.score2
             }
@@ -177,6 +183,10 @@ button {
             border-radius: 4px;
             color: #000000;
             text-align: center;
+            position: relative;
+            &.bye{
+                font-size: 11px;
+            }
         }
         .vs {
             font-size: 22px;

+ 46 - 10
vue/src/components/SingleElimination.vue

@@ -1,15 +1,17 @@
 <template>
-    <div class="svg-map" ref="svgMap" :style="{height:svgHeight + 20 + 'px'}">
+    <div class="svg-map" :style="{height:containerHeight}">
         <svg xmlns="http://www.w3.org/2000/svg"
              :width="(round * (width + xGap) + xGap) / 1.2"
              :height="svgHeight"
              :viewBox="`0 0 ${round * (width + xGap) + xGap} ${roundParticipantNum[0] / 2 * (height * 2 + yGap)  + titleHeight + yGap}`"
+             ref="svgMap"
+             :style="style"
              class="svg-vs-info-single-elimination">
             <rect class="title-rect" x="20" y="0" rx="8" ry="8" :height="titleHeight" :width="round * (width + xGap) + xGap - 40"></rect>
             <text v-for="(n,i) in round" :key="i" class="round-text" :x="i * (width + xGap) + xGap + width / 2" :y="titleHeight / 2 + 6" text-anchor="middle">第{{n}}轮</text>
             <template v-for="(i,r) in round">
                 <vs-pair v-for="(j,g) in roundParticipantNum[r] / 2"
-                         :key="`${r}-${g}`"
+                         :key="`vs-pair-${r}-${g}`"
                          type="normal"
                          :round="round"
                          :width="width"
@@ -27,7 +29,7 @@
             </template>
             <template v-for="(i,r) in round">
                 <image v-for="(j,g) in roundParticipantNum[r] / 2"
-                       :key="`${i}-${j}`"
+                       :key="`image-${i}-${j}`"
                        v-if="showUploadIcon(r,g)"
                        class="upload-icon"
                        :x="uploadIconPosition(r,g).x"
@@ -43,6 +45,7 @@
 <script>
 import VsPair from './VsPair'
 import { mapState } from 'vuex'
+import AlloyFinger from 'AlloyFinger'
 export default {
     props: {
         mode: String,
@@ -56,6 +59,25 @@ export default {
         },
         admin: {}
     },
+    mounted() {
+        this.af = new AlloyFinger(this.$refs.svgMap, {
+            multipointEnd: () => {
+                this.lastZoom = this.zoom
+            },
+            pinch: evt => {
+                console.log(evt)
+                this.zoom = this.lastZoom * evt.zoom
+            },
+            pressMove: evt => {
+                this.tx += evt.deltaX;
+                this.ty += evt.deltaY;
+                evt.preventDefault();
+            }
+        })
+    },
+    beforeDestroy() {
+        this.af.destroy();
+    },
     data() {
         return {
             width: 200,
@@ -64,7 +86,12 @@ export default {
             yGap: 20,
             titleHeight: 44,
             showLine: true,
-            switchData: []
+            switchData: [],
+            zoom: 1,
+            tx: 0,
+            ty: 0,
+            lastZoom: 1,
+            af: null
         }
     },
     computed: {
@@ -88,6 +115,14 @@ export default {
         },
         svgHeight() {
             return (this.roundParticipantNum[0] / 2 * (this.height * 2 + this.yGap) + this.titleHeight + this.yGap) / 1.2
+        },
+        containerHeight() {
+            return window.innerHeight - 90 + 'px'
+        },
+        style() {
+            return {
+                transform: `matrix(${this.zoom},0,0,${this.zoom},${this.tx},${this.ty})`
+            }
         }
     },
     methods: {
@@ -179,15 +214,14 @@ export default {
         onMouseDown(e) {
             this.move = true
         },
-        onMouseMove(e) {
-            if (this.move) {
-                this.$refs.svgMap.scrollLeft -= e.movementX || 0
-            }
-        },
         onTouchMove(e) {
         },
         onMouseUp(e) {
             this.move = false
+        },
+        pinch(e, args) {
+            console.log(e)
+            console.log(args)
         }
     },
     watch: {
@@ -203,12 +237,14 @@ export default {
 <style lang="less">
 .svg-map {
     width: 100%;
-    overflow-x: auto;
+    overflow: hidden;
+    box-sizing: border-box;
 }
 
 .svg-vs-info-single-elimination {
     cursor: default;
     user-select: none;
+    transform-origin: 0 0;
     .title-rect {
         fill: #192836;
     }

+ 74 - 31
vue/src/components/UploadScore/Main.vue

@@ -13,13 +13,19 @@
                     </div>
                     <div class="infos">
                         <div class="info">
-                            <input @click="$event.target.focus()" class="score" v-model="matchData.score1" type="tel" maxlength="3">
+                            <input @click="$event.target.focus()" class="score" v-model="matchData.score1" type="tel" maxlength="3" :disabled="matchData.bye1">
+                            <div class="bye-wrapper">
+                                <button class="bye" :class="{active:matchData.bye1}" @click="bye(1)" v-if="!matchData.bye2">{{matchData.bye1?'已弃权':'弃权'}}</button>
+                            </div>
                             <img :src="avatar1" class="avatar" @click="showContact(1)">
                             <div class="name" @click="showContact(1)">{{name1}}<img src="../../assets/icon_contact.png" class="icon-contact"></div>
                         </div>
                         <div class="vs">VS</div>
                         <div class="info">
-                            <input @click="$event.target.focus()" class="score" v-model="matchData.score2" type="tel" maxlength="3">
+                            <input @click="$event.target.focus()" class="score" v-model="matchData.score2" type="tel" maxlength="3" :disabled="matchData.bye2">
+                            <div class="bye-wrapper">
+                                <button class="bye" :class="{active:matchData.bye2}" @click="bye(2)" v-if="!matchData.bye1">{{matchData.bye2?'已弃权':'弃权'}}</button>
+                            </div>
                             <img :src="avatar2" class="avatar" @click="showContact(2)">
                             <div class="name" @click="showContact(2)">{{name2}}<img src="../../assets/icon_contact.png" class="icon-contact"></div>
                         </div>
@@ -171,38 +177,57 @@ export default {
                 this.pics.splice(i, 1)
             })
         },
+        bye(i) {
+            this.matchData[`bye${i}`] = !this.matchData[`bye${i}`]
+            if (this.matchData[`bye${i}`]) {
+                this.matchData[`score${i}`] = 0
+            }
+        },
         submit() {
-            if (!(Number(this.matchData.score1) >= 0)) {
-                this.$modal.info('请输入正确的比分');
-            } else if (!(Number(this.matchData.score2) >= 0)) {
-                this.$modal.info('请输入正确的比分');
-            } else if (this.matchData.type !== 3 && Number(this.matchData.score1) === Number(this.matchData.score2)) {
-                this.$modal.info('比分不能相同');
-            } else if (!(Number(this.matchData.score1) % 1 === 0 && Number(this.matchData.score2) % 1 === 0)) {
-                this.$modal.info('比分不能含小数');
+            if (this.matchData.bye1) {
+                this.matchData.score1 = 0;
+                this.matchData.score2 = this.matchData.score2 || 0;
+            } else if (this.matchData.bye2) {
+                this.matchData.score2 = 0;
+                this.matchData.score1 = this.matchData.score1 || 0;
             } else {
-                this.$modal.loading('正在上传')
-                this.$http.post({
-                    url: '/matchData/update',
-                    data: {
-                        id: this.matchData.id,
-                        score1: this.matchData.score1,
-                        score2: this.matchData.score2,
-                        state: 1,
-                        pictures: this.pics,
-                        uploadUser: this.userInfo.id
-                    }
-                }).then(res => {
-                    this.$modal.close()
-                    if (res.success) {
-                        this.$modal.success('上传成功')
-                        ebs.$emit('uploadFinish')
-                    }
-                }).catch(() => {
-                    this.$modal.close()
-                })
-                this.visible = false
+                if (!(Number(this.matchData.score1) >= 0)) {
+                    this.$modal.info('请输入正确的比分');
+                    return;
+                } else if (!(Number(this.matchData.score2) >= 0)) {
+                    this.$modal.info('请输入正确的比分');
+                    return;
+                } else if (this.matchData.type !== 3 && Number(this.matchData.score1) === Number(this.matchData.score2)) {
+                    this.$modal.info('比分不能相同');
+                    return;
+                } else if (!(Number(this.matchData.score1) % 1 === 0 && Number(this.matchData.score2) % 1 === 0)) {
+                    this.$modal.info('比分不能含小数');
+                    return;
+                }
             }
+            this.$modal.loading('正在上传')
+            this.$http.post({
+                url: '/matchData/update',
+                data: {
+                    id: this.matchData.id,
+                    bye1: this.matchData.bye1,
+                    bye2: this.matchData.bye2,
+                    score1: this.matchData.score1,
+                    score2: this.matchData.score2,
+                    state: 1,
+                    pictures: this.pics,
+                    uploadUser: this.userInfo.id
+                }
+            }).then(res => {
+                this.$modal.close()
+                if (res.success) {
+                    this.$modal.success('上传成功')
+                    ebs.$emit('uploadFinish')
+                }
+            }).catch(() => {
+                this.$modal.close()
+            })
+            this.visible = false
         },
         afterLeave() {
             this.$destroy(true);
@@ -295,6 +320,24 @@ input {
                 font-weight: 700;
                 color: #000000;
             }
+            .bye-wrapper {
+                height: 26px;
+                margin-top: 8px;
+            }
+            .bye {
+                background: #ebeef0;
+                font-size: 12px;
+                color: #000000;
+                width: 60px;
+                height: 26px;
+                line-height: 26px;
+                border-radius: 4px;
+                font-weight: 700;
+                &.active {
+                    background: rgba(241, 84, 54, 1);
+                    color: #ffffff;
+                }
+            }
             .avatar {
                 width: 40px;
                 height: 40px;

+ 3 - 2
vue/src/main.js

@@ -36,8 +36,8 @@ Vue.prototype.$toast = msg => {
 };
 
 // const baseUrl = process.env.NODE_ENV === 'production' ? `http://49.4.67.181:8085` : `http://192.168.50.132:8080`;
-// const baseUrl = 'http://47.110.71.14'
-const baseUrl = 'http://192.168.50.132:8080'
+const baseUrl = 'http://47.110.71.14'
+// const baseUrl = 'http://192.168.50.132:8080'
 Vue.prototype.$baseUrl = baseUrl;
 axios.defaults.baseURL = baseUrl;
 axios.defaults.withCredentials = true;
@@ -172,6 +172,7 @@ const createApp = () => {
     if (window.JPush) {
         window.JPush.init();
         window.JPush.setDebugMode(true);
+        window.JPush.setApplicationIconBadgeNumber(0);
     }
 };
 

+ 1 - 1
vue/src/pages/MatchDetail.vue

@@ -93,7 +93,7 @@
                 </div>
             </div>
         </div>
-        <div class="card" style="margin-top:20px" v-if="matchInfo.state===5">
+        <div class="card" v-if="matchInfo.state===5">
             <div class="title">获奖名单</div>
             <div v-for="(item,i) in participantList" :key="i">
                 <div v-if="matchInfo.type===3">{{item[0].groupName}}</div>

+ 26 - 1
vue/src/pages/MatchInfo.vue

@@ -48,6 +48,9 @@
         <div class="btn-wrapper" v-if="matchInfo.state===2&&!applied">
             <button class="btn-apply" @click="apply">立即报名</button>
         </div>
+        <div class="btn-wrapper" v-if="matchInfo.state===2&&applied">
+            <button class="btn-apply" @click="quit">退出比赛</button>
+        </div>
     </div>
 </template>
 <script>
@@ -252,7 +255,29 @@ export default {
             }).catch(e => {
                 mescroll.endErr()
             })
-
+        },
+        quit() {
+            this.$alert({
+                content: '确定退出比赛?',
+                showCancel: true
+            }, () => {
+                this.$modal.loading('正在退出')
+                this.$http.post({
+                    url: 'applyInfo/quit',
+                    data: {
+                        matchId: this.$route.query.id,
+                        userId: this.userInfo.id
+                    }
+                }).then(res => {
+                    this.$modal.close()
+                    if (res.success) {
+                        this.$modal.success('已退出比赛')
+                        this.applied = false
+                    } else {
+                        this.$modal.info('退出失败,请稍后再试')
+                    }
+                }).catch(() => { this.$modal.close() })
+            })
         }
     },
     watch: {

+ 4 - 11
vue/src/pages/MatchList.vue

@@ -95,7 +95,8 @@ export default {
         upCallback(page, mescroll) {
             let data = {
                 pageNumber: page.size,
-                currentPage: page.num
+                currentPage: page.num,
+                isPublic: true
             };
             if (this.matchFilter === 2) {
                 data.state = 2;
@@ -131,7 +132,8 @@ export default {
             this.loading = true
             let data = {
                 pageNumber: this.pageSize,
-                currentPage: this.currentPage
+                currentPage: this.currentPage,
+                isPublic: true
             };
             if (this.matchFilter === 2) {
                 data.state = 2;
@@ -191,15 +193,6 @@ export default {
                 }
             });
         },
-        touchmove() {
-            if (this.loading) {
-                return
-            }
-            if (this.$refs.scroll.offsetHeight + this.$refs.scroll.scrollTop >= this.$refs.scroll.scrollHeight) {
-                this.currentPage++
-                this.getData()
-            }
-        },
         closePicker() {
             this.showPicker = false
         },

+ 1 - 1
vue/src/store/index.js

@@ -22,7 +22,7 @@ export default new Vuex.Store({
             state.userInfo = userInfo;
             if (window.JPush) {
                 if (userInfo) {
-                    window.JPush.setAlias({ sequence: 1, alias: 'your_alias' }, result => {
+                    window.JPush.setAlias({ sequence: 1, alias: userInfo.id + '' }, result => {
                         var sequence = result.sequence
                         var alias = result.alias
                     }, error => {

+ 1 - 1
www/dianjing.html

@@ -1 +1 @@
-<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.9b1fefaf0b900bfe8b89.js></script></body></html>
+<!DOCTYPE html><html><head><meta charset=utf-8><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=viewport content="initial-scale=1,width=device-width,viewport-fit=cover,user-scalable=no"><script src=./cordova.js></script><title>dianjing</title><link href=./static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.e5aaf337e8770080039f.js></script><script type=text/javascript src=./static/js/app.c90714ee0957324606eb.js></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css


File diff suppressed because it is too large
+ 0 - 0
www/static/css/app.468e92c7b6b2ebb9c5fbd92316150fbf.css.map


File diff suppressed because it is too large
+ 0 - 0
www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css


File diff suppressed because it is too large
+ 0 - 0
www/static/css/app.8f48f06f819bd48813a5fa9edfbb5a40.css.map


File diff suppressed because it is too large
+ 0 - 0
www/static/js/app.9b1fefaf0b900bfe8b89.js


File diff suppressed because it is too large
+ 0 - 0
www/static/js/app.9b1fefaf0b900bfe8b89.js.map


File diff suppressed because it is too large
+ 0 - 0
www/static/js/app.c90714ee0957324606eb.js


File diff suppressed because it is too large
+ 0 - 0
www/static/js/app.c90714ee0957324606eb.js.map


File diff suppressed because it is too large
+ 0 - 0
www/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


Some files were not shown because too many files changed in this diff