From 34db7035c9c7880e00b9328d022be65a29c62cb2 Mon Sep 17 00:00:00 2001 From: zhaojs <349234519@qq.com> Date: 星期一, 31 七月 2023 10:40:56 +0800 Subject: [PATCH] Merge branch 'feature/v1.1.5接口' into develop --- application/api/logic/Banner.php | 5 h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.ttf | 0 h5/apph5/uni_modules/uni-popup/readme.md | 17 public/html/compareprice.html | 128 h5/apph5/uni_modules/uni-icons/readme.md | 8 h5/apph5/uni_modules/uni-popup/changelog.md | 68 h5/apph5/uni_modules/uni-scss/styles/setting/_border.scss | 3 h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/en.json | 7 application/api/controller/Activity.php | 38 h5/apph5/pages.json | 46 h5/apph5/uni_modules/h-datetime-picker/changelog.md | 28 h5/apph5/request/index.js | 42 h5/apph5/uni_modules/uni-scss/styles/setting/_text.scss | 24 h5/apph5/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue | 187 + h5/apph5/pages/takeout/elm.vue | 106 h5/apph5/uni.promisify.adaptor.js | 10 h5/apph5/uni_modules/h-datetime-picker/components/h-datetime-picker/h-datetime-picker.vue | 648 ++++ h5/apph5/uni_modules/h-datetime-picker/readme.md | 66 h5/apph5/uni_modules/uni-icons/package.json | 86 h5/apph5/uni_modules/uni-scss/styles/index.scss | 7 h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.css | 663 ++++ h5/apph5/pages/takeout/elm.css | 124 application/common/controller/Api.php | 16 h5/apph5/uni_modules/uni-scss/variables.scss | 62 h5/apph5/uni_modules/h-datetime-picker/package.json | 81 h5/apph5/uni_modules/uni-scss/changelog.md | 8 h5/apph5/uni_modules/uni-popup/components/uni-popup/popup.js | 26 h5/apph5/uni_modules/uni-scss/index.scss | 1 application/api/controller/User.php | 19 h5/apph5/uni_modules/uni-transition/package.json | 84 h5/apph5/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue | 143 h5/apph5/uni.scss | 76 h5/apph5/uni_modules/uni-scss/package.json | 82 public/html/js/md5.js | 1110 +++++++ h5/apph5/uni_modules/uni-scss/styles/setting/_styles.scss | 167 + h5/apph5/uni_modules/uni-popup/package.json | 87 h5/apph5/pages/wxkf/index.vue | 54 h5/apph5/uni_modules/uni-scss/styles/setting/_color.scss | 66 h5/apph5/.hbuilderx/launch.json | 16 h5/apph5/uni_modules/uni-transition/components/uni-transition/uni-transition.vue | 286 + .gitignore | 3 h5/apph5/request/api.js | 56 h5/apph5/uni_modules/uni-scss/readme.md | 4 h5/apph5/uni_modules/uni-transition/components/uni-transition/createAnimation.js | 131 h5/apph5/uni_modules/uni-icons/changelog.md | 22 h5/apph5/uni_modules/uni-transition/changelog.md | 22 h5/apph5/main.js | 23 h5/apph5/uni_modules/uni-icons/components/uni-icons/uni-icons.vue | 96 h5/apph5/pages/takeout/mt.css | 119 h5/apph5/uni_modules/uni-popup/components/uni-popup/keypress.js | 45 application/admin/model/Banner.php | 2 h5/apph5/pages/takeout/mt.vue | 116 h5/apph5/uni_modules/uni-scss/styles/setting/_space.scss | 56 public/assets/js/backend/banner.js | 2 h5/apph5/pages/index/index.vue | 67 h5/apph5/utils/md5.js | 1113 +++++++ h5/apph5/uni_modules/uni-scss/styles/setting/_radius.scss | 55 application/api/logic/ActivityInfo.php | 20 h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js | 45 h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json | 7 h5/apph5/uni_modules/uni-scss/theme.scss | 31 application/common/library/Auth.php | 57 h5/apph5/uni_modules/uni-transition/readme.md | 11 h5/apph5/uni_modules/uni-icons/components/uni-icons/icons.js | 1169 +++++++ h5/apph5/manifest.json | 95 h5/apph5/uni_modules/uni-scss/styles/tools/functions.scss | 19 h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue | 275 + h5/apph5/pages/backmanage/shortlink.vue | 129 h5/apph5/uni_modules/h-datetime-picker/js/timeFormat.js | 51 h5/apph5/App.vue | 18 h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json | 7 h5/apph5/uni_modules/uni-scss/styles/setting/_variables.scss | 146 h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/index.js | 8 h5/apph5/utils/ComUtils.js | 10 h5/apph5/index.html | 20 application/config.php | 2 h5/apph5/uni_modules/uni-popup/components/uni-popup/uni-popup.vue | 473 +++ 77 files changed, 9,172 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index a43f6e5..c7fa9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ node_modules /uniapp/unpackage/* runtime/log/* -/application/extra/* \ No newline at end of file +/application/extra/* +h5/apph5/unpackage/dist/build/ diff --git a/application/admin/model/Banner.php b/application/admin/model/Banner.php index ccf294f..abdae87 100644 --- a/application/admin/model/Banner.php +++ b/application/admin/model/Banner.php @@ -44,7 +44,7 @@ public function getTypeList() { - return ['0' => __('Type 0'), '1' => __('Type 1'), '2' => __('Type 2'), '3' => __('Type 3'), '4' => __('Type 4'), '5' => __('Type 5'), '6' => __('Type 6'), '7' => __('Type 7'),'9' => '鏂颁汉鏁欑▼','10'=>'閫涢��','11'=>'app棣栭〉灏忚疆鎾�','12'=>'棣栭〉杩炴爣','13'=>'app棣栭〉蹇嵎涓�','14'=>'app棣栭〉蹇嵎涓�','15'=>'app鍚姩椤�','16'=>'娣樺疂杩斿埄杞挱','17'=>'浜笢杩斿埄杞挱','18'=>'鎶栭煶杩斿埄杞挱','19'=>'鎷煎澶氳繑鍒╄疆鎾�','20'=>'鍞搧浼氳繑鍒╄疆鎾�']; + return ['0' => __('Type 0'), '1' => __('Type 1'), '2' => __('Type 2'), '3' => __('Type 3'), '4' => __('Type 4'), '5' => __('Type 5'), '6' => __('Type 6'), '7' => __('Type 7'),'9' => '鏂颁汉鏁欑▼','10'=>'閫涢��','11'=>'app棣栭〉灏忚疆鎾�','12'=>'棣栭〉杩炴爣','13'=>'app棣栭〉蹇嵎涓�','14'=>'app棣栭〉蹇嵎涓�','15'=>'app鍚姩椤�','16'=>'娣樺疂杩斿埄杞挱','17'=>'浜笢杩斿埄杞挱','18'=>'鎶栭煶杩斿埄杞挱','19'=>'鎷煎澶氳繑鍒╄疆鎾�','20'=>'鍞搧浼氳繑鍒╄疆鎾�','21'=>'鑷畾涔夐椤靛脊绐�']; } public function getStatusList() diff --git a/application/api/controller/Activity.php b/application/api/controller/Activity.php index 6b0be8c..a39bc4a 100644 --- a/application/api/controller/Activity.php +++ b/application/api/controller/Activity.php @@ -6,6 +6,7 @@ use app\api\logic\taoke\device\Haodanku; use app\common\model\FqbCate; use app\api\logic\taoke\device\Jd as LogicJd; +use app\api\logic\Banner as LogicBanner; use app\api\logic\ActivityInfo as ActInfo; @@ -255,4 +256,41 @@ $user = $this->auth->getUser(); $this->success('鑾峰彇鎴愬姛',$user->invitation_code); } + + + /** + * 鑾峰彇鑷畾涔夊脊绐� + * + */ + public function getCustomizePopup() + { + $LogicBanner = new LogicBanner(); + $list = $LogicBanner->getList('20,21'); + if(!$list||$list['customizePop']==null||count($list['customizePop'])==0) + { + $this->success('鑾峰彇鎴愬姛',[]); + } + $user = $this->auth->getUser(); + $actInfo=new ActInfo(); + foreach ($list['customizePop'] as $vaule) { + $paraJson=json_decode($vaule->note); + $isPop=false; + switch($paraJson->poptype) + { + case 'freebuy'://0鍏冭喘寮圭獥 + $isPop=$actInfo->popupcus_freebuy($user); + break; + default: + break; + } + if($isPop) + { + $this->success('鑾峰彇鎴愬姛',['haspop'=>true,'info'=>$vaule]); + break; + } + } + $this->success('鑾峰彇鎴愬姛',['haspop'=>false]); + } + + } \ No newline at end of file diff --git a/application/api/controller/User.php b/application/api/controller/User.php index 524cace..1b1171f 100644 --- a/application/api/controller/User.php +++ b/application/api/controller/User.php @@ -22,13 +22,13 @@ use app\api\logic\ActivityInfo as InfoActivityInfo; use app\common\model\UserExtend as ModelUserExtend; use think\Db; - +use EasyWeChat\Kernel\Support\AES; /** * 浼氬憳鎺ュ彛 */ class User extends Api { - protected $noNeedLogin = ['GetRecomInviter','login', 'mobilelogin', 'resetpwd', 'changemobile', 'wxapplogin','bind_mobile_login','register']; + protected $noNeedLogin = ['GetDfgToken','GetRecomInviter','login', 'mobilelogin', 'resetpwd', 'changemobile', 'wxapplogin','bind_mobile_login','register']; protected $noNeedRight = '*'; public function _initialize() @@ -55,6 +55,21 @@ } + public function GetDfgToken() + { + $userId=$this->request->post('userid'); + if (!$userId) { + $this->error(__('Invalid parameters')); + } + //aes鍔犲瘑 + $enKey="wp4hs3bvu7wq2mud"; + $iv = 'fedcba9876543210'; + $decrypted = base64_encode(AES::encrypt($userId,$enKey, $iv)); + $this->success($decrypted); + } + + + /** * 鏇存柊appclientid */ diff --git a/application/api/logic/ActivityInfo.php b/application/api/logic/ActivityInfo.php index 88801da..b09270d 100644 --- a/application/api/logic/ActivityInfo.php +++ b/application/api/logic/ActivityInfo.php @@ -6,6 +6,8 @@ use think\Db; use app\common\model\User as ModelUser; use app\api\logic\SettlementRecord as LogicSettlementRecord; +use app\api\logic\UserBrowse as LogicUserBrowse; + class ActivityInfo extends BasicLogic { @@ -254,4 +256,22 @@ return $maxReward; } + /** + * 鑷畾涔夊脊绐�-0鍏冭喘 + */ + public function popupcus_freebuy($userInfo) + { + $LogicUserBrowse = new LogicUserBrowse(); + $res = $LogicUserBrowse->checkIsFirstFree($userInfo->id); + if($res === false) + { + return false; + } + if(empty($res)) + { + return true; + } + return false; + } + } \ No newline at end of file diff --git a/application/api/logic/Banner.php b/application/api/logic/Banner.php index d1fc61a..ae5b3ef 100644 --- a/application/api/logic/Banner.php +++ b/application/api/logic/Banner.php @@ -10,7 +10,7 @@ class Banner extends BasicLogic { - const BANNER_TYPE = ['1'=>'topBannerList','3'=>'singleLineList','4'=>'doubleLineList','5'=>'bottomBannerList','7' => 'popBannerList','11'=>'popBannerSList','12'=>'indexbanner','13'=>'enterTop','14'=>'enterDown','15'=>'launchpic','16'=>'tmImg','17'=>'jdImg','18'=>'dyImg','19'=>'pddImg','20'=>'wphImg']; + const BANNER_TYPE = ['1'=>'topBannerList','3'=>'singleLineList','4'=>'doubleLineList','5'=>'bottomBannerList','7' => 'popBannerList','11'=>'popBannerSList','12'=>'indexbanner','13'=>'enterTop','14'=>'enterDown','15'=>'launchpic','16'=>'tmImg','17'=>'jdImg','18'=>'dyImg','19'=>'pddImg','20'=>'wphImg','21'=>'customizePop']; public function __construct() { @@ -30,7 +30,7 @@ $where['status'] = 1; $where['start_time'] = ['<=',time()]; $where['end_time'] = ['>',time()]; - $list = $this->model->field('id,type,image,url_type,url,colour,parameter_json')->where($where)->whereIn('type',$type_arr)->order('sort desc')->select(); + $list = $this->model->field('id,type,image,url_type,url,colour,note,parameter_json')->where($where)->whereIn('type',$type_arr)->order('sort desc')->select(); $return_data = [ 'topBannerList'=>[], 'singleLineList'=>[], @@ -47,6 +47,7 @@ 'dyImg'=>[], 'pddImg'=>[], 'wphImg'=>[], + 'customizePop'=>[], ]; if(count($type_arr) > 1){ foreach($list as $item){ diff --git a/application/common/controller/Api.php b/application/common/controller/Api.php index 39dbe02..d0070a1 100644 --- a/application/common/controller/Api.php +++ b/application/common/controller/Api.php @@ -110,12 +110,26 @@ $token = $this->request->server('HTTP_TOKEN', $this->request->request('token', \think\Cookie::get('token'))); $path = str_replace('.', '/', $controllername) . '/' . $actionname; + $hasInit=false; // 璁剧疆褰撳墠璇锋眰鐨刄RI $this->auth->setRequestUri($path); // 妫�娴嬫槸鍚﹂渶瑕侀獙璇佺櫥褰� if (!$this->auth->match($this->noNeedLogin)) { //鍒濆鍖� - $this->auth->init($token); + if(empty($token)) + {//token涓虹┖锛屽垽鏂璼essionkey + $sessionkey= $this->request->server('HTTP_DFGSESSIONKEY', $this->request->request('dfgsessionkey', \think\Cookie::get('dfgsessionkey'))); + if(!empty($sessionkey)) + {//鏍¢獙sessionkey + $paramsArr=$this->request->post(false); + $this->auth->initSession($sessionkey,$paramsArr); + $hasInit=true; + } + } + if(!$hasInit) + { + $this->auth->init($token); + } //妫�娴嬫槸鍚︾櫥褰� if (!$this->auth->isLogin()) { $this->error(__('Please login first'), [], 401); diff --git a/application/common/library/Auth.php b/application/common/library/Auth.php index 6de3231..1c023ee 100644 --- a/application/common/library/Auth.php +++ b/application/common/library/Auth.php @@ -12,6 +12,7 @@ use think\Request; use think\Validate; use app\common\model\user\Third as ModelThird; +use EasyWeChat\Kernel\Support\AES; class Auth { @@ -122,6 +123,62 @@ } } + public function initSession($sessionkey,$params) + { + //$sessionkey鍒嗕袱閮ㄥ垎锛�.鍓嶆槸md5鍔犲瘑锛�.鍚庢槸aes鍔犲瘑鐨剈serid + //鏍¢獙sessionkey鏄惁鍚堟硶 + $enstrs=""; + $searr=explode('.',$sessionkey); + if(count($searr)!=2) + { + $this->setError('Account not exist'); + return false; + } + foreach ($params as $key => $value) { + $enstrs=$enstrs.$key; + $pvalue=preg_replace('/^\"|\"$/','',json_encode($value,JSON_UNESCAPED_UNICODE)); + $enstrs=$enstrs.$pvalue; + } + $enstrs="dfg".$enstrs."apph5".$searr[1]; + $enstrs=md5($enstrs,false); + if($enstrs!=$searr[0]) + {//session鏍¢獙涓嶉�氳繃 + $this->setError('Account not exist'); + return false; + } + //aes瑙e瘑 + $enKey="wp4hs3bvu7wq2mud"; + $iv = 'fedcba9876543210'; + $user_id = AES::decrypt(base64_decode($searr[1],true),$enKey, $iv); + if(empty($user_id)) + { + $this->setError('Account not exist'); + return false; + } + if ($user_id > 0) { + $user = User::get($user_id); + if (!$user) { + $this->setError('Account not exist'); + return false; + } + if ($user['status'] != 'normal') { + $this->setError('Account is locked'); + return false; + } + $this->_user = $user; + $this->_logined = true; + $this->_token = $user_id; + + //鍒濆鍖栨垚鍔熺殑浜嬩欢 + Hook::listen("user_init_successed", $this->_user); + + return true; + } else { + $this->setError('You are not logged in'); + return false; + } + } + /** * 娉ㄥ唽鐢ㄦ埛 * diff --git a/application/config.php b/application/config.php index 3eb4241..189272d 100644 --- a/application/config.php +++ b/application/config.php @@ -292,7 +292,7 @@ //鎻掍欢绾噣妯″紡锛屾彃浠跺惎鐢ㄥ悗鏄惁鍒犻櫎鎻掍欢鐩綍鐨刟pplication銆乸ublic鍜宎ssets鏂囦欢澶� 'addon_pure_mode' => true, //鍏佽璺ㄥ煙鐨勫煙鍚�,澶氫釜浠�,鍒嗛殧 - 'cors_request_domain' => 'localhost,127.0.0.1', + 'cors_request_domain' => 'localhost,127.0.0.1,dfgh5.ushopvip.com', //鐗堟湰鍙� 'version' => '1.3.3.20220121', //API鎺ュ彛鍦板潃 diff --git a/h5/apph5/.hbuilderx/launch.json b/h5/apph5/.hbuilderx/launch.json new file mode 100644 index 0000000..a9ec4a7 --- /dev/null +++ b/h5/apph5/.hbuilderx/launch.json @@ -0,0 +1,16 @@ +{ // launch.json 閰嶇疆浜嗗惎鍔ㄨ皟璇曟椂鐩稿叧璁剧疆锛宑onfigurations涓嬭妭鐐瑰悕绉板彲涓� app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype椤瑰彲閰嶇疆鍊间负local鎴杛emote, local浠h〃鍓嶇杩炴湰鍦颁簯鍑芥暟锛宺emote浠h〃鍓嶇杩炰簯绔簯鍑芥暟 + "version": "0.0", + "configurations": [{ + "default" : + { + "launchtype" : "local" + }, + "h5" : + { + "launchtype" : "remote" + }, + "type" : "uniCloud" + } + ] +} diff --git a/h5/apph5/App.vue b/h5/apph5/App.vue new file mode 100644 index 0000000..42a4041 --- /dev/null +++ b/h5/apph5/App.vue @@ -0,0 +1,18 @@ +<script> + export default { + onLaunch: function() { + //console.log('App Launch') + }, + onShow: function() { + //console.log('App Show') + }, + onHide: function() { + //console.log('App Hide') + } + } +</script> + +<style> + /*姣忎釜椤甸潰鍏叡css */ + +</style> diff --git a/h5/apph5/index.html b/h5/apph5/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/h5/apph5/index.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <script> + var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || + CSS.supports('top: constant(a)')) + document.write( + '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + + (coverSupport ? ', viewport-fit=cover' : '') + '" />') + </script> + <title></title> + <!--preload-links--> + <!--app-context--> + </head> + <body> + <div id="app"><!--app-html--></div> + <script type="module" src="/main.js"></script> + </body> +</html> diff --git a/h5/apph5/main.js b/h5/apph5/main.js new file mode 100644 index 0000000..7ed0fd2 --- /dev/null +++ b/h5/apph5/main.js @@ -0,0 +1,23 @@ +import App from './App' +import api from './request/api.js' +// #ifndef VUE3 +import Vue from 'vue' +import './uni.promisify.adaptor' +Vue.config.productionTip = false +Vue.prototype.$http=api; +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/h5/apph5/manifest.json b/h5/apph5/manifest.json new file mode 100644 index 0000000..e85b7b5 --- /dev/null +++ b/h5/apph5/manifest.json @@ -0,0 +1,95 @@ +{ + "name" : "apph5", + "appid" : "__UNI__D4151F8", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App鐗规湁鐩稿叧 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 妯″潡閰嶇疆 */ + "modules" : {}, + /* 搴旂敤鍙戝竷淇℃伅 */ + "distribute" : { + /* android鎵撳寘閰嶇疆 */ + "android" : { + "permissions" : [ + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", + "<uses-permission android:name=\"android.permission.VIBRATE\"/>", + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.CAMERA\"/>", + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", + "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", + "<uses-feature android:name=\"android.hardware.camera\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" + ] + }, + /* ios鎵撳寘閰嶇疆 */ + "ios" : {}, + /* SDK閰嶇疆 */ + "sdkConfigs" : {} + } + }, + /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */ + "quickapp" : {}, + /* 灏忕▼搴忕壒鏈夌浉鍏� */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2", + "h5" : { + "router" : { + "mode" : "history" + }, + "devServer" : { + "public" : "0.0.0.0", + "proxy" : { + //閰嶇疆浠g悊鏈嶅姟鍣ㄦ潵瑙e喅璺ㄥ煙闂锛寀niapp涓嶉�傜敤CORS鏂规鍜岃缃甁SONP鏂规 + "/openwize/" : { + //鏄犲皠鍩熷悕 + "target" : "http://vx8.cc", //娴嬭瘯鐜 + "changeOrigin" : true, //鏄惁璺ㄥ煙 + "secure" : true // 鏄惁鏀寔 https 鍗忚鐨勪唬鐞� + }, + "/api/" : { + //鏄犲皠鍩熷悕 + "target" : "http://dfg.shop.com", //娴嬭瘯鐜 + "changeOrigin" : true, //鏄惁璺ㄥ煙 + "secure" : true // 鏄惁鏀寔 https 鍗忚鐨勪唬鐞� + } + } + } + } +} diff --git a/h5/apph5/pages.json b/h5/apph5/pages.json new file mode 100644 index 0000000..1642252 --- /dev/null +++ b/h5/apph5/pages.json @@ -0,0 +1,46 @@ +{ + "pages": [ //pages鏁扮粍涓涓�椤硅〃绀哄簲鐢ㄥ惎鍔ㄩ〉锛屽弬鑰冿細https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationStyle":"custom",//涓嶆樉绀哄ご閮� + "navigationBarTitleText": "澶ц繑瀹�" + } + }, + { + "path": "pages/takeout/mt", + "style": { + "navigationStyle":"custom",//涓嶆樉绀哄ご閮� + "navigationBarTitleText": "缇庨澶栧崠" + } + }, + { + "path": "pages/takeout/elm", + "style": { + "navigationStyle":"custom",//涓嶆樉绀哄ご閮� + "navigationBarTitleText": "缇庨澶栧崠" + } + }, + { + "path": "pages/wxkf/index", + "style": { + "navigationStyle":"custom",//涓嶆樉绀哄ご閮� + "navigationBarTitleText": "寰俊瀹㈡湇" + } + }, + { + "path": "pages/backmanage/shortlink", + "style": { + "navigationStyle":"custom",//涓嶆樉绀哄ご閮� + "navigationBarTitleText": "鐭摼缁熻" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "澶ц繑瀹�", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {} +} diff --git a/h5/apph5/pages/backmanage/shortlink.vue b/h5/apph5/pages/backmanage/shortlink.vue new file mode 100644 index 0000000..b2cb4ee --- /dev/null +++ b/h5/apph5/pages/backmanage/shortlink.vue @@ -0,0 +1,129 @@ +<!-- 鏈ず渚嬫湭鍖呭惈瀹屾暣css锛岃幏鍙栧閾綾ss璇峰弬鑰冧笂鏂囷紝鍦╤ello uni-app椤圭洰涓煡鐪� --> +<template> + <view> + <view> + <view class="uni-form-item"> + <view class="title">閾炬帴key:</view> + <view> + <input v-model="keyname" style="height: 2.4rem; border: 1px solid;" placeholder="杈撳叆鐭摼key" /> + </view> + </view> + <view class="uni-form-item"> + <view class="title">鏃堕棿:</view> + <view> + <view style="line-height: 2.3rem;" @click="datetimeshow()">{{showtime}}</view> + <h-datetime-picker :startTime="startTime" :endTime="endTime" mode="multiple" ref="pickerDate" + @reset="reset" @confirm="confirm"></h-datetime-picker> + </view> + </view> + <view class="uni-form-item"> + <view class="title">鍙戦�佹暟閲�:</view> + <view> + <input v-model="sendcount" style="height: 2.4rem; border: 1px solid;" placeholder="璇疯緭鍏ュ彂閫佹暟閲�" /> + </view> + </view> + <view class="uni-btn-v"> + <button @click="formSubmit()">鏌ヨ</button> + </view> + <view class="resshowtxt" v-if="res_key"> + <view> + 閾炬帴key锛歿{res_key}} + </view> + <view> + Pv锛歿{res_pv}}------{{pvrate}} + </view> + <view> + Uv锛歿{res_uv}}-------{{uvrate}} + </view> + </view> + + </view> + </view> +</template> + + +<script> + import timeFormat from "@/uni_modules/h-datetime-picker/js/timeFormat.js" + export default { + data() { + return { + timeFormat, + sendcount:10000, + keyname: '', + startTime: '', + endTime: '', + showtime: '鐐瑰嚮閫夋嫨鏃堕棿', + res_key: '', + res_pv: '', + res_uv: '', + pvrate:0, + uvrate:0 + } + }, + onLoad() { + let end_time = new Date(); + let startdate = end_time.setDate(new Date(end_time).getDate() - 3); + this.startTime = this.timeFormat(startdate, 'yyyy-mm-dd'); + this.endTime = this.timeFormat(new Date(), 'yyyy-mm-dd'); + }, + methods: { + datetimeshow() { + this.$refs.pickerDate.open() + }, + reset() { + this.showtime = ''; + this.startTime = ''; + this.endTime = ''; + }, + confirm(e) { + this.showtime = e.start_time.time + "鑷�" + e.end_time.time; + this.startTime = e.start_time.time; + this.endTime = e.end_time.time; + }, + formSubmit() { + let data = { + key: this.keyname, + MinCreateTime: this.startTime, + MaxCreateTime: this.endTime + } + console.log(data); + uni.showLoading({ + title: '鏌ヨ涓�', + mask: true + }); + var that = this; + this.$http.post('/openwize/Top/GePvUvByKey', data).then(e => { + uni.hideLoading(); + this.res_key = e.result.key; + this.res_pv = e.result.pv; + this.res_uv = e.result.uv; + if(this.sendcount>0) + {//璁$畻鐐瑰嚮鐜� + this.pvrate=((e.result.pv/this.sendcount).toFixed(2))*100+"%"; + this.uvrate=((e.result.uv/this.sendcount).toFixed(2))*100+"%"; + } + }).catch(function(err) { + console.log(err); + }) + } + } + } +</script> + + +<style> + .resshowtxt { + margin-top: 1rem; + font-size: 1.5rem; + } + + .uni-form-item { + display: flex; + margin: 0.4rem; + } + + .uni-form-item .title { + padding: 20rpx 0; + margin-right: 1.6rem; + } +</style> \ No newline at end of file diff --git a/h5/apph5/pages/index/index.vue b/h5/apph5/pages/index/index.vue new file mode 100644 index 0000000..d2c1124 --- /dev/null +++ b/h5/apph5/pages/index/index.vue @@ -0,0 +1,67 @@ +<template> + <view class="content"> + <view @click="openTuer()">鐐瑰嚮璺宠浆澶ц繑瀹�</view> + + <a :href="tourl">test:</a> + </view> +</template> + +<script> + export default { + data() { + return { + timer:null, + tourl: 'dafanguan://{"url":"/pages/rankinglist/common_act?t_url=http://appapitest.ushopvip.com/html/freebuy.html","totype":"0"}' + } + }, + onLoad() { + }, + methods: { + openTuer() { + if (this.isBlackApp()) { + uni.showToast({ + title: '璇峰鍒舵閾炬帴锛岃嚦娴忚鍣ㄤ腑鎵撳紑', + icon: 'none' + }); + } else { + // 涓嶆槸澶撮儴APP灏辩洿鎺ユ墦寮� + this.openApp(); + } + }, + openApp() { + //杩欓噷闇�瑕佹湁涓畨鍗撳拰ios骞冲彴鐨勫垽鏂垎鍒彇涓嶅悓鐨凷chemeURL + this.jumpApp(this.tourl); //姝ゅ嚱鏁拌礋璐f墦寮�APP鐨�,scheme鍗忚鍦板潃鐢卞畨鍗撶璺焛os绔彁渚� + this.noApp(); //姝ゅ嚱鏁拌礋璐e鏋滄病鏈夋墦寮�APP鎴栨病鏈夊畨瑁匒PP鏃惰烦杞殑鍦板潃澶勭悊 + }, + isBlackApp() { + var u = navigator.userAgent.toLowerCase(); + return /micromessenger/i.test(u) || u.indexOf("weibo") > -1 || u.indexOf("qq") > -1 || u.indexOf( + 'mqqbrowser') > -1; + }, + jumpApp(t) + { + window.location.href=t; + }, + noApp() { + //杩欓噷闇�瑕佹湁涓畨鍗撳拰ios骞冲彴鐨勫垽鏂垎鍒彇涓嶅悓鐨勪笅杞藉湴鍧� + var t = Date.now(),r = "浣犵殑app涓嬭浇鍦板潃"; + this.timer = setTimeout(function() { + return Date.now() - t > 2200 + ? (clearTimeout(this.timer), !1) + : !document.webkitHidden && !document.hidden && void (location.href = r); + }, 2000); + } + + } + } +</script> + +<style> + .content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + +</style> \ No newline at end of file diff --git a/h5/apph5/pages/takeout/elm.css b/h5/apph5/pages/takeout/elm.css new file mode 100644 index 0000000..80f16e2 --- /dev/null +++ b/h5/apph5/pages/takeout/elm.css @@ -0,0 +1,124 @@ + +uni-page-wrapper +{ + background: #1088FE; +} +.toptxt { + position: fixed; + top: 0px; + text-align: center; + font-size: 0.3rem; + width: 100%; + background: #FFD100; + padding: 10px 0; + color: #fff; +} + +.bodycont { + background: #1088FE; + width: 100%; + padding-top: 95rpx; +} + +.pageBac { + width: 100%; + height: 294rpx; + margin-top: 20rpx; +} + +.tabcont { + display: flex; + justify-content: center; + align-items: center; +} + +.tabcontsp { + width: 35%; + background: rgba(254, 254, 254, 0.3); + border-radius: 23px; + text-align: center; + + +} + +.tabconttxt { + + width: 50%; + border-radius: 23px; + font-size: 14px; + padding: 10rpx; +} + +.getBtn-containe-uncheck { + color: #fff; +} + +.tabconttxt-check { + color: #1088FE; + background: #fff; +} + +.code-cont { + background: #fff; + width: 92%; + margin: 0 auto; + border-radius: 0.4rem; + padding-bottom: 1.5rem; +} + +.code-flow { + text-align: center; + padding: 1rem; + border-bottom: 1px dashed #1088FE; +} + +.code-flow-img { + width: 80%; + height: 3.1rem; +} + +.code-img { + text-align: center; + padding: 1rem 3rem; +} + +.code-img-code { + width: 9rem; + height: 9rem; +} + +.code-btn { + width: 50%; + margin: 0 auto; + text-align: center; + background: linear-gradient(0deg, #F1B641 0%, #FFCE6D 100%); + font-size: 34rpx; + font-weight: 500; + color: #C03F11; + width: 580rpx; + height: 78rpx; + border-radius: 39rpx; + line-height: 78rpx; +} +.rulesContent{ + padding: 5rpx 28rpx; + margin-top: 45rpx; + color:#fff; + .txt-title { + width: 100%; + font-size: 32rpx; + font-weight: 500; + color: #FFFFFF; + line-height: 48rpx; + margin-bottom: 20rpx; + } + + .richtext-content { + width: 100%; + margin-bottom: 40rpx; + font-size: 26rpx; + font-weight: 400; + line-height: 48rpx; + color: #FFFFFF; + } +} \ No newline at end of file diff --git a/h5/apph5/pages/takeout/elm.vue b/h5/apph5/pages/takeout/elm.vue new file mode 100644 index 0000000..9a91a4b --- /dev/null +++ b/h5/apph5/pages/takeout/elm.vue @@ -0,0 +1,106 @@ +<template style="background:#1088FE"> + <view class="bodycont"> + <!-- <view class="toptxt"> + 缇庡洟澶栧崠 + </view> --> + <view class="tabcont"> + <view class="tabcont tabcontsp"> + <span class="tabconttxt getBtn-containe-uncheck" @click="toMt()"> + 缇庡洟 + </span> + <span class="tabconttxt tabconttxt-check"> + 楗夸簡涔� + </span> + </view> + + </view> + <view> + <image class="pageBac" src="https://hxshapp.oss-cn-beijing.aliyuncs.com/weapp/elm.png"></image> + </view> + <view class="code-cont"> + <view class="code-flow"> + <image class="code-flow-img" src="https://hxshapp.oss-cn-beijing.aliyuncs.com/weapp/elmstep.png"></image> + </view> + <view class="code-img"> + <image class="code-img-code" :src="qrcode"></image> + </view> + <view v-if="qrcode" class="code-btn" @click="shareClick()"> + 棰嗙孩鍖呯偣澶栧崠 + </view> + </view> + + <view class="rulesContent"> + <view class="txt-title"> + 瑙勫垯璇存槑锛� + </view> + <view class="richtext-content"> + 1.绾㈠寘闇�鍏堥鍙栨墠鑳藉湪涓嬪崟椤甸潰浣跨敤;</br> + 2.鍔犻绾㈠寘鍜屽鍗栫孩鍖呬笉鍐茬獊,鍙互鍚屾椂棰嗗彇,鍝釜绾㈠寘澶х敤鍝釜;</br> + 3.鏃犺楗夸簡涔堟柊鑰佺敤鎴�,澶栧崠绾㈠寘鍜屽姞椁愮孩鍖呮瘡涓墜鏈哄彿姣忓ぉ鍧囧彲棰嗕竴娆�,绾㈠寘閲戦闅忔満鍙戞斁;</br> + </view> + </view> + </view> +</template> +<script> + import './elm.css' + import comUtils from '../../utils/ComUtils.js' + export default { + data() { + return { + optionsCurrent:3, + qrcode:'', + mtInfo:{}, + optionsList: [{ + label: "缇庡洟", + type: 1 + }, + { + label: "楗夸簡涔�", + type: 3 + } + ] + } + }, + onLoad() { + this.IntiData() + }, + methods: { + IntiData() { + uni.showLoading({ + title: '鍔犺浇涓�', + mask:true + }); + var that = this; + this.$http.post('/api/taoke/ele_act', { + type: this.optionsCurrent + }).then(e => { + uni.hideLoading(); + if (e.code != 0) + { + uni.showToast({ + title:res.data.msg, + icon:'none' + }); + return; + } + + that.mtInfo = e.data.info; + that.qrcode = that.mtInfo.we_app_info.miniCode; + console.log(that.qrcode); + }).catch(function(err) { + console.log(err); + }) + }, + toMt() + { + uni.redirectTo({ + url:'./mt?dfgtoken='+comUtils.getUrlPar('dfgtoken') + }) + }, + shareClick() { + window.location.href=this.mtInfo.h5; + }, + + } + } +</script> \ No newline at end of file diff --git a/h5/apph5/pages/takeout/mt.css b/h5/apph5/pages/takeout/mt.css new file mode 100644 index 0000000..6cbbce0 --- /dev/null +++ b/h5/apph5/pages/takeout/mt.css @@ -0,0 +1,119 @@ +.toptxt { + position: fixed; + top: 0px; + text-align: center; + font-size: 0.3rem; + width: 100%; + background: #FFD100; + padding: 10px 0; + color: #fff; +} + +.mtbodycont { + background: #FFD100; + width: 100%; + padding-top: 95rpx; +} + +.pageBac { + width: 100%; + height: 294rpx; + margin-top: 20rpx; +} + +.tabcont { + display: flex; + justify-content: center; + align-items: center; +} + +.tabcontsp { + width: 35%; + background: rgba(254, 254, 254, 0.3); + border-radius: 23px; + text-align: center; + + +} + +.tabconttxt { + + width: 50%; + border-radius: 23px; + font-size: 14px; + padding: 10rpx; +} + +.getBtn-containe-uncheck { + color: #fff; +} + +.mttabconttxt-check { + color: #FFD100; + background: #fff; +} + +.code-cont { + background: #fff; + width: 92%; + margin: 0 auto; + border-radius: 0.4rem; + padding-bottom: 1.5rem; +} + +.mtcode-flow { + text-align: center; + padding: 1rem; + border-bottom: 1px dashed #FFD100; +} + +.code-flow-img { + width: 80%; + height: 3.1rem; +} + +.code-img { + text-align: center; + padding: 1rem 3rem; +} + +.code-img-code { + width: 9rem; + height: 9rem; +} + +.code-btn { + width: 50%; + margin: 0 auto; + text-align: center; + background: linear-gradient(0deg, #F1B641 0%, #FFCE6D 100%); + font-size: 34rpx; + font-weight: 500; + color: #C03F11; + width: 580rpx; + height: 78rpx; + border-radius: 39rpx; + line-height: 78rpx; +} +.rulesContent{ + padding: 0 28rpx; + margin-top: 45rpx; + color: #fff; + .txt-title { + width: 100%; + font-size: 32rpx; + font-weight: 500; + color: #FFFFFF; + line-height: 48rpx; + margin-bottom: 20rpx; + } + + .richtext-content { + width: 100%; + margin-bottom: 40rpx; + font-size: 26rpx; + font-weight: 400; + line-height: 48rpx; + color: #FFFFFF; + } +} \ No newline at end of file diff --git a/h5/apph5/pages/takeout/mt.vue b/h5/apph5/pages/takeout/mt.vue new file mode 100644 index 0000000..1f9012a --- /dev/null +++ b/h5/apph5/pages/takeout/mt.vue @@ -0,0 +1,116 @@ +<template> + <view class="mtbodycont"> + <!-- <view class="toptxt"> + 缇庡洟澶栧崠 + </view> --> + <view class="tabcont"> + <view class="tabcont tabcontsp"> + <span class="tabconttxt mttabconttxt-check"> + 缇庡洟 + </span> + <span class="tabconttxt getBtn-containe-uncheck" @click="toElm()"> + 楗夸簡涔� + </span> + </view> + + </view> + <view> + <image class="pageBac" src="https://yanfeiobpub.obs.cn-east-3.myhuaweicloud.com/dfg/h5mt1.png"></image> + </view> + <view class="code-cont"> + <view class="mtcode-flow"> + <image class="code-flow-img" + src="https://yanfeiobpub.obs.cn-east-3.myhuaweicloud.com/dfg/h5huanstep.png"></image> + </view> + <view class="code-img"> + <image class="code-img-code" :src="qrcode"></image> + </view> + <view v-if="qrcode" class="code-btn" @click="shareClick()"> + 棰嗙孩鍖呯偣澶栧崠 + </view> + </view> + + <view class="rulesContent"> + <view class="txt-title"> + 瑙勫垯璇存槑锛� + </view> + <view class="richtext-content"> + 1.姝ゆ椿鍔ㄤ负閮ㄥ垎鍖哄煙鏈夋晥锛屼互娲诲姩椤甸潰瀹為檯灞曠ず涓哄噯;绾㈠寘鍙戞斁鏁伴噺鍙婄孩鍖呴噾棰濆叿鏈夐殢鏈烘��;鍏蜂綋绾㈠寘浣跨敤鏈夋晥鏈熷強绾㈠寘閲戦浠ュ疄闄呮敹鍒颁负鍑�;</br> + 2.绾㈠寘浣跨敤瑙勫垯:</br> + (1)绾㈠寘浣跨敤闂ㄦ銆佷娇鐢ㄦ湡闄愬強浣跨敤瑙勫垯绛変互绾㈠寘鍒搁潰灞曠ず淇℃伅涓哄噯;</br> + (2)绾㈠寘鍙湪缇庡洟鎴栫編鍥㈠鍗栨渶鏂扮増瀹㈡埛绔�佺編鍥㈠鍗栧皬绋嬪簭涓嬪崟涓旈�夋嫨鍦ㄧ嚎鏀粯鏃朵娇鐢�;涓旂孩鍖呬粎闄愰潪鍒板簵鑷彇澶栧崠璁㈠崟锛屼笅鍗堣尪銆佸瀹点�佺編椋熴�佽泲绯曘�佸洟椁愰閬撱�佺敎鐐� + 楗搧棰戦亾浣跨敤; </br> + (3)澶栧崠鏂颁汉棣栧崟绾㈠寘闄愭柊鐢ㄦ埛(璁惧銆佹墜鏈哄彿銆� 绾㈠寘 + 鍙峰潎鏈湪缇庡洟澶栧崠涓嬭繃鍗�)棣栨涓嬪崟浣跨敤锛屼笖涓嶄笌鍏朵粬浼樻儬(棣栧噺銆佹弧鍑忋�佹弧璧犮�佸椁愬銆佹姌鎵h彍)鍚屼韩;闈為鍗曠孩鍖呭彲涓庝笂杩颁紭鎯犲彔鍔犱娇鐢�;</br> + </view> + </view> + </view> +</template> +<script> + import './mt.css' + import comUtils from '../../utils/ComUtils.js' + export default { + data() { + return { + optionsCurrent: 1, + qrcode: '', + mtInfo: {}, + optionsList: [{ + label: "缇庡洟", + type: 1 + }, + { + label: "楗夸簡涔�", + type: 2 + } + ] + } + }, + onLoad() { + this.IntiData() + }, + methods: { + IntiData() { + uni.showLoading({ + title: '鍔犺浇涓�', + mask: true + }); + var that = this; + this.$http.post('/api/taoke/meituan_act', { + type: this.optionsCurrent + }).then(e => { + uni.hideLoading(); + if (e.code != 0) { + uni.showToast({ + title: res.data.msg, + icon: 'none' + }); + return; + } + + that.mtInfo = e.data.info; + that.qrcode = that.mtInfo.we_app_info.miniCode; + console.log(that.qrcode); + }).catch(function(err) { + console.log(err); + }) + }, + toElm() { + uni.redirectTo({ + url: './elm?dfgtoken=' + comUtils.getUrlPar('dfgtoken') + }) + }, + shareClick() { + var that=this; + var ua = navigator.userAgent.toLowerCase(); + if (ua.match(/MicroMessenger/i) == "micromessenger") { + window.location.href = this.mtInfo.h5; + } + else{ + window.location.href = this.mtInfo.deeplink; + } + }, + + } + } +</script> \ No newline at end of file diff --git a/h5/apph5/pages/wxkf/index.vue b/h5/apph5/pages/wxkf/index.vue new file mode 100644 index 0000000..e1e9200 --- /dev/null +++ b/h5/apph5/pages/wxkf/index.vue @@ -0,0 +1,54 @@ +<template> + <view class="main-cont"> + <view class="txt-sty" style="margin-top: 4rem;"> + <image class="head-img" :src="wxhead"></image> + </view> + <view class="txt-sty head-txt"> + 寰俊鍙凤細{{wxtxt}} + </view> + <view class="txt-sty"> + <image :src="wxImg" class="ercode-img"></image> + </view> + <view class="txt-sty" style="font-weight: 700; margin-top: 1rem;">闀挎寜浜岀淮鐮侊紝娣诲姞寰俊浜彈浼樻儬</view> + </view> +</template> + +<script> + export default { + data() { + return { + wxImg: 'https://img.ushopvip.com/dfg/wxcode.png', + wxhead: 'https://img.ushopvip.com/dfg/dfgapplogo.png', + wxtxt: 'sedws22' + } + }, + onLoad() { + + }, + methods: { + + + }, + } +</script> + +<style> + .txt-sty{ + text-align: center; + } + .main-cont { + + } + .head-txt{ + margin: 0.4rem 0 2rem 0; + } + + .head-img { + width: 5rem; + height: 5rem; + } + .ercode-img{ + width: 16rem; + height: 16rem; + } +</style> \ No newline at end of file diff --git a/h5/apph5/request/api.js b/h5/apph5/request/api.js new file mode 100644 index 0000000..f7e443d --- /dev/null +++ b/h5/apph5/request/api.js @@ -0,0 +1,56 @@ +import Request from './index.js' +import md5 from'../utils/md5.js' +import comUtils from '../utils/ComUtils.js' + +let request = new Request().http; + +function get(url, data) { + //鑾峰彇token + let header={ + dfgsessionkey:comUtils.getUrlPar("dfgtoken") + } + return request({ + url: url, + method: 'GET', + data: data, + header: header + }) +} + +function post(url, data) { + //鑾峰彇token + + let keysList=Object.keys(data); + let enstr=""; + if(keysList&&keysList.length>0) + { + let curData=data; + keysList.forEach(function(value,index){ + enstr+=value+ (JSON.stringify(data[value]).replace(/^\"|\"$/g,'')); + }) + } + let userToken=comUtils.getUrlPar("dfgtoken"); + enstr="dfg"+enstr+"apph5"+userToken; + enstr=md5.hex_md5(enstr); + enstr+='.'+userToken + /* header = Object.assign({ + 'dfgsessionkey': enstr + },header) */ + let header={ + dfgsessionkey:enstr + } + return request({ + url: url, + method: 'POST', + data: data, + header: header, + }) +} + +let api = { + login: data => post('loginapi', data), + post: (url, data) => post(url, data), + get: (url, data) => get(url, data) +} + +export default api; \ No newline at end of file diff --git a/h5/apph5/request/index.js b/h5/apph5/request/index.js new file mode 100644 index 0000000..6801d0e --- /dev/null +++ b/h5/apph5/request/index.js @@ -0,0 +1,42 @@ +export default class Request{ + http(param) { + //let postUrl="http://dfg.shop.com"; + let postUrl=""; + let url = param.url; + let method = param.method; + let header = param.header || {}; + //let data = Object.assign(param.data || {}); + let data=param.data; + if (method) { + if (method == "GET") { + header = Object.assign({ + 'content-type': "application/x-www-form-urlencoded" + }, param.header) + } else { + header = Object.assign({ + 'content-type': "application/json" + }, param.header) + } + let requestUrl = postUrl + url; + return new Promise((resolve, reject) => { + uni.request({ + url: requestUrl, + data: data, + method: method, + header: header, + success: (res) => { + resolve(res.data); + }, + fail: (err) => { + uni.showToast({ + title:res.data.msg, + icon:'none' + }); + }, + }) + }) + } + } + + +} \ No newline at end of file diff --git a/h5/apph5/uni.promisify.adaptor.js b/h5/apph5/uni.promisify.adaptor.js new file mode 100644 index 0000000..47fbce1 --- /dev/null +++ b/h5/apph5/uni.promisify.adaptor.js @@ -0,0 +1,10 @@ +uni.addInterceptor({ + returnValue (res) { + if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) { + return res; + } + return new Promise((resolve, reject) => { + res.then((res) => res[0] ? reject(res[0]) : resolve(res[1])); + }); + }, +}); \ No newline at end of file diff --git a/h5/apph5/uni.scss b/h5/apph5/uni.scss new file mode 100644 index 0000000..a05adb4 --- /dev/null +++ b/h5/apph5/uni.scss @@ -0,0 +1,76 @@ +/** + * 杩欓噷鏄痷ni-app鍐呯疆鐨勫父鐢ㄦ牱寮忓彉閲� + * + * uni-app 瀹樻柟鎵╁睍鎻掍欢鍙婃彃浠跺競鍦猴紙https://ext.dcloud.net.cn锛変笂寰堝涓夋柟鎻掍欢鍧囦娇鐢ㄤ簡杩欎簺鏍峰紡鍙橀噺 + * 濡傛灉浣犳槸鎻掍欢寮�鍙戣�咃紝寤鸿浣犱娇鐢╯css棰勫鐞嗭紝骞跺湪鎻掍欢浠g爜涓洿鎺ヤ娇鐢ㄨ繖浜涘彉閲忥紙鏃犻渶 import 杩欎釜鏂囦欢锛夛紝鏂逛究鐢ㄦ埛閫氳繃鎼Н鏈ㄧ殑鏂瑰紡寮�鍙戞暣浣撻鏍间竴鑷寸殑App + * + */ + +/** + * 濡傛灉浣犳槸App寮�鍙戣�咃紙鎻掍欢浣跨敤鑰咃級锛屼綘鍙互閫氳繃淇敼杩欎簺鍙橀噺鏉ュ畾鍒惰嚜宸辩殑鎻掍欢涓婚锛屽疄鐜拌嚜瀹氫箟涓婚鍔熻兘 + * + * 濡傛灉浣犵殑椤圭洰鍚屾牱浣跨敤浜唖css棰勫鐞嗭紝浣犱篃鍙互鐩存帴鍦ㄤ綘鐨� scss 浠g爜涓娇鐢ㄥ涓嬪彉閲忥紝鍚屾椂鏃犻渶 import 杩欎釜鏂囦欢 + */ + +/* 棰滆壊鍙橀噺 */ + +/* 琛屼负鐩稿叧棰滆壊 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 鏂囧瓧鍩烘湰棰滆壊 */ +$uni-text-color:#333;//鍩烘湰鑹� +$uni-text-color-inverse:#fff;//鍙嶈壊 +$uni-text-color-grey:#999;//杈呭姪鐏拌壊锛屽鍔犺浇鏇村鐨勬彁绀轰俊鎭� +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 鑳屾櫙棰滆壊 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//鐐瑰嚮鐘舵�侀鑹� +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//閬僵棰滆壊 + +/* 杈规棰滆壊 */ +$uni-border-color:#c8c7cc; + +/* 灏哄鍙橀噺 */ + +/* 鏂囧瓧灏哄 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16; + +/* 鍥剧墖灏哄 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 姘村钩闂磋窛 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 鍨傜洿闂磋窛 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 閫忔槑搴� */ +$uni-opacity-disabled: 0.3; // 缁勪欢绂佺敤鎬佺殑閫忔槑搴� + +/* 鏂囩珷鍦烘櫙鐩稿叧 */ +$uni-color-title: #2C405A; // 鏂囩珷鏍囬棰滆壊 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 浜岀骇鏍囬棰滆壊 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 鏂囩珷娈佃惤棰滆壊 +$uni-font-size-paragraph:15px; diff --git a/h5/apph5/uni_modules/h-datetime-picker/changelog.md b/h5/apph5/uni_modules/h-datetime-picker/changelog.md new file mode 100644 index 0000000..62c3e41 --- /dev/null +++ b/h5/apph5/uni_modules/h-datetime-picker/changelog.md @@ -0,0 +1,28 @@ +## 1.1.3锛�2023-07-11锛� +bug淇 +## 1.1.2锛�2023-07-11锛� +bug淇 +## 1.1.1锛�2023-07-05锛� +淇骞存湀鍒囨崲鍚庢棩涓嶆洿鏂癰ug +## 1.1.0锛�2023-06-20锛� +淇mode鍒濆鍖栭棶棰� +## 1.0.10锛�2023-05-18锛� +鏍峰紡浼樺寲 +## 1.0.9锛�2023-05-18锛� +琛ュ厖鏁堟灉鍥� +## 1.0.8锛�2023-05-18锛� +鏂囨。璇存槑璋冩暣 +## 1.0.7锛�2023-05-18锛� +鏂板閫夋嫨鍣ㄦ樉绀烘ā寮� +## 1.0.6锛�2023-05-18锛� +h5绔牱寮忛棶棰樹慨澶� +## 1.0.5锛�2023-05-16锛� +缁嗚妭浼樺寲 +## 1.0.3锛�2023-05-16锛� +缁嗚妭浼樺寲 +## 1.0.2锛�2023-05-12锛� +bug淇 +## 1.0.1锛�2023-05-12锛� +淇宸茬煡闂 +## 1.0.0锛�2023-05-12锛� +1.0.0 diff --git a/h5/apph5/uni_modules/h-datetime-picker/components/h-datetime-picker/h-datetime-picker.vue b/h5/apph5/uni_modules/h-datetime-picker/components/h-datetime-picker/h-datetime-picker.vue new file mode 100644 index 0000000..ab125b7 --- /dev/null +++ b/h5/apph5/uni_modules/h-datetime-picker/components/h-datetime-picker/h-datetime-picker.vue @@ -0,0 +1,648 @@ +<template> + <view> + <uni-popup ref="popup"> + <view class="popup-box"> + <view class="title"> + <view class="tabs-box" v-if="mode=='all'"> + <view v-for="(item,index) in tabs" :key="index" class="tabs-item" @click="tabChange(index)" + :class="{'tabs-check':index==tabIndex}"> + <text class="item-text">{{item}}</text> + </view> + </view> + <view class="title-text" v-else> + {{mode=='multiple'?'鏃ユ湡绛涢��':'鏈堜唤閫夋嫨'}} + </view> + <uni-icons type="closeempty" class="close" size="16" @click="close"></uni-icons> + </view> + + + <view class="options-box" v-if="tabIndex"> + <view class="flex row-between"> + <view v-for="(item,index) in options" :key="index" class="option" @click="optionSelect(index)" + :class="{'option-check':opIndex==index}"> + <text class="option-text">{{item}}</text> + </view> + </view> + <view class="flex row-between" style="margin-top: 40rpx;"> + <view class="option" :class="{'option-check':op1Index==0}" + style="width: 320rpx;padding-left: 0;padding-right: 0;" @click="optionChange(0)"> + <text class="option-text">{{timeFormat(getTimestamp(start_time),fmt)}}</text> + </view> + <view style="width: 18rpx;height: 2rpx;background: #7B8686;"></view> + <view class="option" :class="{'option-check':op1Index==1}" + style="width: 320rpx;padding-left: 0;padding-right: 0;" @click="optionChange(1)"> + <text class="option-text">{{timeFormat(getTimestamp(end_time),fmt)}}</text> + </view> + </view> + </view> + <view class="picker-body"> + <picker-view class="picker-view" + indicator-style="height: 76rpx;background: rgba(0,0,0,.03);border:none;" :value="valueArr" + @change="change" @touchend="touchend"> + <picker-view-column v-if="params.year"> + <view class="column-item" v-for="(item,index) in years" :key="index"> + <text class="column-item-text">{{item}}骞�</text> + </view> + </picker-view-column> + <picker-view-column v-if="params.month"> + <view class="column-item" v-for="(item,index) in months" :key="index"> + <text class="column-item-text">{{formatNumber(item)}}鏈�</text> + </view> + </picker-view-column> + <picker-view-column v-if="params.day"> + <view class="column-item" v-for="(item,index) in days" :key="index"> + <text class="column-item-text">{{formatNumber(item)}}鏃�</text> + </view> + </picker-view-column> + <picker-view-column v-if="params.hour"> + <view class="column-item" v-for="(item,index) in hours" :key="index"> + <text class="column-item-text">{{formatNumber(item)}}鏃�</text> + </view> + </picker-view-column> + <picker-view-column v-if="params.minute"> + <view class="column-item" v-for="(item,index) in minutes" :key="index"> + <text class="column-item-text">{{formatNumber(item)}}鍒�</text> + </view> + </picker-view-column> + <picker-view-column v-if="params.second"> + <view class="column-item" v-for="(item,index) in seconds" :key="index"> + <text class="column-item-text">{{formatNumber(item)}}绉�</text> + </view> + </picker-view-column> + </picker-view> + </view> + <view class="bottom"> + <view class="h-btn h-btn-line" @click="reset"> + <text style="color: #333;">閲嶇疆</text> + </view> + <view class="h-btn" @click="getResult"> + <text style="color: #fff;">纭畾</text> + </view> + </view> + </view> + </uni-popup> + </view> +</template> + +<script> + import timeFormat from "../../js/timeFormat.js" + export default { + props: { + // picker涓渶瑕佹樉绀虹殑鍙傛暟 + params: { + type: Object, + default () { + return { + year: true, + month: true, + day: true, + hour: true, + minute: true, + second: false, + timestamp: true, + }; + } + }, + // 榛樿鏄剧ず鐨勬椂闂达紝2025-07-02 || 2025-07-02 13:01:00 || 2025/07/02 + defaultTime: { + type: String, + default: '' + }, + // 骞翠唤寮�濮嬫椂闂� + startYear: { + type: [String, Number], + default: 1950 + }, + // 骞翠唤缁撴潫鏃堕棿 + endYear: { + type: [String, Number], + default: 2050 + }, + // 鏈堜唤缁撴潫鏃堕棿 + endMonth: { + type: [String, Number], + default: 12 + }, + // 鑷畾涔夋椂闂撮�夐」妯″紡month:鏈� day:澶� + optionMode: { + type: String, + default: 'month' + }, + //閫夋嫨鍣ㄦā寮� single:鍗曟湀 multiple:澶氭湀 all:閮藉寘鎷� + mode: { + type: String, + default: 'all' + }, + startTime: { + type: String, + default: '' + }, + endTime: { + type: String, + default: '' + } + }, + data() { + return { + timeFormat, + years: [], + months: [], + days: [], + hours: [], + minutes: [], + seconds: [], + valueArr: [], + yearKey: 0, + monthKey: 0, + dayKey: 0, + hourKey: 0, + minuteKey: 0, + secondy: 0, + time: {}, + start_time: {}, + end_time: {}, + tabs: ['鏈堜唤閫夋嫨', '鑷畾涔夋椂闂�'], + tabIndex: 0, + opIndex: -1, + op1Index: 0, + options: ['杩戜笁鏈�', '杩戝崐骞�', '杩戜竴骞�'], + itemIndex: 0, + fmt: 'yyyy-mm-dd', + isClick: false + } + }, + mounted() { + this.init(); + }, + watch: { + 'time.year'(val) { + if(this.params.day){ + this.setDays(this.time) + } + }, + 'time.month'(val) { + if(this.params.day){ + this.setDays(this.time) + } + }, + 'start_time.year'(val) { + this.setDays(this.start_time) + }, + 'start_time.month'(val) { + this.setDays(this.start_time) + }, + 'end_time.year'(val) { + this.setDays(this.end_time) + }, + 'end_time.month'(val) { + this.setDays(this.end_time) + }, + }, + methods: { + open() { + this.$refs.popup.open('bottom') + }, + close() { + this.$refs.popup.close() + }, + //鐐瑰嚮閲嶇疆 + reset() { + this.close(); + this.$emit('reset'); + }, + // 鐐瑰嚮纭畾 + getResult() { + let result = {}; + if (this.tabIndex) { + let start_time = {} + let end_time = {} + if (this.params.year) { + start_time.year = this.formatNumber(this.start_time.year || 0); + end_time.year = this.formatNumber(this.end_time.year || 0); + } + if (this.params.month) { + start_time.month = this.formatNumber(this.start_time.month || 0); + end_time.month = this.formatNumber(this.end_time.month || 0); + } + if (this.params.day) { + start_time.day = this.formatNumber(this.start_time.day || 0); + end_time.day = this.formatNumber(this.end_time.day || 0); + } + if (this.params.hour) { + start_time.hour = this.formatNumber(this.start_time.hour || 0); + end_time.hour = this.formatNumber(this.end_time.hour || 0); + } + if (this.params.minute) { + start_time.minute = this.formatNumber(this.start_time.minute || 0); + end_time.minute = this.formatNumber(this.end_time.minute || 0); + } + if (this.params.second) { + start_time.second = this.formatNumber(this.start_time.second || 0); + end_time.second = this.formatNumber(this.end_time.second || 0); + } + if (this.params.timestamp) { + start_time.timestamp = this.getTimestamp(this.start_time); + end_time.timestamp = this.getTimestamp(this.end_time); + } + start_time.time = this.timeFormat(this.getTimestamp(this.start_time), this.fmt); + end_time.time = this.timeFormat(this.getTimestamp(this.end_time), this.fmt); + result = { + start_time, + end_time + } + } else { + if (this.params.year) result.year = this.formatNumber(this.time.year || 0); + if (this.params.month) result.month = this.formatNumber(this.time.month || 0); + if (this.params.day) result.day = this.formatNumber(this.time.day || 0); + if (this.params.hour) result.hour = this.formatNumber(this.time.hour || 0); + if (this.params.minute) result.minute = this.formatNumber(this.time.minute || 0); + if (this.params.second) result.second = this.formatNumber(this.time.second || 0); + if (this.params.timestamp) result.timestamp = this.getTimestamp(this.time); + result.time = this.timeFormat(this.getTimestamp(this.time), this.fmt); + } + this.$emit('confirm', result); + this.close(); + }, + init() { + this.valueArr = []; + this.tabIndex = this.mode == 'multiple' ? 1 : 0 + //鍒濆鍖栨椂闂� + if (this.startTime) { + this.start_time = this.time = this.initTimeValue(this.startTime); + } else { + this.start_time = this.time = this.initTimeValue(this.defaultTime); + } + if (this.endTime) { + this.end_time = this.initTimeValue(this.endTime); + } else { + this.end_time = this.initTimeValue(this.defaultTime); + } + let fmt = '' + if (this.optionMode == 'day') { + this.options = ['杩�3澶�', '杩�7澶�', '杩�15澶�'] + } + if (this.params.year) { + this.valueArr.push(0); + this.yearKey = this.valueArr.length - 1 + this.setYears(this.time); + fmt = 'yyyy' + } + if (this.params.month) { + this.valueArr.push(0); + this.monthKey = this.valueArr.length - 1 + this.setMonths(this.time); + fmt += '-mm' + } + if (this.params.day) { + this.valueArr.push(0); + this.dayKey = this.valueArr.length - 1 + this.setDays(this.time); + fmt += '-dd' + } + if (this.params.hour) { + this.valueArr.push(0); + this.hourKey = this.valueArr.length - 1 + this.setHours(this.time); + fmt += ' hh' + } + if (this.params.minute) { + this.valueArr.push(0); + this.minuteKey = this.valueArr.length - 1 + this.setMinutes(this.time); + fmt += ':MM' + } + if (this.params.second) { + this.valueArr.push(0); + this.secondKey = this.valueArr.length - 1 + this.setSeconds(this.time); + fmt += ':ss' + } + this.fmt = fmt + this.$forceUpdate(); + }, + // 璁剧疆picker鐨勬煇涓�鍒楀�� + setYears(date) { + // 鑾峰彇骞翠唤闆嗗悎 + this.years = this.generateArray(this.startYear, this.endYear); + // 璁剧疆this.valueArr鏌愪竴椤圭殑鍊硷紝鏄负浜嗚picker棰勯�変腑鏌愪竴涓�� + this.valueArr.splice(this.yearKey, 1, this.getIndex(this.years, date.year)); + }, + setMonths(date) { + if (this.endYear == this.year) { + this.months = this.generateArray(1, this.endMonth); + } else { + this.months = this.generateArray(1, 12); + } + this.valueArr.splice(this.monthKey, 1, this.getIndex(this.months, date.month)); + }, + setDays(date) { + let totalDays = new Date(date.year, date.month, 0).getDate(); + this.days = this.generateArray(1, totalDays); + // let index = 0; + // 杩欓噷涓嶈兘浣跨敤绫讳技setMonths()涓殑this.valueArr.splice(this.valueArr.length - 1, xxx)鍋氭硶 + // 鍥犱负this.month鍜宼his.year鍙樺寲鏃讹紝浼氳Е鍙憌atch涓殑this.setDays()锛屽鑷磘his.valueArr.length璁$畻鏈夎 + // if (this.params.year && this.params.month) index = 2; + // else if (this.params.month) index = 1; + // else if (this.params.year) index = 1; + // else index = 0; + // 褰撴湀浠藉彉鍖栨椂锛屼細瀵艰嚧鏃ユ湡鐨勫ぉ鏁颁篃浼氬彉鍖栵紝濡傛灉鍘熸潵閫夌殑澶╂暟澶т簬鍙樺寲鍚庣殑澶╂暟锛屽垯閲嶇疆涓哄彉鍖栧悗鐨勬渶澶у�� + // 姣斿鍘熸潵閫変腑3鏈�31鏃ワ紝璋冩暣涓�2鏈堝悗锛屾棩鏈熷彉涓烘渶澶�29锛岃繖鏃跺鏋渄ay鍊肩户缁负31鏄剧劧涓嶅悎鐞嗭紝浜庢槸灏嗗叾缃负29(picker-column浠�1寮�濮�) + if (this.day > this.days.length) this.day = this.days.length; + this.valueArr.splice(this.dayKey, 1, this.getIndex(this.days, date.day)); + }, + setHours() { + this.hours = this.generateArray(0, 23); + this.valueArr.splice(this.hourKey, 1, this.getIndex(this.hours, this.time.hour)); + }, + setMinutes() { + this.minutes = this.generateArray(0, 59); + this.valueArr.splice(this.minuteKey, 1, this.getIndex(this.minutes, this.time.minute)); + }, + setSeconds() { + this.seconds = this.generateArray(0, 59); + this.valueArr.splice(this.secondKey, 1, this.getIndex(this.seconds, this.time.second)); + }, + // 鐢熸垚閫掕繘鐨勬暟缁� + generateArray: function(start, end) { + // 杞负鏁板�兼牸寮忥紝鍚﹀垯鐢ㄦ埛缁檈nd-year绛変紶閫掑瓧绗︿覆鍊兼椂锛屼笅闈㈢殑end+1浼氬鑷村瓧绗︿覆鎷兼帴锛岃�屼笉鏄浉鍔� + start = Number(start); + end = Number(end); + end = end > start ? end : start; + // 鐢熸垚鏁扮粍锛岃幏鍙栧叾涓殑绱㈠紩锛屽苟鍓嚭鏉� + return [...Array(end + 1).keys()].slice(start); + }, + getIndex: function(arr, val) { + let index = arr.indexOf(val); + // 濡傛灉index涓�-1(鍗虫壘涓嶅埌index鍊�)锛寏(-1)=-(-1)-1=0锛屽鑷存潯浠朵笉鎴愮珛 + return ~index ? index : 0; + }, + //鏃ユ湡鏃堕棿澶勭悊 + initTimeValue(defaultTime) { + // 鏍煎紡鍖栨椂闂达紝鍦↖E娴忚鍣�(uni涓嶅瓨鍦ㄦ鎯呭喌)锛屾棤娉曡瘑鍒棩鏈熼棿鐨�"-"闂撮殧绗﹀彿 + let fdate = defaultTime.replace(/\-/g, '/'); + fdate = fdate && fdate.indexOf('/') == -1 ? `2020/01/01 ${fdate}` : fdate; + let time = null; + if (fdate) time = new Date(fdate); + else time = new Date(); + // 鑾峰彇骞存棩鏈堟椂鍒嗙 + return { + year: time.getFullYear(), + month: Number(time.getMonth()) + 1, + day: time.getDate(), + hour: time.getHours(), + minute: time.getMinutes(), + second: time.getSeconds(), + } + }, + // 灏忎簬10鍓嶉潰琛�0锛岀敤浜庢湀浠斤紝鏃ユ湡锛屾椂鍒嗙绛� + formatNumber(num) { + return +num < 10 ? '0' + num : String(num); + }, + // 鑾峰彇鏃堕棿鎴� + getTimestamp(date) { + // yyyy-mm-dd涓哄畨鍗撳啓娉曪紝涓嶆敮鎸乮OS锛岄渶瑕佷娇鐢�"/"鍒嗛殧锛屾墠鑳戒簩鑰呭吋瀹� + let time = date.year + '/' + date.month + '/' + date.day + ' ' + date.hour + ':' + date.minute + ':' + date + .second; + return new Date(time).getTime(); + }, + touchend(e) { + this.opIndex = -1 + }, + // 鐢ㄦ埛鏇存敼picker鐨勫垪閫夐」 + change(e) { + this.itemIndex = e.detail.value[0] + this.valueArr = e.detail.value; + let i = 0; + let time = { + year: 0, + month: 0, + day: 0, + hour: 0, + minute: 0, + second: 0, + } + if (this.params.year) time.year = this.years[this.valueArr[i++]]; + if (this.params.month) time.month = this.months[this.valueArr[i++]]; + if (this.params.day) time.day = this.days[this.valueArr[i++]]; + if (this.params.hour) time.hour = this.hours[this.valueArr[i++]]; + if (this.params.minute) time.minute = this.minutes[this.valueArr[i++]]; + if (this.params.second) time.second = this.seconds[this.valueArr[i++]]; + //鑷畾涔夋椂闂存 + if (this.tabIndex) { + if (this.op1Index) { + this.end_time = time + } else { + this.start_time = time + } + } else { //鏈堜唤閫夋嫨 + this.time = time + } + }, + tabChange(i) { + this.tabIndex = i + if (!i) { + this.setYears(this.time) + this.setMonths(this.time) + this.setDays(this.time) + } else { + this.optionChange(this.op1Index) + } + }, + //閫夋嫨蹇嵎鏃堕棿娈� + optionSelect(i) { + this.opIndex = i; + let end_time = new Date() + let date; + switch (i) { + case 0: //杩戜笁鏈堬紝杩戜笁澶� + if (this.optionMode == 'day') { + date = end_time.setDate(new Date(end_time).getDate() - 3) + } else { + date = end_time.setMonth(new Date(end_time).getMonth() - 3) + } + break; + case 1: //杩戝崐骞达紝杩戜竷澶� + if (this.optionMode == 'day') { + date = end_time.setDate(new Date(end_time).getDate() - 7) + } else { + date = end_time.setMonth(new Date(end_time).getMonth() - 6) + } + break; + case 2: //杩戜竴骞达紝杩戝崄浜斿ぉ + if (this.optionMode == 'day') { + date = end_time.setDate(new Date(end_time).getDate() - 15) + } else { + date = end_time.setMonth(new Date(end_time).getMonth() - 12) + } + break; + } + this.start_time = this.initTimeValue(this.timeFormat(date, this.fmt)) + this.end_time = this.initTimeValue(this.timeFormat(new Date(), this.fmt)) + if (this.op1Index) { + this.setYears(this.end_time) + this.setMonths(this.end_time) + this.setDays(this.end_time) + } else { + this.setYears(this.start_time) + this.setMonths(this.start_time) + this.setDays(this.start_time) + } + + }, + //璧峰鏃堕棿銆佹埅鑷虫椂闂村垏鎹� + optionChange(i) { + this.op1Index = i + let date = i ? this.end_time : this.start_time + this.setYears(date) + this.setMonths(date) + this.setDays(date) + } + } + } +</script> + +<style lang="scss"> + .flex { + display: flex; + flex-direction: row; + align-items: center; + } + + .row-between { + justify-content: space-between; + } + + .popup-box { + background-color: #fff; + border-radius: 24rpx 24rpx 0 0; + + } + + .picker-body { + overflow: hidden; + padding: 32rpx 40rpx; + } + + .picker-view { + height: 380rpx; + width: 670rpx; + } + + .column-item { + display: flex; + align-items: center; + justify-content: center; + font-size: 32rpx; + color: #888; + height: 76rpx; + + } + + .column-item-text { + // line-height: 100rpx; + font-size: 32rpx; + } + + .title { + display: flex; + align-items: center; + justify-content: space-between; + flex-direction: row; + position: relative; + + .close { + position: absolute; + right: 50rpx; + } + + .title-text { + width: 100%; + text-align: center; + padding: 24rpx 0; + font-size: 32rpx; + font-weight: 600; + } + } + + .tabs-box { + width: 100%; + display: flex; + flex-direction: row; + padding: 0 50rpx 0 32rpx; + align-items: center; + border-bottom: 2rpx solid rgba(225, 225, 225, 0.5); + + .tabs-item { + padding: 24rpx 0 22rpx 0; + margin-right: 84rpx; + border-bottom: 4rpx solid #fff; + } + } + + .tabs-check { + border-bottom: 4rpx solid #1DAA9F !important; + + .item-text { + color: #1DAA9F; + } + } + + .bottom { + padding: 0 32rpx 32rpx; + display: flex; + align-items: center; + flex-direction: row; + + .h-btn { + flex: 1; + height: 80rpx; + background: #0BC7B9; + border-radius: 16rpx; + display: flex; + align-items: center; + border: 2rpx solid #0BC7B9; + justify-content: center; + } + + .h-btn-line { + background: #fff; + border: 2rpx solid #E1E7EC; + margin-right: 42rpx; + } + } + + .option { + padding: 14rpx 58rpx; + font-size: 28rpx; + border-radius: 16rpx; + background: #F4F7F8; + border: 3rpx solid #F4F7F8; + display: flex; + justify-content: center; + flex-direction: row; + + .option-text { + font-size: 28rpx; + font-weight: 500; + color: #333333; + line-height: 40rpx; + + } + } + + .option-check { + background: #F5FFFF; + border-radius: 16rpx; + border: 3rpx solid #1DAA9F; + + .option-text { + color: #1DAA9F; + } + } + + .options-box { + padding: 32rpx; + transition-property: height; + transition-duration: .4s; + } +</style> \ No newline at end of file diff --git a/h5/apph5/uni_modules/h-datetime-picker/js/timeFormat.js b/h5/apph5/uni_modules/h-datetime-picker/js/timeFormat.js new file mode 100644 index 0000000..0372f2f --- /dev/null +++ b/h5/apph5/uni_modules/h-datetime-picker/js/timeFormat.js @@ -0,0 +1,51 @@ +// padStart 鐨� polyfill锛屽洜涓烘煇浜涙満鍨嬫垨鎯呭喌锛岃繕鏃犳硶鏀寔es7鐨刾adStart锛屾瘮濡傜數鑴戠増鐨勫井淇″皬绋嬪簭 +// 鎵�浠ヨ繖閲屽仛涓�涓吋瀹筽olyfill鐨勫吋瀹瑰鐞� +if (!String.prototype.padStart) { + // 涓轰簡鏂逛究琛ㄧず杩欓噷 fillString 鐢ㄤ簡ES6 鐨勯粯璁ゅ弬鏁帮紝涓嶅奖鍝嶇悊瑙� + String.prototype.padStart = function(maxLength, fillString = ' ') { + if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError( + 'fillString must be String') + let str = this + // 杩斿洖 String(str) 杩欓噷鏄负浜嗕娇杩斿洖鐨勫�兼槸瀛楃涓插瓧闈㈤噺锛屽湪鎺у埗鍙颁腑鏇寸鍚堢洿瑙� + if (str.length >= maxLength) return String(str) + + let fillLength = maxLength - str.length, + times = Math.ceil(fillLength / fillString.length) + while (times >>= 1) { + fillString += fillString + if (times === 1) { + fillString += fillString + } + } + return fillString.slice(0, fillLength) + str; + } +} + +// 鍏朵粬鏇村鏄牸寮忓寲鏈夊涓�: +// yyyy:mm:dd|yyyy:mm|yyyy骞磎m鏈坉d鏃yyyy骞磎m鏈坉d鏃� hh鏃禡M鍒嗙瓑,鍙嚜瀹氫箟缁勫悎 +function timeFormat(dateTime = null, fmt = 'yyyy-mm-dd') { + // 濡傛灉涓簄ull,鍒欐牸寮忓寲褰撳墠鏃堕棿 + if (!dateTime) dateTime = Number(new Date()); + // 濡傛灉dateTime闀垮害涓�10鎴栬��13锛屽垯涓虹鍜屾绉掔殑鏃堕棿鎴筹紝濡傛灉瓒呰繃13浣嶏紝鍒欎负鍏朵粬鐨勬椂闂存牸寮� + if (dateTime.toString().length == 10) dateTime *= 1000; + let date = new Date(dateTime); + let ret; + let opt = { + "y+": date.getFullYear().toString(), // 骞� + "m+": (date.getMonth() + 1).toString(), // 鏈� + "d+": date.getDate().toString(), // 鏃� + "h+": date.getHours().toString(), // 鏃� + "M+": date.getMinutes().toString(), // 鍒� + "s+": date.getSeconds().toString() // 绉� + // 鏈夊叾浠栨牸寮忓寲瀛楃闇�姹傚彲浠ョ户缁坊鍔狅紝蹇呴』杞寲鎴愬瓧绗︿覆 + }; + for (let k in opt) { + ret = new RegExp("(" + k + ")").exec(fmt); + if (ret) { + fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) + }; + }; + return fmt; +} + +export default timeFormat diff --git a/h5/apph5/uni_modules/h-datetime-picker/package.json b/h5/apph5/uni_modules/h-datetime-picker/package.json new file mode 100644 index 0000000..75c1bb4 --- /dev/null +++ b/h5/apph5/uni_modules/h-datetime-picker/package.json @@ -0,0 +1,81 @@ +{ + "id": "h-datetime-picker", + "displayName": "鏃堕棿鏃ユ湡閫夋嫨鍣�", + "version": "1.1.3", + "description": "鏃堕棿鏃ユ湡閫夋嫨鍣�", + "keywords": [ + "h-datetime-picker" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "鏃�", + "data": "鏃�", + "permissions": "鏃�" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "u" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "寰俊娴忚鍣�(Android)": "y", + "QQ娴忚鍣�(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "灏忕▼搴�": { + "寰俊": "y", + "闃块噷": "u", + "鐧惧害": "u", + "瀛楄妭璺冲姩": "u", + "QQ": "u", + "閽夐拤": "u", + "蹇墜": "u", + "椋炰功": "u", + "浜笢": "u" + }, + "蹇簲鐢�": { + "鍗庝负": "u", + "鑱旂洘": "u" + } + } + } + } +} \ No newline at end of file diff --git a/h5/apph5/uni_modules/h-datetime-picker/readme.md b/h5/apph5/uni_modules/h-datetime-picker/readme.md new file mode 100644 index 0000000..603eddc --- /dev/null +++ b/h5/apph5/uni_modules/h-datetime-picker/readme.md @@ -0,0 +1,66 @@ + + +## datetime-picker 鏃ユ湡鏃堕棿閫夋嫨鍣� +> **缁勪欢鍚嶏細h-datetime-picker** +> 浠g爜鍧楋細 `<h-datetime-picker></h-datetime-picker>` +> 鍏宠仈缁勪欢锛歚uni-popup uni-icons`銆� + +## 灞炴�ц鏄� +鍙傛暟|璇存槑|绫诲瀷|榛樿鍊� +-|-|-|- +params|闇�瑕佹樉绀虹殑鏃ユ湡鏍煎紡|Object|{year: true,month: true,day: true,hour: false,minute: false,second: false,timestamp: true,} +defaultTime|榛樿鏄剧ず鐨勬椂闂�(榛樿涓哄綋鍓嶆椂闂�)|String|'' +startYear|骞翠唤寮�濮嬫椂闂磡String,Number|1950 +endYear|骞翠唤缁撴潫鏃堕棿|String,Number|2050 +endMonth|鏈堜唤缁撴潫鏃堕棿|String,Number|12 +optionMode|鑷畾涔夋椂闂撮�夋嫨鏍忛《閮ㄥ揩鎹锋椂闂存閫夋嫨绫诲瀷锛屽彲閫夊�硷細month(鏈�)銆乨ay(澶�)|String|month +mode|閫夋嫨鍣ㄦā寮� all(鏄剧ず鏈堜唤閫夋嫨浠ュ強鏃堕棿娈甸�夋嫨)銆乻ingle(浠呮樉绀哄崟鏈堜唤閫夋嫨)銆乵ultiple(浠呮樉绀烘椂闂存閫夋嫨) |String|all +startTime|榛樿璧峰鏃ユ湡 浠呭湪mode='multiple'鏃剁敓鏁� 渚嬪锛�2022-5-18 12:00|String|'' +endTime|榛樿鎴鏃ユ湡 浠呭湪mode='multiple'鏃剁敓鏁� 渚嬪锛�2023-5-18 12:00|String|'' +@reset|鐐瑰嚮閲嶇疆鍥炶皟|Handler|鏃� +@confirm|鐐瑰嚮纭畾鍥炶皟|Handler|鏃� + +##@confirm杩斿洖璇存槑(瀵瑰簲params) +###鍗曟棩鏈�(鏃堕棿)閫夋嫨 +鍙傛暟|璇存槑|绫诲瀷 +-|-|-|- +year|骞磡String +month|鏈坾String +day|鏃String +hour|鏃秥String +minute|鍒唡String +second|绉抾String +timestamp|鏃堕棿鎴硘Number + +###鏃堕棿娈甸�夋嫨 +鍙傛暟|璇存槑|绫诲瀷 +-|-|-|- +start_time|璧峰鏃堕棿 鏍煎紡涓庝笂涓�鑷磡Object +end_time|鎴嚦鏃堕棿 鏍煎紡涓庝笂涓�鑷磡Object + +##绀轰緥 +``` +<template> + <view> + <h-datetime-picker ref="pickerDate" @reset="reset" @confirm="confirm"></h-datetime-picker> + </view> +</template> +<script> + export default { + methods: { + //鎵撳紑閫夋嫨鍣� + open() { + this.$refs.pickerDate.open() + }, + reset(){ + console.log('鐐瑰嚮浜嗛噸缃�'); + }, + confirm(e){ + console.log('鐐瑰嚮浜嗙‘瀹�',e); + + } + } + } +</script> +``` + diff --git a/h5/apph5/uni_modules/uni-icons/changelog.md b/h5/apph5/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5锛�2022-01-24锛� +- 浼樺寲 size 灞炴�у彲浠ヤ紶鍏ヤ笉甯﹀崟浣嶇殑瀛楃涓叉暟鍊� +## 1.3.4锛�2022-01-24锛� +- 浼樺寲 size 鏀寔鍏朵粬鍗曚綅 +## 1.3.3锛�2022-01-17锛� +- 淇 nvue 鏈変簺鍥炬爣涓嶆樉绀虹殑bug锛屽吋瀹硅�佺増鏈浘鏍� +## 1.3.2锛�2021-12-01锛� +- 浼樺寲 绀轰緥鍙鍒跺浘鏍囧悕绉� +## 1.3.1锛�2021-11-23锛� +- 浼樺寲 鍏煎鏃х粍浠� type 鍊� +## 1.3.0锛�2021-11-19锛� +- 鏂板 鏇村鍥炬爣 +- 浼樺寲 鑷畾涔夊浘鏍囦娇鐢ㄦ柟寮� +- 浼樺寲 缁勪欢UI锛屽苟鎻愪緵璁捐璧勬簮锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 鏂囨。杩佺Щ锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7锛�2021-11-08锛� +## 1.2.0锛�2021-07-30锛� +- 缁勪欢鍏煎 vue3锛屽浣曞垱寤簐ue3椤圭洰锛岃瑙� [uni-app 椤圭洰鏀寔 vue3 浠嬬粛](https://ask.dcloud.net.cn/article/37834) +## 1.1.5锛�2021-05-12锛� +- 鏂板 缁勪欢绀轰緥鍦板潃 +## 1.1.4锛�2021-02-05锛� +- 璋冩暣涓簎ni_modules鐩綍瑙勮寖 diff --git a/h5/apph5/uni_modules/uni-icons/components/uni-icons/icons.js b/h5/apph5/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui鍥炬爣搴�", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/h5/apph5/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..86e7444 --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ +<template> + <!-- #ifdef APP-NVUE --> + <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text> + <!-- #endif --> + <!-- #ifndef APP-NVUE --> + <text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text> + <!-- #endif --> +</template> + +<script> + import icons from './icons.js'; + const getVal = (val) => { + const reg = /^[0-9]*$/g + return (typeof val === 'number' ||銆�reg.test(val) )? val + 'px' : val; + } + // #ifdef APP-NVUE + var domModule = weex.requireModule('dom'); + import iconUrl from './uniicons.ttf' + domModule.addRule('fontFace', { + 'fontFamily': "uniicons", + 'src': "url('"+iconUrl+"')" + }); + // #endif + + /** + * Icons 鍥炬爣 + * @description 鐢ㄤ簬灞曠ず icons 鍥炬爣 + * @tutorial https://ext.dcloud.net.cn/plugin?id=28 + * @property {Number} size 鍥炬爣澶у皬 + * @property {String} type 鍥炬爣鍥炬锛屽弬鑰冪ず渚� + * @property {String} color 鍥炬爣棰滆壊 + * @property {String} customPrefix 鑷畾涔夊浘鏍� + * @event {Function} click 鐐瑰嚮 Icon 瑙﹀彂浜嬩欢 + */ + export default { + name: 'UniIcons', + emits:['click'], + props: { + type: { + type: String, + default: '' + }, + color: { + type: String, + default: '#333333' + }, + size: { + type: [Number, String], + default: 16 + }, + customPrefix:{ + type: String, + default: '' + } + }, + data() { + return { + icons: icons.glyphs + } + }, + computed:{ + unicode(){ + let code = this.icons.find(v=>v.font_class === this.type) + if(code){ + return unescape(`%u${code.unicode}`) + } + return '' + }, + iconSize(){ + return getVal(this.size) + } + }, + methods: { + _onClick() { + this.$emit('click') + } + } + } +</script> + +<style lang="scss"> + /* #ifndef APP-NVUE */ + @import './uniicons.css'; + @font-face { + font-family: uniicons; + src: url('./uniicons.ttf') format('truetype'); + } + + /* #endif */ + .uni-icons { + font-family: uniicons; + text-decoration: none; + text-align: center; + } + +</style> diff --git a/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.css b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000..835f33b --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/components/uni-icons/uniicons.ttf Binary files differ diff --git a/h5/apph5/uni_modules/uni-icons/package.json b/h5/apph5/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 鍥炬爣", + "version": "1.3.5", + "description": "鍥炬爣缁勪欢锛岀敤浜庡睍绀虹Щ鍔ㄧ甯歌鐨勫浘鏍囷紝鍙嚜瀹氫箟棰滆壊銆佸ぇ灏忋��", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "鍥炬爣" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "鍓嶇缁勪欢", + "閫氱敤缁勪欢" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "鏃�", + "data": "鏃�", + "permissions": "鏃�" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "寰俊娴忚鍣�(Android)": "y", + "QQ娴忚鍣�(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "灏忕▼搴�": { + "寰俊": "y", + "闃块噷": "y", + "鐧惧害": "y", + "瀛楄妭璺冲姩": "y", + "QQ": "y" + }, + "蹇簲鐢�": { + "鍗庝负": "u", + "鑱旂洘": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/h5/apph5/uni_modules/uni-icons/readme.md b/h5/apph5/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/h5/apph5/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 鍥炬爣 +> **缁勪欢鍚嶏細uni-icons** +> 浠g爜鍧楋細 `uIcons` + +鐢ㄤ簬灞曠ず icons 鍥炬爣 銆� + +### [鏌ョ湅鏂囨。](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 濡備娇鐢ㄨ繃绋嬩腑鏈変换浣曢棶棰橈紝鎴栬�呮偍瀵箄ni-ui鏈変竴浜涘ソ鐨勫缓璁紝娆㈣繋鍔犲叆 uni-ui 浜ゆ祦缇わ細871950839 diff --git a/h5/apph5/uni_modules/uni-popup/changelog.md b/h5/apph5/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..bc59f07 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/changelog.md @@ -0,0 +1,68 @@ +## 1.8.3锛�2023-04-17锛� +- 淇 uni-popup 閲嶅鎵撳紑鏃剁殑 bug +## 1.8.2锛�2023-02-02锛� +- uni-popup-dialog 缁勪欢鏂板 inputType 灞炴�� +## 1.8.1锛�2022-12-01锛� +- 淇 nvue 涓� v-show 鎶ラ敊 +## 1.8.0锛�2022-11-29锛� +- 浼樺寲 涓婚鏍峰紡 +## 1.7.9锛�2022-04-02锛� +- 淇 寮瑰嚭灞傚唴閮ㄦ棤娉曟粴鍔ㄧ殑bug +## 1.7.8锛�2022-03-28锛� +- 淇 灏忕▼搴忎腑楂樺害閿欒鐨刡ug +## 1.7.7锛�2022-03-17锛� +- 淇 蹇�熻皟鐢╫pen鍑虹幇闂鐨凚ug +## 1.7.6锛�2022-02-14锛� +- 淇 safeArea 灞炴�т笉鑳借缃负false鐨刡ug +## 1.7.5锛�2022-01-19锛� +- 淇 isMaskClick 澶辨晥鐨刡ug +## 1.7.4锛�2022-01-19锛� +- 鏂板 cancelText \ confirmText 灞炴�� 锛屽彲鑷畾涔夋枃鏈� +- 鏂板 maskBackgroundColor 灞炴�� 锛屽彲浠ヤ慨鏀硅挋鐗堥鑹� +- 浼樺寲 maskClick灞炴�� 鏇存柊涓� isMaskClick 锛岃В鍐冲井淇″皬绋嬪簭璀﹀憡鐨勯棶棰� +## 1.7.3锛�2022-01-13锛� +- 淇 璁剧疆 safeArea 灞炴�т笉鐢熸晥鐨刡ug +## 1.7.2锛�2021-11-26锛� +- 浼樺寲 缁勪欢绀轰緥 +## 1.7.1锛�2021-11-26锛� +- 淇 vuedoc 鏂囧瓧閿欒 +## 1.7.0锛�2021-11-19锛� +- 浼樺寲 缁勪欢UI锛屽苟鎻愪緵璁捐璧勬簮锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 鏂囨。杩佺Щ锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2锛�2021-08-24锛� +- 鏂板 鏀寔鍥介檯鍖� +## 1.6.1锛�2021-07-30锛� +- 浼樺寲 vue3涓嬩簨浠惰鍛婄殑闂 +## 1.6.0锛�2021-07-13锛� +- 缁勪欢鍏煎 vue3锛屽浣曞垱寤簐ue3椤圭洰锛岃瑙� [uni-app 椤圭洰鏀寔 vue3 浠嬬粛](https://ask.dcloud.net.cn/article/37834) +## 1.5.0锛�2021-06-23锛� +- 鏂板 mask-click 閬僵灞傜偣鍑讳簨浠� +## 1.4.5锛�2021-06-22锛� +- 淇 nvue 骞冲彴涓棿寮瑰嚭鍚庯紝鐐瑰嚮鍐呭锛屽啀鐐瑰嚮閬僵鏃犳硶鍏抽棴鐨凚ug +## 1.4.4锛�2021-06-18锛� +- 淇 H5骞冲彴涓棿寮瑰嚭鍚庯紝鐐瑰嚮鍐呭锛屽啀鐐瑰嚮閬僵鏃犳硶鍏抽棴鐨凚ug +## 1.4.3锛�2021-06-08锛� +- 淇 閿欒鐨� watch 瀛楁 +- 淇 safeArea 灞炴�т笉鐢熸晥鐨勯棶棰� +- 淇 鐐瑰嚮鍐呭锛屽啀鐐瑰嚮閬僵鏃犳硶鍏抽棴鐨凚ug +## 1.4.2锛�2021-05-12锛� +- 鏂板 缁勪欢绀轰緥鍦板潃 +## 1.4.1锛�2021-04-29锛� +- 淇 缁勪欢鍐呮斁缃� input 銆乼extarea 缁勪欢锛屾棤娉曡仛鐒︾殑闂 +## 1.4.0 锛�2021-04-29锛� +- 鏂板 type 灞炴�х殑 left\right 鍊硷紝鏀寔宸﹀彸寮瑰嚭 +- 鏂板 open(String:type) 鏂规硶鍙傛暟 锛屽彲浠ョ渷鐣� type 灞炴�� 锛岀洿鎺ヤ紶鍏ョ被鍨嬫墦寮�鎸囧畾寮圭獥 +- 鏂板 backgroundColor 灞炴�э紝鍙畾涔変富绐楀彛鑳屾櫙鑹�,榛樿涓嶆樉绀鸿儗鏅壊 +- 鏂板 safeArea 灞炴�э紝鏄惁閫傞厤搴曢儴瀹夊叏鍖� +- 淇 App\h5\寰俊灏忕▼搴忓簳閮ㄥ畨鍏ㄥ尯鍗犱綅涓嶅鐨凚ug +- 淇 App 绔脊鍑虹瓑寰呯殑Bug +- 浼樺寲 鎻愬崌浣庨厤璁惧鎬ц兘锛屼紭鍖栧姩鐢诲崱椤块棶棰� +- 浼樺寲 鏇寸畝鍗曠殑缁勪欢鑷畾涔夋柟寮� +## 1.2.9锛�2021-02-05锛� +- 浼樺寲 缁勪欢寮曠敤鍏崇郴锛岄�氳繃uni_modules寮曠敤缁勪欢 +## 1.2.8锛�2021-02-05锛� +- 璋冩暣涓簎ni_modules鐩綍瑙勮寖 +## 1.2.7锛�2021-02-05锛� +- 璋冩暣涓簎ni_modules鐩綍瑙勮寖 +- 鏂板 鏀寔 PC 绔� +- 鏂板 uni-popup-message 銆乽ni-popup-dialog鎵╁睍缁勪欢鏀寔 PC 绔� diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 閬垮厤鍜屽叾浠栨寜閿簨浠跺啿绐� + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..b5eee79 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,275 @@ +<template> + <view class="uni-popup-dialog"> + <view class="uni-dialog-title"> + <text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text> + </view> + <view v-if="mode === 'base'" class="uni-dialog-content"> + <slot> + <text class="uni-dialog-content-text">{{content}}</text> + </slot> + </view> + <view v-else class="uni-dialog-content"> + <slot> + <input class="uni-dialog-input" v-model="val" :type="inputType" :placeholder="placeholderText" :focus="focus" > + </slot> + </view> + <view class="uni-dialog-button-group"> + <view class="uni-dialog-button" @click="closeDialog"> + <text class="uni-dialog-button-text">{{closeText}}</text> + </view> + <view class="uni-dialog-button uni-border-left" @click="onOk"> + <text class="uni-dialog-button-text uni-button-color">{{okText}}</text> + </view> + </view> + + </view> +</template> + +<script> + import popup from '../uni-popup/popup.js' + import { + initVueI18n + } from '@dcloudio/uni-i18n' + import messages from '../uni-popup/i18n/index.js' + const { t } = initVueI18n(messages) + /** + * PopUp 寮瑰嚭灞�-瀵硅瘽妗嗘牱寮� + * @description 寮瑰嚭灞�-瀵硅瘽妗嗘牱寮� + * @tutorial https://ext.dcloud.net.cn/plugin?id=329 + * @property {String} value input 妯″紡涓嬬殑榛樿鍊� + * @property {String} placeholder input 妯″紡涓嬭緭鍏ユ彁绀� + * @property {String} type = [success|warning|info|error] 涓婚鏍峰紡 + * @value success 鎴愬姛 + * @value warning 鎻愮ず + * @value info 娑堟伅 + * @value error 閿欒 + * @property {String} mode = [base|input] 妯″紡銆� + * @value base 鍩虹瀵硅瘽妗� + * @value input 鍙緭鍏ュ璇濇 + * @property {String} content 瀵硅瘽妗嗗唴瀹� + * @property {Boolean} beforeClose 鏄惁鎷︽埅鍙栨秷浜嬩欢 + * @event {Function} confirm 鐐瑰嚮纭鎸夐挳瑙﹀彂 + * @event {Function} close 鐐瑰嚮鍙栨秷鎸夐挳瑙﹀彂 + */ + + export default { + name: "uniPopupDialog", + mixins: [popup], + emits:['confirm','close'], + props: { + inputType:{ + type: String, + default: 'text' + }, + value: { + type: [String, Number], + default: '' + }, + placeholder: { + type: [String, Number], + default: '' + }, + type: { + type: String, + default: 'error' + }, + mode: { + type: String, + default: 'base' + }, + title: { + type: String, + default: '' + }, + content: { + type: String, + default: '' + }, + beforeClose: { + type: Boolean, + default: false + }, + cancelText:{ + type: String, + default: '' + }, + confirmText:{ + type: String, + default: '' + } + }, + data() { + return { + dialogType: 'error', + focus: false, + val: "" + } + }, + computed: { + okText() { + return this.confirmText || t("uni-popup.ok") + }, + closeText() { + return this.cancelText || t("uni-popup.cancel") + }, + placeholderText() { + return this.placeholder || t("uni-popup.placeholder") + }, + titleText() { + return this.title || t("uni-popup.title") + } + }, + watch: { + type(val) { + this.dialogType = val + }, + mode(val) { + if (val === 'input') { + this.dialogType = 'info' + } + }, + value(val) { + this.val = val + } + }, + created() { + // 瀵硅瘽妗嗛伄缃╀笉鍙偣鍑� + this.popup.disableMask() + // this.popup.closeMask() + if (this.mode === 'input') { + this.dialogType = 'info' + this.val = this.value + } else { + this.dialogType = this.type + } + }, + mounted() { + this.focus = true + }, + methods: { + /** + * 鐐瑰嚮纭鎸夐挳 + */ + onOk() { + if (this.mode === 'input'){ + this.$emit('confirm', this.val) + }else{ + this.$emit('confirm') + } + if(this.beforeClose) return + this.popup.close() + }, + /** + * 鐐瑰嚮鍙栨秷鎸夐挳 + */ + closeDialog() { + this.$emit('close') + if(this.beforeClose) return + this.popup.close() + }, + close(){ + this.popup.close() + } + } + } +</script> + +<style lang="scss" > + .uni-popup-dialog { + width: 300px; + border-radius: 11px; + background-color: #fff; + } + + .uni-dialog-title { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + padding-top: 25px; + } + + .uni-dialog-title-text { + font-size: 16px; + font-weight: 500; + } + + .uni-dialog-content { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + align-items: center; + padding: 20px; + } + + .uni-dialog-content-text { + font-size: 14px; + color: #6C6C6C; + } + + .uni-dialog-button-group { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + border-top-color: #f5f5f5; + border-top-style: solid; + border-top-width: 1px; + } + + .uni-dialog-button { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + + flex: 1; + flex-direction: row; + justify-content: center; + align-items: center; + height: 45px; + } + + .uni-border-left { + border-left-color: #f0f0f0; + border-left-style: solid; + border-left-width: 1px; + } + + .uni-dialog-button-text { + font-size: 16px; + color: #333; + } + + .uni-button-color { + color: #007aff; + } + + .uni-dialog-input { + flex: 1; + font-size: 14px; + border: 1px #eee solid; + height: 40px; + padding: 0 10px; + border-radius: 5px; + color: #555; + } + + .uni-popup__success { + color: #4cd964; + } + + .uni-popup__warn { + color: #f0ad4e; + } + + .uni-popup__error { + color: #dd524d; + } + + .uni-popup__info { + color: #909399; + } +</style> diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/h5/apph5/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ +<template> + <view class="uni-popup-message"> + <view class="uni-popup-message__box fixforpc-width" :class="'uni-popup__'+type"> + <slot> + <text class="uni-popup-message-text" :class="'uni-popup__'+type+'-text'">{{message}}</text> + </slot> + </view> + </view> +</template> + +<script> + import popup from '../uni-popup/popup.js' + /** + * PopUp 寮瑰嚭灞�-娑堟伅鎻愮ず + * @description 寮瑰嚭灞�-娑堟伅鎻愮ず + * @tutorial https://ext.dcloud.net.cn/plugin?id=329 + * @property {String} type = [success|warning|info|error] 涓婚鏍峰紡 + * @value success 鎴愬姛 + * @value warning 鎻愮ず + * @value info 娑堟伅 + * @value error 閿欒 + * @property {String} message 娑堟伅鎻愮ず鏂囧瓧 + * @property {String} duration 鏄剧ず鏃堕棿锛岃缃负 0 鍒欎笉浼氳嚜鍔ㄥ叧闂� + */ + + export default { + name: 'uniPopupMessage', + mixins:[popup], + props: { + /** + * 涓婚 success/warning/info/error 榛樿 success + */ + type: { + type: String, + default: 'success' + }, + /** + * 娑堟伅鏂囧瓧 + */ + message: { + type: String, + default: '' + }, + /** + * 鏄剧ず鏃堕棿锛岃缃负 0 鍒欎笉浼氳嚜鍔ㄥ叧闂� + */ + duration: { + type: Number, + default: 3000 + }, + maskShow:{ + type:Boolean, + default:false + } + }, + data() { + return {} + }, + created() { + this.popup.maskShow = this.maskShow + this.popup.messageChild = this + }, + methods: { + timerClose(){ + if(this.duration === 0) return + clearTimeout(this.timer) + this.timer = setTimeout(()=>{ + this.popup.close() + },this.duration) + } + } + } +</script> +<style lang="scss" > + .uni-popup-message { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + } + + .uni-popup-message__box { + background-color: #e1f3d8; + padding: 10px 15px; + border-color: #eee; + border-style: solid; + border-width: 1px; + flex: 1; + } + + @media screen and (min-width: 500px) { + .fixforpc-width { + margin-top: 20px; + border-radius: 4px; + flex: none; + min-width: 380px; + /* #ifndef APP-NVUE */ + max-width: 50%; + /* #endif */ + /* #ifdef APP-NVUE */ + max-width: 500px; + /* #endif */ + } + } + + .uni-popup-message-text { + font-size: 14px; + padding: 0; + } + + .uni-popup__success { + background-color: #e1f3d8; + } + + .uni-popup__success-text { + color: #67C23A; + } + + .uni-popup__warn { + background-color: #faecd8; + } + + .uni-popup__warn-text { + color: #E6A23C; + } + + .uni-popup__error { + background-color: #fde2e2; + } + + .uni-popup__error-text { + color: #F56C6C; + } + + .uni-popup__info { + background-color: #F2F6FC; + } + + .uni-popup__info-text { + color: #909399; + } +</style> diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/h5/apph5/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..5be7624 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ +<template> + <view class="uni-popup-share"> + <view class="uni-share-title"><text class="uni-share-title-text">{{shareTitleText}}</text></view> + <view class="uni-share-content"> + <view class="uni-share-content-box"> + <view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)"> + <image class="uni-share-image" :src="item.icon" mode="aspectFill"></image> + <text class="uni-share-text">{{item.text}}</text> + </view> + + </view> + </view> + <view class="uni-share-button-box"> + <button class="uni-share-button" @click="close">{{cancelText}}</button> + </view> + </view> +</template> + +<script> + import popup from '../uni-popup/popup.js' + import { + initVueI18n + } from '@dcloudio/uni-i18n' + import messages from '../uni-popup/i18n/index.js' + const { t } = initVueI18n(messages) + export default { + name: 'UniPopupShare', + mixins:[popup], + emits:['select'], + props: { + title: { + type: String, + default: '' + }, + beforeClose: { + type: Boolean, + default: false + } + }, + data() { + return { + bottomData: [{ + text: '寰俊', + icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png', + name: 'wx' + }, + { + text: '鏀粯瀹�', + icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png', + name: 'wx' + }, + { + text: 'QQ', + icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png', + name: 'qq' + }, + { + text: '鏂版氮', + icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png', + name: 'sina' + }, + // { + // text: '鐧惧害', + // icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1ec6e920-50bf-11eb-8a36-ebb87efcf8c0.png', + // name: 'copy' + // }, + // { + // text: '鍏朵粬', + // icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/2e0fdfe0-50bf-11eb-b997-9918a5dda011.png', + // name: 'more' + // } + ] + } + }, + created() {}, + computed: { + cancelText() { + return t("uni-popup.cancel") + }, + shareTitleText() { + return this.title || t("uni-popup.shareTitle") + } + }, + methods: { + /** + * 閫夋嫨鍐呭 + */ + select(item, index) { + this.$emit('select', { + item, + index + }) + this.close() + + }, + /** + * 鍏抽棴绐楀彛 + */ + close() { + if(this.beforeClose) return + this.popup.close() + } + } + } +</script> +<style lang="scss" > + .uni-popup-share { + background-color: #fff; + border-top-left-radius: 11px; + border-top-right-radius: 11px; + } + .uni-share-title { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: center; + height: 40px; + } + .uni-share-title-text { + font-size: 14px; + color: #666; + } + .uni-share-content { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + justify-content: center; + padding-top: 10px; + } + + .uni-share-content-box { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + flex-wrap: wrap; + width: 360px; + } + + .uni-share-content-item { + width: 90px; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: center; + padding: 10px 0; + align-items: center; + } + + .uni-share-content-item:active { + background-color: #f5f5f5; + } + + .uni-share-image { + width: 30px; + height: 30px; + } + + .uni-share-text { + margin-top: 10px; + font-size: 14px; + color: #3B4144; + } + + .uni-share-button-box { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + padding: 10px 15px; + } + + .uni-share-button { + flex: 1; + border-radius: 50px; + color: #666; + font-size: 16px; + } + + .uni-share-button::after { + border-radius: 50px; + } +</style> diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..7f1bd06 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..5e3003c --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "鍙栨秷", + "uni-popup.ok": "纭畾", + "uni-popup.placeholder": "璇疯緭鍏�", + "uni-popup.title": "鎻愮ず", + "uni-popup.shareTitle": "鍒嗕韩鍒�" +} diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..13e39eb --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "鍙栨秷", + "uni-popup.ok": "纰哄畾", + "uni-popup.placeholder": "璜嬭几鍏�", + "uni-popup.title": "鎻愮ず", + "uni-popup.shareTitle": "鍒嗕韩鍒�" +} diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/keypress.js b/h5/apph5/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 閬垮厤鍜屽叾浠栨寜閿簨浠跺啿绐� + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/popup.js b/h5/apph5/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c4e5781 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 鑾峰彇鐖跺厓绱犲疄渚� + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/h5/apph5/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/h5/apph5/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..54afee2 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,473 @@ +<template> + <view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"> + <view @touchstart="touchstart"> + <uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass" + :duration="duration" :show="showTrans" @click="onTap" /> + <uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration" + :show="showTrans" @click="onTap"> + <view class="uni-popup__wrapper" :style="{ backgroundColor: bg }" :class="[popupstyle]" @click="clear"> + <slot /> + </view> + </uni-transition> + </view> + <!-- #ifdef H5 --> + <keypress v-if="maskShow" @esc="onTap" /> + <!-- #endif --> + </view> +</template> + +<script> + // #ifdef H5 + import keypress from './keypress.js' + // #endif + + /** + * PopUp 寮瑰嚭灞� + * @description 寮瑰嚭灞傜粍浠讹紝涓轰簡瑙e喅閬僵寮瑰眰鐨勯棶棰� + * @tutorial https://ext.dcloud.net.cn/plugin?id=329 + * @property {String} type = [top|center|bottom|left|right|message|dialog|share] 寮瑰嚭鏂瑰紡 + * @value top 椤堕儴寮瑰嚭 + * @value center 涓棿寮瑰嚭 + * @value bottom 搴曢儴寮瑰嚭 + * @value left 宸︿晶寮瑰嚭 + * @value right 鍙充晶寮瑰嚭 + * @value message 娑堟伅鎻愮ず + * @value dialog 瀵硅瘽妗� + * @value share 搴曢儴鍒嗕韩绀轰緥 + * @property {Boolean} animation = [true|false] 鏄惁寮�鍚姩鐢� + * @property {Boolean} maskClick = [true|false] 钂欑増鐐瑰嚮鏄惁鍏抽棴寮圭獥(搴熷純) + * @property {Boolean} isMaskClick = [true|false] 钂欑増鐐瑰嚮鏄惁鍏抽棴寮圭獥 + * @property {String} backgroundColor 涓荤獥鍙h儗鏅壊 + * @property {String} maskBackgroundColor 钂欑増棰滆壊 + * @property {Boolean} safeArea 鏄惁閫傞厤搴曢儴瀹夊叏鍖� + * @event {Function} change 鎵撳紑鍏抽棴寮圭獥瑙﹀彂锛宔={show: false} + * @event {Function} maskClick 鐐瑰嚮閬僵瑙﹀彂 + */ + + export default { + name: 'uniPopup', + components: { + // #ifdef H5 + keypress + // #endif + }, + emits: ['change', 'maskClick'], + props: { + // 寮�鍚姩鐢� + animation: { + type: Boolean, + default: true + }, + // 寮瑰嚭灞傜被鍨嬶紝鍙�夊�硷紝top: 椤堕儴寮瑰嚭灞傦紱bottom锛氬簳閮ㄥ脊鍑哄眰锛沜enter锛氬叏灞忓脊鍑哄眰 + // message: 娑堟伅鎻愮ず ; dialog : 瀵硅瘽妗� + type: { + type: String, + default: 'center' + }, + // maskClick + isMaskClick: { + type: Boolean, + default: null + }, + // TODO 2 涓増鏈悗搴熷純灞炴�� 锛屼娇鐢� isMaskClick + maskClick: { + type: Boolean, + default: null + }, + backgroundColor: { + type: String, + default: 'none' + }, + safeArea: { + type: Boolean, + default: true + }, + maskBackgroundColor: { + type: String, + default: 'rgba(0, 0, 0, 0.4)' + }, + }, + + watch: { + /** + * 鐩戝惉type绫诲瀷 + */ + type: { + handler: function(type) { + if (!this.config[type]) return + this[this.config[type]](true) + }, + immediate: true + }, + isDesktop: { + handler: function(newVal) { + if (!this.config[newVal]) return + this[this.config[this.type]](true) + }, + immediate: true + }, + /** + * 鐩戝惉閬僵鏄惁鍙偣鍑� + * @param {Object} val + */ + maskClick: { + handler: function(val) { + this.mkclick = val + }, + immediate: true + }, + isMaskClick: { + handler: function(val) { + this.mkclick = val + }, + immediate: true + }, + // H5 涓嬬姝㈠簳閮ㄦ粴鍔� + showPopup(show) { + // #ifdef H5 + // fix by mehaotian 澶勭悊 h5 婊氬姩绌块�忕殑闂 + document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible' + // #endif + } + }, + data() { + return { + duration: 300, + ani: [], + showPopup: false, + showTrans: false, + popupWidth: 0, + popupHeight: 0, + config: { + top: 'top', + bottom: 'bottom', + center: 'center', + left: 'left', + right: 'right', + message: 'top', + dialog: 'center', + share: 'bottom' + }, + maskClass: { + position: 'fixed', + bottom: 0, + top: 0, + left: 0, + right: 0, + backgroundColor: 'rgba(0, 0, 0, 0.4)' + }, + transClass: { + position: 'fixed', + left: 0, + right: 0 + }, + maskShow: true, + mkclick: true, + popupstyle: this.isDesktop ? 'fixforpc-top' : 'top' + } + }, + computed: { + isDesktop() { + return this.popupWidth >= 500 && this.popupHeight >= 500 + }, + bg() { + if (this.backgroundColor === '' || this.backgroundColor === 'none') { + return 'transparent' + } + return this.backgroundColor + } + }, + mounted() { + const fixSize = () => { + const { + windowWidth, + windowHeight, + windowTop, + safeArea, + screenHeight, + safeAreaInsets + } = uni.getSystemInfoSync() + this.popupWidth = windowWidth + this.popupHeight = windowHeight + (windowTop || 0) + // TODO fix by mehaotian 鏄惁閫傞厤搴曢儴瀹夊叏鍖� ,鐩墠寰俊ios 銆佸拰 app ios 璁$畻鏈夊樊寮傦紝闇�瑕佹鏋朵慨澶� + if (safeArea && this.safeArea) { + // #ifdef MP-WEIXIN + this.safeAreaInsets = screenHeight - safeArea.bottom + // #endif + // #ifndef MP-WEIXIN + this.safeAreaInsets = safeAreaInsets.bottom + // #endif + } else { + this.safeAreaInsets = 0 + } + } + fixSize() + // #ifdef H5 + // window.addEventListener('resize', fixSize) + // this.$once('hook:beforeDestroy', () => { + // window.removeEventListener('resize', fixSize) + // }) + // #endif + }, + // #ifndef VUE3 + // TODO vue2 + destroyed() { + this.setH5Visible() + }, + // #endif + // #ifdef VUE3 + // TODO vue3 + unmounted() { + this.setH5Visible() + }, + // #endif + created() { + // this.mkclick = this.isMaskClick || this.maskClick + if (this.isMaskClick === null && this.maskClick === null) { + this.mkclick = true + } else { + this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick + } + if (this.animation) { + this.duration = 300 + } else { + this.duration = 0 + } + // TODO 澶勭悊 message 缁勪欢鐢熷懡鍛ㄦ湡寮傚父鐨勯棶棰� + this.messageChild = null + // TODO 瑙e喅澶存潯鍐掓场鐨勯棶棰� + this.clearPropagation = false + this.maskClass.backgroundColor = this.maskBackgroundColor + }, + methods: { + setH5Visible() { + // #ifdef H5 + // fix by mehaotian 澶勭悊 h5 婊氬姩绌块�忕殑闂 + document.getElementsByTagName('body')[0].style.overflow = 'visible' + // #endif + }, + /** + * 鍏敤鏂规硶锛屼笉鏄剧ず閬僵灞� + */ + closeMask() { + this.maskShow = false + }, + /** + * 鍏敤鏂规硶锛岄伄缃╁眰绂佹鐐瑰嚮 + */ + disableMask() { + this.mkclick = false + }, + // TODO nvue 鍙栨秷鍐掓场 + clear(e) { + // #ifndef APP-NVUE + e.stopPropagation() + // #endif + this.clearPropagation = true + }, + + open(direction) { + // fix by mehaotian 澶勭悊蹇�熸墦寮�鍏抽棴鐨勬儏鍐� + if (this.showPopup) { + return + } + let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share'] + if (!(direction && innerType.indexOf(direction) !== -1)) { + direction = this.type + } + if (!this.config[direction]) { + console.error('缂哄皯绫诲瀷锛�', direction) + return + } + this[this.config[direction]]() + this.$emit('change', { + show: true, + type: direction + }) + }, + close(type) { + this.showTrans = false + this.$emit('change', { + show: false, + type: this.type + }) + clearTimeout(this.timer) + // // 鑷畾涔夊叧闂簨浠� + // this.customOpen && this.customClose() + this.timer = setTimeout(() => { + this.showPopup = false + }, 300) + }, + // TODO 澶勭悊鍐掓场浜嬩欢锛屽ご鏉$殑鍐掓场浜嬩欢鏈夐棶棰� 锛屽厛杩欐牱鍏煎 + touchstart() { + this.clearPropagation = false + }, + + onTap() { + if (this.clearPropagation) { + // fix by mehaotian 鍏煎 nvue + this.clearPropagation = false + return + } + this.$emit('maskClick') + if (!this.mkclick) return + this.close() + }, + /** + * 椤堕儴寮瑰嚭鏍峰紡澶勭悊 + */ + top(type) { + this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top' + this.ani = ['slide-top'] + this.transClass = { + position: 'fixed', + left: 0, + right: 0, + backgroundColor: this.bg + } + // TODO 鍏煎 type 灞炴�� 锛屽悗缁細搴熷純 + if (type) return + this.showPopup = true + this.showTrans = true + this.$nextTick(() => { + if (this.messageChild && this.type === 'message') { + this.messageChild.timerClose() + } + }) + }, + /** + * 搴曢儴寮瑰嚭鏍峰紡澶勭悊 + */ + bottom(type) { + this.popupstyle = 'bottom' + this.ani = ['slide-bottom'] + this.transClass = { + position: 'fixed', + left: 0, + right: 0, + bottom: 0, + paddingBottom: this.safeAreaInsets + 'px', + backgroundColor: this.bg + } + // TODO 鍏煎 type 灞炴�� 锛屽悗缁細搴熷純 + if (type) return + this.showPopup = true + this.showTrans = true + }, + /** + * 涓棿寮瑰嚭鏍峰紡澶勭悊 + */ + center(type) { + this.popupstyle = 'center' + this.ani = ['zoom-out', 'fade'] + this.transClass = { + position: 'fixed', + /* #ifndef APP-NVUE */ + display: 'flex', + flexDirection: 'column', + /* #endif */ + bottom: 0, + left: 0, + right: 0, + top: 0, + justifyContent: 'center', + alignItems: 'center' + } + // TODO 鍏煎 type 灞炴�� 锛屽悗缁細搴熷純 + if (type) return + this.showPopup = true + this.showTrans = true + }, + left(type) { + this.popupstyle = 'left' + this.ani = ['slide-left'] + this.transClass = { + position: 'fixed', + left: 0, + bottom: 0, + top: 0, + backgroundColor: this.bg, + /* #ifndef APP-NVUE */ + display: 'flex', + flexDirection: 'column' + /* #endif */ + } + // TODO 鍏煎 type 灞炴�� 锛屽悗缁細搴熷純 + if (type) return + this.showPopup = true + this.showTrans = true + }, + right(type) { + this.popupstyle = 'right' + this.ani = ['slide-right'] + this.transClass = { + position: 'fixed', + bottom: 0, + right: 0, + top: 0, + backgroundColor: this.bg, + /* #ifndef APP-NVUE */ + display: 'flex', + flexDirection: 'column' + /* #endif */ + } + // TODO 鍏煎 type 灞炴�� 锛屽悗缁細搴熷純 + if (type) return + this.showPopup = true + this.showTrans = true + } + } + } +</script> +<style lang="scss"> + .uni-popup { + position: fixed; + /* #ifndef APP-NVUE */ + z-index: 99; + + /* #endif */ + &.top, + &.left, + &.right { + /* #ifdef H5 */ + top: var(--window-top); + /* #endif */ + /* #ifndef H5 */ + top: 0; + /* #endif */ + } + + .uni-popup__wrapper { + /* #ifndef APP-NVUE */ + display: block; + /* #endif */ + position: relative; + + /* iphonex 绛夊畨鍏ㄥ尯璁剧疆锛屽簳閮ㄥ畨鍏ㄥ尯閫傞厤 */ + /* #ifndef APP-NVUE */ + // padding-bottom: constant(safe-area-inset-bottom); + // padding-bottom: env(safe-area-inset-bottom); + /* #endif */ + &.left, + &.right { + /* #ifdef H5 */ + padding-top: var(--window-top); + /* #endif */ + /* #ifndef H5 */ + padding-top: 0; + /* #endif */ + flex: 1; + } + } + } + + .fixforpc-z-index { + /* #ifndef APP-NVUE */ + z-index: 999; + /* #endif */ + } + + .fixforpc-top { + top: 0; + } +</style> diff --git a/h5/apph5/uni_modules/uni-popup/package.json b/h5/apph5/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..f40556b --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 寮瑰嚭灞�", + "version": "1.8.3", + "description": " Popup 缁勪欢锛屾彁渚涘父鐢ㄧ殑寮瑰眰", + "keywords": [ + "uni-ui", + "寮瑰嚭灞�", + "寮圭獥", + "popup", + "寮规" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "鏃�", + "data": "鏃�", + "permissions": "鏃�" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "寰俊娴忚鍣�(Android)": "y", + "QQ娴忚鍣�(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "灏忕▼搴�": { + "寰俊": "y", + "闃块噷": "y", + "鐧惧害": "y", + "瀛楄妭璺冲姩": "y", + "QQ": "y" + }, + "蹇簲鐢�": { + "鍗庝负": "u", + "鑱旂洘": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/h5/apph5/uni_modules/uni-popup/readme.md b/h5/apph5/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/h5/apph5/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 寮瑰嚭灞� +> **缁勪欢鍚嶏細uni-popup** +> 浠g爜鍧楋細 `uPopup` +> 鍏宠仈缁勪欢锛歚uni-transition` + + +寮瑰嚭灞傜粍浠讹紝鍦ㄥ簲鐢ㄤ腑寮瑰嚭涓�涓秷鎭彁绀虹獥鍙c�佹彁绀烘绛� + +### [鏌ョ湅鏂囨。](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 濡備娇鐢ㄨ繃绋嬩腑鏈変换浣曢棶棰橈紝鎴栬�呮偍瀵箄ni-ui鏈変竴浜涘ソ鐨勫缓璁紝娆㈣繋鍔犲叆 uni-ui 浜ゆ祦缇わ細871950839 + + + + + diff --git a/h5/apph5/uni_modules/uni-scss/changelog.md b/h5/apph5/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3锛�2022-01-21锛� +- 浼樺寲 缁勪欢绀轰緥 +## 1.0.2锛�2021-11-22锛� +- 淇 / 绗﹀彿鍦� vue 涓嶅悓鐗堟湰鍏煎闂寮曡捣鐨勬姤閿欓棶棰� +## 1.0.1锛�2021-11-22锛� +- 淇 vue3涓璼css璇硶鍏煎闂 +## 1.0.0锛�2021-11-18锛� +- init diff --git a/h5/apph5/uni_modules/uni-scss/index.scss b/h5/apph5/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/h5/apph5/uni_modules/uni-scss/package.json b/h5/apph5/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 杈呭姪鏍峰紡", + "version": "1.0.3", + "description": "uni-sass鏄痷ni-ui鎻愪緵鐨勪竴濂楀叏灞�鏍峰紡 锛岄�氳繃涓�浜涚畝鍗曠殑绫诲悕鍜宻ass鍙橀噺锛屽疄鐜扮畝鍗曠殑椤甸潰甯冨眬鎿嶄綔锛屾瘮濡傞鑹层�佽竟璺濄�佸渾瑙掔瓑銆�", + "keywords": [ + "uni-scss", + "uni-ui", + "杈呭姪鏍峰紡" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "閫氱敤 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "鏃�", + "data": "鏃�", + "permissions": "鏃�" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "寰俊娴忚鍣�(Android)": "y", + "QQ娴忚鍣�(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "灏忕▼搴�": { + "寰俊": "y", + "闃块噷": "y", + "鐧惧害": "y", + "瀛楄妭璺冲姩": "y", + "QQ": "y" + }, + "蹇簲鐢�": { + "鍗庝负": "n", + "鑱旂洘": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/h5/apph5/uni_modules/uni-scss/readme.md b/h5/apph5/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 鏄� `uni-ui`鎻愪緵鐨勪竴濂楀叏灞�鏍峰紡 锛岄�氳繃涓�浜涚畝鍗曠殑绫诲悕鍜宍sass`鍙橀噺锛屽疄鐜扮畝鍗曠殑椤甸潰甯冨眬鎿嶄綔锛屾瘮濡傞鑹层�佽竟璺濄�佸渾瑙掔瓑銆� + +### [鏌ョ湅鏂囨。](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 濡備娇鐢ㄨ繃绋嬩腑鏈変换浣曢棶棰橈紝鎴栬�呮偍瀵箄ni-ui鏈変竴浜涘ソ鐨勫缓璁紝娆㈣繋鍔犲叆 uni-ui 浜ゆ祦缇わ細871950839 \ No newline at end of file diff --git a/h5/apph5/uni_modules/uni-scss/styles/index.scss b/h5/apph5/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_border.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_color.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 鏆傛椂涓嶉渶瑕� class 锛岄渶瑕佺敤鎴蜂娇鐢ㄥ彉閲忓疄鐜� 锛屽鏋滀娇鐢ㄧ被鍚嶅叾瀹炲苟涓嶆帹鑽� +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 涓昏壊 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 杈呭姪鑹� + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 涓�ц壊 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 鑳屾櫙鑹� + bg-color: $uni-bg-color, + // 杈规棰滆壊 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 榛戣壊 + black:$uni-black, + // 鐧借壊 + white:$uni-white, + // 閫忔槑 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_radius.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_space.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_styles.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 鏆傛椂澶勭悊杈规闅愯棌涓�杈圭殑闂 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_text.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/h5/apph5/uni_modules/uni-scss/styles/setting/_variables.scss b/h5/apph5/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 闂磋窛鍩虹鍊嶆暟 +$uni-space-root: 2 !default; +// 杈规鍗婂緞榛樿鍊� +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 杈规鍗婂緞鏂偣 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 褰撳墠鐗堟湰鏆傛椂涓嶆敮鎸� sm 灞炴�� + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 瀛椾綋瀹舵棌 +$body-font-family: 'Roboto', sans-serif !default; +// 鏂囨湰 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 涓昏壊 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 杈呭姪鑹� +// 闄や簡涓昏壊澶栫殑鍦烘櫙鑹诧紝闇�瑕佸湪涓嶅悓鐨勫満鏅腑浣跨敤锛堜緥濡傚嵄闄╄壊琛ㄧず鍗遍櫓鐨勬搷浣滐級銆� +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 涓�ц壊 +// 涓�ц壊鐢ㄤ簬鏂囨湰銆佽儗鏅拰杈规棰滆壊銆傞�氳繃杩愮敤涓嶅悓鐨勪腑鎬ц壊锛屾潵琛ㄧ幇灞傛缁撴瀯銆� +$uni-main-color: #3a3a3a !default; // 涓昏鏂囧瓧 +$uni-base-color: #6a6a6a !default; // 甯歌鏂囧瓧 +$uni-secondary-color: #909399 !default; // 娆¤鏂囧瓧 +$uni-extra-color: #c7c7c7 !default; // 杈呭姪璇存槑 + +// 杈规棰滆壊 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 甯歌鑹� +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 鑳屾櫙鑹� +$uni-bg-color: #f7f7f7 !default; + +/* 姘村钩闂磋窛 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 闃村奖 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 钂欑増 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/h5/apph5/uni_modules/uni-scss/styles/tools/functions.scss b/h5/apph5/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 鍚堝苟 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/h5/apph5/uni_modules/uni-scss/theme.scss b/h5/apph5/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 闂磋窛鍩虹鍊嶆暟 +$uni-space-root: 2; +// 杈规鍗婂緞榛樿鍊� +$uni-radius-root:5px; +// 涓昏壊 +$uni-primary: #2979ff; +// 杈呭姪鑹� +$uni-success: #4cd964; +// 璀﹀憡鑹� +$uni-warning: #f0ad4e; +// 閿欒鑹� +$uni-error: #dd524d; +// 鎻忚堪鑹� +$uni-info: #909399; +// 涓�ц壊 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 鑳屾櫙鑹� +$uni-bg-color: #f5f5f5; +// 杈规棰滆壊 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 甯歌鑹� +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/h5/apph5/uni_modules/uni-scss/variables.scss b/h5/apph5/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/h5/apph5/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 闂磋窛鍩虹鍊嶆暟 +$uni-space-root: 2; +// 杈规鍗婂緞榛樿鍊� +$uni-radius-root:5px; + +// 涓昏壊 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 杈呭姪鑹� +// 闄や簡涓昏壊澶栫殑鍦烘櫙鑹诧紝闇�瑕佸湪涓嶅悓鐨勫満鏅腑浣跨敤锛堜緥濡傚嵄闄╄壊琛ㄧず鍗遍櫓鐨勬搷浣滐級銆� +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 涓�ц壊 +// 涓�ц壊鐢ㄤ簬鏂囨湰銆佽儗鏅拰杈规棰滆壊銆傞�氳繃杩愮敤涓嶅悓鐨勪腑鎬ц壊锛屾潵琛ㄧ幇灞傛缁撴瀯銆� +$uni-main-color: #3a3a3a; // 涓昏鏂囧瓧 +$uni-base-color: #6a6a6a; // 甯歌鏂囧瓧 +$uni-secondary-color: #909399; // 娆¤鏂囧瓧 +$uni-extra-color: #c7c7c7; // 杈呭姪璇存槑 + +// 杈规棰滆壊 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 甯歌鑹� +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 鑳屾櫙鑹� +$uni-bg-color: #f7f7f7; + +/* 姘村钩闂磋窛 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 闃村奖 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 钂欑増 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/h5/apph5/uni_modules/uni-transition/changelog.md b/h5/apph5/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..70c1cd4 --- /dev/null +++ b/h5/apph5/uni_modules/uni-transition/changelog.md @@ -0,0 +1,22 @@ +## 1.3.2锛�2023-05-04锛� +- 淇 NVUE 骞冲彴鎶ラ敊鐨勯棶棰� +## 1.3.1锛�2021-11-23锛� +- 淇 init 鏂规硶鍒濆鍖栭棶棰� +## 1.3.0锛�2021-11-19锛� +- 浼樺寲 缁勪欢UI锛屽苟鎻愪緵璁捐璧勬簮锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 鏂囨。杩佺Щ锛岃瑙�:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1锛�2021-09-27锛� +- 淇 init 鏂规硶涓嶇敓鏁堢殑 Bug +## 1.2.0锛�2021-07-30锛� +- 缁勪欢鍏煎 vue3锛屽浣曞垱寤� vue3 椤圭洰锛岃瑙� [uni-app 椤圭洰鏀寔 vue3 浠嬬粛](https://ask.dcloud.net.cn/article/37834) +## 1.1.1锛�2021-05-12锛� +- 鏂板 绀轰緥鍦板潃 +- 淇 绀轰緥椤圭洰缂哄皯缁勪欢鐨� Bug +## 1.1.0锛�2021-04-22锛� +- 鏂板 閫氳繃鏂规硶鑷畾涔夊姩鐢� +- 鏂板 custom-class 闈� NVUE 骞冲彴鏀寔鑷畾涔� class 瀹氬埗鏍峰紡 +- 浼樺寲 鍔ㄧ敾瑙﹀彂閫昏緫锛屼娇鍔ㄧ敾鏇存祦鐣� +- 浼樺寲 鏀寔鍗曠嫭鐨勫姩鐢荤被鍨� +- 浼樺寲 鏂囨。绀轰緥 +## 1.0.2锛�2021-02-05锛� +- 璋冩暣涓� uni_modules 鐩綍瑙勮寖 diff --git a/h5/apph5/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/h5/apph5/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..8f89b18 --- /dev/null +++ b/h5/apph5/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,131 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + // 鍦╥OS10+QQ灏忕▼搴忓钩鍙颁笅锛屼紶缁欏師鐢熺殑瀵硅薄涓�瀹氭槸涓櫘閫氬璞¤�屼笉鏄疨roxy瀵硅薄锛屽惁鍒欎細鎶arameter should be Object instead of ProxyObject鐨勯敊璇� + this.animation = uni.createAnimation({ + ...options + }) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/h5/apph5/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/h5/apph5/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..bfbba93 --- /dev/null +++ b/h5/apph5/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,286 @@ +<template> + <!-- #ifndef APP-NVUE --> + <view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view> + <!-- #endif --> + <!-- #ifdef APP-NVUE --> + <view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view> + <!-- #endif --> +</template> + +<script> +import { createAnimation } from './createAnimation' + +/** + * Transition 杩囨浮鍔ㄧ敾 + * @description 绠�鍗曡繃娓″姩鐢荤粍浠� + * @tutorial https://ext.dcloud.net.cn/plugin?id=985 + * @property {Boolean} show = [false|true] 鎺у埗缁勪欢鏄剧ず鎴栭殣钘� + * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 杩囨浮鍔ㄧ敾绫诲瀷 + * @value fade 娓愰殣娓愬嚭杩囨浮 + * @value slide-top 鐢变笂鑷充笅杩囨浮 + * @value slide-right 鐢卞彸鑷冲乏杩囨浮 + * @value slide-bottom 鐢变笅鑷充笂杩囨浮 + * @value slide-left 鐢卞乏鑷冲彸杩囨浮 + * @value zoom-in 鐢卞皬鍒板ぇ杩囨浮 + * @value zoom-out 鐢卞ぇ鍒板皬杩囨浮 + * @property {Number} duration 杩囨浮鍔ㄧ敾鎸佺画鏃堕棿 + * @property {Object} styles 缁勪欢鏍峰紡锛屽悓 css 鏍峰紡锛屾敞鎰忓甫鈥�-鈥樿繛鎺ョ鐨勫睘鎬ч渶瑕佷娇鐢ㄥ皬椹煎嘲鍐欐硶濡傦細`backgroundColor:red` + */ +export default { + name: 'uniTransition', + emits:['click','change'], + props: { + show: { + type: Boolean, + default: false + }, + modeClass: { + type: [Array, String], + default() { + return 'fade' + } + }, + duration: { + type: Number, + default: 300 + }, + styles: { + type: Object, + default() { + return {} + } + }, + customClass:{ + type: String, + default: '' + }, + onceRender:{ + type:Boolean, + default:false + }, + }, + data() { + return { + isShow: false, + transform: '', + opacity: 1, + animationData: {}, + durationTime: 300, + config: {} + } + }, + watch: { + show: { + handler(newVal) { + if (newVal) { + this.open() + } else { + // 閬垮厤涓婃潵灏辨墽琛� close,瀵艰嚧鍔ㄧ敾閿欎贡 + if (this.isShow) { + this.close() + } + } + }, + immediate: true + } + }, + computed: { + // 鐢熸垚鏍峰紡鏁版嵁 + stylesObject() { + let styles = { + ...this.styles, + 'transition-duration': this.duration / 1000 + 's' + } + let transform = '' + for (let i in styles) { + let line = this.toLine(i) + transform += line + ':' + styles[i] + ';' + } + return transform + }, + // 鍒濆鍖栧姩鐢绘潯浠� + transformStyles() { + return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject + } + }, + created() { + // 鍔ㄧ敾榛樿閰嶇疆 + this.config = { + duration: this.duration, + timingFunction: 'ease', + transformOrigin: '50% 50%', + delay: 0 + } + this.durationTime = this.duration + }, + methods: { + /** + * ref 瑙﹀彂 鍒濆鍖栧姩鐢� + */ + init(obj = {}) { + if (obj.duration) { + this.durationTime = obj.duration + } + this.animation = createAnimation(Object.assign(this.config, obj),this) + }, + /** + * 鐐瑰嚮缁勪欢瑙﹀彂鍥炶皟 + */ + onClick() { + this.$emit('click', { + detail: this.isShow + }) + }, + /** + * ref 瑙﹀彂 鍔ㄧ敾鍒嗙粍 + * @param {Object} obj + */ + step(obj, config = {}) { + if (!this.animation) return + for (let i in obj) { + try { + if(typeof obj[i] === 'object'){ + this.animation[i](...obj[i]) + }else{ + this.animation[i](obj[i]) + } + } catch (e) { + console.error(`鏂规硶 ${i} 涓嶅瓨鍦╜) + } + } + this.animation.step(config) + return this + }, + /** + * ref 瑙﹀彂 鎵ц鍔ㄧ敾 + */ + run(fn) { + if (!this.animation) return + this.animation.run(fn) + }, + // 寮�濮嬭繃搴﹀姩鐢� + open() { + clearTimeout(this.timer) + this.transform = '' + this.isShow = true + let { opacity, transform } = this.styleInit(false) + if (typeof opacity !== 'undefined') { + this.opacity = opacity + } + this.transform = transform + // 纭繚鍔ㄦ�佹牱寮忓凡缁忕敓鏁堝悗锛屾墽琛屽姩鐢伙紝濡傛灉涓嶅姞 nextTick 锛屼細瀵艰嚧 wx 鍔ㄧ敾鎵ц寮傚父 + this.$nextTick(() => { + // TODO 瀹氭椂鍣ㄤ繚璇佸姩鐢诲畬鍏ㄦ墽琛岋紝鐩墠鏈変簺闂锛屽悗闈細鍙栨秷瀹氭椂鍣� + this.timer = setTimeout(() => { + this.animation = createAnimation(this.config, this) + this.tranfromInit(false).step() + this.animation.run() + this.$emit('change', { + detail: this.isShow + }) + }, 20) + }) + }, + // 鍏抽棴杩囧害鍔ㄧ敾 + close(type) { + if (!this.animation) return + this.tranfromInit(true) + .step() + .run(() => { + this.isShow = false + this.animationData = null + this.animation = null + let { opacity, transform } = this.styleInit(false) + this.opacity = opacity || 1 + this.transform = transform + this.$emit('change', { + detail: this.isShow + }) + }) + }, + // 澶勭悊鍔ㄧ敾寮�濮嬪墠鐨勯粯璁ゆ牱寮� + styleInit(type) { + let styles = { + transform: '' + } + let buildStyle = (type, mode) => { + if (mode === 'fade') { + styles.opacity = this.animationType(type)[mode] + } else { + styles.transform += this.animationType(type)[mode] + ' ' + } + } + if (typeof this.modeClass === 'string') { + buildStyle(type, this.modeClass) + } else { + this.modeClass.forEach(mode => { + buildStyle(type, mode) + }) + } + return styles + }, + // 澶勭悊鍐呯疆缁勫悎鍔ㄧ敾 + tranfromInit(type) { + let buildTranfrom = (type, mode) => { + let aniNum = null + if (mode === 'fade') { + aniNum = type ? 0 : 1 + } else { + aniNum = type ? '-100%' : '0' + if (mode === 'zoom-in') { + aniNum = type ? 0.8 : 1 + } + if (mode === 'zoom-out') { + aniNum = type ? 1.2 : 1 + } + if (mode === 'slide-right') { + aniNum = type ? '100%' : '0' + } + if (mode === 'slide-bottom') { + aniNum = type ? '100%' : '0' + } + } + this.animation[this.animationMode()[mode]](aniNum) + } + if (typeof this.modeClass === 'string') { + buildTranfrom(type, this.modeClass) + } else { + this.modeClass.forEach(mode => { + buildTranfrom(type, mode) + }) + } + + return this.animation + }, + animationType(type) { + return { + fade: type ? 1 : 0, + 'slide-top': `translateY(${type ? '0' : '-100%'})`, + 'slide-right': `translateX(${type ? '0' : '100%'})`, + 'slide-bottom': `translateY(${type ? '0' : '100%'})`, + 'slide-left': `translateX(${type ? '0' : '-100%'})`, + 'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`, + 'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})` + } + }, + // 鍐呯疆鍔ㄧ敾绫诲瀷涓庡疄闄呭姩鐢诲搴斿瓧鍏� + animationMode() { + return { + fade: 'opacity', + 'slide-top': 'translateY', + 'slide-right': 'translateX', + 'slide-bottom': 'translateY', + 'slide-left': 'translateX', + 'zoom-in': 'scale', + 'zoom-out': 'scale' + } + }, + // 椹煎嘲杞腑妯嚎 + toLine(name) { + return name.replace(/([A-Z])/g, '-$1').toLowerCase() + } + } +} +</script> + +<style></style> diff --git a/h5/apph5/uni_modules/uni-transition/package.json b/h5/apph5/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..ea995a2 --- /dev/null +++ b/h5/apph5/uni_modules/uni-transition/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 杩囨浮鍔ㄧ敾", + "version": "1.3.2", + "description": "鍏冪礌鐨勭畝鍗曡繃娓″姩鐢�", + "keywords": [ + "uni-ui", + "uniui", + "鍔ㄧ敾", + "杩囨浮", + "杩囨浮鍔ㄧ敾" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "鏃�", + "data": "鏃�", + "permissions": "鏃�" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "寰俊娴忚鍣�(Android)": "y", + "QQ娴忚鍣�(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "灏忕▼搴�": { + "寰俊": "y", + "闃块噷": "y", + "鐧惧害": "y", + "瀛楄妭璺冲姩": "y", + "QQ": "y" + }, + "蹇簲鐢�": { + "鍗庝负": "u", + "鑱旂洘": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/h5/apph5/uni_modules/uni-transition/readme.md b/h5/apph5/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..2f8a77e --- /dev/null +++ b/h5/apph5/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 杩囨浮鍔ㄧ敾 +> **缁勪欢鍚嶏細uni-transition** +> 浠g爜鍧楋細 `uTransition` + + +鍏冪礌杩囨浮鍔ㄧ敾 + +### [鏌ョ湅鏂囨。](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 濡備娇鐢ㄨ繃绋嬩腑鏈変换浣曢棶棰橈紝鎴栬�呮偍瀵箄ni-ui鏈変竴浜涘ソ鐨勫缓璁紝娆㈣繋鍔犲叆 uni-ui 浜ゆ祦缇わ細871950839 \ No newline at end of file diff --git a/h5/apph5/utils/ComUtils.js b/h5/apph5/utils/ComUtils.js new file mode 100644 index 0000000..0db476e --- /dev/null +++ b/h5/apph5/utils/ComUtils.js @@ -0,0 +1,10 @@ +function getUrlPar(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if (r != null) return unescape(r[2]); + return null; +} + +module.exports = { + getUrlPar +} \ No newline at end of file diff --git a/h5/apph5/utils/md5.js b/h5/apph5/utils/md5.js new file mode 100644 index 0000000..ae43690 --- /dev/null +++ b/h5/apph5/utils/md5.js @@ -0,0 +1,1113 @@ +/** + * Namespace for hashing and other cryptographic functions + * Copyright (c) Andrew Valums + * Licensed under the MIT license, http://valums.com/mit-license/ + */ + +var V = V || {}; +V.Security = V.Security || {}; + +(function () { + // for faster access + var S = V.Security; + + /** + * The highest integer value a number can go to without losing precision. + */ + S.maxExactInt = Math.pow(2, 53); + + /** + * Converts string from internal UTF-16 to UTF-8 + * and saves it using array of numbers (bytes), 0-255 per cell + * @param {String} str + * @return {Array} + */ + S.toUtf8ByteArr = function (str) { + var arr = [], + code; + + for (var i = 0; i < str.length; i++) { + code = str.charCodeAt(i); + + /* + Note that charCodeAt will always return a value that is less than 65,536. + This is because the higher code points are represented by a pair of (lower valued) + "surrogate" pseudo-characters which are used to comprise the real character. + Because of this, in order to examine or reproduce the full character for + individual characters of value 65,536 and above, for such characters, + it is necessary to retrieve not only charCodeAt(0), but also charCodeAt(1). + */ + if (0xD800 <= code && code <= 0xDBFF) { + // UTF-16 high surrogate + var hi = code, + low = str.charCodeAt(i + 1); + + code = ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + + i++; + } + + if (code <= 127) { + arr[arr.length] = code; + } else if (code <= 2047) { + arr[arr.length] = (code >>> 6) + 0xC0; + arr[arr.length] = code & 0x3F | 0x80; + } else if (code <= 65535) { + arr[arr.length] = (code >>> 12) + 0xE0; + arr[arr.length] = (code >>> 6 & 0x3F) | 0x80; + arr[arr.length] = (code & 0x3F) | 0x80; + } else if (code <= 1114111) { + arr[arr.length] = (code >>> 18) + 0xF0; + arr[arr.length] = (code >>> 12 & 0x3F) | 0x80; + arr[arr.length] = (code >>> 6 & 0x3F) | 0x80; + arr[arr.length] = (code & 0x3F) | 0x80; + } else { + throw 'Unicode standart supports code points up-to U+10FFFF'; + } + } + + return arr; + }; + + /** + * Outputs 32 integer bits of a number in hex format. + * Preserves leading zeros. + * @param {Number} num + */ + S.toHex32 = function (num) { + // if negative + if (num & 0x80000000) { + // convert to positive number + num = num & (~0x80000000); + num += Math.pow(2, 31); + } + + var str = num.toString(16); + + while (str.length < 8) { + str = '0' + str; + } + + return str; + }; + + /** + * Changes the order of 4 bytes in integer representation of number. + * From 1234 to 4321. + * @param {Number} num Only 32 int bits are used. + */ + S.reverseBytes = function (num) { + var res = 0; + res += ((num >>> 24) & 0xff); + res += ((num >>> 16) & 0xff) << 8; + res += ((num >>> 8) & 0xff) << 16; + res += (num & 0xff) << 24; + return res; + }; + + S.leftRotate = function (x, c) { + return (x << c) | (x >>> (32 - c)); + }; + + /** + * RSA Data Security, Inc. MD5 Message-Digest Algorithm + * http://tools.ietf.org/html/rfc1321 + * http://en.wikipedia.org/wiki/MD5 + * @param {String} message + */ + S.md5 = function (message) { + // r specifies the per-round shift amounts + var r = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]; + + // Use binary integer part of the sines of integers (Radians) as constants: + var k = []; + for (var i = 0; i <= 63; i++) { + k[i] = (Math.abs(Math.sin(i + 1)) * Math.pow(2, 32)) << 0; + } + + var h0 = 0x67452301, + h1 = 0xEFCDAB89, + h2 = 0x98BADCFE, + h3 = 0x10325476, + bytes, unpadded; + + //Pre-processing: + bytes = S.toUtf8ByteArr(message); + message = null; + unpadded = bytes.length; + + //append "1" bit to message + //append "0" bits until message length in bits 鈮� 448 (mod 512) + bytes.push(0x80); + var zeroBytes = Math.abs(448 - (bytes.length * 8) % 512) / 8; + + while (zeroBytes--) { + bytes.push(0); + } + + //append bit length of unpadded message as 64-bit little-endian integer to message + bytes.push(unpadded * 8 & 0xff, unpadded * 8 >> 8 & 0xff, unpadded * 8 >> 16 & 0xff, unpadded * 8 >> 24 & 0xff); + + var i = 4; + while (i--) { + bytes.push(0); + } + + var leftRotate = S.leftRotate; + + //Process the message in successive 512-bit chunks: + var i = 0, + w = []; + while (i < bytes.length) { + + //break chunk into sixteen 32-bit words w[i], 0 鈮� i 鈮� 15 + for (var j = 0; j <= 15; j++) { + w[j] = (bytes[i + 4 * j] << 0) + (bytes[i + 4 * j + 1] << 8) + (bytes[i + 4 * j + 2] << 16) + (bytes[i + 4 * j + 3] << 24); + } + + //Initialize hash value for this chunk: + var a = h0, + b = h1, + c = h2, + d = h3, + f, g; + + //Main loop: + for (var j = 0; j <= 63; j++) { + + if (j <= 15) { + f = (b & c) | ((~b) & d); + g = j; + } else if (j <= 31) { + f = (d & b) | ((~d) & c); + g = (5 * j + 1) % 16; + } else if (j <= 47) { + f = b ^ c ^ d; + g = (3 * j + 5) % 16; + } else { + f = c ^ (b | (~d)); + g = (7 * j) % 16; + } + + var temp = d; + + d = c; + c = b; + b = b + leftRotate((a + f + k[j] + w[g]), r[j]); + a = temp; + } + + //Add this chunk's hash to result so far: + h0 = (h0 + a) << 0; + h1 = (h1 + b) << 0; + h2 = (h2 + c) << 0; + h3 = (h3 + d) << 0; + + i += 512 / 8; + } + + // fix when starting with 0 + var res = out(h0) + out(h1) + out(h2) + out(h3); + + function out (h) { + return S.toHex32(S.reverseBytes(h)); + } + + return res; + }; +})(); + + +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ +var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ +var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ + +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ + +function hex_md5 (s) { + return rstr2hex(rstr_md5(str2rstr_utf8(s))); +} + +function b64_md5 (s) { + return rstr2b64(rstr_md5(str2rstr_utf8(s))); +} + +function any_md5 (s, e) { + return rstr2any(rstr_md5(str2rstr_utf8(s)), e); +} + +function hex_hmac_md5 (k, d) { + return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); +} + +function b64_hmac_md5 (k, d) { + return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); +} + +function any_hmac_md5 (k, d, e) { + return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); +} + +/* + * Perform a simple self-test to see if the VM is working + */ + +function md5_vm_test () { + return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72"; +} + +/* + * Calculate the MD5 of a raw string + */ + +function rstr_md5 (s) { + return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); +} + +/* + * Calculate the HMAC-MD5, of a key and some data (raw strings) + */ + +function rstr_hmac_md5 (key, data) { + var bkey = rstr2binl(key); + if (bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); + + var ipad = Array(16), + opad = Array(16); + for (var i = 0; i < 16; i++) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); +} + +/* + * Convert a raw string to a hex string + */ + +function rstr2hex (input) { + try { + hexcase + } catch (e) { + hexcase = 0; + } + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var output = ""; + var x; + for (var i = 0; i < input.length; i++) { + x = input.charCodeAt(i); + output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + } + return output; +} + +/* + * Convert a raw string to a base-64 string + */ + +function rstr2b64 (input) { + try { + b64pad + } catch (e) { + b64pad = ''; + } + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var output = ""; + var len = input.length; + for (var i = 0; i < len; i += 3) { + var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); + for (var j = 0; j < 4; j++) { + if (i * 8 + j * 6 > input.length * 8) output += b64pad; + else output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); + } + } + return output; +} + +/* + * Convert a raw string to an arbitrary string encoding + */ + +function rstr2any (input, encoding) { + var divisor = encoding.length; + var i, j, q, x, quotient; + + /* Convert to an array of 16-bit big-endian values, forming the dividend */ + var dividend = Array(Math.ceil(input.length / 2)); + for (i = 0; i < dividend.length; i++) { + dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + } + + /* + * Repeatedly perform a long division. The binary array forms the dividend, + * the length of the encoding is the divisor. Once computed, the quotient + * forms the dividend for the next step. All remainders are stored for later + * use. + */ + var full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); + var remainders = Array(full_length); + for (j = 0; j < full_length; j++) { + quotient = Array(); + x = 0; + for (i = 0; i < dividend.length; i++) { + x = (x << 16) + dividend[i]; + q = Math.floor(x / divisor); + x -= q * divisor; + if (quotient.length > 0 || q > 0) quotient[quotient.length] = q; + } + remainders[j] = x; + dividend = quotient; + } + + /* Convert the remainders to the output string */ + var output = ""; + for (i = remainders.length - 1; i >= 0; i--) + output += encoding.charAt(remainders[i]); + + return output; +} + +/* + * Encode a string as utf-8. + * For efficiency, this assumes the input is valid utf-16. + */ + +function str2rstr_utf8 (input) { + return unescape(encodeURI(input)); +} + +/* + * Encode a string as utf-16 + */ + +function str2rstr_utf16le (input) { + var output = ""; + for (var i = 0; i < input.length; i++) + output += String.fromCharCode(input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); + return output; +} + +function str2rstr_utf16be (input) { + var output = ""; + for (var i = 0; i < input.length; i++) + output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); + return output; +} + +/* + * Convert a raw string to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + +function rstr2binl (input) { + var output = Array(input.length >> 2); + for (var i = 0; i < output.length; i++) + output[i] = 0; + for (var i = 0; i < input.length * 8; i += 8) + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); + return output; +} + +/* + * Convert an array of little-endian words to a string + */ + +function binl2rstr (input) { + var output = ""; + for (var i = 0; i < input.length * 32; i += 8) + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); + return output; +} + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + +function binl_md5 (x, len) { /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for (var i = 0; i < x.length; i += 16) { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ + +function md5_cmn (q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); +} + +function md5_ff (a, b, c, d, x, s, t) { + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} + +function md5_gg (a, b, c, d, x, s, t) { + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} + +function md5_hh (a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5_ii (a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + +function safe_add (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ + +function bit_rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + + +function md5cycle (x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + +} + +function cmn (q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); +} + +function ff (a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); +} + +function gg (a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); +} + +function hh (a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); +} + +function ii (a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +function md51 (s) { + var txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; +} + +/* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + +function md5blk (s) { /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; +} + +var hex_chr = '0123456789abcdef'.split(''); + +function rhex (n) { + var s = '', + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + return s; +} + +function hex (x) { + for (var i = 0; i < x.length; i++) + x[i] = rhex(x[i]); + return x.join(''); +} + +function md5 (s) { + return hex(md51(s)); +} + +/* this function is much faster, +so if possible we use it. Some IEs +are the only ones I know of that +need the idiotic second function, +generated by an if clause. */ + +function add32 (a, b) { + return (a + b) & 0xFFFFFFFF; +} + +if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') { + function add32 (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } +} + + +(function () { + function md5cycle (x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + + } + + function cmn (q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); + } + + function ff (a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); + } + + function gg (a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + + function hh (a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); + } + + function ii (a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); + } + + function md51 (s) { + // Converts the string to UTF-8 "bytes" when necessary + if (s.match(/[\x80-\xFF]/)) { + s = unescape(encodeURI(s)); + } + var txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; + } + + /* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + + function md5blk (s) { /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; + } + + var hex_chr = '0123456789abcdef'.split(''); + + function rhex (n) { + var s = '', + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + return s; + } + + function hex (x) { + for (var i = 0; i < x.length; i++) + x[i] = rhex(x[i]); + return x.join(''); + } + + var md5_utf8 = function (s) { + return hex(md51(s)); + } + + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. */ + + function add32 (a, b) { + return (a + b) & 0xFFFFFFFF; + } + + if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') { + function add32 (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } + } +})(); + +/* md5.js - MD5 Message-Digest + * Copyright (C) 1999,2002 Masanao Izumo <iz@onicos.co.jp> + * Version: 2.0.0 + * LastModified: May 13 2002 + * + * This program is free software. You can redistribute it and/or modify + * it without any warranty. This library calculates the MD5 based on RFC1321. + * See RFC1321 for more information and algorism. + */ + +/* Interface: + * md5_128bits = MD5_hash(data); + * md5_hexstr = MD5_hexhash(data); + */ + +/* ChangeLog + * 2002/05/13: Version 2.0.0 released + * NOTICE: API is changed. + * 2002/04/15: Bug fix about MD5 length. + */ + + +// md5_T[i] = parseInt(Math.abs(Math.sin(i)) * 4294967296.0); +var MD5_T = new Array(0x00000000, 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391); + +var MD5_round1 = new Array(new Array(0, 7, 1), new Array(1, 12, 2), new Array(2, 17, 3), new Array(3, 22, 4), new Array(4, 7, 5), new Array(5, 12, 6), new Array(6, 17, 7), new Array(7, 22, 8), new Array(8, 7, 9), new Array(9, 12, 10), new Array(10, 17, 11), new Array(11, 22, 12), new Array(12, 7, 13), new Array(13, 12, 14), new Array(14, 17, 15), new Array(15, 22, 16)); + +var MD5_round2 = new Array(new Array(1, 5, 17), new Array(6, 9, 18), new Array(11, 14, 19), new Array(0, 20, 20), new Array(5, 5, 21), new Array(10, 9, 22), new Array(15, 14, 23), new Array(4, 20, 24), new Array(9, 5, 25), new Array(14, 9, 26), new Array(3, 14, 27), new Array(8, 20, 28), new Array(13, 5, 29), new Array(2, 9, 30), new Array(7, 14, 31), new Array(12, 20, 32)); + +var MD5_round3 = new Array(new Array(5, 4, 33), new Array(8, 11, 34), new Array(11, 16, 35), new Array(14, 23, 36), new Array(1, 4, 37), new Array(4, 11, 38), new Array(7, 16, 39), new Array(10, 23, 40), new Array(13, 4, 41), new Array(0, 11, 42), new Array(3, 16, 43), new Array(6, 23, 44), new Array(9, 4, 45), new Array(12, 11, 46), new Array(15, 16, 47), new Array(2, 23, 48)); + +var MD5_round4 = new Array(new Array(0, 6, 49), new Array(7, 10, 50), new Array(14, 15, 51), new Array(5, 21, 52), new Array(12, 6, 53), new Array(3, 10, 54), new Array(10, 15, 55), new Array(1, 21, 56), new Array(8, 6, 57), new Array(15, 10, 58), new Array(6, 15, 59), new Array(13, 21, 60), new Array(4, 6, 61), new Array(11, 10, 62), new Array(2, 15, 63), new Array(9, 21, 64)); + +function MD5_F (x, y, z) { + return (x & y) | (~x & z); +} + +function MD5_G (x, y, z) { + return (x & z) | (y & ~z); +} + +function MD5_H (x, y, z) { + return x ^ y ^ z; +} + +function MD5_I (x, y, z) { + return y ^ (x | ~z); +} + +var MD5_round = new Array(new Array(MD5_F, MD5_round1), new Array(MD5_G, MD5_round2), new Array(MD5_H, MD5_round3), new Array(MD5_I, MD5_round4)); + +function MD5_pack (n32) { + return String.fromCharCode(n32 & 0xff) + String.fromCharCode((n32 >>> 8) & 0xff) + String.fromCharCode((n32 >>> 16) & 0xff) + String.fromCharCode((n32 >>> 24) & 0xff); +} + +function MD5_unpack (s4) { + return s4.charCodeAt(0) | (s4.charCodeAt(1) << 8) | (s4.charCodeAt(2) << 16) | (s4.charCodeAt(3) << 24); +} + +function MD5_number (n) { + while (n < 0) + n += 4294967296; + while (n > 4294967295) + n -= 4294967296; + return n; +} + +function MD5_apply_round (x, s, f, abcd, r) { + var a, b, c, d; + var kk, ss, ii; + var t, u; + + a = abcd[0]; + b = abcd[1]; + c = abcd[2]; + d = abcd[3]; + kk = r[0]; + ss = r[1]; + ii = r[2]; + + u = f(s[b], s[c], s[d]); + t = s[a] + u + x[kk] + MD5_T[ii]; + t = MD5_number(t); + t = ((t << ss) | (t >>> (32 - ss))); + t += s[b]; + s[a] = MD5_number(t); +} + +function MD5_hash (data) { + var abcd, x, state, s; + var len, index, padLen, f, r; + var i, j, k; + var tmp; + + state = new Array(0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476); + len = data.length; + index = len & 0x3f; + padLen = (index < 56) ? (56 - index) : (120 - index); + if (padLen > 0) { + data += "\x80"; + for (i = 0; i < padLen - 1; i++) + data += "\x00"; + } + data += MD5_pack(len * 8); + data += MD5_pack(0); + len += padLen + 8; + abcd = new Array(0, 1, 2, 3); + x = new Array(16); + s = new Array(4); + + for (k = 0; k < len; k += 64) { + for (i = 0, j = k; i < 16; i++, j += 4) { + x[i] = data.charCodeAt(j) | (data.charCodeAt(j + 1) << 8) | (data.charCodeAt(j + 2) << 16) | (data.charCodeAt(j + 3) << 24); + } + for (i = 0; i < 4; i++) + s[i] = state[i]; + for (i = 0; i < 4; i++) { + f = MD5_round[i][0]; + r = MD5_round[i][1]; + for (j = 0; j < 16; j++) { + MD5_apply_round(x, s, f, abcd, r[j]); + tmp = abcd[0]; + abcd[0] = abcd[3]; + abcd[3] = abcd[2]; + abcd[2] = abcd[1]; + abcd[1] = tmp; + } + } + + for (i = 0; i < 4; i++) { + state[i] += s[i]; + state[i] = MD5_number(state[i]); + } + } + + return MD5_pack(state[0]) + MD5_pack(state[1]) + MD5_pack(state[2]) + MD5_pack(state[3]); +} + +function MD5_hexhash (data) { + var i, out, c; + var bit128; + + bit128 = MD5_hash(data); + out = ""; + for (i = 0; i < 16; i++) { + c = bit128.charCodeAt(i); + out += "0123456789abcdef".charAt((c >> 4) & 0xf); + out += "0123456789abcdef".charAt(c & 0xf); + } + return out; +} + +module.exports = { + hex_md5 +} diff --git a/public/assets/js/backend/banner.js b/public/assets/js/backend/banner.js index 1e027ea..dc89045 100644 --- a/public/assets/js/backend/banner.js +++ b/public/assets/js/backend/banner.js @@ -28,7 +28,7 @@ {checkbox: true}, {field: 'id', title: __('Id')}, {field: 'name', title: __('Name'), operate: 'LIKE'}, - {field: 'type', title: __('Type'), searchList: {"0":__('Type 0'),"1":__('Type 1'),"2":__('Type 2'),"3":__('Type 3'),"4":__('Type 4'),"5":__('Type 5'),"6":__('Type 6'),"7":__('Type 7'),"9":"鏂颁汉鏁欑▼","10":'閫涢��',"11":'app棣栭〉灏忚疆鎾�',"12":'棣栭〉杩炴爣',"13":'app棣栭〉蹇嵎涓�',"14":"app棣栭〉蹇嵎涓�","15":"app鍚姩椤�","16":"娣樺疂杩斿埄杞挱","17":"浜笢杩斿埄杞挱","18":"鎶栭煶杩斿埄杞挱","19":"鎷煎澶氳繑鍒╄疆鎾�","20":"鍞搧浼氳繑鍒╄疆鎾�"}, formatter: Table.api.formatter.normal}, + {field: 'type', title: __('Type'), searchList: {"0":__('Type 0'),"1":__('Type 1'),"2":__('Type 2'),"3":__('Type 3'),"4":__('Type 4'),"5":__('Type 5'),"6":__('Type 6'),"7":__('Type 7'),"9":"鏂颁汉鏁欑▼","10":'閫涢��',"11":'app棣栭〉灏忚疆鎾�',"12":'棣栭〉杩炴爣',"13":'app棣栭〉蹇嵎涓�',"14":"app棣栭〉蹇嵎涓�","15":"app鍚姩椤�","16":"娣樺疂杩斿埄杞挱","17":"浜笢杩斿埄杞挱","18":"鎶栭煶杩斿埄杞挱","19":"鎷煎澶氳繑鍒╄疆鎾�","20":"鍞搧浼氳繑鍒╄疆鎾�","21":"鑷畾涔夐椤靛脊绐�"}, formatter: Table.api.formatter.normal}, {field: 'image', title: __('Image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image}, {field: 'colour', title: __('Colour'), operate: 'LIKE'}, {field: 'url_type', title: __('Url_type'), searchList: {"0":__('Url_type 0'),"1":__('Url_type 1'),"2":__('Url_type 2'),"3":__('Url_type 3'),"7":__('Url_type 7'),"11":__('Url_type 11'),"12":__('Url_type 12'),"13":__('Url_type 13'),"14":__('Url_type 14'),"999":'涓嶈烦杞�'}, formatter: Table.api.formatter.normal}, diff --git a/public/html/compareprice.html b/public/html/compareprice.html index c551292..81fb256 100644 --- a/public/html/compareprice.html +++ b/public/html/compareprice.html @@ -421,10 +421,14 @@ <img class="shoplabel___1_Nv0" :src="g.labelImg"> {{g.title}}</div></h2> <div v-if="g.couponPrice" class="coupon___2SVZi" style="float: left; margin-right:10px"><span>鍒�</span>{{g.couponPrice}}鍏�</div> - <div class="coupon___2SVZi" style="background: #A429F3;"><span style="color: #A429F3;">杩�</span>{{g.fanli}}鍏�</div> + <div v-if="isshowfan" class="coupon___2SVZi" style="background: #A429F3;"><span style="color: #A429F3;">杩�</span>{{g.fanli}}鍏�</div> </div> - <div class="price___dfbCD"><span class="price_font" style="font-size: .26rem; font-weight: 500;">鍒版墜浠�</span><span style="padding: 0;">楼</span><span style="padding: 0 .08rem 0 0;">{{(g.actualPrice-g.fanli).toFixed(2)}}</span><u v-if="g.sourceType=='tb'||g.sourceType=='tm'" style="text-decoration:line-through">楼{{g.originalPrice}}</u></div> + <div class="price___dfbCD"> + <span class="price_font" style="font-size: .26rem; font-weight: 500;">鍒版墜浠�</span><span style="padding: 0;">楼</span> + <span v-if="isshowfan" style="padding: 0 .08rem 0 0;">{{(g.actualPrice-g.fanli).toFixed(2)}}</span> + <span v-else style="padding: 0 .08rem 0 0;">{{g.actualPrice}}</span> + <u v-if="g.sourceType=='tb'||g.sourceType=='tm'" style="text-decoration:line-through">楼{{g.originalPrice}}</u></div> <!-- <div class="operation___3KazI"> <button>绔嬪嵆璐拱</button> </div> --> @@ -443,6 +447,7 @@ </html> <script type="text/javascript" src="./js/vue.js"></script> +<script type="text/javascript" src="./js/md5.js"></script> <script> (function () { @@ -484,6 +489,7 @@ //posturl:'http://dfgapp.ushopvip.com', goodsItem:[], loading:false, + isshowfan:false, plat:[ { 'platname':'娣樺疂', @@ -556,10 +562,9 @@ } } } + var header=this.getPostHeader(postData); $.ajax({ - headers:{ - "token":this.getUrlPar("token") - }, + headers:header, url:'/api/taoke/compare_good', type:"post", dataType:"json", @@ -582,40 +587,49 @@ }, handleCdetailFavorite:function(item) { - switch(item.sourceType) + if(this.isshowfan) { - case "tb": - case "tm": - uni.navigateTo({ - url: '/pages/goods/goodsDetail?id=' + item.goodsId+'&frompage=compareprice' - }); - break; - default: - var itemsStr=this.Infoformat(JSON.stringify(item)); - uni.navigateTo({ - url: '/pages/goods/goodsDetail?sourcefrom=compareprice&info=' + itemsStr+'&frompage=compareprice' - }); - break; + switch(item.sourceType) + { + case "tb": + case "tm": + uni.navigateTo({ + url: '/pages/goods/goodsDetail?id=' + item.goodsId+'&frompage=compareprice' + }); + break; + default: + var itemsStr=this.Infoformat(JSON.stringify(item)); + uni.navigateTo({ + url: '/pages/goods/goodsDetail?sourcefrom=compareprice&info=' + itemsStr+'&frompage=compareprice' + }); + break; + } + } + else{ + var itemsStr=this.Infoformat(JSON.stringify(item)); + uni.navigateTo({ + url: '/pages/goodDetail/index?id=' + item.goodsId+'&info'+itemsStr + }); } }, likeDataGet:function(postData) { var _this=this; - $.ajax({ - headers:{ - "token":this.getUrlPar("token") - }, - url:'/api/taoke/get_goods_things', - type:"post", - dataType:"json", - async: false, - data:{ + var data={ deviceType:postData.postData, deviceValue:postData.deviceValue, pageId:1, pageSize:10, type:1 - } + }; + var header=this.getPostHeader(data); + $.ajax({ + headers:header, + url:'/api/taoke/get_goods_things', + type:"post", + dataType:"json", + async: false, + data:data }).done(function(res){ _this.goodsItem=res.data.list; console.log(res); @@ -655,19 +669,55 @@ if(r !=null)return unescape(r[2]); return null; }, + getPostHeader(data) + { + var token=this.getUrlPar("token"); + if(token) + { + return { + "token":token + } + } + else{ + token=this.getUrlPar("dfgtoken"); + if(token) + { + let keysList=Object.keys(data); + let enstr=""; + if(keysList&&keysList.length>0) + { + let curData=data; + keysList.forEach(function(value,index){ + enstr+=value+ (JSON.stringify(data[value]).replace(/^\"|\"$/g,'')); + }) + } + enstr="dfg"+enstr+"apph5"+token; + enstr=hex_md5(enstr); + enstr+='.'+token + return { + "dfgsessionkey":enstr + } + } + } + } }, mounted:function(){ - /* var postData={ - postData:'OAID', - deviceValue:'' - }; - this.likeDataGet(postData); */ - - - var that=this; - document.addEventListener('UniAppJSBridgeReady', function() { - that.getLikeGoods(); - }); + var token=this.getUrlPar("token"); + if(token) + { + this.isshowfan=true; + var that=this; + document.addEventListener('UniAppJSBridgeReady', function() { + that.getLikeGoods(); + }); + } + else{ + var postData={ + postData:'OAID', + deviceValue:'' + }; + this.likeDataGet(postData); + } } }) </script> \ No newline at end of file diff --git a/public/html/js/md5.js b/public/html/js/md5.js new file mode 100644 index 0000000..3faa168 --- /dev/null +++ b/public/html/js/md5.js @@ -0,0 +1,1110 @@ +/** + * Namespace for hashing and other cryptographic functions + * Copyright (c) Andrew Valums + * Licensed under the MIT license, http://valums.com/mit-license/ + */ + +var V = V || {}; +V.Security = V.Security || {}; + +(function () { + // for faster access + var S = V.Security; + + /** + * The highest integer value a number can go to without losing precision. + */ + S.maxExactInt = Math.pow(2, 53); + + /** + * Converts string from internal UTF-16 to UTF-8 + * and saves it using array of numbers (bytes), 0-255 per cell + * @param {String} str + * @return {Array} + */ + S.toUtf8ByteArr = function (str) { + var arr = [], + code; + + for (var i = 0; i < str.length; i++) { + code = str.charCodeAt(i); + + /* + Note that charCodeAt will always return a value that is less than 65,536. + This is because the higher code points are represented by a pair of (lower valued) + "surrogate" pseudo-characters which are used to comprise the real character. + Because of this, in order to examine or reproduce the full character for + individual characters of value 65,536 and above, for such characters, + it is necessary to retrieve not only charCodeAt(0), but also charCodeAt(1). + */ + if (0xD800 <= code && code <= 0xDBFF) { + // UTF-16 high surrogate + var hi = code, + low = str.charCodeAt(i + 1); + + code = ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; + + i++; + } + + if (code <= 127) { + arr[arr.length] = code; + } else if (code <= 2047) { + arr[arr.length] = (code >>> 6) + 0xC0; + arr[arr.length] = code & 0x3F | 0x80; + } else if (code <= 65535) { + arr[arr.length] = (code >>> 12) + 0xE0; + arr[arr.length] = (code >>> 6 & 0x3F) | 0x80; + arr[arr.length] = (code & 0x3F) | 0x80; + } else if (code <= 1114111) { + arr[arr.length] = (code >>> 18) + 0xF0; + arr[arr.length] = (code >>> 12 & 0x3F) | 0x80; + arr[arr.length] = (code >>> 6 & 0x3F) | 0x80; + arr[arr.length] = (code & 0x3F) | 0x80; + } else { + throw 'Unicode standart supports code points up-to U+10FFFF'; + } + } + + return arr; + }; + + /** + * Outputs 32 integer bits of a number in hex format. + * Preserves leading zeros. + * @param {Number} num + */ + S.toHex32 = function (num) { + // if negative + if (num & 0x80000000) { + // convert to positive number + num = num & (~0x80000000); + num += Math.pow(2, 31); + } + + var str = num.toString(16); + + while (str.length < 8) { + str = '0' + str; + } + + return str; + }; + + /** + * Changes the order of 4 bytes in integer representation of number. + * From 1234 to 4321. + * @param {Number} num Only 32 int bits are used. + */ + S.reverseBytes = function (num) { + var res = 0; + res += ((num >>> 24) & 0xff); + res += ((num >>> 16) & 0xff) << 8; + res += ((num >>> 8) & 0xff) << 16; + res += (num & 0xff) << 24; + return res; + }; + + S.leftRotate = function (x, c) { + return (x << c) | (x >>> (32 - c)); + }; + + /** + * RSA Data Security, Inc. MD5 Message-Digest Algorithm + * http://tools.ietf.org/html/rfc1321 + * http://en.wikipedia.org/wiki/MD5 + * @param {String} message + */ + S.md5 = function (message) { + // r specifies the per-round shift amounts + var r = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]; + + // Use binary integer part of the sines of integers (Radians) as constants: + var k = []; + for (var i = 0; i <= 63; i++) { + k[i] = (Math.abs(Math.sin(i + 1)) * Math.pow(2, 32)) << 0; + } + + var h0 = 0x67452301, + h1 = 0xEFCDAB89, + h2 = 0x98BADCFE, + h3 = 0x10325476, + bytes, unpadded; + + //Pre-processing: + bytes = S.toUtf8ByteArr(message); + message = null; + unpadded = bytes.length; + + //append "1" bit to message + //append "0" bits until message length in bits 鈮� 448 (mod 512) + bytes.push(0x80); + var zeroBytes = Math.abs(448 - (bytes.length * 8) % 512) / 8; + + while (zeroBytes--) { + bytes.push(0); + } + + //append bit length of unpadded message as 64-bit little-endian integer to message + bytes.push(unpadded * 8 & 0xff, unpadded * 8 >> 8 & 0xff, unpadded * 8 >> 16 & 0xff, unpadded * 8 >> 24 & 0xff); + + var i = 4; + while (i--) { + bytes.push(0); + } + + var leftRotate = S.leftRotate; + + //Process the message in successive 512-bit chunks: + var i = 0, + w = []; + while (i < bytes.length) { + + //break chunk into sixteen 32-bit words w[i], 0 鈮� i 鈮� 15 + for (var j = 0; j <= 15; j++) { + w[j] = (bytes[i + 4 * j] << 0) + (bytes[i + 4 * j + 1] << 8) + (bytes[i + 4 * j + 2] << 16) + (bytes[i + 4 * j + 3] << 24); + } + + //Initialize hash value for this chunk: + var a = h0, + b = h1, + c = h2, + d = h3, + f, g; + + //Main loop: + for (var j = 0; j <= 63; j++) { + + if (j <= 15) { + f = (b & c) | ((~b) & d); + g = j; + } else if (j <= 31) { + f = (d & b) | ((~d) & c); + g = (5 * j + 1) % 16; + } else if (j <= 47) { + f = b ^ c ^ d; + g = (3 * j + 5) % 16; + } else { + f = c ^ (b | (~d)); + g = (7 * j) % 16; + } + + var temp = d; + + d = c; + c = b; + b = b + leftRotate((a + f + k[j] + w[g]), r[j]); + a = temp; + } + + //Add this chunk's hash to result so far: + h0 = (h0 + a) << 0; + h1 = (h1 + b) << 0; + h2 = (h2 + c) << 0; + h3 = (h3 + d) << 0; + + i += 512 / 8; + } + + // fix when starting with 0 + var res = out(h0) + out(h1) + out(h2) + out(h3); + + function out (h) { + return S.toHex32(S.reverseBytes(h)); + } + + return res; + }; +})(); + + +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ +var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ +var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ + +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ + +function hex_md5 (s) { + return rstr2hex(rstr_md5(str2rstr_utf8(s))); +} + +function b64_md5 (s) { + return rstr2b64(rstr_md5(str2rstr_utf8(s))); +} + +function any_md5 (s, e) { + return rstr2any(rstr_md5(str2rstr_utf8(s)), e); +} + +function hex_hmac_md5 (k, d) { + return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); +} + +function b64_hmac_md5 (k, d) { + return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); +} + +function any_hmac_md5 (k, d, e) { + return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); +} + +/* + * Perform a simple self-test to see if the VM is working + */ + +function md5_vm_test () { + return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72"; +} + +/* + * Calculate the MD5 of a raw string + */ + +function rstr_md5 (s) { + return binl2rstr(binl_md5(rstr2binl(s), s.length * 8)); +} + +/* + * Calculate the HMAC-MD5, of a key and some data (raw strings) + */ + +function rstr_hmac_md5 (key, data) { + var bkey = rstr2binl(key); + if (bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); + + var ipad = Array(16), + opad = Array(16); + for (var i = 0; i < 16; i++) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); +} + +/* + * Convert a raw string to a hex string + */ + +function rstr2hex (input) { + try { + hexcase + } catch (e) { + hexcase = 0; + } + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var output = ""; + var x; + for (var i = 0; i < input.length; i++) { + x = input.charCodeAt(i); + output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + } + return output; +} + +/* + * Convert a raw string to a base-64 string + */ + +function rstr2b64 (input) { + try { + b64pad + } catch (e) { + b64pad = ''; + } + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var output = ""; + var len = input.length; + for (var i = 0; i < len; i += 3) { + var triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); + for (var j = 0; j < 4; j++) { + if (i * 8 + j * 6 > input.length * 8) output += b64pad; + else output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); + } + } + return output; +} + +/* + * Convert a raw string to an arbitrary string encoding + */ + +function rstr2any (input, encoding) { + var divisor = encoding.length; + var i, j, q, x, quotient; + + /* Convert to an array of 16-bit big-endian values, forming the dividend */ + var dividend = Array(Math.ceil(input.length / 2)); + for (i = 0; i < dividend.length; i++) { + dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + } + + /* + * Repeatedly perform a long division. The binary array forms the dividend, + * the length of the encoding is the divisor. Once computed, the quotient + * forms the dividend for the next step. All remainders are stored for later + * use. + */ + var full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); + var remainders = Array(full_length); + for (j = 0; j < full_length; j++) { + quotient = Array(); + x = 0; + for (i = 0; i < dividend.length; i++) { + x = (x << 16) + dividend[i]; + q = Math.floor(x / divisor); + x -= q * divisor; + if (quotient.length > 0 || q > 0) quotient[quotient.length] = q; + } + remainders[j] = x; + dividend = quotient; + } + + /* Convert the remainders to the output string */ + var output = ""; + for (i = remainders.length - 1; i >= 0; i--) + output += encoding.charAt(remainders[i]); + + return output; +} + +/* + * Encode a string as utf-8. + * For efficiency, this assumes the input is valid utf-16. + */ + +function str2rstr_utf8 (input) { + return unescape(encodeURI(input)); +} + +/* + * Encode a string as utf-16 + */ + +function str2rstr_utf16le (input) { + var output = ""; + for (var i = 0; i < input.length; i++) + output += String.fromCharCode(input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); + return output; +} + +function str2rstr_utf16be (input) { + var output = ""; + for (var i = 0; i < input.length; i++) + output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); + return output; +} + +/* + * Convert a raw string to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + +function rstr2binl (input) { + var output = Array(input.length >> 2); + for (var i = 0; i < output.length; i++) + output[i] = 0; + for (var i = 0; i < input.length * 8; i += 8) + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); + return output; +} + +/* + * Convert an array of little-endian words to a string + */ + +function binl2rstr (input) { + var output = ""; + for (var i = 0; i < input.length * 32; i += 8) + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); + return output; +} + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + +function binl_md5 (x, len) { /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for (var i = 0; i < x.length; i += 16) { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ + +function md5_cmn (q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); +} + +function md5_ff (a, b, c, d, x, s, t) { + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} + +function md5_gg (a, b, c, d, x, s, t) { + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} + +function md5_hh (a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5_ii (a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + +function safe_add (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ + +function bit_rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + + +function md5cycle (x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + +} + +function cmn (q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); +} + +function ff (a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); +} + +function gg (a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); +} + +function hh (a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); +} + +function ii (a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +function md51 (s) { + var txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; +} + +/* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + +function md5blk (s) { /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; +} + +var hex_chr = '0123456789abcdef'.split(''); + +function rhex (n) { + var s = '', + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + return s; +} + +function hex (x) { + for (var i = 0; i < x.length; i++) + x[i] = rhex(x[i]); + return x.join(''); +} + +function md5 (s) { + return hex(md51(s)); +} + +/* this function is much faster, +so if possible we use it. Some IEs +are the only ones I know of that +need the idiotic second function, +generated by an if clause. */ + +function add32 (a, b) { + return (a + b) & 0xFFFFFFFF; +} + +if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') { + function add32 (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } +} + + +(function () { + function md5cycle (x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + + } + + function cmn (q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); + } + + function ff (a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); + } + + function gg (a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + + function hh (a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); + } + + function ii (a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); + } + + function md51 (s) { + // Converts the string to UTF-8 "bytes" when necessary + if (s.match(/[\x80-\xFF]/)) { + s = unescape(encodeURI(s)); + } + var txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; + } + + /* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + + function md5blk (s) { /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; + } + + var hex_chr = '0123456789abcdef'.split(''); + + function rhex (n) { + var s = '', + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + return s; + } + + function hex (x) { + for (var i = 0; i < x.length; i++) + x[i] = rhex(x[i]); + return x.join(''); + } + + var md5_utf8 = function (s) { + return hex(md51(s)); + } + + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. */ + + function add32 (a, b) { + return (a + b) & 0xFFFFFFFF; + } + + if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') { + function add32 (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } + } +})(); + +/* md5.js - MD5 Message-Digest + * Copyright (C) 1999,2002 Masanao Izumo <iz@onicos.co.jp> + * Version: 2.0.0 + * LastModified: May 13 2002 + * + * This program is free software. You can redistribute it and/or modify + * it without any warranty. This library calculates the MD5 based on RFC1321. + * See RFC1321 for more information and algorism. + */ + +/* Interface: + * md5_128bits = MD5_hash(data); + * md5_hexstr = MD5_hexhash(data); + */ + +/* ChangeLog + * 2002/05/13: Version 2.0.0 released + * NOTICE: API is changed. + * 2002/04/15: Bug fix about MD5 length. + */ + + +// md5_T[i] = parseInt(Math.abs(Math.sin(i)) * 4294967296.0); +var MD5_T = new Array(0x00000000, 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391); + +var MD5_round1 = new Array(new Array(0, 7, 1), new Array(1, 12, 2), new Array(2, 17, 3), new Array(3, 22, 4), new Array(4, 7, 5), new Array(5, 12, 6), new Array(6, 17, 7), new Array(7, 22, 8), new Array(8, 7, 9), new Array(9, 12, 10), new Array(10, 17, 11), new Array(11, 22, 12), new Array(12, 7, 13), new Array(13, 12, 14), new Array(14, 17, 15), new Array(15, 22, 16)); + +var MD5_round2 = new Array(new Array(1, 5, 17), new Array(6, 9, 18), new Array(11, 14, 19), new Array(0, 20, 20), new Array(5, 5, 21), new Array(10, 9, 22), new Array(15, 14, 23), new Array(4, 20, 24), new Array(9, 5, 25), new Array(14, 9, 26), new Array(3, 14, 27), new Array(8, 20, 28), new Array(13, 5, 29), new Array(2, 9, 30), new Array(7, 14, 31), new Array(12, 20, 32)); + +var MD5_round3 = new Array(new Array(5, 4, 33), new Array(8, 11, 34), new Array(11, 16, 35), new Array(14, 23, 36), new Array(1, 4, 37), new Array(4, 11, 38), new Array(7, 16, 39), new Array(10, 23, 40), new Array(13, 4, 41), new Array(0, 11, 42), new Array(3, 16, 43), new Array(6, 23, 44), new Array(9, 4, 45), new Array(12, 11, 46), new Array(15, 16, 47), new Array(2, 23, 48)); + +var MD5_round4 = new Array(new Array(0, 6, 49), new Array(7, 10, 50), new Array(14, 15, 51), new Array(5, 21, 52), new Array(12, 6, 53), new Array(3, 10, 54), new Array(10, 15, 55), new Array(1, 21, 56), new Array(8, 6, 57), new Array(15, 10, 58), new Array(6, 15, 59), new Array(13, 21, 60), new Array(4, 6, 61), new Array(11, 10, 62), new Array(2, 15, 63), new Array(9, 21, 64)); + +function MD5_F (x, y, z) { + return (x & y) | (~x & z); +} + +function MD5_G (x, y, z) { + return (x & z) | (y & ~z); +} + +function MD5_H (x, y, z) { + return x ^ y ^ z; +} + +function MD5_I (x, y, z) { + return y ^ (x | ~z); +} + +var MD5_round = new Array(new Array(MD5_F, MD5_round1), new Array(MD5_G, MD5_round2), new Array(MD5_H, MD5_round3), new Array(MD5_I, MD5_round4)); + +function MD5_pack (n32) { + return String.fromCharCode(n32 & 0xff) + String.fromCharCode((n32 >>> 8) & 0xff) + String.fromCharCode((n32 >>> 16) & 0xff) + String.fromCharCode((n32 >>> 24) & 0xff); +} + +function MD5_unpack (s4) { + return s4.charCodeAt(0) | (s4.charCodeAt(1) << 8) | (s4.charCodeAt(2) << 16) | (s4.charCodeAt(3) << 24); +} + +function MD5_number (n) { + while (n < 0) + n += 4294967296; + while (n > 4294967295) + n -= 4294967296; + return n; +} + +function MD5_apply_round (x, s, f, abcd, r) { + var a, b, c, d; + var kk, ss, ii; + var t, u; + + a = abcd[0]; + b = abcd[1]; + c = abcd[2]; + d = abcd[3]; + kk = r[0]; + ss = r[1]; + ii = r[2]; + + u = f(s[b], s[c], s[d]); + t = s[a] + u + x[kk] + MD5_T[ii]; + t = MD5_number(t); + t = ((t << ss) | (t >>> (32 - ss))); + t += s[b]; + s[a] = MD5_number(t); +} + +function MD5_hash (data) { + var abcd, x, state, s; + var len, index, padLen, f, r; + var i, j, k; + var tmp; + + state = new Array(0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476); + len = data.length; + index = len & 0x3f; + padLen = (index < 56) ? (56 - index) : (120 - index); + if (padLen > 0) { + data += "\x80"; + for (i = 0; i < padLen - 1; i++) + data += "\x00"; + } + data += MD5_pack(len * 8); + data += MD5_pack(0); + len += padLen + 8; + abcd = new Array(0, 1, 2, 3); + x = new Array(16); + s = new Array(4); + + for (k = 0; k < len; k += 64) { + for (i = 0, j = k; i < 16; i++, j += 4) { + x[i] = data.charCodeAt(j) | (data.charCodeAt(j + 1) << 8) | (data.charCodeAt(j + 2) << 16) | (data.charCodeAt(j + 3) << 24); + } + for (i = 0; i < 4; i++) + s[i] = state[i]; + for (i = 0; i < 4; i++) { + f = MD5_round[i][0]; + r = MD5_round[i][1]; + for (j = 0; j < 16; j++) { + MD5_apply_round(x, s, f, abcd, r[j]); + tmp = abcd[0]; + abcd[0] = abcd[3]; + abcd[3] = abcd[2]; + abcd[2] = abcd[1]; + abcd[1] = tmp; + } + } + + for (i = 0; i < 4; i++) { + state[i] += s[i]; + state[i] = MD5_number(state[i]); + } + } + + return MD5_pack(state[0]) + MD5_pack(state[1]) + MD5_pack(state[2]) + MD5_pack(state[3]); +} + +function MD5_hexhash (data) { + var i, out, c; + var bit128; + + bit128 = MD5_hash(data); + out = ""; + for (i = 0; i < 16; i++) { + c = bit128.charCodeAt(i); + out += "0123456789abcdef".charAt((c >> 4) & 0xf); + out += "0123456789abcdef".charAt(c & 0xf); + } + return out; +} + -- Gitblit v1.9.3