commit ff0b4d5b12ebbc73f942e3ec273f3dceea6de4e4 Author: liut <4435316@qq.com> Date: Tue Oct 12 11:06:24 2021 +0800 初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f3b478 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +/.idea +/.vscode +/vendor +*.log +thinkphp +.env +.DS_Store +/tp.com +/public/nginx.htaccess +/public/default +/public/server/chunks/* +/public/server/upload/* +/public/temp/* +/public/avatar/* \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9b3a0d4 --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +# SkyPan + +#### 介绍 +一款多用户赚钱网盘程序 + +#### 软件架构 +前端 +* Pear-admin +* Layui +* Jquery + +后端 +* PHP 7.3 +* Thinkphp5.1 +* Mysql + +`服务器 nginx` + +#### 环境依赖 +* `fileinfo` + + +#### 安装教程 + +* 下载源码包 skpan-1.xxx.zip +* 解压到网站目录 +* 通过`composer`安装相关依赖,在应用根目录运行`composer install` +* 导入数据库文件skpan.sql +* 后台帐号密码`admin` + +composer 加速 +``` +composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ +``` + + +#### nginx伪静态规则 +``` +location / { + if (!-e $request_filename) { + rewrite ^(.*)$ /index.php?s=/$1 last; + } +} +``` +#### nginx下载规则 +``` +location /下载目录名 { + internal; +} +``` + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参考Cloudreve下载 + +https://xiaoluzyw.lanzoui.com/iMblCto46sb + +#### OSS帐号 + +`Bucket域名` skpan-store-1.oss-cn-hangzhou.aliyuncs.com + +`Endpoint` oss-cn-hangzhou.aliyuncs.com + +`AccessKey` LTAI5tRkL7PfE5YrYnK5i5Vp + +`AccessKeySecret` LSRzPi3vGLsOdKh6Q48Wl89nTp6O9R + +#### COS帐号 + +`SecretId` AKIDpEJHRNjG2nQtFTowuqlaKeDg5Pi0weuA + +`SecretKey` Lajv0umaEi4KAuY9bzFQzTrBMwMct461 + +`APPID` 1253809068 + +`存储桶名称` skpan-1253809068 + +`访问域名` https://skpan-1253809068.cos.ap-guangzhou.myqcloud.com + diff --git a/application/.htaccess b/application/.htaccess new file mode 100644 index 0000000..3418e55 --- /dev/null +++ b/application/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/application/admin/controller/Auth.php b/application/admin/controller/Auth.php new file mode 100644 index 0000000..de7e63c --- /dev/null +++ b/application/admin/controller/Auth.php @@ -0,0 +1,52 @@ +login_auth('admin')){ + return redirect('index/index'); + } + + if($this->request->isPost()){ + $username = input('post.username'); + $password = input('post.password'); + $captcha = input('post.captcha'); + try { + if(!captcha_check($captcha)){ + throw new \Exception('验证码错误'); + } + + (new Users)->login($username,$password,'admin'); + + return json(['code' => 200,'msg' => '登录成功,正在跳转后台..']); + }catch (\Throwable $e){ + return json(['code' => 502,'msg' => '登录失败:' . $e->getMessage()]); + } + }else{ + return $this->fetch(); + } + + } + + public function logout(){ + (new Users)->logout('admin'); + return json(['code' => 200,'msg' => '退出登录成功']); + } + + public function verify(){ + $config = [ + 'length' => 4 + ]; + $captcha = new Captcha($config); + return $captcha->entry(); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Certify.php b/application/admin/controller/Certify.php new file mode 100644 index 0000000..10bac1e --- /dev/null +++ b/application/admin/controller/Certify.php @@ -0,0 +1,63 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',20); + $list = CertifyModel::order('create_time desc') + ->page($page,$limit) + ->field('id,uid,name,idcard,status,create_time') + ->select()->each(function($item){ + $item['create_time'] = date('Y-m-d H:i',$item['create_time']); + $item['uid'] = Users::where('id',$item['uid'])->value('username'); + return $item; + }); + + $count = CertifyModel::count(); + + return json([ + 'code' => 0, + 'msg' => '获取成功', + 'data' => $list->toArray(), + 'count' => $count + ]); + } + return $this->fetch(); + } + + public function edit(){ + $id = input('get.id'); + + $info = CertifyModel::where('id',$id)->find(); + + if(empty($info)){ + return json(['code' => 502,'msg' => '数据不存在']); + } + + $info['status'] = 1; + + $info->save(); + + Users::where('id',$info['uid'])->update(['is_auth' => 1]); + + return json(['code' => 200,'msg' => '处理成功']); + } + + public function delete(){ + $id = input('get.id'); + + CertifyModel::where('id',$id)->delete(); + + return json(['code' => 200,'msg' => '删除成功']); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Dashboard.php b/application/admin/controller/Dashboard.php new file mode 100644 index 0000000..0eb3826 --- /dev/null +++ b/application/admin/controller/Dashboard.php @@ -0,0 +1,91 @@ +=',$start_time) + ->whereTime('create_time','<=',$end_time) + ->order('create_time desc') + ->select(); + + + // 图表统计 + $series_reg = str_split(str_repeat('0',30),1); + $series_order = str_split(str_repeat('0',30),1); + $series_money = str_split(str_repeat('0',30),1); + + foreach ($month_time as $key => $item){ + $item_time = date('Y-m-d',$item); + foreach ($profit as $profit_item){ + $profit_time = date('Y-m-d',$profit_item['create_time']); + if($item_time == $profit_time){ + $series_reg[$key] = $profit_item['count_reg']; + $series_order[$key] = $profit_item['count_order_yes']; + $series_money[$key] = $profit_item['count_money']; + } + } + } + + $series_reg = array_reverse($series_reg); + $series_reg = implode(',',$series_reg); + + $series_order = array_reverse($series_order); + $series_order = implode(',',$series_order); + + $series_money = array_reverse($series_money); + $series_money = implode(',',$series_money); + + // 用户数量统计 + + $default_group = config('register.default_group'); + $vip_group = config('vip.vip_group'); + + $default_user = Users::where('group',$default_group)->count(); + $vip_user = Users::where('group',$vip_group)->count(); + + $file = Stores::count(); + $size = Stores::sum('size'); + + $this->assign('count',[ + 'user' => $default_user, + 'vip' => $vip_user, + 'file' => $file, + 'size' => countSize($size) + ]); + + $this->assign('profit',$profit); + + $this->assign('series_reg',$series_reg); + $this->assign('series_order',$series_order); + $this->assign('series_money',$series_money); + $this->assign('time_type',$time_type); + + return $this->fetch(); + } + +} \ No newline at end of file diff --git a/application/admin/controller/File.php b/application/admin/controller/File.php new file mode 100644 index 0000000..d458264 --- /dev/null +++ b/application/admin/controller/File.php @@ -0,0 +1,152 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + $map = []; + + // 获取筛选条件 + $start_time = input('get.start_time',''); + $end_time = input('get.end_time',''); + $policy_id = input('get.policy',''); + $ext = input('get.ext',''); + $uid = input('get.uid',''); + $origin_name = input('get.origin_name',''); + + if(!empty($start_time) && !empty($end_time)){ + $map[] = ['create_time','between time',[$start_time,$end_time]]; + } + + if(!empty($policy_id)){ + $map[] = ['policy_id','=',$policy_id]; + } + + if(!empty($ext)){ + $map[] = ['ext','=',$ext]; + } + + if(!empty($uid)){ + $map[] = ['uid','=',$uid]; + } + + if(!empty($origin_name)){ + $map[] = ['origin_name','like','%'.$origin_name.'%']; + } + + //获取排序条件 + $sort_key = input('get.sort_key','create_time'); + $sort = input('get.sort',0); + + $order_type = empty($sort) ? 'desc' : 'asc'; + + $list = Stores::where($map)->page($page,$limit)->order($sort_key,$order_type)->select()->each(function($item){ + $item['icon'] = getFileIcon($item['ext'],'admin'); + $item['size'] = countSize($item['size']); + $item['uid'] = Users::where('id',$item['uid'])->value('nickname'); + $item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name'); + return $item; + }); + + $count = Stores::where($map)->count(); + + return json([ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $list->toArray() + ]); + }else{ + + $policy = Policys::field('id,name')->select(); + $this->assign('policy',$policy); + return $this->fetch(); + } + } + + public function delete(){ + $ids = input('get.ids'); + $store = Stores::withTrashed()->where('id','in',$ids)->select(); + if(empty($store)){ + $this->returnError('数据不存在'); + } + + $succ = 0; + + foreach ($store as $item){ + $item->delete(); + $succ++; + } + + $this->returnSuccess('成功删除'.$succ.'个文件'); + } + + public function download(){ + $id = input('get.id',0); + $info = Stores::get($id); + if(empty($info)){ + $this->error('数据不存在'); + } + + $policy = Policys::get($info['policy_id']); + + if(empty($policy)){ + $this->error('存储策略不存在'); + } + + // 远程文件下载 + if($policy['type'] == 'remote'){ + $down_url = getDownloadRemote($info['file_name'],$info['origin_name'],$policy->config['server_uri'],"",$policy->config['access_token']); + $this->redirect($down_url); + } + + // 存储驱动下载 + switch ($policy['type']){ + case 'aliyunoss': + $driver = new AliyunOss(0,0,0); + break; + case 'txyunoss': + $driver = new TxyunOss(0,0,0); + break; + default: + $driver = new Local(0,0,0); + break; + } + + // 下载 + return $driver->download($info,"",$policy); + } + + public function info(){ + $id = input('get.id',0); + $info = Stores::get($id); + if(empty($info)){ + $this->error('数据不存在'); + } + + $username = Users::where('id',$info['uid'])->value('username'); + $policy_name = Policys::where('id',$info['policy_id'])->value('name'); + $file_path = $info['file_name']; + + $this->assign('username',$username); + $this->assign('policy_name',$policy_name); + $this->assign('file_path',$file_path); + $this->assign('info',$info); + return $this->fetch(); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Group.php b/application/admin/controller/Group.php new file mode 100644 index 0000000..72f8160 --- /dev/null +++ b/application/admin/controller/Group.php @@ -0,0 +1,84 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + + $list = Groups::page($page,$limit)->select()->each(function($item){ + $item['max_storage'] = countSize($item['max_storage']); + $item['is_sys'] = $item['is_sys'] ? '系统' : '自定义'; + $item['user_num'] = Users::where('group',$item['id'])->count(); + $item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name'); + return $item; + }); + + $count = Groups::count(); + $this->returnSuccessLayTable($count,$list->toArray()); + } + + return $this->fetch(); + } + + public function add(){ + if($this->request->isPost()){ + $this->callModelMethods('Groups','addGroup',input('post.')); + $this->returnSuccess(); + } + $policy = Policys::getPolicyAll(); + $this->assign('policy',$policy); + return $this->fetch(); + } + + public function edit(){ + $id = input('get.id'); + $info = Groups::get($id); + + if(empty($info)){ + $this->error('用户组数据不存在'); + } + + if($this->request->isPost()){ + $this->callModelMethods('Groups','editGroup',$id,input('post.')); + $this->returnSuccess(); + } + + $policy = Policys::getPolicyAll(); + $this->assign('policy',$policy); + $this->assign('info',$info); + return $this->fetch(); + } + + public function delete(){ + $id = input('get.id'); + $info = Groups::get($id); + + if(empty($info)){ + $this->returnError('用户组不存在'); + } + + if($info['is_sys'] == 1){ + $this->returnError('系统用户组,不可删除'); + } + + /** + * 判断用户组下是否存在用户 + */ + + Groups::where('id',$id)->delete(); + + $this->returnSuccess('删除成功'); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Index.php b/application/admin/controller/Index.php new file mode 100644 index 0000000..803b1b0 --- /dev/null +++ b/application/admin/controller/Index.php @@ -0,0 +1,43 @@ + 'SkPan网盘', + // logo + 'logo' => '/static/admin/images/logo.png', + // 菜单 + 'menu' => json_encode(config('menu.')), + // 管理员 + 'admin' => [ + 'avatar' => '/static/admin/images/avatar.jpg', + 'nickname' => $this->adminInfo['nickname'] + ], + // 激活菜单 + 'menu_select' => 1, + // 首页url + 'home_url' => url('dashboard/index'), + // 后台url + 'index_url' => url('index/index'), + // 退出登录url + 'logout_url' => url('auth/logout'), + // 修改密码url + 'pass_url' => url('auth/pass'), + // 清除缓存 + 'clear_cache_url' => url('index/cache') + ]; + + $this->assign('theme',$theme); + return $this->fetch(); + + } + +} \ No newline at end of file diff --git a/application/admin/controller/Order.php b/application/admin/controller/Order.php new file mode 100644 index 0000000..5bbad5a --- /dev/null +++ b/application/admin/controller/Order.php @@ -0,0 +1,68 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + + $search_type = input('get.search_type',''); + $search_value = input('get.search_value',''); + $status = input('get.status',''); + $map = []; + + if(!empty($search_type) && !empty($search_value)){ + $map[] = [$search_type,'like','%'.$search_value.'%']; + } + + if(!empty($status)){ + $map[] = ['status','=',$status]; + } + + $pay_types = [ + 'alipay' => '支付宝', + 'wxpay' => '微信' + ]; + + $list = OrderModel::where($map) + ->page($page,$limit) + ->select()->each(function ($item) use($pay_types){ + $item['uid'] = Users::where('id',$item['uid'])->value('username'); + $item['type'] = $pay_types[$item['type']] ?? ''; + $item['money'] = number_format($item['money'],2).'¥'; + $item['vip_day'] = $item['vip_day'].'天'; + $item['out_trade_no'] = empty($item['out_trade_no']) ? '-' : $item['out_trade_no']; + $item['create_time'] = date('Y-m-d H:i',$item['create_time']); + $item['pay_time'] = empty($item['pay_time']) ? '-' : date('Y-m-d H:i',$item['pay_time']); + return $item; + }); + + $count = OrderModel::count(); + + return json([ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $list->toArray() + ]); + } + return $this->fetch(); + } + + public function delete(){ + $ids = input('get.ids'); + + OrderModel::where('id','in',$ids)->delete(); + + $this->returnSuccess('删除订单成功'); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Policy.php b/application/admin/controller/Policy.php new file mode 100644 index 0000000..0cdb6ce --- /dev/null +++ b/application/admin/controller/Policy.php @@ -0,0 +1,77 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + + + $list = Policys::page($page,$limit)->field('id,name,type,max_size')->select()->each(function($item){ + $item['max_size'] = countSize($item['max_size']); + $item['type'] = PolicyType($item['type']); + $item['file_num'] = Stores::where('policy_id',$item['id'])->count(); + $item['store_num'] = countSize(Stores::where('policy_id',$item['id'])->sum('size')); + return $item; + }); + + $count = Policys::count(); + + return json([ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $list->toArray() + ]); + }else{ + return $this->fetch(); + } + } + + public function add(){ + if($this->request->isPost()){ + $this->callModelMethods('Policys','addPolicy',input('post.')); + $this->returnSuccess(); + } + return $this->fetch(); + } + + public function edit(){ + $id = input('get.id'); + $info = Policys::get($id); + + if(empty($info)){ + $this->error('存储策略数据不存在'); + } + + if($this->request->isPost()){ + $this->callModelMethods('Policys','editPolicy',$id,input('post.')); + $this->returnSuccess(); + } + + $this->assign('info',$info); + return $this->fetch(); + } + + public function delete(){ + $id = input('get.id'); + $info = Policys::get($id); + + if(empty($info)){ + $this->returnError('存储策略不存在'); + } + + Policys::where('id',$id)->delete(); + + $this->returnSuccess('删除成功'); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Recycle.php b/application/admin/controller/Recycle.php new file mode 100644 index 0000000..dfd5466 --- /dev/null +++ b/application/admin/controller/Recycle.php @@ -0,0 +1,116 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + $map = []; + + // 获取筛选条件 + $start_time = input('get.start_time',''); + $end_time = input('get.end_time',''); + $policy_id = input('get.policy',''); + $ext = input('get.ext',''); + $uid = input('get.uid',''); + $origin_name = input('get.origin_name',''); + + if(!empty($start_time) && !empty($end_time)){ + $map[] = ['delete_time','between time',[$start_time,$end_time]]; + } + + if(!empty($policy_id)){ + $map[] = ['policy_id','=',$policy_id]; + } + + if(!empty($ext)){ + $map[] = ['ext','=',$ext]; + } + + if(!empty($uid)){ + $map[] = ['uid','=',$uid]; + } + + if(!empty($origin_name)){ + $map[] = ['origin_name','like','%'.$origin_name.'%']; + } + + //获取排序条件 + $sort_key = input('get.sort_key','delete_time'); + $sort = input('get.sort',0); + + $order_type = empty($sort) ? 'desc' : 'asc'; + + $list = Stores::onlyTrashed()->where($map)->page($page,$limit)->order($sort_key,$order_type)->select()->each(function($item){ + $item['icon'] = getFileIcon($item['ext'],'admin'); + $item['size'] = countSize($item['size']); + $item['uid'] = Users::where('id',$item['uid'])->value('nickname'); + $item['policy_id'] = Policys::where('id',$item['policy_id'])->value('name'); + return $item; + }); + + $count = Stores::onlyTrashed()->where($map)->count(); + + return json([ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $list->toArray() + ]); + } + $policy = Policys::field('id,name')->select(); + $this->assign('policy',$policy); + return $this->fetch(); + } + + public function restore(){ + $ids = input('get.ids'); + $store = Stores::onlyTrashed()->where('id','in',$ids)->select(); + if(empty($store)){ + $this->returnError('数据不存在'); + } + + $succ = 0; + + foreach ($store as $item){ + $item->restore(); + $succ++; + } + + $this->returnSuccess('处理完成,共恢复'.$succ.'个文件'); + } + + public function delete(){ + $ids = input('get.ids'); + $store = Stores::onlyTrashed()->where('id','in',$ids)->select(); + if(empty($store)){ + $this->returnError('数据不存在'); + } + + $succ = 0; + + foreach ($store as $item){ + $item->delete(true); + + // 删除分享信息 + Profit::where('file_id',$item['id']) + ->where('uid',$item['uid']) + ->delete(); + + $succ++; + } + + $this->returnSuccess('成功删除'.$succ.'个文件'); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Report.php b/application/admin/controller/Report.php new file mode 100644 index 0000000..3614557 --- /dev/null +++ b/application/admin/controller/Report.php @@ -0,0 +1,68 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',20); + $list = Reports::order('create_time desc') + ->page($page,$limit) + ->field('id,source_name,source_url,source_username,type,contact,real_ip,status,create_time') + ->select()->each(function($item){ + $item['create_time'] = date('Y-m-d H:i',$item['create_time']); + return $item; + }); + + $count = Reports::count(); + + return json([ + 'code' => 0, + 'msg' => '获取成功', + 'data' => $list->toArray(), + 'count' => $count + ]); + } + return $this->fetch(); + } + + public function edit(){ + $id = input('get.id'); + + $info = Reports::where('id',$id)->find(); + + if(empty($info)){ + $this->error('数据不存在'); + } + + if($this->request->isPost()){ + + $status = input('post.status'); + + $info['status'] = $status; + + $info->save(); + + return json(['code' => 200,'msg' => '处理成功']); + } + + $this->assign('info',$info); + + return $this->fetch(); + } + + public function delete(){ + $id = input('get.id'); + + Reports::where('id',$id)->delete(); + + return json(['code' => 200,'msg' => '删除成功']); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Setting.php b/application/admin/controller/Setting.php new file mode 100644 index 0000000..1c05ae4 --- /dev/null +++ b/application/admin/controller/Setting.php @@ -0,0 +1,84 @@ +saveOptions(); + $this->assign('option',$this->getOptions()); + return $this->fetch(); + } + + + public function register(){ + $this->saveOptions(); + $group = Groups::field('id,group_name')->select()->toArray(); + $this->assign('group',$group); + $this->assign('option',$this->getOptions()); + return $this->fetch(); + } + + public function pay(){ + $this->saveOptions(); + $this->assign('option',$this->getOptions()); + return $this->fetch(); + } + + public function vip(){ + $this->saveOptions(); + $group = Groups::field('id,group_name')->select()->toArray(); + $this->assign('group',$group); + $this->assign('option',$this->getOptions()); + return $this->fetch(); + } + + public function email(){ + $this->saveOptions(); + $this->assign('option',$this->getOptions()); + return $this->fetch(); + } + + protected function saveOptions(){ + if($this->request->isPost()){ + $type = $this->request->action(); + $post = input('post.'); + + try { + // 更新数据库 + foreach ($post as $key => $item){ + SettingModel::where('set_name',$key) + ->where('set_type',$type) + ->update(['set_value' => $item]); + } + }catch (\Throwable $e){ + $this->returnError($e->getMessage()); + } + + // 更新缓存 + $setting = SettingModel::select()->toArray(); + Cache::set('_setting_config',$setting); + + $this->returnSuccess('保存成功'); + } + } + + protected function getOptions(): array + { + $type = $this->request->action(); + $settings = SettingModel::where('set_type',$type)->select(); + $options = []; + foreach ($settings as $item){ + $options[$item['set_name']] = $item['set_value']; + } + return $options; + } + +} \ No newline at end of file diff --git a/application/admin/controller/User.php b/application/admin/controller/User.php new file mode 100644 index 0000000..9bf04cd --- /dev/null +++ b/application/admin/controller/User.php @@ -0,0 +1,206 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',10); + $search_type = input('get.search_type',''); + $search_value = input('get.search_value',''); + $map = []; + + if(!empty($search_type) && !empty($search_value)){ + $map[] = [$search_type,'like','%'.$search_value.'%']; + } + + $groups = Groups::column('group_name','id'); + $default_group = config('register.default_group'); + + $list = Users::where($map) + ->page($page,$limit) + ->field('id,nickname,username,group,is_auth,amount,email,avatar,status,create_time') + ->select()->each(function ($item) use ($groups,$default_group){ + $group_name = $groups[$item['group']] ?? '未知'; + + if($item['group'] == 1){ + $item['group'] = ''. $group_name .''; + }elseif ($item['group'] == $default_group){ + $item['group'] = ''. $group_name .''; + }else{ + $item['group'] = ''. $group_name .''; + } + + $item['avatar'] = getUserHead($item['avatar']); + + return $item; + }); + + $count = Users::count(); + + return json([ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $list->toArray() + ]); + }else{ + return $this->fetch(); + } + } + + public function add(){ + + $default_group = config('register.default_group'); + + if($this->request->isPost()){ + $data = input('post.'); + $result = $this->validate($data,[ + 'username|用户帐号' => 'require|alphaNum|length:6,26', + 'group|用户组' => 'require|number', + 'password|登录密码' => 'require|alphaNum|length:6,18', + 'repassword|重复密码' => 'require|confirm:password', + 'email|安全邮箱' => 'require|email' + ]); + + if($result !== true) return json(['code' => 502,'msg' => $result]); + + if(empty($data['group'])){ + $data['group'] = $default_group; + } + + //处理用户的VIP时间 + if(!empty($data['group_expire'])){ + $group_expire = strtotime($data['group_expire']); + } + + try { + (new Users)->register($data['username'],$data['email'],$data['password'],$data['group'],[],$group_expire); + return json(['code' => 200,'msg' => '账号新增成功']); + }catch (Exception $e){ + return json(['code' => 503,'msg' => $e->getMessage()]); + } + }else{ + $group = Groups::field('id,group_name')->select()->toArray(); + $this->assign('default_group',$default_group); + $this->assign('group',$group); + return $this->fetch(); + } + } + + public function del(){ + $ids = input('get.ids'); + + if(count(explode(',',$ids)) > 20){ + $this->returnError('删除失败,不能一次删除20条以上的数据'); + } + + $delete_users = Users::where('id','in',$ids)->field('id,group')->select()->toArray(); + + foreach ($delete_users as $item){ + if($item['id'] == 1){ + $this->returnError('删除失败,删除帐号中包含总管理员帐号'); + break; + } + + /** + * 待完成功能:删除用户后删除相关数据,如:上传储存的数据,订单数据,目录数据,分享数据等 + */ + + Users::where('id',$item['id'])->delete(); + } + + return json(['code' => 200,'msg' => '删除成功']); + } + + public function edit(){ + $id = input('get.id'); + $info = Users::get($id); + + if(empty($info)){ + $this->error('用户数据不存在'); + } + + if($this->request->isPost()){ + $data = input('post.'); + $result = $this->validate($data,[ + 'email|安全邮箱' => 'email', + 'password|登录密码' => 'alphaNum|length:6,18', + 'group|用户组' => 'require|number' + ]); + + if($result !== true) return json(['code' => 502,'msg' => $result]); + + $update = []; + + if(!empty($data['email'])){ + $update['email'] = $data['email']; + } + + if(!empty($data['password'])){ + $en_password = md5($data['password'] . config('app.pass_salt')); + $update['password'] = $en_password; + } + + if($info['group'] == 1 && $info['id'] != $this->adminInfo['id'] && !empty($data['password']) && $this->adminInfo['id'] != 1){ + $this->returnError('操作失败,您不能更改其他管理员组用户的密码'); + } + + if($info['id'] == $this->adminInfo['id'] && $data['group'] != $info['group']){ + $this->returnError('操作失败,您不能更改自己的用户组'); + } + + if($info['id'] == 1 && $data['group'] != $info['group']){ + $this->returnError('操作失败,您不能更改总管理员的用户组'); + } + + $update['group'] = $data['group']; + + //处理用户的VIP时间 + if($info['group_expire']$info['group_expire']){ + $update['group_expire'] = strtotime($data['group_expire']); + } + Users::where('id',$id)->update($update); + + return json(['code' => 200,'msg' => '用户信息修改成功']); + + }else{ + $group = Groups::field('id,group_name')->select()->toArray(); + $this->assign('group',$group); + $this->assign('info',$info); + return $this->fetch(); + } + } + + public function change_status(){ + $id = input('get.id'); + $status = input('get.status'); + + $info = Users::get($id); + + if($info->isEmpty()){ + $this->returnError('用户数据不存在'); + } + + if($info['id'] == 1){ + $this->returnError('操作失败,您不能封禁总管理员的帐号'); + } + + if($info['id'] == $this->adminInfo['id']){ + $this->returnError('操作失败,您不能封禁自己的帐号'); + } + + Users::where('id',$id)->update(['status' => $status]); + + return json(['code' => 200,'msg' => '用户状态切换成功']); + } + +} \ No newline at end of file diff --git a/application/admin/controller/Withdraw.php b/application/admin/controller/Withdraw.php new file mode 100644 index 0000000..e47db7e --- /dev/null +++ b/application/admin/controller/Withdraw.php @@ -0,0 +1,68 @@ +request->isAjax()){ + $page = input('get.page',1); + $limit = input('get.limit',20); + $list = WithdrawModel::order('create_time desc') + ->page($page,$limit) + ->field('id,uid,money,alipay_account,alipay_name,create_time,status') + ->select()->each(function($item){ + $item['uid'] = Users::where('id',$item['uid'])->value('username'); + $item['create_time'] = date('Y-m-d H:i',$item['create_time']); + return $item; + }); + + $count = WithdrawModel::count(); + + return json([ + 'code' => 0, + 'msg' => '获取成功', + 'data' => $list->toArray(), + 'count' => $count + ]); + } + return $this->fetch(); + } + + public function delete(){ + $id = input('get.id'); + + WithdrawModel::where('id',$id)->delete(); + + return json(['code' => 200,'msg' => '删除成功']); + } + + public function change(){ + $id = input('get.id'); + $status = input('get.status'); + + $info = WithdrawModel::where('id',$id)->find(); + + if(empty($info)){ + return json(['code' => 502,'msg' => '数据记录不存在']); + } + + $info['status'] = $status; + + $info->save(); + + if($status == 2){ + // 退回金额 + Record::addRecord($info['uid'],0,'提现退回',$info['money'],'提现系统退回金额'); + } + + return json(['code' => 200,'msg' => '操作成功']); + } + +} \ No newline at end of file diff --git a/application/admin/view/auth/login.html b/application/admin/view/auth/login.html new file mode 100644 index 0000000..cd10ea5 --- /dev/null +++ b/application/admin/view/auth/login.html @@ -0,0 +1,80 @@ + + + + + + {$Think.config.app_name} 后台管理 + + + + + + +
+
+ +
{$Think.config.app_name}Yun
+
+ {$Think.config.app_name} 后台管理 +
+
+
+ +
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + diff --git a/application/admin/view/certify/index.html b/application/admin/view/certify/index.html new file mode 100644 index 0000000..a7620c6 --- /dev/null +++ b/application/admin/view/certify/index.html @@ -0,0 +1,151 @@ + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + diff --git a/application/admin/view/dashboard/index.html b/application/admin/view/dashboard/index.html new file mode 100644 index 0000000..4de1d4c --- /dev/null +++ b/application/admin/view/dashboard/index.html @@ -0,0 +1,177 @@ + + + + + + 控制后台 + + + + + + + +
+
+
+
+
用户数量
+
+
+
+ {$count.user} +
+
+ +
+
+
+
+
+
+
+
VIP用户
+
+
+
+ {$count.vip} +
+
+ +
+
+
+
+
+
+
+
文件数量
+
+
+
+ {$count.file} +
+
+ +
+
+
+
+
+
+
+
文件大小
+
+
+
+ {$count.size} +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ + + + + + diff --git a/application/admin/view/file/index.html b/application/admin/view/file/index.html new file mode 100644 index 0000000..67b77cd --- /dev/null +++ b/application/admin/view/file/index.html @@ -0,0 +1,288 @@ + + + + + + + + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + diff --git a/application/admin/view/file/info.html b/application/admin/view/file/info.html new file mode 100644 index 0000000..9e263a6 --- /dev/null +++ b/application/admin/view/file/info.html @@ -0,0 +1,71 @@ + + + + + + + +
+
+
+
+ +
+
{$info.origin_name}
+
+
+ +
+ +
+
{:countSize($info.size)}
+
+
+ +
+ +
+ +
+
{$policy_name}
+
+
+ +
+ +
+
{$username}
+
+
+ +
+ +
+
{$file_path}
+
+
+ +
+ +
+ +
+
{$info.create_time}
+
+
+ +
+ +
+
{$info.update_time}
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/application/admin/view/group/add.html b/application/admin/view/group/add.html new file mode 100644 index 0000000..09e5c73 --- /dev/null +++ b/application/admin/view/group/add.html @@ -0,0 +1,119 @@ + + + + + + + +
+
+
+
+ +
+ +
用户组的名称
+
+
+ +
+ +
+ +
为该用户组绑定一个上传策略
+
+
+ +
+ +
+
+ +
+
单位:
+
+ +
+
限制用户组单文件上传大小
+
+ +
+ +
+ +
+ +
+
KB/s 填写0表示禁止下载
+
+ +
+ +
+ + +
+
是否允许创建文件分享链接
+
+ +
+
+
+
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/group/edit.html b/application/admin/view/group/edit.html new file mode 100644 index 0000000..77c39b2 --- /dev/null +++ b/application/admin/view/group/edit.html @@ -0,0 +1,118 @@ + + + + + + + +
+
+
+
+ +
+ +
用户组的名称
+
+
+ +
+ +
+ +
为该用户组绑定一个上传策略
+
+
+ +
+ +
+
+ +
+
单位:
+
+ +
+
限制用户组单文件上传大小
+
+ +
+ +
+ +
+ +
+
KB/s 填写0表示禁止下载
+
+ +
+ +
+ + +
+
是否允许创建文件分享链接
+
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/group/index.html b/application/admin/view/group/index.html new file mode 100644 index 0000000..df60fa9 --- /dev/null +++ b/application/admin/view/group/index.html @@ -0,0 +1,158 @@ + + + + + 用户组管理 + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/application/admin/view/index/index.html b/application/admin/view/index/index.html new file mode 100644 index 0000000..b960b73 --- /dev/null +++ b/application/admin/view/index/index.html @@ -0,0 +1,93 @@ + + + + + + {$Think.config.app_name} 后台管理 + + + + + + + + + + + +
+
+ +
    +
  • +
  • +
+ +
+ +
+ +
+ + + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+ + + + + + + diff --git a/application/admin/view/order/index.html b/application/admin/view/order/index.html new file mode 100644 index 0000000..ad0c6f7 --- /dev/null +++ b/application/admin/view/order/index.html @@ -0,0 +1,222 @@ + + + + + + + + +
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/application/admin/view/policy/add.html b/application/admin/view/policy/add.html new file mode 100644 index 0000000..0dc1816 --- /dev/null +++ b/application/admin/view/policy/add.html @@ -0,0 +1,241 @@ + + + + + + + + +
+
+
+
+ +
+ +
+
+ +
+ +
+ +
多个请以半角逗号","隔开,留空表示不限制。如"png,jpg"
+
+
+ +
+ +
+ +
文件存储的服务器
+
+
+ + +
+ +
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/admin/view/policy/edit.html b/application/admin/view/policy/edit.html new file mode 100644 index 0000000..6c14cec --- /dev/null +++ b/application/admin/view/policy/edit.html @@ -0,0 +1,241 @@ + + + + + + + + +
+
+
+
+ +
+ +
+
+ +
+ +
+ +
多个请以半角逗号","隔开,留空表示不限制。如"png,jpg"
+
+
+ +
+ +
+ +
文件存储的服务器
+
+
+ +
+ +
+ +
+
+
+
+ +
+
+
+ +{eq name="$info.type" value="local"} + +{/eq} + +{eq name="$info.type" value="remote"} + +{/eq} + +{eq name="$info.type" value="aliyunoss"} + +{/eq} + +{eq name="$info.type" value="txyunoss"} + +{/eq} + + + + + + \ No newline at end of file diff --git a/application/admin/view/policy/index.html b/application/admin/view/policy/index.html new file mode 100644 index 0000000..38c5ffa --- /dev/null +++ b/application/admin/view/policy/index.html @@ -0,0 +1,136 @@ + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + diff --git a/application/admin/view/recycle/index.html b/application/admin/view/recycle/index.html new file mode 100644 index 0000000..6008033 --- /dev/null +++ b/application/admin/view/recycle/index.html @@ -0,0 +1,351 @@ + + + + + + + + +
+
+
+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + diff --git a/application/admin/view/report/edit.html b/application/admin/view/report/edit.html new file mode 100644 index 0000000..384235d --- /dev/null +++ b/application/admin/view/report/edit.html @@ -0,0 +1,113 @@ + + + + + + + +
+
+
+
+ +
+
{$info.source_name}
+
+
+ +
+ +
+
{$info.source_type?'文件':'目录'}
+
+
+ +
+ +
+
{$info.source_username}
+
+
+ +
+ + +
+ +
+ +
+ +
+
{$info.type}
+
+
+ +
+ +
+
{$info.contact}
+
+
+ +
+ +
+
{$info.content}
+
+
+ + +
+
+
+
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/report/index.html b/application/admin/view/report/index.html new file mode 100644 index 0000000..521c3ec --- /dev/null +++ b/application/admin/view/report/index.html @@ -0,0 +1,135 @@ + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + diff --git a/application/admin/view/setting/basic.html b/application/admin/view/setting/basic.html new file mode 100644 index 0000000..cf07e08 --- /dev/null +++ b/application/admin/view/setting/basic.html @@ -0,0 +1,145 @@ + + + + + + + +
+
+
+
+
+ +
+ +
+ +
站点的名称,将会展示在个页面的标题尾部、邮件中。
+
+
+ +
+ +
+ +
站点logo路径
+
+
+ +
+ +
+ +
网站首页主题
+
+
+ +
+ +
+ +
+ +
位于首页meta标签内的站点标题
+
+
+ +
+ +
+ +
位于首页meta标签内的站点关键词
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
站点的用户投诉举报邮箱
+
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/setting/email.html b/application/admin/view/setting/email.html new file mode 100644 index 0000000..b033275 --- /dev/null +++ b/application/admin/view/setting/email.html @@ -0,0 +1,122 @@ + + + + + + + +
+
+
+
+
+ +
+ +
+ +
邮箱的SMTP服务器地址
+
+
+ +
+ +
+ +
SSL连接SMTP服务器的远程服务器端口号
+
+
+ +
+ +
+ +
显示在收件人邮件的发件人邮箱地址前的发件人姓名
+
+
+ +
+ +
+ +
SMTP登录的账号
+
+
+ +
+ +
+ +
SMTP登录的密码 使用生成的授权码
+
+
+ +
+ +
+ +
+ 模板内变量: + {username} 用户帐号 + {literal}{url}{/literal} 重设密码url地址 + {site_name} 站点名称 +
+
+
+ + +
+
+ +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/setting/pay.html b/application/admin/view/setting/pay.html new file mode 100644 index 0000000..00423c6 --- /dev/null +++ b/application/admin/view/setting/pay.html @@ -0,0 +1,91 @@ + + + + + + + +
+
+
+
+
+ +
+ +
+ +
+ 支付网关注册地址:只要是易支付即可 +
+
+
+ +
+ +
+ +
+ 请填写易支付的商户ID +
+
+
+ +
+ +
+ +
+ 请填写易支付的商户密钥 +
+
+
+ + +
+ +
+
+ +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/setting/register.html b/application/admin/view/setting/register.html new file mode 100644 index 0000000..11c8f03 --- /dev/null +++ b/application/admin/view/setting/register.html @@ -0,0 +1,82 @@ + + + + + + + +
+
+
+
+
+ +
+ +
+ + +
+
是否允许新用户注册
+
+ + +
+ +
+ +
用户注册后默认属于的用户组
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/setting/vip.html b/application/admin/view/setting/vip.html new file mode 100644 index 0000000..d2b2836 --- /dev/null +++ b/application/admin/view/setting/vip.html @@ -0,0 +1,93 @@ + + + + + + + +
+
+
+
+
+ +
+ +
+ +
开通VIP后属于的用户组
+
+
+ +
+ +
+ +
+ 游客通过分享者的链接开通VIP后,分享者获得的提成。请填写百分比如50%那么就填写50 +
+
+
+ +
+ +
+ +
+ 价格规则,一行一条,规则格式为: + 价格名称|开通价格|开通时长(单位天)|显示单位|折扣显示|省钱显示|描述内容|是否推荐(推荐填写1,不推荐填写0) +
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/user/add.html b/application/admin/view/user/add.html new file mode 100644 index 0000000..a57dbbd --- /dev/null +++ b/application/admin/view/user/add.html @@ -0,0 +1,116 @@ + + + + + + + +
+
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/user/edit.html b/application/admin/view/user/edit.html new file mode 100644 index 0000000..e1551cc --- /dev/null +++ b/application/admin/view/user/edit.html @@ -0,0 +1,154 @@ + + + + + + + +
+
+
+
+ +
+
{$info.username}
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
{$info.is_auth ? '认证成功' : '未认证'}
+
+
+ +
+ +
+
{$info.create_time|date="Y-m-d H:i:s"}
+
+
+ +
+ +
+ +
+
{$info.amount} ¥
+
+
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
{:getNotNullTime($info.login_time,'暂无登录信息')}
+
+
+ +
+ +
+
{$info.login_real_ip|default='暂无登录信息'}
+
+
+ + + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/user/index.html b/application/admin/view/user/index.html new file mode 100644 index 0000000..2513679 --- /dev/null +++ b/application/admin/view/user/index.html @@ -0,0 +1,267 @@ + + + + + 用户管理 + + + +
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/application/admin/view/withdraw/index.html b/application/admin/view/withdraw/index.html new file mode 100644 index 0000000..e37dbc3 --- /dev/null +++ b/application/admin/view/withdraw/index.html @@ -0,0 +1,170 @@ + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/application/command.php b/application/command.php new file mode 100644 index 0000000..826bb2b --- /dev/null +++ b/application/command.php @@ -0,0 +1,12 @@ + +// +---------------------------------------------------------------------- + +return []; diff --git a/application/common.php b/application/common.php new file mode 100644 index 0000000..17dba26 --- /dev/null +++ b/application/common.php @@ -0,0 +1,391 @@ + +// +---------------------------------------------------------------------- + +// 应用公共文件 + + +function getNotNullTime($time, $default = '', $format = 'Y-m-d H:i:s'){ + if($time > 0){ + return date($format,$time); + }else{ + return $default; + } +} + +function countSize($bit,$array=false){ + $type = ['B','KB','MB','GB','TB']; + $box = ['1','1024','1048576','1073741824','TB']; + for($i = 0; $bit >= 1024; $i++) { + $bit/=1024; + } + if($array){ + return [(floor($bit*100)/100),$box[$i]]; + } + return (floor($bit*100)/100).$type[$i]; +} + +function PolicyType($d): string +{ + $type = [ + 'local' => '本地', + 'remote' => '远程', + 'aliyunoss' => '阿里云OSS', + 'txyunoss' => '腾讯云COS' + ]; + + return $type[$d] ?? '未知'; +} + +function getFileIcon($file_ext,$type = 'admin'): string +{ + $file_types = [ + 'video' => ['mp4','avi','mov','rmvb','rm','asf','divx','mpg','mpeg','mpe','wmv','mp4','mkv','vob','swf','flv'], + 'music' => ['cd','mp3','flac','ape','wma','mid','midi','mmf','ncm','wav','dts','dsf'], + 'code' => ['c','php','py','py3','cpp','h','jar','html','hta','chm','css','js','htm','asp','aspx','jsp','dll','cs','go','sql','xml','vb','java','lib','e','ec','db','bat','vbs','cmd','json','vbe','ocx','conf','sh','dat'], + 'zip' => ['zip','tar','gz','rar','7z','arj','z','iso','gho'], + 'ps' => ['ps','psd','pdd','eps','iff','tdi','pcx','raw'], + 'img' => ['png','bmp','rle','dib','gif','ico','jpeg','jpe','jff','jps','jpg','psb','svg','pbm','mp0'], + 'fonts' => ['ttf','eot','woff','otf','woff2'], + 'text' => ['txt','md','rtf','ini'], + 'word' => ['doc','docx','docm'], + 'excel' => ['xls','xlsx','xlsm'], + 'ppt' => ['ppt','pptx','pdf','pdp'], + 'links' => ['url','lnk'], + 'exe' => ['exe','msi'], + 'ipa' => ['ipa'], + 'apk' => ['apk'] + ]; + + $file_mime = 'unknown'; + + if($file_ext == 'dir'){ + $file_mime = 'folder'; + }else{ + foreach ($file_types as $mime_name => $item){ + foreach ($item as $ext){ + if($ext == $file_ext){ + $file_mime = $mime_name; + break; + } + } + } + } + + if($type == 'admin'){ + return '/static/admin/images/file_ext/'.$file_mime.'.png'; + }else{ + return '/assets/file_ext/'.$file_mime.'.png'; + } +} + +function getUserHead($user_head): string +{ + if(empty($user_head)){ + return '/assets/image/userhead.png'; + } + + return $user_head; +} + +function getVipRule(){ + $vip_rule = config('vip.vip_rule'); + + $rule_list = explode('
',nl2br($vip_rule)); + + foreach ($rule_list as $key => $item){ + $keys = ['name', 'money', 'day','day_name', 'discount', 'discount_msg', 'desc','is_top']; + $rule = array_combine($keys,explode('|',trim($item))); + $rule['id'] = $key; + $rule_list[$key] = $rule; + } + + return $rule_list; +} + +function shortUrl($url){ + + $hex = md5($url); + $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + $hexLen = strlen($hex); + $subHexLen = $hexLen / 8; + $output = []; + for( $i = 0; $i < $subHexLen; $i++ ) { + $subHex = substr($hex, $i*8, 8); + $idx = 0x3FFFFFFF & (1 * hexdec('0x' . $subHex)); + $out = ''; + for( $j = 0; $j < 6; $j++ ) + { + $out .= $base32[0x0000003D & $idx]; + $idx = $idx >> 5; + } + $output[$i] = $out; + } + + $code = array_shift($output); + + $suc = substr(microtime(),2,4); + + foreach (str_split($suc,1) as $k){ + $code .= substr(str_shuffle($base32),$k,1); + } + + return $code; +} + +function getRndSharePwd($len = 4){ + $string = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + $result = ''; + for ($i = 0;$i < $len;$i++){ + $result .= substr(str_shuffle($string),rand(0,strlen($string) - 1),1); + } + return $result; +} + +function getShareUrl($code): string +{ + return url('index/share',['code' => $code],false,true); +} + +function friendDate($time, $format='Y-m-d'){ + if (!$time) + return ''; + + $nowtime = time(); + if ($time > $nowtime){ + return date($format, $time); + } + + $Y = date('Y', $time);//年份 + $z = date('z', $time);//当前的第几天 + $nowY = date('Y', $nowtime); + $nowz = date('z', $nowtime); + + if ($z > $nowz){ + $nowz += 365; + } + $diffz = $nowz - $z;//获取差异天 + $diffs = $nowtime - $time;//获取差异秒 + + if ($diffz >= 365){ + return ($nowY-$Y).'年前'; + } elseif ($diffz >= 30){ + return floor($diffz / 30).'个月前'; + } elseif ($diffz >= 7){ + return floor($diffz / 7).'个星期前'; + } elseif ($diffz >= 1){ + return $diffz.'天前'; + } elseif ($diffs >= 3600) { + return floor($diffs / 3600).'小时前'; + } elseif ($diffs >= 300) { + return floor($diffs / 60).'分钟前'; + } else {//五分钟内 + return '刚刚'; + } +} + +function getSafeNickname($name): string +{ + if(mb_strlen($name) <= 2){ + $name = mb_substr($name,0,1) . '*'; + }else{ + $len = mb_strlen($name); + $sub_len = $len - 2; + $name = mb_substr($name,0,1) . '*' . str_repeat('*',$sub_len) . mb_substr($name,$len - 1,1); + } + return $name; +} + +function getSafeDirSeparator($dir){ + return str_replace(['/','\\','//','\\\\'],DIRECTORY_SEPARATOR,$dir); +} + +function getDiyDirSeparator($spr,$dir){ + return str_replace(['/','\\','//','\\\\'],$spr,$dir); +} + +function sendEmail($username,$url){ + // 邮件配置 + $config = config('email.'); + + // 获取模板变量 + $temp_var = [ + '{username}' => $username, + '{site_title}' => config('basic.site_title'), + '{url}' => $url + ]; + + // 邮件正文 + $email_body = str_replace(array_keys($temp_var),array_values($temp_var),$config['template_forget']); + + // php mail客户端 + $mail = new PHPMailer\PHPMailer\PHPMailer(); + // debug调试 + $mail->SMTPDebug = 0; + // 使用smtp鉴权方式 + $mail->isSMTP(); + // SMTP鉴权 + $mail->SMTPAuth = true; + // 邮箱服务器地址 + $mail->Host = $config['smtp_host']; + // SSL加密 + $mail->SMTPSecure = 'ssl'; + // 端口 + $mail->Port = $config['smtp_port']; + // 邮件的编码 + $mail->CharSet = 'UTF-8'; + // smtp账号 + $mail->Username = $config['username']; + // smtp密码 + $mail->Password = $config['password']; + // 设置发件人昵称 + $mail->FromName = $config['nickname']; + // 设置发件人邮箱 + $mail->From = $config['username']; + // 邮件正文为html编码 + $mail->isHTML(true); + // 收件人邮箱 + $mail->addAddress('1655545174@qq.com'); + // 邮件标题 + $mail->Subject = '【'.config('basic.site_title').'】找回密码邮件'; + + // 邮件正文 + $mail->Body = $email_body; + + // 发送邮件 返回状态 + return $mail->send(); +} + +function getFileDownloadUrl($shares_id,$file_id,$is_count = 1){ + + $params = [ + 'file' => $file_id, + 'shares' => $shares_id, + 'timestamp' => time(), + ]; + + $sign = md5(urldecode(http_build_query($params)) . config('app.pass_salt')); + + $params['sign'] = $sign; + $params['is_count'] = $is_count; + + return url('Index/download','',false,true).'?'.urldecode(http_build_query($params)); +} + +function getDownloadFileSignVerify($param,$sign): bool +{ + $sign_key = md5(urldecode(http_build_query($param)) . config('app.pass_salt')); + return $sign_key == $sign; +} + +function getFileName($field_id){ + return \app\common\model\Stores::withTrashed()->where('id',$field_id)->value('origin_name'); +} + +function getWeekDay($time){ + $week = ["日","一","二","三","四","五","六"]; + return '星期'.$week[date('w',$time)]; +} + +function getTimeLastDay($time){ + $now_time = strtotime(date('Y-m-d')); + $the_time = strtotime(date('Y-m-d',$time)); + $day_lazy = $now_time - $the_time; + return floor($day_lazy / 86400); +} + +function getDownloadRemote($file_path,$origin_name,$hosts,$speed,$token){ + + if($speed === ""){ + $speed = 'full'; + } + + if($speed === 0){ + $speed = 'none'; + } + + $params = [ + 'file' => $file_path, + 'origin' => $origin_name, + 'speed' => $speed, + 'time' => time() + ]; + + $post = [ + 'md' => 'download', + 'tk' => urlsafe_b64encode(implode(',',$params)) + ]; + + $post['sign'] = getRemoteSign($post,$token); + + return $hosts .'?' . urldecode(http_build_query($post)); +} + +function urlsafe_b64encode($string) { + $data = base64_encode($string); + $data = str_replace(['+','/','='],['-','_',''],$data); + return $data; +} + +function getRemoteSign($params,$key): string +{ + // 过滤参数 + $params = array_filter($params,function($key) use ($params){ + if(empty($params[$key]) || $key == 'sign'){ + return false; + } + return true; + },ARRAY_FILTER_USE_KEY); + // ascii排序 + ksort($params); + reset($params); + + // 签名 + return md5(urldecode(http_build_query($params)) . $key); +} + +function Recursion($data, $pid = 0) +{ + static $child = []; + + foreach ($data as $key => $value) { + if ($value['pid'] == $pid) { + $child[] = $value; + unset($data[$key]); + Recursion($data, $value['id']); + } + } + + return $child; +} + +function getFolderChildFiles($uid,$folder_id){ + // 获取目录列表 + $folder_list = db('folders') + ->where('uid',$uid) + ->field('id,parent_folder as pid') + ->select(); + + $folder = Recursion($folder_list,$folder_id); + + $folder_ids = array_column($folder,'id'); + + $files = db('stores')->where('uid',$uid) + ->where('parent_folder','in',$folder_ids) + ->field('id') + ->select(); + + $files_ids = array_column($files,'id'); + + return [ + 'folder' => $folder_ids, + 'file' => $files_ids + ]; +} \ No newline at end of file diff --git a/application/common/behavior/LoadConfigRun.php b/application/common/behavior/LoadConfigRun.php new file mode 100644 index 0000000..cdebc75 --- /dev/null +++ b/application/common/behavior/LoadConfigRun.php @@ -0,0 +1,28 @@ +toArray(); + Cache::set('_setting_config',$conf_cache); + } + + // 加载配置 + foreach ($conf_cache as $item){ + Config::set([$item['set_name'] => $item['set_value']],$item['set_type']); + } + + } + +} \ No newline at end of file diff --git a/application/common/controller/Admin.php b/application/common/controller/Admin.php new file mode 100644 index 0000000..9bd76a4 --- /dev/null +++ b/application/common/controller/Admin.php @@ -0,0 +1,89 @@ +adminInfo = (new Users())->login_info('admin'); + } + + protected function callModelMethods($model,$methods,...$args){ + $class_name = 'app\common\model\\'.$model; + $class = new $class_name; + try { + call_user_func_array([$class,$methods],$args); + }catch (\Throwable $e){ + $this->returnError($e->getMessage(),505); + } + } + + protected function returnSuccess($msg = '操作成功',$data = []){ + $result = [ + 'code' => 200, + 'msg' => $msg, + 'time' => time(), + 'data' => $data, + ]; + + $type = 'json'; + $response = Response::create($result, $type)->header([]); + throw new HttpResponseException($response); + } + + protected function returnSuccessLayTable($count,$data = []){ + $result = [ + 'code' => 0, + 'msg' => '加载成功', + 'count' => $count, + 'data' => $data, + ]; + + $type = 'json'; + $response = Response::create($result, $type)->header([]); + throw new HttpResponseException($response); + } + + protected function returnError($msg = '操作失败,系统错误',$code = 502,$data = []){ + $result = [ + 'code' => $code, + 'msg' => $msg, + 'time' => time(), + 'data' => $data, + ]; + $type = 'json'; + $response = Response::create($result, $type)->header([]); + throw new HttpResponseException($response); + } + + protected function getQueryMap($methods,$kw = [],$ql = []){ + $map = []; + foreach ($ql as $item){ + $value = input($methods.'.'.$item); + if(!empty($value)){ + $map[$item] = $value; + } + } + foreach ($kw as $item){ + $value = input($methods.'.'.$item); + if(!empty($value)){ + $map[$item] = $value; + } + } + return $map; + } + +} \ No newline at end of file diff --git a/application/common/controller/Home.php b/application/common/controller/Home.php new file mode 100644 index 0000000..627ff26 --- /dev/null +++ b/application/common/controller/Home.php @@ -0,0 +1,115 @@ +userInfo = (new Users())->login_info('default'); + + // 是否登录 + $this->is_login = empty($this->userInfo) ? 0 : 1; + + // 用户组信息 + if($this->is_login){ + // 登录用户组 + $this->groupData = Groups::where('id',$this->userInfo['group'])->find(); + }else{ + // 游客用户组 + $this->groupData = Groups::where('id',2)->find(); + } + + // 获取VIP用户组ID + $vip_group = config('vip.vip_group'); + + // 获取普通用户组ID + $default_group = config('register.default_group'); + + // 判断是否VIP + if($this->userInfo['group'] == $vip_group){ + // VIP过期 + if(intval($this->userInfo['group_expire']) < time()){ + Users::where('id',$this->userInfo['id'])->update([ + 'group' => $default_group, + 'group_expire' => 0 + ]); + $this->vip_info['is_vip'] = 0; + $this->vip_info['expire_time'] = 0; + }else{ + $this->vip_info['is_vip'] = 1; + $this->vip_info['expire_time'] = date('Y-m-d',$this->userInfo['group_expire']); + } + }else{ + $this->vip_info['is_vip'] = 0; + $this->vip_info['expire_time'] = 0; + } + + $this->assign('group',$this->groupData); + $this->assign('info',$this->userInfo); + $this->assign('is_login',$this->is_login); + $this->assign('vip_info',$this->vip_info); + $this->assign('url_path',$this->request->path()); + } + + protected function getPolicy(): array + { + $policy = Policys::where('id',$this->groupData['policy_id'])->find()->toArray(); + + return $policy; + } + + protected function getPolicyUrl($policy,$param = []): string + { + if($policy['type'] != 'remote'){ + return url('upload/file'); + } + + $data = [ + 'uid' => $this->userInfo['id'], + 'policy_id' => $policy['id'], + 'save_dir' => $policy['config']['save_dir'] + ]; + + $data = array_merge($data,$param); + + $data['sign'] = $this->remote_sign_params($data,$policy['config']['access_token']); + + return $policy['config']['server_uri'].'?'.urldecode(http_build_query($data)); + } + + protected function remote_sign_params($params,$key): string + { + // 过滤参数 + $params = array_filter($params,function($key) use ($params){ + if(empty($params[$key]) || $key == 'sign'){ + return false; + } + return true; + },ARRAY_FILTER_USE_KEY); + // ascii排序 + ksort($params); + reset($params); + // 签名 + return md5(urldecode(http_build_query($params)) . $key); + } + + +} \ No newline at end of file diff --git a/application/common/exception/LoginError.php b/application/common/exception/LoginError.php new file mode 100644 index 0000000..92fbac9 --- /dev/null +++ b/application/common/exception/LoginError.php @@ -0,0 +1,11 @@ +where('parent_folder',$folder_id)->value('id'); + } + return $folder_id; + } + + /** + * 获取有效的目录ID + * @param $folder_id + * @param $uid + * @return mixed + */ + public static function getFolderAllowPid($folder_id,$uid){ + if(empty($folder_id)){ + $folder_id = Folders::where('uid',$uid)->where('parent_folder',$folder_id)->value('id'); + }else{ + $folder_id = Folders::where('uid',$uid)->where('id',$folder_id)->value('id'); + } + + return $folder_id; + } + + /** + * 获取文件列表 + * @param $folder_id + * @param $search + * @param $uid + * @param $page + * @param $limit + * @return array|array[] + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\ModelNotFoundException + * @throws \think\exception\DbException + */ + public static function ListFile($folder_id,$search,$uid,$page,$limit): array + { + + //获取当前根目录 + $folder_id = self::getFolderPid($folder_id,$uid); + + + $maps = [ + ['uid','=',$uid], + ['parent_folder','=',$folder_id], + ['delete_time','null',''] + ]; + + + $files_sql = db('stores') + ->where($maps) + ->where('origin_name','like','%'.$search.'%') + ->field('id,uid,shares_id,origin_name as name,ext,size,count_down,count_open,update_time') + ->fetchSql(true) + ->select(); + + $list = db('folders') + ->where($maps) + ->where('folder_name','like','%'.$search.'%') + ->field('id,uid,shares_id,folder_name as name,ext,size,count_down,count_open,update_time') + ->union($files_sql,true) + ->page($page,$limit) + ->select(); + + $files_count = db('stores') + ->where($maps) + ->where('origin_name','like','%'.$search.'%') + ->field('id') + ->count(); + + $folder_count = db('folders') + ->where($maps) + ->where('folder_name','like','%'.$search.'%') + ->field('id') + ->count(); + + $data = ['data' => []]; + + foreach ($list as $item){ + + $file_item = [ + 'file_name' => '', + 'file_size' => '-', + 'url' => '', + 'url_pass' => '', + 'count_down' => ''.$item['count_down'].'', + 'count_open' => $item['count_open'], + 'update_time' => date('Y-m-d H:i',$item['update_time']) + ]; + + if($item['ext'] == 755){ + $file_item['file_name'] = ' + + '.$item['name'].' +
+ +
'; + $share_info = Shares::getShare($item['uid'],$item['id'],1); + }else{ + $file_item['file_name'] = ' + + '.$item['name'].' +
+ +
'; + $share_info = Shares::getShare($item['uid'],$item['id'],0); + $file_item['file_size'] = countSize($item['size']); + } + + $is_folder = $item['ext'] == 755 ? 1 : 0; + + if(!empty($share_info)){ + $share_url = getShareUrl($share_info['code']); + $file_item['url'] = ''.$share_url.''; + if(empty($share_info['pwd']) || $share_info['pwd_status'] == 0){ + $share_info['pwd'] = '-'; + } + $file_item['url_pass'] = ''.$share_info['pwd'].''; + } + + $data['data'][] = $file_item; + } + + //查询上级目录 + $data['parent'] = ""; + + if($folder_id != 0){ + $parent_ids = self::getUserDirParents($uid,$folder_id); + if(!empty($parent_ids)){ + $folder_parents = Folders::where('id','in',$parent_ids) + ->where('uid',$uid) + ->field('id,folder_name') + ->order('id desc') + ->select()->toArray(); + + $folder_parents = array_reverse($folder_parents); + $data['parent'] = $folder_parents; + } + } + + $data['total'] = $files_count + $folder_count; + + return $data; + } + + + public static function ShareListFile($folder_id,$uid){ + //获取当前根目录 + $folder_id = self::getFolderPid($folder_id,$uid); + + $maps = [ + ['uid','=',$uid], + ['parent_folder','=',$folder_id], + ['delete_time','null',''] + ]; + + $files_sql = db('stores') + ->where($maps) + ->field('id,uid,shares_id,origin_name as name,ext,size,update_time') + ->fetchSql(true) + ->select(); + + $list = db('folders') + ->where($maps) + ->field('id,uid,shares_id,folder_name as name,ext,size,update_time') + ->union($files_sql,true) + ->select(); + + + $share_ids = array_column($list,'shares_id'); + // 查询分享代码 + $share_list = Shares::where('id','in',$share_ids)->column('code','id'); + + // 返回数据 + $data = []; + + foreach ($list as $item){ + $type = $item['ext'] == 755 ? 'dir' : $item['ext']; + + $files = [ + 'id' => $item['id'], + 'type' => $item['ext'] == 755 ? 'dir' : 'file', + 'icon' => getFileIcon($type,'index'), + 'name' => $item['name'], + 'size' => empty($item['size']) ? '-' : countSize($item['size']), + 'time' => friendDate($item['update_time']) + ]; + + $code = $share_list[$item['shares_id']] ?? ''; + + if(empty($code)){ + $files['url'] = 'javascript:;'; + }else{ + $files['url'] = getShareUrl($code); + } + + $data[] = $files; + } + + return $data; + } + + + public static function FolderList($folder_id,$uid): array + { + //获取当前根目录 + $folder_id = self::getFolderPid($folder_id,$uid); + + $maps = [ + ['uid','=',$uid], + ['parent_folder','=',$folder_id], + ['delete_time','null',''] + ]; + + return Folders::withTrashed() + ->where($maps) + ->field('id,folder_name') + ->select()->each(function($item) use ($uid){ + if(Folders::withTrashed()->where('parent_folder',$item['id'])->where('uid',$uid)->count() > 0){ + $item['down'] = 1; + }else{ + $item['down'] = 0; + } + return $item; + })->toArray(); + } + + /** + * 回收站文件列表 + * @param $search + * @param $uid + * @param $page + * @param $limit + * @return array|array[] + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\ModelNotFoundException + * @throws \think\exception\DbException + */ + public static function RecycleFile($search,$uid,$page,$limit){ + + $file_sql = db('stores') + ->where('uid',$uid) + ->where('delete_time','not null') + ->where('origin_name','like','%'.$search.'%') + ->field('id,uid,shares_id,origin_name as name,ext,size,count_down,count_open,update_time') + ->fetchSql(true) + ->select(); + + $list = db('folders') + ->where('uid',$uid) + ->where('delete_time','not null') + ->where('folder_name','like','%'.$search.'%') + ->field('id,uid,shares_id,folder_name as name,ext,size,count_down,count_open,update_time') + ->union($file_sql,true) + ->page($page,$limit) + ->select(); + + $stores_count = db('stores') + ->where('uid',$uid) + ->where('delete_time','not null') + ->where('origin_name','like','%'.$search.'%') + ->field('id') + ->count(); + + $folders_count = db('folders') + ->where('uid',$uid) + ->where('delete_time','not null') + ->where('folder_name','like','%'.$search.'%') + ->field('id') + ->count(); + + $data = ['data' => []]; + + foreach ($list as $item){ + + $file_item = [ + 'file_name' => '', + 'file_size' => '-', + 'url' => '', + 'url_pass' => '', + 'count_down' => ''.$item['count_down'].'', + 'count_open' => $item['count_open'], + 'update_time' => date('Y-m-d H:i',$item['update_time']) + ]; + + if($item['ext'] == 755){ + $file_item['file_name'] = ' + + '.$item['name'].' +
+ +
'; + $share_info = Shares::getShare($item['uid'],$item['id'],1); + }else{ + $file_item['file_name'] = ' + + '.$item['name'].' +
+ +
'; + $share_info = Shares::getShare($item['uid'],$item['id'],0); + $file_item['file_size'] = countSize($item['size']); + } + + $is_folder = $item['ext'] == 755 ? 1 : 0; + + if(!empty($share_info)){ + $share_url = getShareUrl($share_info['code']); + $file_item['url'] = ''.$share_url.''; + if(empty($share_info['pwd']) || $share_info['pwd_status'] == 0){ + $share_info['pwd'] = '-'; + } + $file_item['url_pass'] = ''.$share_info['pwd'].''; + } + + $data['data'][] = $file_item; + } + + //查询上级目录 + $data['parent'] = ""; + + $data['total'] = $stores_count + $folders_count; + + return $data; + + } + + /** + * 创建目录 + * @throws Exception + */ + public static function createFolder($folder_pid, $folder_name, $folder_desc, $uid){ + + $folder_name = str_replace(" ","",$folder_name); + $folder_name = str_replace("/","",$folder_name); + + //获取当前根目录 + $folder_pid = self::getFolderPid($folder_pid,$uid); + + if(empty($folder_name)){ + throw new Exception('目录名不能为空'); + } + + + // 判断路径 + if(Folders::where('id',$folder_pid)->where('uid',$uid)->find() == null){ + throw new Exception('文件夹路径不存在'); + } + + // 是否重复 + if( + Folders::where('parent_folder',$folder_pid) + ->where('folder_name',$folder_name) + ->where('uid',$uid)->find() != null + ){ + throw new Exception('文件夹已存在'); + } + + $dir_id = (new Folders)->insertGetId([ + 'uid' => $uid, + 'folder_name' => $folder_name, + 'parent_folder' => $folder_pid, + 'desc' => $folder_desc, + 'create_time' => time(), + 'update_time' => time() + ]); + + $share_id = Shares::addShare($uid,$dir_id,1); + + (new Folders)->where('id',$dir_id)->update(['shares_id' => $share_id]); + + return $dir_id; + } + + /** + * 获取用户上级目录列表 + * @param $uid + * @param $folder_id + * @return array + */ + protected static function getUserDirParents($uid,$folder_id): array + { + $folders = self::getUserDirs($uid); + return self::getDirParents($folders,$folder_id); + } + + /** + * 递归获取上级目录 + * @param $folders + * @param $folder_id + * @return array + */ + protected static function getDirParents($folders,$folder_id): array + { + $ids = []; + foreach ($folders as $item){ + if($item['id'] == $folder_id){ + if($item['pid']){ + $ids[] = $item['id']; + $ids = array_merge(self::getDirParents($folders,$item['pid']),$ids); + } + } + } + return $ids; + } + + /** + * 获取用户目录 + * @param $uid + * @return array + */ + protected static function getUserDirs($uid): array + { + return Folders::where('uid',$uid)->field('id,parent_folder as pid')->select()->toArray(); + } + +} \ No newline at end of file diff --git a/application/common/model/FileUpload.php b/application/common/model/FileUpload.php new file mode 100644 index 0000000..76492ac --- /dev/null +++ b/application/common/model/FileUpload.php @@ -0,0 +1,238 @@ +uid = $uid; + $this->policy = $policy; + $this->max_size = $max_size; + return $this; + } + + /** + * 检查文件信息 + * @throws Exception + */ + protected function check(){ + + if(empty($this->info['file']['folder'])){ + throw new Exception('上传目标文件夹不存在'); + } + + if(empty($this->info['file']['data'])){ + throw new Exception('请选择上传的文件'); + } + + if(empty($this->info['file']['size'])){ + throw new Exception('文件大小异常'); + } + + if(empty($this->info['file']['name'])){ + throw new Exception('上传文件名异常'); + } + + if($this->policy['type'] == 'remote'){ + throw new Exception('您不可以使用该存储策略'); + } + + if(!empty($this->max_size)){ + if($this->info['file']['size'] > $this->max_size){ + throw new Exception('单文件最大上传大小'.countSize($this->max_size)); + } + } + + if(!empty($this->policy['filetype'])){ + $file_ext = $this->getFileExt($this->info['file']['name']); + $allow_ext = explode(',',$this->policy['filetype']); + if(!in_array($file_ext,$allow_ext)){ + throw new Exception('不允许上传'.$file_ext.'类型的文件'); + } + } + + if(empty($this->info['chunk']['key'])){ + throw new Exception('分片密钥错误'); + } + + } + + /** + * 获取文件后缀名 + * @param $filename + * @return string + */ + protected function getFileExt($filename): string + { + return strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + } + + /** + * 获取随机文件名 + * @param int $length + * @return string + */ + protected function getRandomKey(int $length = 16): string + { + $charTable = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + $result = ""; + for ( $i = 0; $i < $length; $i++ ){ + $result .= $charTable[ mt_rand(0, strlen($charTable) - 1) ]; + } + return $result; + } + + /** + * 获取上传目录 + * @param $key + * @return string|string[] + */ + protected function getPath($key) + { + // 目录分割 + $ds = DIRECTORY_SEPARATOR; + + // 配置目录 + $save_dir = str_replace('/',$ds,$this->policy['config']['save_dir']); + + // 根目录 + $root_path = realpath(env('root_path') . './public') . $save_dir; + + // 临时存储目录 + $temp_path = realpath(env('root_path') . './public') . str_replace('/',$ds,'/temp/'); + + // 当前保存目录 + $file_path = date('Ymd') . $ds . $this->uid . $ds; + + //文件名 + $file_name = uniqid( "file_") . time(); + + $data = [ + 'root' => $root_path, + 'temp' => $temp_path, + 'file' => $file_path, + 'path' => $root_path . $file_path, + 'temp_path' => $temp_path . $file_path, + 'name' => $file_name, + 'filename' => $file_name .'.'. $this->getFileExt($this->info['file']['name']) + ]; + + if($key == 'all'){ + return $data; + } + + return $data[$key] ?? ''; + } + + + public function upload(){ + // 超时时间5分钟 + @set_time_limit(5 * 60); + + // 获取有效的目录ID + $this->info['file']['folder'] = FileManage::getFolderAllowPid(input('post.folder_id',0),$this->uid); + + // 获取上传文件大小 + $this->info['file']['size'] = input('post.size',0); + + // 获取上传文件名 + $this->info['file']['name'] = input('post.name',''); + + // 上传文件对象获取 + $this->info['file']['data'] = request()->file('file'); + + // 分片上传 + $this->info['chunk']['key'] = input('post.chunks_key'); + $this->info['chunk']['chunk'] = input('post.chunk',0); + $this->info['chunk']['chunks'] = input('post.chunks',0); + + $this->info['uid'] = $this->uid; + + // 参数校验 + $this->check(); + + // 目录 + $path = $this->getPath('all'); + + // 上传驱动 + switch ($this->policy['type']){ + // 阿里云 + case 'aliyunoss': + $upload = new AliyunOss($this->info,$this->policy,$path); + break; + // 腾讯云 + case 'txyunoss': + $upload = new TxyunOss($this->info,$this->policy,$path); + break; + // 本地 + default: + $upload = new Local($this->info,$this->policy,$path); + break; + } + + // 上传文件 + $file_object = $upload->upload(); + + // 插入数据库 + if($file_object != 'chunk_file' && $file_object != null){ + // 加入数据库 + $data = [ + 'uid' => $this->uid, + 'origin_name' => $this->info['file']['name'], + 'file_name' => $file_object, + 'size' => $this->info['file']['size'], + 'ext' => $this->getFileExt($this->info['file']['name']), + 'parent_folder' => $this->info['file']['folder'], + 'policy_id' => $this->policy['id'], + 'create_time' => time(), + 'update_time' => time() + ]; + + $file_id = (new Stores)->insertGetId($data); + + $share_id = Shares::addShare($this->uid,$file_id,0); + + Stores::where('id',$file_id)->update(['shares_id' => $share_id]); + + return ['code' => 1,'msg' => '文件上传成功']; + } + + return ['code' => 1,'chunks' => 'chunk 文件上传成功']; + } + +} \ No newline at end of file diff --git a/application/common/model/Folders.php b/application/common/model/Folders.php new file mode 100644 index 0000000..c41ed20 --- /dev/null +++ b/application/common/model/Folders.php @@ -0,0 +1,18 @@ +update($data); + } + +} \ No newline at end of file diff --git a/application/common/model/Order.php b/application/common/model/Order.php new file mode 100644 index 0000000..817b548 --- /dev/null +++ b/application/common/model/Order.php @@ -0,0 +1,12 @@ + $item){ + if(!in_array($key,$keys)){ + $field[$key] = $item; + unset($data[$key]); + } + } + + $data['config'] = json_encode($field); + + self::insert($data); + } + + public function editPolicy($id,$data){ + //基础参数 + $keys = ['name','type','filetype']; + // 附加参数 + $field = []; + foreach ($data as $key => $item){ + if(!in_array($key,$keys)){ + $field[$key] = $item; + unset($data[$key]); + } + } + $data['config'] = json_encode($field); + self::where('id',$id)->update($data); + } + + public function getConfigAttr($value){ + return json_decode($value,true); + } + + public static function getPolicyAll(): array + { + return self::field('id,name')->select()->toArray(); + } + +} \ No newline at end of file diff --git a/application/common/model/Profit.php b/application/common/model/Profit.php new file mode 100644 index 0000000..1f43335 --- /dev/null +++ b/application/common/model/Profit.php @@ -0,0 +1,60 @@ +where('file_id',$file_id)->whereTime('create_time','d')->find(); + + // 补全字段 + $field = 'count_'.$field; + + if($field == 'count_view'){ + Stores::where('id',$file_id)->where('uid',$uid)->setInc('count_open',1); + } + + if($field == 'count_down'){ + Stores::where('id',$file_id)->where('uid',$uid)->setInc('count_down',1); + } + + + if(!empty($rec)){ + + self::where('uid',$uid)->where('file_id',$file_id)->setInc($field,$value); + + flock($fp,LOCK_UN); + return true; + } + + // 插入新统计 + $data = [ + 'uid' => $uid, + 'file_id' => $file_id, + 'create_time' => time(), + $field => $value + ]; + + // 插入统计 + self::insert($data); + + flock($fp,LOCK_UN); + return true; + } else{ + fclose($fp); + return false; + } + } + + +} \ No newline at end of file diff --git a/application/common/model/Record.php b/application/common/model/Record.php new file mode 100644 index 0000000..b1d2ec8 --- /dev/null +++ b/application/common/model/Record.php @@ -0,0 +1,44 @@ +find(); + + // 操作前金额 + $before_money = $user['amount']; + // 操作 + if($type){ + $after_money = floatval($user['amount']) - floatval($money); + }else{ + $after_money = floatval($user['amount']) + floatval($money); + } + + if($after_money < 0){ + return false; + } + + if($type){ + Users::where('id',$uid)->setDec('amount',$money); + }else{ + Users::where('id',$uid)->setInc('amount',$money); + } + + return self::create([ + 'uid' => $uid, + 'type' => $type, + 'source' => $source, + 'money' => $money, + 'before_money' => $before_money, + 'after_money' => $after_money, + 'remark' => $remark, + 'create_time' => time() + ]); + } + +} \ No newline at end of file diff --git a/application/common/model/Reports.php b/application/common/model/Reports.php new file mode 100644 index 0000000..1ec3434 --- /dev/null +++ b/application/common/model/Reports.php @@ -0,0 +1,13 @@ +count() == 0){ + $share_code = $code; + break; + } + } + + if(empty($share_code)){ + throw new Exception('分享连接生成失败,请稍后重试'); + } + + $pwd = getRndSharePwd(); + + $data = [ + 'uid' => $uid, + 'source_id' => $source, + 'type' => $type, + 'speed' => 0, + 'code' => $code, + 'pwd' => $pwd, + 'pwd_status' => 0 + ]; + + return self::insertGetId($data); + } + + public static function getShare($uid,$source,$type){ + return self::where([ + ['uid','=',$uid], + ['source_id','=',$source], + ['type','=',$type] + ])->field('id,code,pwd,pwd_status,speed')->find(); + } + + public function delShare(){ + + } + + public static function updateShare($id,$data){ + return self::where('id',$id)->update($data); + } + +} \ No newline at end of file diff --git a/application/common/model/Stores.php b/application/common/model/Stores.php new file mode 100644 index 0000000..ad347b2 --- /dev/null +++ b/application/common/model/Stores.php @@ -0,0 +1,34 @@ +policy_id); + if(empty($policy)){ + return false; + } + return $policy; + } + + public function getLocalSaveFilePath($save_dir,$filename): string + { + return env('root_path').'public'.getSafeDirSeparator($save_dir . $filename); + } + + public function getLocalSaveFile($save_dir,$filename){ + return str_replace(['/','\\','//','\\\\'],'/',($save_dir.$filename)); + } + +} \ No newline at end of file diff --git a/application/common/model/Users.php b/application/common/model/Users.php new file mode 100644 index 0000000..e672c0e --- /dev/null +++ b/application/common/model/Users.php @@ -0,0 +1,167 @@ +count() > 0){ + throw new Exception('当前帐号已被注册'); + } + + if(self::where('email',$email)->count() > 0){ + throw new Exception('当前安全邮箱已被绑定'); + } + + $en_password = md5($password . config('app.pass_salt')); + + $nickname = ucfirst($username); + + if(isset($other['nickname'])){ + $nickname = $other['nickname']; + } + + $user = [ + 'nickname' => $nickname, + 'username' => $username, + 'email' => $email, + 'group' => $group, + 'password' => $en_password, + 'create_time' => time(), + 'group_expire' => $group_expire, + 'status' => 1 + ]; + + self::insert($user); + + $user_id = self::getLastInsID(); + + //添加基础目录 + if($group != 1){ + Folders::insert([ + 'uid' => $user_id, + 'folder_name' => '根目录', + 'parent_folder' => 0, + 'create_time' => time() + ]); + } + + } + + + /** + * 用户登录登录方法 + * @param $username + * @param $password + * @param string $login_type + * @return bool + * @throws LoginError + */ + public function login($username,$password,$login_type = 'default'){ + // 登录用户组类型 + if($login_type == 'admin'){ + $group = 1; + }else{ + $group = config('register.default_group') .','.config('vip.vip_group'); + } + // 查找用户 + $user = self::where('username',$username)->where('group','in',$group)->find(); + // 用户不存在 + if(empty($user)){ + throw new LoginError('登录帐号或者密码错误,请重试'); + } + // 加密密码 + $password = md5($password . config('app.pass_salt')); + + if($user['password'] != $password){ + throw new LoginError('登录帐号或者密码错误,请重试'); + } + + // 不允许登录 + if($login_type == 'default' && $user['status'] == 0){ + throw new LoginError('登录帐号已被管理员封禁,请联系管理员处理!'); + } + + // 登录成功 + Session::set($login_type .'_uid',$user['id']); + Session::set($login_type .'_lkey',md5($username . $password . $user['status'])); + + return true; + } + + + /** + * 退出登录方法 + * @param string $type + */ + public function logout(string $type = 'default'){ + Session::delete($type .'_uid'); + Session::delete($type .'_lkey'); + } + + + /** + *登录验证方法 + * @param string $type + * @return bool + */ + public function login_auth(string $type = 'default'): bool + { + $uid = Session::get($type .'_uid'); + $key = Session::get($type .'_lkey'); + + $user = self::where('id',$uid)->find(); + + if(empty($user)){ + return false; + } + + if($key != md5($user['username'] . $user['password'] . $user['status'])){ + return false; + } + + return true; + } + + + /** + * 获取当前登录用户信息 + * @param string $type + * @return Users|false + */ + public function login_info(string $type = 'default'){ + $uid = Session::get($type .'_uid'); + + $user = self::where('id',$uid)->find(); + + if(empty($user)){ + return false; + } + + return $user; + } + + + public function getCertify(){ + return Certify::where('uid',$this->id) + ->where('status',1) + ->field('name,idcard,create_time') + ->find(); + } +} \ No newline at end of file diff --git a/application/common/model/Withdraw.php b/application/common/model/Withdraw.php new file mode 100644 index 0000000..337a1c7 --- /dev/null +++ b/application/common/model/Withdraw.php @@ -0,0 +1,12 @@ +path['temp_path'] . $this->path['filename']; + + // 保存临时文件 + $file_info = $this->info['file']['data']->move($this->path['temp_path'],$this->path['filename']); + + if(!$file_info){ + throw new Exception($this->info['file']['data']->getError()); + } + + $accessKeyId = $this->policy['config']['access_key']; + $accessKeySecret = $this->policy['config']['access_secret']; + $endpoint = $this->policy['config']['endpoint']; + $bucket = $this->policy['config']['bucket']; + + $policy_save_dir = ltrim($this->policy['config']['save_dir'],'/'); + + $object = getDiyDirSeparator('/',$policy_save_dir. $this->path['file'].$this->path['filename']); + + try{ + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); + + $ossClient->uploadFile($bucket,$object,$temp_file); + + // 删除临时文件 + @unlink($temp_file); + + // 返回文件存储地址 + return '/'. $object; + + } catch(OssException $e) { + throw new Exception('FAILED:'.$e->getMessage()); + } + } + + public function uploadPart() + { + + // 临时文件地址 + $temp_file = $this->path['temp_path'] . $this->path['filename']; + + // 保存临时文件 + $file_info = $this->info['file']['data']->move($this->path['temp_path'],$this->path['filename']); + + if(!$file_info){ + throw new Exception($this->info['file']['data']->getError()); + } + + $accessKeyId = $this->policy['config']['access_key']; + $accessKeySecret = $this->policy['config']['access_secret']; + $endpoint = $this->policy['config']['endpoint']; + $bucket = $this->policy['config']['bucket']; + + $policy_save_dir = ltrim($this->policy['config']['save_dir'],'/'); + + // 缓存分片上传地址 + $chunks_object_keys = 'aliyun_oss_chunks_'.$this->info['chunk']['key']; + $multi_upload_object = Cache::get($chunks_object_keys); + + + try { + $client = new OssClient($accessKeyId,$accessKeySecret,$endpoint); + + // 缓存防止重复文件地址 + if(empty($multi_upload_object)){ + $upload_object_path = getDiyDirSeparator('/',$policy_save_dir. $this->path['file'].$this->path['filename']); + + $uploadId = $client->initiateMultipartUpload($bucket,$upload_object_path); + + $multi_upload_object = [ + 'object' => $upload_object_path, + 'upload_id' => $uploadId + ]; + + Cache::set($chunks_object_keys,$multi_upload_object); + } + + // 分片上传配置 + $options = [ + // 上传文件地址 + OssClient::OSS_FILE_UPLOAD => $temp_file, + // 分片号 + OssClient::OSS_PART_NUM => $this->info['chunk']['chunk'] + 1, + ]; + + $client->uploadPart($bucket, $multi_upload_object['object'], $multi_upload_object['upload_id'], $options); + + // 组合文件 + if(($this->info['chunk']['chunk'] + 1) == $this->info['chunk']['chunks']){ + + // 获取所有分片信息 + $listPartsInfo = $client->listParts($bucket, $multi_upload_object['object'], $multi_upload_object['upload_id']); + + $uploadParts = []; + + foreach ($listPartsInfo->getListPart() as $partInfo) { + + $uploadParts[] = [ + 'PartNumber' => $partInfo->getPartNumber(), + 'ETag' => $partInfo->getETag() + ]; + + } + + // 合并分片 + $client->completeMultipartUpload($bucket, $multi_upload_object['object'], $multi_upload_object['upload_id'], $uploadParts); + + // 删除分片缓存信息 + Cache::rm($chunks_object_keys); + // 删除临时文件 + @unlink($temp_file); + + // 返回结果 + return '/' . $multi_upload_object['object']; + } + + // 删除临时文件 + @unlink($temp_file); + + return 'chunk_file'; + + }catch (OssException $e){ + throw new Exception('FAILED:'.$e->getMessage()); + } + } + + public function download($stores, $speed, $policy) + { + + $accessKeyId = $policy['config']['access_key']; + $accessKeySecret = $policy['config']['access_secret']; + $endpoint = $policy['config']['endpoint']; + $bucket = $policy['config']['bucket']; + + $object = ltrim($stores['file_name'],'/'); + + // 限速下载 + if($speed !== ""){ + // 下载速度 + $down_speed = round(intval($speed) * 8192); + + // 最小限速100kb/s + if($down_speed < 819200){ + $down_speed = 819200; + } + + $options = [ + OssClient::OSS_TRAFFIC_LIMIT => $down_speed + ]; + } + + try { + + $ossClient = new OssClient($accessKeyId,$accessKeySecret,$endpoint); + + $options['response-content-disposition'] = 'attachment; filename='.$stores['origin_name']; + + // 120s有效期 + $timeout = 120; + $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options); + + // 跳转下载地址 + return redirect($signedUrl); + + }catch (OssException $e){ + throw new Exception($e->getMessage()); + } + + } + +} \ No newline at end of file diff --git a/application/common/model/driver/Local.php b/application/common/model/driver/Local.php new file mode 100644 index 0000000..f9a4f6e --- /dev/null +++ b/application/common/model/driver/Local.php @@ -0,0 +1,125 @@ +info['file']['data']->move($this->path['path'],$this->path['name']); + + if(!$file_info){ + throw new Exception($this->info['file']['data']->getError()); + } + + $policy_save_dir = $this->policy['config']['save_dir']; + + return getDiyDirSeparator('/',$policy_save_dir. $this->path['file'].$this->path['filename']); + } + + public function uploadPart() + { + // 分片数据存储名称 + $chunks_saveKey = 'chunks_'.$this->info['uid'].'_'.$this->info['chunk']['key']; + + // 文件名称 + $temp_filename = 'chunks_'.md5($this->info['chunk']['key']).'_'.$this->getRandomKey(4) . '_part_'.$this->info['chunk']['chunk'].'.chunk'; + // 临时文件地址 + $temp_file = $this->path['temp_path'] . $temp_filename; + + // 保存临时文件 + $file_info = $this->info['file']['data']->move($this->path['temp_path'],$temp_filename); + + if(!$file_info){ + throw new Exception('分片创建错误:'.$this->info['file']['data']->getError()); + } + + // 分片存储列表 + $chunk_list = Cache::get($chunks_saveKey) ?? []; + + // 加入分片文件 + $chunk_list[] = $temp_file; + + // 保存分片临时存储列表 + Cache::set($chunks_saveKey,$chunk_list); + + // 分片上传成功 + if($this->info['chunk']['chunk'] == ($this->info['chunk']['chunks'] - 1)){ + + $save_file = $this->path['path'] . $this->path['filename']; + + // 融合文件路径 + $fileObj = fopen($save_file,"a+"); + + // 融合文件 + foreach ($chunk_list as $value) { + $chunkObj = fopen($value, "rb"); + + if(!($fileObj && $chunkObj)){ + throw new Exception('分片融合文件创建失败'); + } + + $content = fread($chunkObj, (2 * 1024 * 1024)); + fwrite($fileObj, $content, (2 * 1024 * 1024)); + unset($content); + fclose($chunkObj); + // 删除分片文件 + unlink($value); + } + + // 清空分片临时存储列表 + Cache::rm($chunks_saveKey); + + $policy_save_dir = $this->policy['config']['save_dir']; + + return getDiyDirSeparator('/',$policy_save_dir. $this->path['file'] . $this->path['filename']); + } + + return 'chunk_file'; + + } + + protected function getRandomKey($length = 16){ + $charTable = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + $result = ""; + for ( $i = 0; $i < $length; $i++ ){ + $result .= $charTable[ mt_rand(0, strlen($charTable) - 1) ]; + } + return $result; + } + + public function download($stores,$speed,$policy) + { + //存储文件地址 + $_file = getSafeDirSeparator(env('root_path').'public'.$stores['file_name']); + + // 文件不存在 + if(!is_file($_file)){ + throw new Exception('文件不存在,可能已被删除'); + } + + $_file_path = $stores['file_name']; + + $_file_limit_size = round(intval($speed) * 1024); + + // 启用 nginx X-Accel 下载 + header('Content-Type: application/octet-stream'); + $encoded_fname = rawurlencode($stores['origin_name']); + header('Content-Disposition: attachment;filename="'.$encoded_fname.'";filename*=utf-8'."''".$encoded_fname); + + header('X-Accel-Redirect: '. $_file_path); + header('X-Accel-Buffering: yes'); + + // 不限速下载 + if($speed !== ""){ + header('X-Accel-Limit-Rate:'.$_file_limit_size); + } + + } + +} \ No newline at end of file diff --git a/application/common/model/driver/PolicyStore.php b/application/common/model/driver/PolicyStore.php new file mode 100644 index 0000000..ef94a10 --- /dev/null +++ b/application/common/model/driver/PolicyStore.php @@ -0,0 +1,46 @@ +info = $info; + $this->policy = $policy; + $this->path = $path; + } + + public function upload() + { + if(!empty($this->info['chunk']['chunks'])){ + return $this->uploadPart(); + }else{ + return $this->uploadSimple(); + } + } + + public function uploadSimple() + { + return 0; + } + + public function uploadPart() + { + return 0; + } + + public function download($stores,$speed,$policy) + { + return 0; + } + +} \ No newline at end of file diff --git a/application/common/model/driver/TxyunOss.php b/application/common/model/driver/TxyunOss.php new file mode 100644 index 0000000..19d2bca --- /dev/null +++ b/application/common/model/driver/TxyunOss.php @@ -0,0 +1,210 @@ +policy['config']['secret_id']; + $secretKey = $this->policy['config']['secret_key']; + $region = $this->policy['config']['region']; + $bucket = $this->policy['config']['bucket']; + + // 文件路径 + $file_path = $this->info['file']['data']->getInfo('tmp_name'); + $file = fopen($file_path, 'rb'); + + // 存储路径 + $policy_save_dir = ltrim($this->policy['config']['save_dir'],'/'); + $object = getDiyDirSeparator('/',$policy_save_dir. $this->path['file'].$this->path['filename']); + + try { + // COS对象 + $client = new Client([ + 'region' => $region, + 'schema' => 'http', + 'credentials' => [ + 'secretId' => $secretId, + 'secretKey' => $secretKey + ] + ]); + + if ($file) { + // 上传文件 + $client->putObject([ + 'Bucket' => $bucket, + 'Key' => $object, + 'Body' => $file + ]); + + // 返回文件存储地址 + return '/'. $object; + }else{ + throw new Exception('上传文件路径错误'); + } + + }catch (ServiceResponseException $e){ + throw new Exception($e->getMessage()); + }catch (\Exception $e) { + throw new Exception($e->getMessage()); + } + } + + public function uploadPart() + { + + // 配置信息 + $secretId = $this->policy['config']['secret_id']; + $secretKey = $this->policy['config']['secret_key']; + $region = $this->policy['config']['region']; + $bucket = $this->policy['config']['bucket']; + + // 分片数据存储名称 + $chunks_saveKey = 'txyunoss_chunks_'.$this->info['uid'].'_'.$this->info['chunk']['key']; + + // 文件名称 + $temp_filename = 'chunks_'.md5($this->info['chunk']['key']).'_'.$this->getRandomKey(4) . '_part_'.$this->info['chunk']['chunk'].'.chunk'; + // 临时文件地址 + $temp_file = $this->path['temp_path'] . $temp_filename; + + // 保存临时文件 + $file_info = $this->info['file']['data']->move($this->path['temp_path'],$temp_filename); + + if(!$file_info){ + throw new Exception('分片创建错误:'.$this->info['file']['data']->getError()); + } + + // 分片存储列表 + $chunk_list = Cache::get($chunks_saveKey) ?? []; + + // 加入分片文件 + $chunk_list[] = $temp_file; + + // 保存分片临时存储列表 + Cache::set($chunks_saveKey,$chunk_list); + + // 分片上传成功 + if($this->info['chunk']['chunk'] == ($this->info['chunk']['chunks'] - 1)){ + + // COS对象 + $client = new Client([ + 'region' => $region, + 'schema' => 'http', + 'credentials' => [ + 'secretId' => $secretId, + 'secretKey' => $secretKey + ] + ]); + + $save_file = $this->path['temp_path'] . 'cos_cob_'.substr(md5($this->info['chunk']['key']),0,8).'_t_'.time().'.bak'; + + // 融合文件路径 + $fileObj = fopen($save_file,"a+"); + + // 融合文件 + foreach ($chunk_list as $value) { + $chunkObj = fopen($value, "rb"); + + if(!($fileObj && $chunkObj)){ + throw new Exception('分片融合文件创建失败'); + } + + $content = fread($chunkObj, (2 * 1024 * 1024)); + fwrite($fileObj, $content, (2 * 1024 * 1024)); + unset($content); + fclose($chunkObj); + // 删除分片文件 + unlink($value); + } + + // 清空分片临时存储列表 + Cache::rm($chunks_saveKey); + + try { + $policy_save_dir = $this->policy['config']['save_dir']; + $upload_object_path = getDiyDirSeparator('/',$policy_save_dir. $this->path['file'].$this->path['filename']); + + if ($fileObj) { + // 上传文件 + $client->Upload($bucket,$upload_object_path,$fileObj); + + // 删除临时组合文件 + @unlink($save_file); + + return $upload_object_path; + }else{ + throw new Exception('上传文件路径错误'); + } + + }catch (ServiceResponseException $e){ + throw new Exception($e->getMessage()); + }catch (\Exception $e) { + throw new Exception($e->getMessage()); + } + } + + return 'chunk_file'; + } + + protected function getRandomKey($length = 16){ + $charTable = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + $result = ""; + for ( $i = 0; $i < $length; $i++ ){ + $result .= $charTable[ mt_rand(0, strlen($charTable) - 1) ]; + } + return $result; + } + + public function download($stores, $speed, $policy) + { + + $secretId = $policy['config']['secret_id']; + $secretKey = $policy['config']['secret_key']; + $region = $policy['config']['region']; + $bucket = $policy['config']['bucket']; + + $object = ltrim($stores['file_name'],'/'); + + // COS对象 + $client = new Client([ + 'region' => $region, + 'schema' => 'http', + 'credentials' => [ + 'secretId' => $secretId, + 'secretKey' => $secretKey + ] + ]); + + $disposition = 'attachment; filename='.$stores['origin_name']; + + $url = $client->getPresignedUrl('GetObject',[ + 'Bucket' => $bucket, + 'Key' => $object + ],'+10 minutes')->__toString(); + + $url .= 'response-content-disposition='.urlencode($disposition).'&'; + + // 限速下载 + if($speed !== ""){ + // 下载速度 + $down_speed = round(intval($speed) * 8192); + + // 最小限速100kb/s + if($down_speed < 819200){ + $down_speed = 819200; + } + + $url .= 'x-cos-traffic-limit='.$down_speed; + } + + // 跳转下载地址 + return redirect($url); + } +} \ No newline at end of file diff --git a/application/http/middleware/AdminLoginCheck.php b/application/http/middleware/AdminLoginCheck.php new file mode 100644 index 0000000..633d19d --- /dev/null +++ b/application/http/middleware/AdminLoginCheck.php @@ -0,0 +1,27 @@ +controller() . '/' . $request->action(); + + if(!in_array($request_uri,$this->except) && !(new Users)->login_auth('admin')){ + return redirect('auth/login'); + } + + return $next($request); + } + + +} \ No newline at end of file diff --git a/application/http/middleware/UserLoginCheck.php b/application/http/middleware/UserLoginCheck.php new file mode 100644 index 0000000..a261afb --- /dev/null +++ b/application/http/middleware/UserLoginCheck.php @@ -0,0 +1,37 @@ +controller() . '/' . $request->action(); + + if(!in_array($request_uri,$this->except) && !(new Users)->login_auth('default')){ + (new Users)->logout('default'); + return redirect('user/login'); + } + + return $next($request); + } + +} \ No newline at end of file diff --git a/application/index/controller/File.php b/application/index/controller/File.php new file mode 100644 index 0000000..fd03cc3 --- /dev/null +++ b/application/index/controller/File.php @@ -0,0 +1,349 @@ +userInfo['id'],$page,$limit); + + return json($file_list); + } + + public function mkdir(){ + + $data = input('post.'); + $result = $this->validate($data,[ + 'folder_id' => 'require|number', + 'folder_name' => 'require|chsDash|max:255', + 'folder_miaoshu' => 'max:255' + ],[ + 'folder_name.chsDash' => '文件名只能是汉字、字母、数字和下划线_及破折号-' + ]); + + if($result !== true) return json(['status' => 0,'msg' => $result]); + + try { + $dir_id = FileManage::createFolder($data['folder_id'],$data['folder_name'],$data['folder_miaoshu'],$this->userInfo['id']); + + return json(['status' => 1,'msg' => '新建文件夹成功~','data' => $dir_id]); + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + public function rename(){ + $id = input('get.id'); + $file_name = input('get.file_name'); + $is_folder = input('get.is_folder'); + + $is_folder = intval($is_folder); + + try { + if($is_folder){ + $result = $this->validate(['file_name' => $file_name],[ + 'file_name' => 'require|chsDash|max:255', + ],[ + 'file_name.chsDash' => '文件(夹)名只能是汉字、字母、数字和下划线_及破折号-' + ]); + + $info = Folders::where('id',$id)->where('uid',$this->userInfo['id'])->find(); + if(empty($info)){ + throw new Exception('文件数据不存在'); + } + $info['folder_name'] = $file_name; + $info->save(); + }else{ + $result = $this->validate(['file_name' => $file_name],['file_name' => 'require|max:255',]); + + $info = Stores::where('id',$id)->where('uid',$this->userInfo['id'])->find(); + if(empty($info)){ + throw new Exception('文件数据不存在'); + } + $info['origin_name'] = $file_name; + $info->save(); + } + + if($result !== true){ + throw new Exception($result); + } + + return json(['status' => 1,'msg' => '重命名成功']); + + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + public function delete(){ + $id = input('get.id'); + $is_folder = input('get.is_folder'); + $uid = $this->userInfo['id']; + + if(empty($id)){ + return json(['status' => 0,'msg' => '删除错误,参数缺失']); + } + + //删除目录 + if(boolval($is_folder)){ + + $pid = Folders::where('id',$id)->value('parent_folder'); + + if($pid == 0){ + return json(['status' => 0,'msg' => '删除失败,您不能删除根目录']); + } + + $child_object = getFolderChildFiles($uid,$pid); + + if(!empty($child_object['file'])){ + Stores::destroy($child_object['file']); + } + + if(!empty($child_object['folder'])){ + Folders::destroy($child_object['folder']); + } + + }else{ + Stores::destroy(function($query) use($id,$uid){ + $query->where('id','=',$id)->where('uid','=',$uid); + }); + } + + return json(['status' => 1,'msg' => '删除成功']); + } + + public function edit_folder(){ + $id = input('get.id'); + $info = Folders::get($id); + + if(empty($info)){ + $this->error('数据不存在'); + } + + if($this->request->isPost()){ + $folder_name = input('post.folder_name'); + $folder_miaoshu = input('post.folder_miaoshu'); + $shouyi = input('post.shouyi'); + + Folders::where('id',$id)->update([ + 'folder_name' => $folder_name, + 'desc' => $folder_miaoshu, + 'size' => $shouyi + ]); + + return json(['status' => 1,'msg' => '修改文件夹信息成功']); + } + + $this->assign('info',$info); + return $this->fetch(); + } + + public function edit_file(){ + $id = input('get.id'); + $info = Stores::get($id); + + if(empty($info)){ + $this->error('数据不存在'); + } + + if($this->request->isPost()){ + $file_name = input('post.file_name'); + $file_miaoshu = input('post.file_miaoshu'); + + Stores::where('id',$id)->update([ + 'origin_name' => $file_name, + 'desc' => $file_miaoshu + ]); + + return json(['status' => 1,'msg' => '修改文件信息成功']); + } + + $this->assign('info',$info); + return $this->fetch(); + } + + public function delete_all(){ + $ids = input('get.ids'); + $idFs = input('get.idFs'); + + $uid = $this->userInfo['id']; + $success_ids = []; + + if(empty($ids) && empty($idFs)){ + return json(['status' => 0,'msg' => '请选择需要删除的文件(夹)~']); + } + + if(!empty($ids)){ + $ids_list = explode(',',$ids); + try { + foreach ($ids_list as $file){ + //删除 + Stores::destroy(function($query) use($file,$uid){ + $query->where('id','=',$file)->where('uid','=',$uid); + }); + $success_ids[] = $file; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + if(!empty($idFs)){ + $idFs_list = explode(',',$idFs); + try { + foreach ($idFs_list as $dir){ + $pid = Folders::where('id',$dir)->value('parent_folder'); + if($pid == 0){ + return json(['status' => 0,'msg' => '删除失败,目录操作异常']); + } + + //删除 + $child_object = getFolderChildFiles($uid,$pid); + + if(!empty($child_object['file'])){ + Stores::destroy($child_object['file']); + } + + if(!empty($child_object['folder'])){ + Folders::destroy($child_object['folder']); + } + + $success_ids[] = $dir; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + return json(['status' => 1,'msg' => '成功删除 '.count($success_ids).' 个文件(夹)~','data' => $success_ids]); + } + + public function move_files(){ + $ids = input('get.ids'); + $idFs = input('get.idFs'); + + $this->assign('ids',$ids); + $this->assign('idFs',$idFs); + return $this->fetch(); + } + + public function folder_list(){ + $folder_id = input('post.folder_id',0); + $folder = FileManage::FolderList($folder_id,$this->userInfo['id']); + return json(['status' => 1,'msg' => 'ok','data' => $folder]); + } + + public function move_to_file(){ + $folder_id = input('post.folder_id',0); + $ids = input('post.ids'); + $idFs = input('post.idFs'); + + $uid = $this->userInfo['id']; + + if(empty($ids) && empty($idFs)){ + return json(['status' => 0,'msg' => '请选择需要移动的文件或者文件夹']); + } + + $folder_id = FileManage::getFolderPid($folder_id,$uid); + + $root_folder = FileManage::getFolderPid(0,$uid); + + $ids_list = array_filter(explode(',',trim($ids))); + $idFs_list = array_filter(explode(',',trim($idFs))); + + $success = []; + + //移动目录 + if(!empty($idFs_list)){ + foreach ($idFs_list as $dir){ + if($dir != $root_folder && $dir != $folder_id && !empty($dir)){ + Folders::where('id',$dir)->where('uid',$uid)->update(['parent_folder' => $folder_id]); + $success[] = $dir; + } + } + } + + //移动文件 + if(!empty($ids_list)){ + foreach ($ids_list as $file){ + if(!empty($file)){ + Stores::where('id',$file)->where('uid',$uid)->update(['parent_folder' => $folder_id]); + $success[] = $file; + } + } + } + + return json(['status' => 1,'msg' => '成功移动 '.count($success).' 个文件(夹)~','data' => $success]); + } + + public function set_share_pass(){ + $id = input('get.id'); + $pass = input('get.pass'); + $is_folder = input('get.is_folder'); + $pass_status = input('get.pass_status'); + + $is_folder = intval($is_folder); + $pass_status = intval($pass_status); + + $uid = $this->userInfo['id']; + + if($is_folder){ + $info = Folders::where('id',$id)->where('uid',$uid)->find(); + }else{ + $info = Stores::where('id',$id)->where('uid',$uid)->find(); + } + + if(empty($info)){ + return json(['status' => 0,'msg' => '文件数据不存在']); + } + + $result = $this->validate(['pass' => $pass],['pass|提取码' => 'require|alphaNum|length:4,6'],[ + 'pass.require' => '提取码必须填写', + 'pass.alphaNum' => '提取码只能为字母或者数字', + 'pass.length' => '提取码长度只能为 4 ~ 6 位字母或者数字' + ]); + + if($result !== true) return json(['status' => 0,'msg' => $result]); + + Shares::updateShare($info['shares_id'],[ + 'pwd' => $pass, + 'pwd_status' => $pass_status + ]); + + return json(['status' => 1,'msg' => '设置提取码成功']); + + } + + public function user_download(){ + $id = input('get.id',0); + $info = Stores::where('id',$id)->where('uid',$this->userInfo['id'])->find(); + + if(empty($info)){ + $this->error('数据不存在'); + } + + $share = Shares::where('id',$info['shares_id'])->find(); + + $share_url = getShareUrl($share['code']); + + $this->redirect($share_url); + + } + +} \ No newline at end of file diff --git a/application/index/controller/Index.php b/application/index/controller/Index.php new file mode 100644 index 0000000..0d6e273 --- /dev/null +++ b/application/index/controller/Index.php @@ -0,0 +1,411 @@ +fetch('index_'.config('basic.index_theme')); + } + + public function share(){ + + $code = $this->request->param('code'); + //分享信息 + $info = Shares::where('code',$code)->find(); + + //分享信息不存在 + if(empty($info)){ + return $this->fetch('404'); + } + + // 判断类型 + if($info['type']){ + $storeInfo = Folders::where('uid',$info['uid']) + ->where('id',$info['source_id']) + ->find(); + }else{ + $storeInfo = Stores::where('uid',$info['uid']) + ->where('id',$info['source_id']) + ->find(); + } + + // 存储文件/夹不存在 + if(empty($storeInfo)){ + return $this->fetch('404'); + } + + // 获取文件所有者信息 + $user = Users::where('id',$storeInfo['uid'])->field('id,nickname,avatar,status,group,desc')->find(); + + if(empty($user) || $user['status'] == 0){ + return $this->fetch('404'); + } + + $this->assign('share_id',$info['id']); + $this->assign('is_login',$this->is_login); + $this->assign('url',getShareUrl($code)); + + $share_pwd = Cookie::get('share_key_'.$code); + + // 需要密码 + if($info['pwd_status'] == 1 && !empty($info['pwd']) && $share_pwd != $info['pwd']){ + // VIP用户组 + $vip_group = config('vip.vip_group'); + + $is_vip = $user['group'] == $vip_group ? 1 : 0; + + $desc = empty(trim($user['desc'])) ? '暂无签名' : $user['desc']; + + $this->assign('desc',$desc); + $this->assign('userinfo',$user); + $this->assign('is_vip',$is_vip); + return $this->fetch('pwd'); + } + + // 显示界面 + if($info['type']){ + + // 目录显示 + $base_info = [ + 'id' => $storeInfo['id'], + 'username' => getSafeNickname($user['nickname']), + 'folder_name' => $storeInfo['folder_name'], + 'desc' => $storeInfo['desc'], + 'is_desc' => empty(trim($storeInfo['desc'])) ? 0 : 1, + 'create_time' => $storeInfo->getData('create_time') + ]; + + Folders::where('id',$storeInfo['id'])->where('uid',$storeInfo['uid'])->setInc('count_open',1); + + // 获取当前文件夹下所有文件 + $share_list = FileManage::ShareListFile($storeInfo['id'],$user['id']); + + $this->assign('share_list',$share_list); + $this->assign('info',$base_info); + + if($this->request->isMobile()){ + return $this->fetch('folder_wap'); + } + return $this->fetch('folder'); + }else{ + + // 统计数据 + Profit::record($storeInfo['uid'],$storeInfo['id'],'view'); + + // 文件显示 + $file_info = [ + 'username' => getSafeNickname($user['nickname']), + 'file_name' => $storeInfo['origin_name'], + 'size' => countSize($storeInfo['size']), + 'create_time' => friendDate($storeInfo->getData('create_time')) + ]; + + // 获取VIP价格 + $vip_rule = getVipRule(); + + // 获取最高价格 + $vip_max = end($vip_rule)['id']; + + $download = getFileDownloadUrl($storeInfo['shares_id'],$storeInfo['id']); + + $this->assign('vip_max',$vip_max); + $this->assign('vip_rule',$vip_rule); + $this->assign('download',$download); + $this->assign('user',$this->userInfo); + $this->assign('info',$file_info); + return $this->fetch('file'); + } + } + + public function report(){ + $share_id = input('get.share_id'); + + $share = Shares::where('id',$share_id)->find(); + + if(empty($share)){ + return $this->fetch('user/err',['msg' => '传递参数不正确']); + } + + // 获取文件信息 + if($share['type'] == 1){ + $files = Folders::where('id',$share['source_id'])->find(); + }else{ + $files = Stores::where('id',$share['source_id'])->find(); + } + + // 文件信息获取失败 + if(empty($files)){ + return $this->fetch('user/err',['msg' => '文件信息获取失败']); + } + + // 获取用户信息 + $share_user = Users::where('id',$share['uid'])->find(); + + if(empty($share_user)){ + return $this->fetch('user/err',['msg' => '举报用户不存在']); + } + + // 分享信息 + $report = [ + 'share_id' => $share['id'], + 'source_name' => $share['type'] ? $files['folder_name'] : $files['origin_name'], + 'source_url' => getShareUrl($share['code']), + 'source_uid' => $share['uid'], + 'source_username' => $share_user['username'], + 'source_type' => $share['type'], + 'create_time' => time(), + 'real_ip' => request()->ip() + ]; + + if($this->request->isPost()){ + $data = input('post.'); + $result = $this->validate($data,[ + 'contact|联系方式' => 'require', + 'content|详细描述' => 'require', + 'type|危害类别' => 'require' + ]); + + if($result !== true) return json(['code' => 0,'msg' => $result]); + + $report_key = 'report_'.$share_id; + + if(!empty(Cookie::get($report_key))){ + return json(['code' => 0,'msg' => '您已经举报过了,请勿重复举报']); + } + + $report = array_merge($report,$data); + + Cookie::set('report_'.$share_id,'1'); + + Reports::create($report); + + return json(['code' => 1,'msg' => '举报反馈成功']); + } + + return $this->fetch(); + } + + public function qrcode(){ + $url = input('get.url'); + if(!empty($url)){ + Qrcode::createQrcode($url); + } + } + + public function share_pass(){ + $id = input('post.id'); + $pass = input('post.pass'); + + $id = intval($id); + + $info = Shares::where('id',$id)->find(); + + if(empty($info)){ + return json(['status' => 0,'msg' => '分享数据不存在']); + } + + if($pass != $info['pwd']){ + return json(['status' => 0,'msg' => '提取码不正确']); + } + + Cookie::set('share_key_'.$info['code'],$info['pwd'],3600); + + return json(['status' => 1,'msg' => '提取码正确']); + } + + public function download(){ + $file = input('get.file'); + $shares_id = input('get.shares'); + $timestamp = input('get.timestamp'); + $sign = input('get.sign'); + $is_count = input('get.is_count'); + + // 数据签名校验 + if(!getDownloadFileSignVerify([ + 'file' => $file, + 'shares' => $shares_id, + 'timestamp' => $timestamp + ],$sign)){ + return $this->fetch('user/err',['msg' => '数据sign签名校验失败']); + } + + try { + + // 获取存储数据 + $stores = Stores::get($file); + + if(empty($stores)){ + throw new Exception('文件数据不存在'); + } + + if($is_count){ + // 统计数据 + Profit::record($stores['uid'],$stores['id'],'down',1); + $download_url = getFileDownloadUrl($stores['shares_id'],$stores['id'],0); + return redirect($download_url); + } + + // 获取存储策略 + $policy = $stores->getPolicy(); + + if(empty($policy)){ + throw new Exception('文件数据存储策略不存在'); + } + + // 禁止下载 + if($this->groupData['speed'] === 0){ + throw new Exception('您当前的用户组禁止下载文件'); + } + + // 远程文件下载 + if($policy->type == 'remote'){ + $down_url = getDownloadRemote($stores['file_name'],$stores['origin_name'],$policy->config['server_uri'],$this->groupData['speed'],$policy->config['access_token']); + $this->redirect($down_url); + } + + // 存储驱动下载 + switch ($policy->type){ + case 'aliyunoss': + $driver = new AliyunOss(0,0,0); + break; + case 'txyunoss': + $driver = new TxyunOss(0,0,0); + break; + default: + $driver = new Local(0,0,0); + break; + } + + // 下载 + return $driver->download($stores,$this->groupData['speed'],$policy); + + }catch (Exception $e){ + return $this->fetch('user/err',['msg' => $e->getMessage()]); + } + } + + public function return_callback(){ + $param = input('get.'); + $sign = input('get.sign'); + + if($sign != $this->sign_param($param)){ + $this->error('签名校验失败'); + } + + $order = Order::where('trade_no',$param['out_trade_no'])->find(); + + if(empty($order)){ + $this->error('订单数据不存在'); + } + + if($order['status'] != 1){ + $this->error('订单未支付成功'); + } + + $this->success('VIP开通/续费成功','none','请刷新当前页面,然后重新点击下载'); + } + + public function return_notify(){ + $param = input('get.'); + $sign = input('get.sign'); + + if($sign != $this->sign_param($param)){ + exit('Fail is sign verify.'); + } + + if($param['trade_status'] != 'TRADE_SUCCESS'){ + exit('Fail is trade status.'); + } + + // 查找订单 + $order = Order::where('trade_no',$param['out_trade_no'])->find(); + + if(empty($order)){ + exit('Fail order is not found.'); + } + + // 查找用户 + $user = Users::where('id',$order['uid'])->find(); + + if(empty($user)){ + exit('Fail order user is not found.'); + } + + // VIP用户组 + $vip_group = config('vip.vip_group'); + // 开通/续费时长 + $vip_expire = $order['vip_day'] * 86400; + // 开通/续费VIP + if($user['group'] == $vip_group){ + // 续费VIP + $user['group_expire'] = $user['group_expire'] + $vip_expire; + }else{ + // 开通VIP + $user['group'] = $vip_group; + $user['group_expire'] = time() + $vip_expire; + } + + // 保存数据 + $user->save(); + + // 完成订单 + $order['status'] = 1; + $order['out_trade_no'] = $param['trade_no']; + $order['pay_time'] = time(); + + // 保存订单 + $order->save(); + + // 查询分成用户 + $share = Shares::where('id',$order['profit_id'])->find(); + // 参与分成 + if(!empty($share)){ + // 用户分成奖励比例 + $vip_profit = config('vip.vip_profit'); + // 计算用户分成奖励 + $user_profit = ($order['money'] / 100) * $vip_profit; + // 通用户不奖励 + if($order['uid'] != $share['uid']){ + // 奖励 + Record::addRecord($share['uid'],0,'VIP分成',$user_profit,'用户'.getSafeNickname($user['nickname']).'开通VIP奖励'); + // 记录 + Profit::record($share['uid'],$share['source_id'],'count_order',1); + Profit::record($share['uid'],$share['source_id'],'count_order_yes',1); + Profit::record($share['uid'],$share['source_id'],'count_money',$order['money']); + Profit::record($share['uid'],$share['source_id'],'count_profit',$user_profit); + } + } + + // 处理完成 + exit('SUCCESS'); + } + + protected function sign_param($param): string + { + unset($param['sign']); + unset($param['sign_type']); + ksort($param); + reset($param); + return md5(urldecode(http_build_query($param)) . config('pay.api_key')); + } + +} diff --git a/application/index/controller/Recycle.php b/application/index/controller/Recycle.php new file mode 100644 index 0000000..340976b --- /dev/null +++ b/application/index/controller/Recycle.php @@ -0,0 +1,190 @@ +fetch(); + } + + + public function list(){ + + $limit = input('get.rows',20); + $page = input('get.page',1); + $search = input('get.search',''); + + $file_list = FileManage::RecycleFile($search,$this->userInfo['id'],$page,$limit); + return json($file_list); + } + + + public function clear(){ + // 清空回收站 + $uid = $this->userInfo['id']; + + $success_ids = []; + + try { + $stores = Stores::onlyTrashed()->where('uid',$uid)->select(); + foreach ($stores as $file){ + // 删除文件 + $file->delete(true); + // 删除分享信息 + Profit::where('file_id',$file['id']) + ->where('uid',$uid) + ->delete(); + + $success_ids[] = $file['id']; + } + + $folders = Folders::onlyTrashed()->where('uid',$uid)->select(); + foreach ($folders as $dir){ + // 删除文件 + $dir->delete(true); + // 获取子文件夹 + $folder_object = getFolderChildFiles($uid,$dir['id']); + + // 子文件夹 + if(!empty($folder_object['folder'])){ + Folders::where('id','in',$folder_object['folder'])->delete(true); + } + + // 子文件 + if(!empty($folder_object['file'])){ + // 删除文件 + Stores::where('id','in',$folder_object['file'])->delete(true); + // 删除分享信息 + Profit::where('file_id','in',$folder_object['file']) + ->where('uid',$uid) + ->delete(); + } + + $success_ids[] = $dir['id']; + } + + return json(['status' => 1,'msg' => '成功清空回收站,共删除 '.count($success_ids).' 个文件(夹)~']); + + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + + public function restore(){ + $ids = input('get.ids'); + $idFs = input('get.idFs'); + + $uid = $this->userInfo['id']; + + $success_ids = []; + + if(empty($ids) && empty($idFs)){ + return json(['status' => 0,'msg' => '请选择需要还原的文件(夹)~']); + } + + if(!empty($ids)){ + try { + $stores = Stores::onlyTrashed()->where('id','in',$ids)->where('uid',$uid)->select(); + foreach ($stores as $file){ + //还原文件 + $file->restore(); + $success_ids[] = $file['id']; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + if(!empty($idFs)){ + try { + $folders = Folders::onlyTrashed()->where('id','in',$idFs)->where('uid',$uid)->select(); + foreach ($folders as $dir){ + //还原文件 + $dir->restore(); + $success_ids[] = $dir['id']; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + return json(['status' => 1,'msg' => '成功还原 '.count($success_ids).' 个文件(夹)~','data' => $success_ids]); + } + + + public function delete(){ + $ids = input('get.ids'); + $idFs = input('get.idFs'); + + $uid = $this->userInfo['id']; + $success_ids = []; + + if(empty($ids) && empty($idFs)){ + return json(['status' => 0,'msg' => '请选择需要删除的文件(夹)~']); + } + + if(!empty($ids)){ + try { + $stores = Stores::onlyTrashed()->where('id','in',$ids)->where('uid',$uid)->select(); + foreach ($stores as $file){ + // 删除文件 + $file->delete(true); + + // 删除分享信息 + Profit::where('file_id',$file['id']) + ->where('uid',$uid) + ->delete(); + + $success_ids[] = $file['id']; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + if(!empty($idFs)){ + try { + $folders = Folders::onlyTrashed()->where('id','in',$idFs)->where('uid',$uid)->select(); + foreach ($folders as $dir){ + // 删除文件 + $dir->delete(true); + + // 获取子文件夹 + $folder_object = getFolderChildFiles($uid,$dir['id']); + + // 子文件夹 + if(!empty($folder_object['folder'])){ + Folders::where('id','in',$folder_object['folder'])->delete(true); + } + + // 子文件 + if(!empty($folder_object['file'])){ + // 删除文件 + Stores::where('id','in',$folder_object['file'])->delete(true); + // 删除分享信息 + Profit::where('file_id','in',$folder_object['file']) + ->where('uid',$uid) + ->delete(); + } + + $success_ids[] = $dir['id']; + } + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => $e->getMessage()]); + } + } + + return json(['status' => 1,'msg' => '成功彻底删除 '.count($success_ids).' 个文件(夹)~','data' => $success_ids]); + } + +} \ No newline at end of file diff --git a/application/index/controller/Share.php b/application/index/controller/Share.php new file mode 100644 index 0000000..171c370 --- /dev/null +++ b/application/index/controller/Share.php @@ -0,0 +1,121 @@ + $time]; + }else{ + $time = date('Y-m-d'); + } + + $list = Profit::where('uid',$this->userInfo['id']) + ->whereBetweenTime('create_time',$time) + ->order([ + 'count_money' => 'desc', + 'id' => 'desc' + ]) + ->paginate(15,false,[ + 'query' => $query + ]); + + $this->assign('time',$time); + $this->assign('list',$list); + return $this->fetch(); + } + + public function record(){ + + $list = Record::where('uid',$this->userInfo['id'])->order('create_time desc')->paginate(15); + + $this->assign('list',$list); + + return $this->fetch(); + } + + public function withdraw(){ + + $list = Withdraw::where('uid',$this->userInfo['id'])->order('create_time desc')->paginate(15); + $money = Withdraw::where('uid',$this->userInfo['id'])->where('status',1)->sum('money'); + + $this->assign('money',$money); + $this->assign('list',$list); + $this->assign('amount',$this->userInfo['amount']); + return $this->fetch(); + } + + public function echarts(){ + $id = input('get.id'); + + // 获取当月所有时间 + $month_time = []; + $time_type = []; + + for ($i = 0;$i < 30;$i++){ + $month_time[] = strtotime('-'.$i.' day'); + $time_type[] = "'".date('m-d',strtotime('-'.$i.' day'))."'"; + } + + $time_type = array_reverse($time_type); + $time_type = implode(',',$time_type); + + // 获取当月间隔时间 + $start_time = strtotime(date('Y-m-d',strtotime('-29 day'))); + $end_time = strtotime('now'); + + // 获取30天的统计记录 + $profit = Profit::where('file_id',$id) + ->where('uid',$this->userInfo['id']) + ->whereTime('create_time','>=',$start_time) + ->whereTime('create_time','<=',$end_time) + ->order('create_time desc') + ->select(); + + + // 图表统计 + $series_reg = str_split(str_repeat('0',30),1); + $series_order = str_split(str_repeat('0',30),1); + $series_money = str_split(str_repeat('0',30),1); + + foreach ($month_time as $key => $item){ + $item_time = date('Y-m-d',$item); + foreach ($profit as $profit_item){ + $profit_time = date('Y-m-d',$profit_item['create_time']); + if($item_time == $profit_time){ + $series_reg[$key] = $profit_item['count_reg']; + $series_order[$key] = $profit_item['count_order_yes']; + $series_money[$key] = $profit_item['count_money']; + } + } + } + + $series_reg = array_reverse($series_reg); + $series_reg = implode(',',$series_reg); + + $series_order = array_reverse($series_order); + $series_order = implode(',',$series_order); + + $series_money = array_reverse($series_money); + $series_money = implode(',',$series_money); + + $this->assign('profit',$profit); + + $this->assign('series_reg',$series_reg); + $this->assign('series_order',$series_order); + $this->assign('series_money',$series_money); + $this->assign('time_type',$time_type); + return $this->fetch(); + } + + +} \ No newline at end of file diff --git a/application/index/controller/Upload.php b/application/index/controller/Upload.php new file mode 100644 index 0000000..1675340 --- /dev/null +++ b/application/index/controller/Upload.php @@ -0,0 +1,116 @@ +getPolicy(); + + // 上传文件数量限制 + $upload_limit = 20; + + // 上传限制 + $upload_rule = [ + 'upsize_byte' => $this->groupData['max_storage'], + 'upsize' => countSize($this->groupData['max_storage']), + 'fsize_byte' => $this->groupData['max_storage'] * $upload_limit, + 'fsize' => countSize($this->groupData['max_storage'] * $upload_limit), + ]; + + $folder_id = FileManage::getFolderAllowPid(0,$this->userInfo['id']); + + $upload_api = $this->getPolicyUrl($policy,[ + 'md' => 'upload', + 'size' => $this->groupData['max_storage'], + 'notify' => url('upload/notify','',false,true), + 'root_folder_id' => $folder_id + ]); + + $this->assign('upload_api',$upload_api); + + $this->assign('upload_limit',$upload_limit); + $this->assign('upload_rule',$upload_rule); + + return $this->fetch(); + } + + public function notify(){ + $data = input('get.'); + $policy_id = input('get.policy_id'); + $sign = input('get.sign'); + + $policy = Policys::where('id',$policy_id)->find(); + + if(empty($policy)){ + exit('Fail policy not found.'); + } + + if(empty($sign)){ + exit('Fail is no params a sign.'); + } + + $remote_sign = $this->remote_sign_params($data,$policy['config']['access_token']); + + if($remote_sign != $sign){ + exit('Fail is sign verify.'); + } + + // 加入数据库 + $data = [ + 'uid' => $data['uid'], + 'origin_name' => $data['name'], + 'file_name' => $data['path'], + 'size' => $data['size'], + 'meta' => '', + 'mime_type' => $data['mime'], + 'ext' => $data['ext'], + 'parent_folder' => $data['folder_id'], + 'policy_id' => $policy['id'], + 'dir' => '', + 'create_time' => time(), + 'update_time' => time() + ]; + + $file_id = (new Stores)->insertGetId($data); + + $share_id = Shares::addShare($data['uid'],$file_id,0); + + Stores::where('id',$file_id)->update(['shares_id' => $share_id]); + + exit('UPLOAD_SUCCESS'); + } + + public function file(){ + + // 存储策略 + $policy = $this->getPolicy(); + + try { + // 上传文件 + $result = (new FileUpload()) + ->source($this->userInfo['id'],$policy,$this->groupData['max_storage']) + ->upload(); + + return json($result); + + }catch (Exception $e){ + return json(['code' => 0,'msg' => $e->getMessage()]); + } + + } + +} \ No newline at end of file diff --git a/application/index/controller/User.php b/application/index/controller/User.php new file mode 100644 index 0000000..6a1284d --- /dev/null +++ b/application/index/controller/User.php @@ -0,0 +1,433 @@ +fetch(); + } + + public function login(){ + $layer = input('get.layer',0); + $share_id = input('get.share_id',0); + + if(empty($layer)) $layer = 0; + + if((new Users)->login_auth('default')){ + return redirect('user/index'); + } + + if($this->request->isPost()){ + $username = input('post.username'); + $password = input('post.password'); + + try { + (new Users)->login($username,$password,'default'); + + return json(['status' => 1,'msg' => '登录成功']); + }catch (\Throwable $e){ + return json(['status' => 0,'msg' => '登录失败:' . $e->getMessage()]); + } + } + + $this->assign('share_id',$share_id); + $this->assign('layer',$layer); + return $this->fetch(); + } + + public function register(){ + $data = input('post.'); + $share_id = input('get.share_id'); + + if(config('register.allow_register') != 1){ + return json(['code' => 0,'msg' => '管理员已关闭用户注册功能']); + } + + $result = $this->validate($data,[ + 'nickname|昵称' => 'require|chsAlphaNum|length:2,18', + 'username|用户帐号' => 'require|alphaNum|length:6,26', + 'password|登录密码' => 'require|alphaNum|length:6,18', + 'email|安全邮箱' => 'require|email' + ]); + + if($result !== true) return json(['code' => 0,'msg' => $result]); + + $default_group = config('register.default_group'); + + // 获取注册来源 + $share_info = Shares::where('id',$share_id)->find(); + + try { + (new Users)->register( + $data['username'], + $data['email'], + $data['password'], + $default_group, + ['nickname' => $data['nickname']] + ); + + // 统计数据 + if(!empty($share_info)){ + Profit::record($share_info['uid'],$share_info['source_id'],'reg',1); + } + + return json(['code' => 1,'msg' => '注册帐号成功']); + }catch (Exception $e){ + return json(['code' => 0,'msg' => $e->getMessage()]); + } + + } + + public function logout(){ + (new Users)->logout('default'); + $this->success('退出登录成功','index/index'); + } + + public function vip(){ + $share_id = input('get.share_id',0); + $is_layer = input('get.layer',0); + + $rule = getVipRule(); + + $this->assign('rule',$rule); + $this->assign('share_id',$share_id); + $this->assign('is_layer',$is_layer); + + if($this->request->isMobile()){ + return $this->fetch('vip_wap'); + } + return $this->fetch(); + } + + public function payment(){ + $vip_type = input('get.vip',0); + $share_id = input('get.share_id',0); + $pay_type = input('get.pay_type',0); + + if($pay_type != 'alipay' && $pay_type != 'wxpay'){ + $this->error('支付方式错误'); + } + + // 获取VIP规则 + $rule = getVipRule(); + + // 判断VIP类型是否正确 + if(!isset($rule[$vip_type])){ + $this->error('VIP类型不存在'); + } + + // 获取VIP价格 + $vip_config = $rule[$vip_type]; + + // 获取支付配置信息 + $config = config('pay.'); + + // 本地创建订单号 + $trade_no = strtoupper('VIP_'.date('YmdHis').substr(md5(uniqid()),0,10)); + + // 订单数据 + $order = [ + 'uid' => $this->userInfo['id'], + 'trade_no' => $trade_no, + 'type' => $pay_type, + 'profit_id' => $share_id, + 'money' => $vip_config['money'], + 'vip_day' => $vip_config['day'], + 'create_time' => time(), + 'status' => 0 + ]; + + Order::create($order); + + // 获取支付参数 + $pay_params = [ + 'pid' => $config['api_pid'], + 'type' => $pay_type, + 'out_trade_no' => $trade_no, + 'notify_url' => url('index/return_notify','',false,true), + 'return_url' => url('index/return_callback','',false,true), + 'name' => 'VIP会员', + 'money' => $vip_config['money'] + ]; + + ksort($pay_params); + reset($pay_params); + + $pay_params['sign'] = md5(urldecode(http_build_query($pay_params)) . $config['api_key']); + $pay_params['sign_type'] = strtoupper('MD5'); + + + $pay_html = '正在跳转支付'; + $pay_html .= ''; + $pay_html .= ''; + // 拼接支付表单 + $pay_html .= '
'; + foreach ($pay_params as $key => $val) { + $pay_html .= ''; + } + $pay_html .= '
'; + $pay_html .= ""; + $pay_html .= ''; + + exit($pay_html); + } + + public function vip_close(){ + $lock_time = time() - 7200; + Order::where('status',0) + ->limit(50) + ->whereTime('create_time','<=',$lock_time) + ->update(['status' => 2]); + + return json(['code' => 1,'msg' => '关闭订单成功']); + } + + public function forget(){ + if($this->request->isPost()){ + $email = input('post.email'); + $result = $this->validate(['email' => $email],['email|安全邮箱' => 'require|email']); + if($result !== true) return json(['code' => 0,'msg' => $result]); + $info = Users::where('email',$email)->find(); + if(empty($info)){ + return json(['code' => 0,'msg' => '该邮箱未绑定帐号']); + } + + // 获取key + $forget_key = 'forget_'.str_replace(['@','.'],['_','_'],$info['email']); + + // 邮件发送记录 + $forget_info = Cache::get($forget_key); + + if(!empty($forget_info)){ + if($forget_info['time'] >= time()){ + return json(['code' => 0,'msg' => '发送频繁,请等待'.($forget_info['time'] - time()) . ' 秒后重新发送']); + } + } + + $hash_key = bin2hex($forget_key); + $sign = md5($forget_key . time()); + // 设置找回密码key + Cache::set($forget_key,[ + 'uid' => $info['id'], + 'email' => $info['email'], + 'sign' => $sign, + 'time' => time() + 60 + ],600); + + // 找回密码链接 + $forget_url = url('user/reset','',false,true)."?key={$hash_key}&sign={$sign}"; + + // 发送邮件 + if(!sendEmail($info['username'],$forget_url)){ + return json(['code' => 0,'msg' => '找回密码邮件发送失败,请联系管理员处理']); + } + + return json(['code' => 1,'msg' => '找回密码邮件发送成功']); + } + return $this->fetch(); + } + + public function reset(){ + $key = input('get.key'); + $sign = input('get.sign'); + + if(empty($key) || empty($sign)){ + return $this->fetch('err',['msg' => '参数缺失']); + } + + $forget_key = @hex2bin($key); + + if(empty($forget_key)){ + return $this->fetch('err',['msg' => '参数验证失败']); + } + + $forget_info = Cache::get($forget_key); + + if(empty($forget_info)){ + return $this->fetch('err',['msg' => '访问错误,无效链接']); + } + + if($sign != $forget_info['sign']){ + return $this->fetch('err',['msg' => '访问错误,数据签名校验失败']); + } + + if($this->request->isPost()){ + $pwd = input('post.pwd'); + $result = $this->validate(['pwd' => $pwd],['pwd|密码' => 'require|alphaNum|length:6,18']); + if($result !== true) return json(['code' => 0,'msg' => $result]); + + $password = md5($pwd . config('app.pass_salt')); + + Users::where('id',$forget_info['uid'])->update(['password' => $password]); + + return json(['code' => 1,'msg' => '密码修改成功']); + } + + $this->assign('key',$key); + $this->assign('sign',$sign); + return $this->fetch('reset'); + } + + public function auth(){ + if($this->request->isPost()){ + $data = input('post.'); + $result = $this->validate($data,[ + 'name|姓名' => 'require|chs|length:2,20', + 'idcard|身份证号码' => 'require|idCard' + ]); + + if($result !== true) return json(['code' => 0,'msg' => $result]); + + if($this->userInfo['is_auth']){ + return json(['code' => 0,'msg' => '您已完成实名认证,请勿重复提交']); + } + + if(Certify::where('uid',$this->userInfo['id'])->where('status',0)->count() > 0){ + return json(['code' => 0,'msg' => '您提交的实名资料正在审核中,请勿重复提交']); + } + + Certify::create([ + 'uid' => $this->userInfo['id'], + 'name' => $data['name'], + 'idcard' => $data['idcard'], + 'create_time' => time() + ]); + + return json(['code' => 1,'msg' => '实名资料已提交,请耐心等待审核']); + } + + $this->assign('info',$this->userInfo->getCertify()); + $this->assign('is_auth',$this->userInfo['is_auth']); + return $this->fetch(); + } + + public function withdraw(){ + if($this->request->isPost()){ + $data = input('post.'); + $result = $this->validate($data,[ + 'tx_money|提现金额' => 'require|float', + 'alipay_account|支付宝帐号' => 'require|max:255', + 'alipay_name|支付宝姓名' => 'require|chs|max:60' + ]); + + if($result !== true) return json(['code' => 0,'msg' => $result]); + + $withdraw_count = Withdraw::where('uid',$this->userInfo['id']) + ->where('status',0) + ->whereTime('create_time','d') + ->count(); + + if($withdraw_count > 0){ + return json(['code' => 0,'msg' => '您有一条提现申请还在审核中,请勿重复提交']); + } + + if(floatval($this->userInfo['amount']) - floatval($data['tx_money']) < 0){ + return json(['code' => 0,'msg' => '您的账户余额不足']); + } + + // 扣钱 + Record::addRecord($this->userInfo['id'],1,'用户提现',$data['tx_money'],'余额提现'.$data['tx_money'].'元至支付宝'); + + // 添加记录 + Withdraw::create([ + 'uid' => $this->userInfo['id'], + 'money' => $data['tx_money'], + 'alipay_account' => $data['alipay_account'], + 'alipay_name' => $data['alipay_name'], + 'create_time' => time() + ]); + + return json(['code' => 1,'msg' => '申请成功,请等待处理']); + } + $this->assign('amount',$this->userInfo['amount']); + return $this->fetch(); + } + + public function info(){ + return $this->fetch(); + } + + public function change_pass(){ + $data = input('post.'); + $result = $this->validate($data,[ + 'old_password|原密码' => 'require|alphaNum|length:6,18', + 'password|新密码' => 'require|alphaNum|length:6,18' + ]); + + if($result !== true){ + return json(['code' => 0,'msg' => $result]); + } + + + $en_password = md5($data['old_password'] . config('app.pass_salt')); + + if($en_password != $this->userInfo['password']){ + return json(['code' => 0,'msg' => '修改失败,原密码不正确']); + } + + $en_new_password = md5($data['password'] . config('app.pass_salt')); + + Users::where('id',$this->userInfo['id'])->update([ + 'password' => $en_new_password + ]); + + return json(['code' => 1,'msg' => '密码修改成功,请重新登录']); + } + + public function set_userinfo(){ + $data = input('post.'); + $result = $this->validate($data,[ + 'nickname|昵称' => 'require|max:30|min:1', + 'desc|个性签名' => 'max:255' + ]); + + if($result !== true){ + return json(['code' => 0,'msg' => $result]); + } + + Users::where('id',$this->userInfo['id'])->update([ + 'nickname' => $data['nickname'], + 'desc' => $data['desc'] + ]); + + return json(['code' => 1,'msg' => '更新用户资料成功']); + } + + public function upload_avatar(){ + $file = request()->file('file'); + + if(!$file){ + return json(['code' => 0,'msg' => '请选择上传的文件','data' => []]); + } + + // 根目录 + $root_path = getSafeDirSeparator(realpath(env('root_path') . './public').'/avatar'); + + $info = $file->validate(['size'=> 2097152,'ext'=>'jpg,png,gif'])->move($root_path); + if($info){ + $avatar = '/avatar/'.str_replace('\\','/',$info->getSaveName()); + Users::where('id',$this->userInfo['id'])->update([ + 'avatar' => $avatar + ]); + return json(['code' => 1,'msg' => '头像上传成功','data' => []]); + }else{ + // 上传失败获取错误信息 + return json(['code' => 0,'msg' => $file->getError(),'data' => []]); + } + } + +} \ No newline at end of file diff --git a/application/index/view/file/edit_file.html b/application/index/view/file/edit_file.html new file mode 100644 index 0000000..9f5ab54 --- /dev/null +++ b/application/index/view/file/edit_file.html @@ -0,0 +1,123 @@ + + + + + + + + + +
+ + +
+ * + 文件名称 + +
+
+ 文件描述 + +
+ +

+   +

+
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/application/index/view/file/edit_folder.html b/application/index/view/file/edit_folder.html new file mode 100644 index 0000000..515e083 --- /dev/null +++ b/application/index/view/file/edit_folder.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + +
+ *文件夹名称 + +
+
+

文件夹描述

+ +
+ +
+ +
+
+ +
+ + + + \ No newline at end of file diff --git a/application/index/view/file/move_files.html b/application/index/view/file/move_files.html new file mode 100644 index 0000000..648806f --- /dev/null +++ b/application/index/view/file/move_files.html @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + +
+
+
    +
  • +
    + + + 根目录 + +
    +
      +
    +
  • +
+
+
+ + +
+ +
+ + + + +
+
+
+ +

新建文件夹

+
+
+
+
+

确定

+
+
+

取消

+
+
+
+ + + + + \ No newline at end of file diff --git a/application/index/view/index/404.html b/application/index/view/index/404.html new file mode 100644 index 0000000..1739336 --- /dev/null +++ b/application/index/view/index/404.html @@ -0,0 +1,18 @@ + + + + + + + 404文件不存在 + + + +
来晚啦...文件取消分享了
+ + \ No newline at end of file diff --git a/application/index/view/index/file.html b/application/index/view/index/file.html new file mode 100644 index 0000000..f4eec80 --- /dev/null +++ b/application/index/view/index/file.html @@ -0,0 +1,394 @@ + + + + + + + + + + {$info.file_name} - {$Think.config.basic.site_title} + + + + + + + +
+
+
+ + +
+
+
+
+

文件下载:{$info.file_name}

+

+ 文件大小{$info.size} + 上传时间{$info.create_time} + 分享用户{$info.username} +

+
+ +
+ +
+
+ + {eq name="$vip_info.is_vip" value="0"} +
+
+
+
+
普通下载低速
+
下载需时约 60 分钟
+ +
+
+
+
+
+ +
+
登录下载稳定
+
下载需时约 5 分钟
+ +
+
+
+
+
+
+
VIP极速下载推荐
+
下载需时约 1 秒
+ +
+
+
+ {else/} +
+
+
+
+ +
+
电信下载VIP专用
+ +
+
+
+
+
+ +
+
联通下载VIP专用
+ +
+
+
+
+
+ +
+
移动下载VIP专用
+ +
+
+
+ {/eq} + + {eq name="$vip_info.is_vip" value="1"} +
+
+
+
+

+ 尊贵的{$group.group_name}您好,您已经购买成为 + {$group.group_name} + 到期时间:{$vip_info.expire_time}

+
+ +
+ +
+
+ {/eq} + +
+
+
+
+
+
+
升级会员尊享极速下载
永久更省83% +
+
+ + 限时大促 最后一天!仅剩 + 2 小时 20 分钟 17 秒 + +
+
+
+ + {php} + $vip_list_num = 0; + {/php} + + {volist name="$vip_rule" id="vo" key="k"} + {eq name="$vo.is_top" value="1"} +
+ {php} + $vip_list_num++; + $is_hot = intval(($vip_list_num % 3) == 2); + {/php} +
+
+

{$vo.name}

+ 限时{$vo.discount}折 +

+ {$vo.desc} +

+

+ {$vo.money} + 元 / {$vo.day_name} +
+ {$vo.discount_msg} +

+ +
+
+
+ {/eq} + {/volist} + +
+
所有会员均尊享以下特权:
+ VIP极速下载通道 + 多文件同时下载 + 去除弹窗广告 +
+
+
+
+ + + +
+
+
+
+

谨防刷单兼职,网贷,金融,裸聊敲诈,赌博等诈骗,请立即举报

+
+
+
+
+ +
+ +
+
+
+

版权声明:不得利用云存储发布,存储,淫秽,诈骗等违法信息。 + 侵权/违法投诉 + 或者投诉邮箱:{$Think.config.basic.site_email}

+
+
+

© 2018-2021 {$Think.config.basic.site_title}

+
+
+
+ + + + +
+
+ + + \ No newline at end of file diff --git a/application/index/view/index/folder.html b/application/index/view/index/folder.html new file mode 100644 index 0000000..0b20ee4 --- /dev/null +++ b/application/index/view/index/folder.html @@ -0,0 +1,82 @@ + + + + + + + {$info.folder_name} - {$Think.config.basic.site_title} + + + + + +
+
+
+   +
+
+ {eq name="$is_login" value="1"} + 前往我的网盘 + {else/} + 登录 + {/eq} +
+
+
+
+ +
+
+
{$info.folder_name}
+
+ 分享者: + {$info.username} + {$info.create_time|date="Y-m-d H:i"} + 文件投诉 +
+
+ + {eq name="$info.is_desc" value="1"} +
+ + {$info.desc} +
+ {/eq} + +
+
文件名
+
大小
+
时间
+
+
+ {volist name="$share_list" id="vo"} +
+
+    + {$vo.name} +
+
{$vo.size}
+
{$vo.time}
+
+ {/volist} +
+
+ +
+
手机可扫描二维码下载
+
+ +
+
+
+ 谨防刷单兼职,网贷,金融,裸聊敲诈,赌博等诈骗,请立即举报 +
+
版权声明:不得利用云存储发布,存储,淫秽,诈骗等违法信息。 + 侵权/违法投诉
或者投诉邮箱:{$Think.config.basic.site_email}
+ © 2021 {$Think.config.basic.site_title} +
+
+ + + \ No newline at end of file diff --git a/application/index/view/index/folder_wap.html b/application/index/view/index/folder_wap.html new file mode 100644 index 0000000..044ddda --- /dev/null +++ b/application/index/view/index/folder_wap.html @@ -0,0 +1,70 @@ + + + + + + {$info.folder_name} - {$Think.config.basic.site_title} + + + + + +
+
+
+   +
+
+ {eq name="$is_login" value="1"} + 前往我的网盘 + {else/} + 登录 + {/eq} +
+
+
+
+
+ +
+
{$info.folder_name}
+
+ 分享者:{$info.username} + {$info.create_time|date="Y-m-d"} + + 举报文件 + +
+ + {eq name="$info.is_desc" value="1"} + + {$info.desc} + {/eq} +
+ +
+
文件名
+
+ {volist name="$share_list" id="vo"} + + {/volist} +
+
+
+ + +
© 2018-2021 {$Think.config.basic.site_title}
+ + + + \ No newline at end of file diff --git a/application/index/view/index/index_default.html b/application/index/view/index/index_default.html new file mode 100644 index 0000000..64536b8 --- /dev/null +++ b/application/index/view/index/index_default.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + {$Think.config.basic.site_name} + + + + + {$Think.config.basic.site_head|raw} + + + + + +
+
+ + + +
+
+
+
+
高速存储的云盘
+
+ {$Think.config.basic.site_title}是一款速度快、不打扰、够安全、易于分享的网络云盘,你可以在这里存储、管理和探索内容,尽情打造丰富的数字世界。
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+

存储到云端更畅快

+
+
+
+

尽享极速

+

上传下载

+

告别 kb/s,极速上传下载文件资料,

+

免费用户也享有合理带宽。

+ +
+
+

网盘联盟

+

资源共享

+

您的数据,变的有价值!

+

入口一直向你敞开。

+ +
+
+

云端数据

+

非常安全

+

分享文件地址永久有效

+

不必担心过期而经常更换链接。

+

+ +
+
+
+
+ +
+ +
+ + + + + + +{$Think.config.basic.site_foot|raw} + + \ No newline at end of file diff --git a/application/index/view/index/index_new1.html b/application/index/view/index/index_new1.html new file mode 100644 index 0000000..d19298f --- /dev/null +++ b/application/index/view/index/index_new1.html @@ -0,0 +1,149 @@ + + + + + {$Think.config.basic.site_name} + + + + + + + + + {$Think.config.basic.site_head|raw} + + + + + + +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
1,免费注册
2,上传文件
3,分享链接
+ + 登录 + + + 注册 + +
+
+
+
+
+
+
+
+ +
+ +
+
+
网盘用高效说话...
+
分享文件地址永久有效,不必担心过期而经常更换链接,帮您节省繁琐步骤,把时间用到有价值的地方去。 +
+
+
+
+
+
+
+
+
+
体验真正的云加速
+
下载无任何限制,无验证码等影响用户体验限制。
+
在蓝奏,所有云存储、文件下载都是秒级响应。采用网众公司云计算+存储分发技术。任何网络,享受到最快的下载速度。
+
立刻体验
+
+
+
+
+
我们的优势...
+
整合各种资源为你所用,为你24小时不间断增加收入。帮你解决各种问题,节省你的时间,等于让你赚更多的钱。
我们对于任何大小客户同等待遇,对下载IP不做各种级别区分,都是高价。了解详情
+
+
+
+
我们这么一群人...
+
我们是一群有着激情的年轻人组成的团队,如果你怀才不遇无处倾诉?各类有才能之士,凡是有一技之长,赶快加入我们。 + 了解详情
+
+
+
+
+
+

+ Copyright © 2018-2021 {$Think.config.basic.site_title} All rights + reserved. 版权所有 +

+
+
+ + + +{$Think.config.basic.site_foot|raw} + + \ No newline at end of file diff --git a/application/index/view/index/pwd.html b/application/index/view/index/pwd.html new file mode 100644 index 0000000..35b3f9d --- /dev/null +++ b/application/index/view/index/pwd.html @@ -0,0 +1,106 @@ + + + + + + + + 请输入提取码 - {$Think.config.basic.site_title} + + + + + + + + + +
+
+
+  
+
+ 登录 +
+
+
+
+
+
+
+
+
+
+
+
+ + + + +
+
+
+
+
{:getSafeNickname($userinfo.nickname)}
+   + + {eq name="$is_vip" value="1"} + + {else/} + + {/eq} + +
+
{$desc}
+
+
+
+
+
+
请输入提取码:
+
+ + + +
+
+
+
+ 验证码:
+
+ + 验证码换一张 +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/application/index/view/index/report.html b/application/index/view/index/report.html new file mode 100644 index 0000000..cb81931 --- /dev/null +++ b/application/index/view/index/report.html @@ -0,0 +1,422 @@ + + + + + + + + + + 举报 - {$Think.config.basic.site_title} + + + + +
互联网不良信息 文件举报
+
+ 文件举报说明:
+ 1,如果有害信息类别属于“版权或者危害他人”,请提供以下材料: +
+ 版权证明文件(如著作权、版权证书等)或侵犯他人权利的相关证明(如肖像权的本人身份证等)。书面处理请求书(需要注明处理方式,如删除相关文件或冻结用户账户文件等)。举报人的相关证件扫描件(如身份证、营业执照等),如果与第一项版权证明不相符的,还需要提供 + 授权委托书 。
+ 以上材料均采用电子扫描件,并加盖公章或签名。发送到邮件 {$Think.config.basic.site_email}

+ 2,如果文件含有诈骗,病毒,木马,淫秽等问题,可以直接提交。 +
+
+
+
+ + + + + + + + + + + + + + + + + + +
+
联系邮箱/手机号:[必填]
+ +
+
+
详细描述:
+ + +
+
+
危害类别: +
+ + + + + + +
+
+
+
+ + 请稍后... +
+
+
+
+ + +
+ +
+
+ + + \ No newline at end of file diff --git a/application/index/view/layout/user.html b/application/index/view/layout/user.html new file mode 100644 index 0000000..9481444 --- /dev/null +++ b/application/index/view/layout/user.html @@ -0,0 +1,310 @@ + + + + + + + + 文件管理 - {$Think.config.basic.site_title} + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ + +
+ +
{/eq} + {eq name="$vip_info.is_vip" value="1"}tan="VIP到期时间:{$vip_info.expire_time}">{/eq} + + +

+ {$info.nickname} ({$group.group_name}) +

+

+
+
+
+

+ 退出登录 +

+
+
+
+
+
+ + +
+ {block name="main"}{/block} +
+
+
+ + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/application/index/view/recycle/index.html b/application/index/view/recycle/index.html new file mode 100644 index 0000000..e09efff --- /dev/null +++ b/application/index/view/recycle/index.html @@ -0,0 +1,236 @@ +{extend name="layout/user" /} +{block name="main"} +
+ +
+
+ + +
+

清空

+
+ + +
+
+
+ + +
+
+
+ + + +
+ + 放到回收站中的文件,外链无法分享不可下载。重要文件不要放到回收站! + + + + 文件操作可使用右键 + + 已全部加载,共- + + + +
+ +
+ + +
+ + +
+ +
+ + +
+
+{/block} \ No newline at end of file diff --git a/application/index/view/share/echarts.html b/application/index/view/share/echarts.html new file mode 100644 index 0000000..0a8db0b --- /dev/null +++ b/application/index/view/share/echarts.html @@ -0,0 +1,122 @@ + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + {volist name="profit" id="vo"} + + + + + + + + + + + + + {/volist} + +
浏览下载总订单成功订单注册金额分成日期星期几天前
{$vo.count_view}{$vo.count_down}{$vo.count_order}{$vo.count_order_yes}{$vo.count_reg}{$vo.count_money}{$vo.count_profit}{$vo.create_time|date="Y-m-d"}{:getWeekDay($vo.create_time)}{:getTimeLastDay($vo.create_time)}天前
+
+ + + + \ No newline at end of file diff --git a/application/index/view/share/index.html b/application/index/view/share/index.html new file mode 100644 index 0000000..02b1d99 --- /dev/null +++ b/application/index/view/share/index.html @@ -0,0 +1,153 @@ +{extend name="layout/user" /} + + +{block name="main"} + + + + +
+
+ +
+
+
+ +
+
+ 时间: + +   + 实名认证  |  + 申请提现 +
+ + + + + + + + + + + + + + + + + + + {volist name="list" id="vo"} + + + + + + + + + + + + + + {/volist} + +
ID所属文件浏览下载注册总订单成功订单金额收益操作
{$vo.id}{:getFileName($vo.file_id)}{$vo.count_view}{$vo.count_down}{$vo.count_reg}{$vo.count_order}{$vo.count_order_yes}{$vo.count_money}{$vo.count_profit} + 走势图 +
+
+ {$list|raw} +
+
+ +
+
+
+
+
+ + + + +{/block} \ No newline at end of file diff --git a/application/index/view/share/record.html b/application/index/view/share/record.html new file mode 100644 index 0000000..636dba8 --- /dev/null +++ b/application/index/view/share/record.html @@ -0,0 +1,69 @@ +{extend name="layout/user" /} + + +{block name="main"} + + + + +
+
+ +
+
+
+ +
+
+ 累计收益:0
+ + + + + + + + + + + + + + + {volist name="list" id="vo"} + + + + + + + + + + {/volist} + +
ID原因来源变更金额变更前变更后时间
{$vo.id}{$vo.remark}{$vo.source} + {eq name="$vo.type" value="0"} + + {$vo.money} + {else/} + - {$vo.money} + {/eq} + {$vo.before_money}{$vo.after_money}{$vo.create_time|date="Y-m-d H:i"}
+ +
+ {$list|raw} +
+ +
+ + +
+
+
+
+
+{/block} \ No newline at end of file diff --git a/application/index/view/share/withdraw.html b/application/index/view/share/withdraw.html new file mode 100644 index 0000000..b65b0fd --- /dev/null +++ b/application/index/view/share/withdraw.html @@ -0,0 +1,121 @@ +{extend name="layout/user" /} + + +{block name="main"} + + + + +
+
+ +
+
+
+ +
+
+ 账户余额:{$amount} +  |  累计提现:{$money} 元 +  |  实名认证 +  |  申请提现 +
+ + + + + + + + + + + + + + {volist name="list" id="vo"} + + + + + + + + + {/volist} + +
ID提现金额支付宝账号支付宝姓名状态提现时间
{$vo.id}{$vo.money} ¥{$vo.alipay_account}{$vo.alipay_name} + {eq name="$vo.status" value="0"}等待处理{/eq} + {eq name="$vo.status" value="1"}提现成功{/eq} + {eq name="$vo.status" value="2"}资金退回{/eq} + {$vo.create_time|date="Y-m-d H:i"}
+ +
+ {$list|raw} +
+ +
+ + +
+
+
+
+
+ + +{/block} \ No newline at end of file diff --git a/application/index/view/upload/index.html b/application/index/view/upload/index.html new file mode 100644 index 0000000..1740e3a --- /dev/null +++ b/application/index/view/upload/index.html @@ -0,0 +1,473 @@ + + + + + + + + + + + +
+
+
+ +
+
+
+
点击选择文件
+
+ + +
+
+

或将文件拖到这里,单次最多可选{$upload_limit}个

+

凡是上传违反国家法律文件,一律封号处理!!!

+
+
    +
    +
    +
    + +
    +
    + + + + + \ No newline at end of file diff --git a/application/index/view/user/auth.html b/application/index/view/user/auth.html new file mode 100644 index 0000000..5734a19 --- /dev/null +++ b/application/index/view/user/auth.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +
    +
    + +
    + +
    + +
    +
    + + + {eq name="$is_auth" value="1"} +
    + +
    +
    {:getSafeNickname($info.name)}
    +
    +
    +
    + +
    +
    {:getSafeNickname($info.idcard)}
    +
    +
    + {else/} +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    + {/eq} +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/application/index/view/user/err.html b/application/index/view/user/err.html new file mode 100644 index 0000000..afe9620 --- /dev/null +++ b/application/index/view/user/err.html @@ -0,0 +1,23 @@ + + + + + + + {$msg} + + + +
    +
    +
    +
    + {$msg} +
    + + \ No newline at end of file diff --git a/application/index/view/user/forget.html b/application/index/view/user/forget.html new file mode 100644 index 0000000..5e0b47c --- /dev/null +++ b/application/index/view/user/forget.html @@ -0,0 +1,126 @@ + + + + + + + 找回密码 - {$Think.config.basic.site_title} + + + + + + + + +
    + +
    +
    + + +
    +
    +
    为用户而变革,越简单越好,越快越好 !
    +
    会分享,就会有收获!
    + +
    + +
    + 找回密码 +
    + +
    + +
    + +
    + +
    +
    请安全邮箱
    +
    + +
    +
    + +
    + +
    + + + +
    + + + +
    + + +
    + + +
    © 2021 {$Think.config.basic.site_title}
    + + \ No newline at end of file diff --git a/application/index/view/user/index.html b/application/index/view/user/index.html new file mode 100644 index 0000000..5eaab41 --- /dev/null +++ b/application/index/view/user/index.html @@ -0,0 +1,334 @@ +{extend name="layout/user" /} +{block name="main"} +
    +
    +
    + + +
    + +

    上传

    +
    + +
    + +

    新建

    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    + + 全部文件 + + + + 文件操作可使用右键 + + 已全部加载,共0 + + + +
    + + + + + + + + +
    + + +
    + + + + + + + + + +
    + +
    + + + + +
    +
    +{/block} \ No newline at end of file diff --git a/application/index/view/user/info.html b/application/index/view/user/info.html new file mode 100644 index 0000000..996265a --- /dev/null +++ b/application/index/view/user/info.html @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + {eq name="$vip_info.is_vip" value="1"} + VIP到期时间:{$vip_info.expire_time} + {else/} + 未开通 + {/eq} +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    + + + + + \ No newline at end of file diff --git a/application/index/view/user/login.html b/application/index/view/user/login.html new file mode 100644 index 0000000..2e5b6be --- /dev/null +++ b/application/index/view/user/login.html @@ -0,0 +1,366 @@ + + + + + + + 会员登录 - {$Think.config.basic.site_title} + + + + + + + + + +{eq name="layer" value="1"} +
    + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    请输入密码
    +
    + +
    +
    +
    + +
    + +
    + +
    +{/eq} + +{eq name="layer" value="0"} +
    + +
    +
    + + +
    +
    +
    为用户而变革,越简单越好,越快越好 !
    +
    会分享,就会有收获!
    + +
    + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    请输入密码
    +
    + +
    +
    +
    + +
    + + +
    + +
    +{/eq} + + +
    + +{eq name="layer" value="0"} + +
    © 2021 {$Think.config.basic.site_title}
    +{/eq} + + \ No newline at end of file diff --git a/application/index/view/user/reset.html b/application/index/view/user/reset.html new file mode 100644 index 0000000..76dfc3b --- /dev/null +++ b/application/index/view/user/reset.html @@ -0,0 +1,133 @@ + + + + + + + 重置密码 - {$Think.config.basic.site_title} + + + + + + + + +
    + +
    +
    + + +
    +
    +
    为用户而变革,越简单越好,越快越好 !
    +
    会分享,就会有收获!
    + +
    + +
    + 设置密码 +
    + +
    + +
    + +
    + +
    + +
    + +
    +
    请设置密码
    +
    + +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    © 2021 {$Think.config.basic.site_title}
    + + \ No newline at end of file diff --git a/application/index/view/user/vip.html b/application/index/view/user/vip.html new file mode 100644 index 0000000..300d301 --- /dev/null +++ b/application/index/view/user/vip.html @@ -0,0 +1,133 @@ + + + + + + + + + + + +
    + +
    +
    +
    + +

    开通账号: + {eq name="$vip_info.is_vip" value="1"} + {$info.nickname} + {else/} + {$info.nickname} + {/eq} +

    +
    + 开通VIP会员,畅享极速下载! +
    +
    +
    +
      + {volist name="$rule" id="vo"} +
    • + +
    • + {/volist} +
    +
    +
    + 支付方式: + + + + + + +
    +
    + 应付金额: +

    0.00元

    +
    +
    +
    + + 网盘运营需要成本。您的支持,就是我们更好的动力! +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/index/view/user/vip_wap.html b/application/index/view/user/vip_wap.html new file mode 100644 index 0000000..8ba208f --- /dev/null +++ b/application/index/view/user/vip_wap.html @@ -0,0 +1,150 @@ + + + + + + + Document + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/index/view/user/withdraw.html b/application/index/view/user/withdraw.html new file mode 100644 index 0000000..d844939 --- /dev/null +++ b/application/index/view/user/withdraw.html @@ -0,0 +1,67 @@ + + + + + + + + + + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/application/provider.php b/application/provider.php new file mode 100644 index 0000000..e474e82 --- /dev/null +++ b/application/provider.php @@ -0,0 +1,15 @@ + +// +---------------------------------------------------------------------- + +// 应用容器绑定定义 +return [ + +]; diff --git a/application/tags.php b/application/tags.php new file mode 100644 index 0000000..a38ed9a --- /dev/null +++ b/application/tags.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +// 应用行为扩展定义文件 +return [ + // 应用初始化 + 'app_init' => [ + 'app\\common\\behavior\\LoadConfigRun' + ], + // 应用开始 + 'app_begin' => [], + // 模块初始化 + 'module_init' => [], + // 操作开始执行 + 'action_begin' => [], + // 视图内容过滤 + 'view_filter' => [], + // 日志写入 + 'log_write' => [], + // 应用结束 + 'app_end' => [], +]; diff --git a/build.php b/build.php new file mode 100644 index 0000000..34ba3c8 --- /dev/null +++ b/build.php @@ -0,0 +1,26 @@ + +// +---------------------------------------------------------------------- + +return [ + // 生成应用公共文件 + '__file__' => ['common.php'], + + // 定义demo模块的自动生成 (按照实际定义的文件名生成) + 'demo' => [ + '__file__' => ['common.php'], + '__dir__' => ['behavior', 'controller', 'model', 'view'], + 'controller' => ['Index', 'Test', 'UserType'], + 'model' => ['User', 'UserType'], + 'view' => ['index/index'], + ], + + // 其他更多的模块定义 +]; diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..9a14f3d --- /dev/null +++ b/composer.json @@ -0,0 +1,43 @@ +{ + "name": "topthink/think", + "description": "the new thinkphp framework", + "type": "project", + "keywords": [ + "framework", + "thinkphp", + "ORM" + ], + "homepage": "http://thinkphp.cn/", + "license": "Apache-2.0", + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "require": { + "php": ">=7.0", + "topthink/framework": "5.1.*", + "ext-json": "*", + "topthink/think-captcha": "2.0.*", + "ext-fileinfo": "*", + "aferrandini/phpqrcode": "^1.0", + "ext-mbstring": "*", + "phpmailer/phpmailer": "^6.5", + "ext-iconv": "*", + "ext-curl": "*", + "aliyuncs/oss-sdk-php": "^2.4", + "qcloud/cos-sdk-v5": "^2.3" + }, + "autoload": { + "psr-4": { + "app\\": "application" + } + }, + "extra": { + "think-path": "thinkphp" + }, + "config": { + "preferred-install": "dist" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..55f6b80 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1106 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "b9ba42fa345853d6f2e242a9db638267", + "packages": [ + { + "name": "aferrandini/phpqrcode", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/aferrandini/PHPQRCode.git", + "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", + "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "PHPQRCode": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ariel Ferrandini", + "email": "arielferrandini@gmail.com", + "homepage": "http://www.ferrandini.com/", + "role": "Developer" + } + ], + "description": "PHPQRCode porting and changed for PHP 5.3 compatibility", + "homepage": "https://github.com/aferrandini/PHPQRCode", + "keywords": [ + "barcode", + "php", + "qrcode" + ], + "abandoned": "endroid/qr-code", + "time": "2013-07-08T09:39:08+00:00" + }, + { + "name": "aliyuncs/oss-sdk-php", + "version": "v2.4.3", + "source": { + "type": "git", + "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git", + "reference": "4ccead614915ee6685bf30016afb01aabd347e46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/4ccead614915ee6685bf30016afb01aabd347e46", + "reference": "4ccead614915ee6685bf30016afb01aabd347e46", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "*", + "satooshi/php-coveralls": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "OSS\\": "src/OSS" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aliyuncs", + "homepage": "http://www.aliyun.com" + } + ], + "description": "Aliyun OSS SDK for PHP", + "homepage": "http://www.aliyun.com/product/oss/", + "time": "2021-08-25T13:03:58+00:00" + }, + { + "name": "guzzlehttp/command", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/command.git", + "reference": "14eaba459ad9f97d11637821d95c0a5463d0d515" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/command/zipball/14eaba459ad9f97d11637821d95c0a5463d0d515", + "reference": "14eaba459ad9f97d11637821d95c0a5463d0d515", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "guzzlehttp/guzzle": "^7.3", + "guzzlehttp/promises": "^1.3", + "guzzlehttp/psr7": "^1.7 || ^2.0", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Command\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + } + ], + "description": "Provides the foundation for building command-based web service clients", + "time": "2021-08-14T22:00:15+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7008573787b430c1c1f650e3722d9bba59967628" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7 || ^2.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.3-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "time": "2021-03-23T11:33:13+00:00" + }, + { + "name": "guzzlehttp/guzzle-services", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle-services.git", + "reference": "acd7ab1b83658ad7c1abd2a0871b825f65007202" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle-services/zipball/acd7ab1b83658ad7c1abd2a0871b825f65007202", + "reference": "acd7ab1b83658ad7c1abd2a0871b825f65007202", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "guzzlehttp/command": "^1.2", + "guzzlehttp/guzzle": "^7.3", + "guzzlehttp/psr7": "^1.7 || ^2.0", + "guzzlehttp/uri-template": "^0.2 || ^1.0", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8" + }, + "suggest": { + "gimler/guzzle-description-loader": "^0.0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Command\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "Stefano Kowalke", + "email": "blueduck@mail.org", + "homepage": "https://github.com/konafets" + } + ], + "description": "Provides an implementation of the Guzzle Command library that uses Guzzle service descriptions to describe web services, serialize requests, and parse responses into easy to use model structures.", + "time": "2021-08-14T22:36:10+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2021-03-07T09:25:29+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2021-06-30T20:03:07+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "88fcf8a3ea7489a8af6b25c9dfd3f688ddb51966" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/88fcf8a3ea7489a8af6b25c9dfd3f688ddb51966", + "reference": "88fcf8a3ea7489a8af6b25c9dfd3f688ddb51966", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos", + "role": "Developer" + } + ], + "description": "A polyfill class for uri_template of PHP", + "homepage": "https://github.com/guzzlehttp/uri-template", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "time": "2021-08-14T22:34:51+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.5.1", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355", + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "time": "2021-08-18T09:14:16+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "qcloud/cos-sdk-v5", + "version": "v2.3.3", + "source": { + "type": "git", + "url": "https://github.com/tencentyun/cos-php-sdk-v5.git", + "reference": "9690eb289f5aa3c158a50e4061abfe9b9ad32421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tencentyun/cos-php-sdk-v5/zipball/9690eb289f5aa3c158a50e4061abfe9b9ad32421", + "reference": "9690eb289f5aa3c158a50e4061abfe9b9ad32421", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "guzzlehttp/guzzle": ">=6.2.1", + "guzzlehttp/guzzle-services": ">=1.1", + "guzzlehttp/psr7": "<=2.0", + "php": ">=5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Qcloud\\Cos\\": "src/Qcloud/Cos/" + }, + "files": [ + "src/Qcloud/Cos/Common.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "yaozongyou", + "email": "yaozongyou@vip.qq.com" + }, + { + "name": "lewzylu", + "email": "327874225@qq.com" + }, + { + "name": "tuunalai", + "email": "550566181@qq.com" + } + ], + "description": "PHP SDK for QCloud COS", + "keywords": [ + "cos", + "php", + "qcloud" + ], + "time": "2021-09-23T09:30:18+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2021-07-28T13:41:28+00:00" + }, + { + "name": "topthink/framework", + "version": "v5.1.41", + "source": { + "type": "git", + "url": "https://github.com/top-think/framework.git", + "reference": "7137741a323a4a60cfca334507cd1812fac91bb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/framework/zipball/7137741a323a4a60cfca334507cd1812fac91bb2", + "reference": "7137741a323a4a60cfca334507cd1812fac91bb2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6.0", + "topthink/think-installer": "2.*" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.0", + "mikey179/vfsstream": "~1.6", + "phpdocumentor/reflection-docblock": "^2.0", + "phploc/phploc": "2.*", + "phpunit/phpunit": "^5.0|^6.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "think-framework", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + }, + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "the new thinkphp framework", + "homepage": "http://thinkphp.cn/", + "keywords": [ + "framework", + "orm", + "thinkphp" + ], + "time": "2021-01-11T02:51:29+00:00" + }, + { + "name": "topthink/think-captcha", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-captcha.git", + "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-captcha/zipball/54c8a51552f99ff9ea89ea9c272383a8f738ceee", + "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "topthink/framework": "5.1.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\captcha\\": "src/" + }, + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "captcha package for thinkphp5", + "time": "2017-12-31T16:37:49+00:00" + }, + { + "name": "topthink/think-installer", + "version": "v2.0.5", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-installer.git", + "reference": "38ba647706e35d6704b5d370c06f8a160b635f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88", + "reference": "38ba647706e35d6704b5d370c06f8a160b635f88", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "composer-plugin-api": "^1.0||^2.0" + }, + "require-dev": { + "composer/composer": "^1.0||^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": "think\\composer\\Plugin" + }, + "autoload": { + "psr-4": { + "think\\composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "time": "2021-01-14T12:12:14+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.0", + "ext-json": "*", + "ext-fileinfo": "*", + "ext-mbstring": "*", + "ext-iconv": "*", + "ext-curl": "*" + }, + "platform-dev": [] +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..73b58c9 --- /dev/null +++ b/config/app.php @@ -0,0 +1,148 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 应用设置 +// +---------------------------------------------------------------------- + +return [ + // 应用名称 + 'app_name' => 'SkyPan', + // 应用地址 + 'app_host' => '', + // 应用调试模式 + 'app_debug' => true, + // 应用Trace + 'app_trace' => false, + // 是否支持多模块 + 'app_multi_module' => true, + // 入口自动绑定模块 + 'auto_bind_module' => false, + // 注册的根命名空间 + 'root_namespace' => [], + // 默认输出类型 + 'default_return_type' => 'html', + // 默认AJAX 数据返回格式,可选json xml ... + 'default_ajax_return' => 'json', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', + // 默认时区 + 'default_timezone' => 'Asia/Shanghai', + // 是否开启多语言 + 'lang_switch_on' => false, + // 默认全局过滤方法 用逗号分隔多个 + 'default_filter' => '', + // 默认语言 + 'default_lang' => 'zh-cn', + // 应用类库后缀 + 'class_suffix' => false, + // 控制器类后缀 + 'controller_suffix' => false, + + // +---------------------------------------------------------------------- + // | 模块设置 + // +---------------------------------------------------------------------- + + // 默认模块名 + 'default_module' => 'index', + // 禁止访问模块 + 'deny_module_list' => ['common'], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 默认验证器 + 'default_validate' => '', + // 默认的空模块名 + 'empty_module' => '', + // 默认的空控制器名 + 'empty_controller' => 'Error', + // 操作方法前缀 + 'use_action_prefix' => false, + // 操作方法后缀 + 'action_suffix' => '', + // 自动搜索控制器 + 'controller_auto_search' => false, + + // +---------------------------------------------------------------------- + // | URL设置 + // +---------------------------------------------------------------------- + + // PATHINFO变量名 用于兼容模式 + 'var_pathinfo' => 's', + // 兼容PATH_INFO获取 + 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], + // pathinfo分隔符 + 'pathinfo_depr' => '/', + // HTTPS代理标识 + 'https_agent_name' => '', + // IP代理获取标识 + 'http_agent_ip' => 'X-REAL-IP', + // URL伪静态后缀 + 'url_html_suffix' => '', + // URL普通方式参数 用于自动生成 + 'url_common_param' => false, + // URL参数方式 0 按名称成对解析 1 按顺序解析 + 'url_param_type' => 0, + // 是否开启路由延迟解析 + 'url_lazy_route' => false, + // 是否强制使用路由 + 'url_route_must' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => false, + // 使用注解路由 + 'route_annotation' => false, + // 域名根,如thinkphp.cn + 'url_domain_root' => '', + // 是否自动转换URL中的控制器和操作名 + 'url_convert' => true, + // 默认的访问控制器层 + 'url_controller_layer' => 'controller', + // 表单请求类型伪装变量 + 'var_method' => '_method', + // 表单ajax伪装变量 + 'var_ajax' => '_ajax', + // 表单pjax伪装变量 + 'var_pjax' => '_pjax', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + // 是否开启路由缓存 + 'route_check_cache' => false, + // 路由缓存的Key自定义设置(闭包),默认为当前URL和请求类型的md5 + 'route_check_cache_key' => '', + // 路由缓存类型及参数 + 'route_cache_option' => [], + + // 默认跳转页面对应的模板文件 + 'dispatch_success_tmpl' => env('root_path') . 'config/tpl/success_tmpl.tpl', + 'dispatch_error_tmpl' => env('root_path') . 'config/tpl/error_tmpl.tpl', + + // 异常页面的模板文件 + //'exception_tmpl' => env('root_path') . 'config/tpl/error_404_tmpl.tpl', + + // 错误显示信息,非调试模式有效 + 'error_message' => '页面错误!请稍后再试~', + // 显示错误信息 + 'show_error_msg' => false, + // 异常处理handle类 留空使用 \think\exception\Handle + 'exception_handle' => '', + // 密码盐 + 'pass_salt' => 'tbg-sk-pan-ver-1-1-0' + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..985dbb1 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,25 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 缓存设置 +// +---------------------------------------------------------------------- + +return [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + 'path' => '', + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, +]; diff --git a/config/cookie.php b/config/cookie.php new file mode 100644 index 0000000..1de0708 --- /dev/null +++ b/config/cookie.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | Cookie设置 +// +---------------------------------------------------------------------- +return [ + // cookie 名称前缀 + 'prefix' => '', + // cookie 保存时间 + 'expire' => 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => '', + // 是否使用 setcookie + 'setcookie' => true, +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..b7d18b0 --- /dev/null +++ b/config/database.php @@ -0,0 +1,63 @@ + +// +---------------------------------------------------------------------- + +return [ + // 数据库类型 + 'type' => 'mysql', + // 服务器地址 + 'hostname' => '127.0.0.1', + // 数据库名 + 'database' => 'skpan', + // 用户名 + 'username' => 'root', + // 密码 + 'password' => 'root', + // 端口 + 'hostport' => '3306', + // 连接dsn + 'dsn' => '', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => 'sk_', + // 数据库调试模式 + 'debug' => true, + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 自动读取主库数据 + 'read_master' => false, + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 数据集返回类型 + 'resultset_type' => 'array', + // 自动写入时间戳字段 + 'auto_timestamp' => false, + // 时间字段取出后的默认时间格式 + 'datetime_format' => 'Y-m-d H:i:s', + // 是否需要进行SQL性能分析 + 'sql_explain' => false, + // Builder类 + 'builder' => '', + // Query类 + 'query' => '\\think\\db\\Query', + // 是否需要断线重连 + 'break_reconnect' => false, + // 断线标识字符串 + 'break_match_str' => [], +]; diff --git a/config/log.php b/config/log.php new file mode 100644 index 0000000..b3d87b4 --- /dev/null +++ b/config/log.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 日志设置 +// +---------------------------------------------------------------------- +return [ + // 日志记录方式,内置 file socket 支持扩展 + 'type' => 'File', + // 日志保存目录 + 'path' => '', + // 日志记录级别 + 'level' => [], + // 单文件日志写入 + 'single' => false, + // 独立日志级别 + 'apart_level' => [], + // 最大日志文件数量 + 'max_files' => 0, + // 是否关闭日志写入 + 'close' => false, +]; diff --git a/config/menu.php b/config/menu.php new file mode 100644 index 0000000..3d73e9b --- /dev/null +++ b/config/menu.php @@ -0,0 +1,138 @@ + 1, + 'title' => '面板首页', + 'icon' => 'layui-icon layui-icon-console', + 'type' => 1, + 'href' => url('dashboard/index'), + ], + [ + 'id' => 2, + 'title' => '用户管理', + 'icon' => 'layui-icon layui-icon-component', + 'type' => 0, + 'href' => '', + 'children' => [ + [ + 'id' => 121, + 'title' => '用户列表', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('user/index') + ], + [ + 'id' => 122, + 'title' => '用户组管理', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('group/index') + ], + ] + ], + [ + 'id' => 3, + 'title' => '文件管理', + 'icon' => 'layui-icon layui-icon-template-1', + 'type' => 0, + 'href' => '', + 'children' => [ + [ + 'id' => 131, + 'title' => '文件列表', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('file/index') + ], + [ + 'id' => 132, + 'title' => '文件回收站', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('recycle/index') + ], + ] + ], + [ + 'id' => 4, + 'title' => '储存策略', + 'icon' => 'layui-icon layui-icon-util', + 'type' => 1, + 'href' => url('policy/index'), + ], + [ + 'id' => 5, + 'title' => '订单记录', + 'icon' => 'layui-icon layui-icon-chart', + 'type' => 1, + 'href' => url('order/index'), + ], + [ + 'id' => 6, + 'title' => '提现列表', + 'icon' => 'layui-icon layui-icon-form', + 'type' => 1, + 'href' => url('withdraw/index'), + ], + [ + 'id' => 7, + 'title' => '实名认证', + 'icon' => 'layui-icon layui-icon-vercode', + 'type' => 1, + 'href' => url('certify/index'), + ], + [ + 'id' => 8, + 'title' => '举报处理', + 'icon' => 'layui-icon layui-icon-about', + 'type' => 1, + 'href' => url('report/index'), + ], + [ + 'id' => 10, + 'title' => '系统设置', + 'icon' => 'layui-icon layui-icon-set-fill', + 'type' => 0, + 'href' => '', + 'children' => [ + [ + 'id' => 101, + 'title' => '基本设置', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('setting/basic') + ], + [ + 'id' => 102, + 'title' => '注册访问', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('setting/register') + ], + [ + 'id' => 103, + 'title' => '支付配置', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('setting/pay') + ], + [ + 'id' => 104, + 'title' => '邮件配置', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('setting/email') + ], + [ + 'id' => 105, + 'title' => 'VIP配置', + 'type' => 1, + 'openType' => '_iframe', + 'href' => url('setting/vip') + ] + ] + ] + +]; \ No newline at end of file diff --git a/config/middleware.php b/config/middleware.php new file mode 100644 index 0000000..fe15ec3 --- /dev/null +++ b/config/middleware.php @@ -0,0 +1,18 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 中间件配置 +// +---------------------------------------------------------------------- +return [ + // 默认中间件命名空间 + 'default_namespace' => 'app\\http\\middleware\\', +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..1d7b6c6 --- /dev/null +++ b/config/session.php @@ -0,0 +1,26 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 会话设置 +// +---------------------------------------------------------------------- + +return [ + 'id' => '', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // SESSION 前缀 + 'prefix' => 'think', + // 驱动方式 支持redis memcache memcached + 'type' => '', + // 是否自动开启 SESSION + 'auto_start' => true, +]; diff --git a/config/template.php b/config/template.php new file mode 100644 index 0000000..653184c --- /dev/null +++ b/config/template.php @@ -0,0 +1,40 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 模板设置 +// +---------------------------------------------------------------------- + + +return [ + // 模板引擎类型 支持 php think 支持扩展 + 'type' => 'Think', + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 + 'auto_rule' => 1, + // 模板路径 + 'view_path' => '', + // 模板后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', + // 全局替换 + 'tpl_replace_string' => [ + '__STATIC__'=>'/assets', + ] +]; diff --git a/config/tpl/error_404_tmpl.tpl b/config/tpl/error_404_tmpl.tpl new file mode 100644 index 0000000..c2a1089 --- /dev/null +++ b/config/tpl/error_404_tmpl.tpl @@ -0,0 +1,31 @@ + + + + + + + + + + +
    + +
    +

    404

    +

    抱歉,你访问的页面不存在

    + +
    +
    + + + + + + diff --git a/config/tpl/error_tmpl.tpl b/config/tpl/error_tmpl.tpl new file mode 100644 index 0000000..ccaefd5 --- /dev/null +++ b/config/tpl/error_tmpl.tpl @@ -0,0 +1,66 @@ + + + + + + {$msg} + + + + +
    +
    +
    +
    + +
    +

    {$msg}

    +

    + {$data} +

    +
    + {if $msg=='权限不足'} + 立即关闭 + + {else} + 立即跳转 + + {/if} +
    +
    +
    +
    + + + + + diff --git a/config/tpl/success_tmpl.tpl b/config/tpl/success_tmpl.tpl new file mode 100644 index 0000000..0b3fff6 --- /dev/null +++ b/config/tpl/success_tmpl.tpl @@ -0,0 +1,46 @@ + + + + + + {$msg} + + + + +
    +
    +
    +
    + +
    +

    {$msg}

    +

    + {$data} +

    +
    + {neq name="$url" value="/index/none"} + 立即跳转 + + {/neq} +
    +
    +
    +
    + + + diff --git a/extend/Qrcode/Qrcode.php b/extend/Qrcode/Qrcode.php new file mode 100644 index 0000000..65472eb --- /dev/null +++ b/extend/Qrcode/Qrcode.php @@ -0,0 +1,12 @@ +12 原价15元|高速多线程下载文件,原价9元。|0\n月付VIP|2|30|月|6.3|立省175元 仅 1.33元/月|高速多线程下载文件,比周付省11%。|1\n半年VIP|3|180|半年|5.2|立省420元 原价450元|高速多线程下载文件,比月付省35%。|1\n一年VIP|4|360|年|4.7|立省420元 原价450元|高速多线程下载文件,比月付省50%。|1\n永久VIP|20|9999|永久|2.7|立省420元 原价450元|高速多线程下载文件,比月付省73%。|0','vip'),(19,'site_email','test@admin.com','basic'),(20,'smtp_host','smtp.qq.com','email'),(21,'smtp_port','465','email'),(22,'nickname','SK网盘官方','email'),(23,'username','zygphper@foxmail.com','email'),(24,'password','xyuufcokuxendbfi','email'),(25,'template_forget','

     

    \n\n\n\n\n\n\n\n\n
     \n
    \n\n\n\n\n\n\n\n\n\n
    找回密码验证 -【{site_title}】
    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    亲爱的 {username}
    请点击下方按钮完成密码重设。十分钟之内有效,如果非你本人操作,请忽略此邮件。
    点击设置新密码
    感谢您选择{site_title}
    \n
    \n
    \n\n\n\n\n\n\n
    此邮件由系统自动发送,请不要直接回复。
    \n

    \n
    \n
     
    ','email'),(26,'site_kefu','客服QQ:1665555255

    客服在线时间:早上9点-晚上22点

    如遇到任何问题请联系客服处理
    对此给您带来的不便深感抱歉','basic'),(27,'vip_profit','50','vip'),(28,'index_theme','new1','basic'); +/*!40000 ALTER TABLE `sk_setting` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sk_shares` +-- + +DROP TABLE IF EXISTS `sk_shares`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sk_shares` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `source_id` int(11) NOT NULL DEFAULT '0' COMMENT '文件 / 目录ID', + `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0 文件 1目录', + `speed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '限速开关', + `code` varchar(10) NOT NULL DEFAULT '' COMMENT '短网址代码', + `pwd` varchar(8) DEFAULT NULL COMMENT '分享密码', + `pwd_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '密码状态', + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=129 DEFAULT CHARSET=utf8 COMMENT='分享表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sk_shares` +-- + +LOCK TABLES `sk_shares` WRITE; +/*!40000 ALTER TABLE `sk_shares` DISABLE KEYS */; +INSERT INTO `sk_shares` VALUES (1,5,13,1,0,'QVNbueubNW','fmrw',0),(4,5,54,0,0,'aYbA3iNCSk','kHIb',0),(5,5,55,0,0,'JJBjIvUM80','',0),(6,5,14,1,0,'7NVjYnhxwT','jPAT',0),(7,5,56,0,0,'yaYJ3mrsYP','Wt9G',0),(8,5,57,0,0,'qy2a6fp7PW','CkLp',0),(9,5,58,0,0,'7bmANrUqUE','MyFS',0),(10,5,59,0,0,'NJVjEzpLFh','BFaM',0),(11,5,60,0,0,'mmArMvpqNn','5XPd',0),(12,5,61,0,0,'nUjuQz1qb2','98Zl',0),(13,5,62,0,0,'MzUnIjCVom','5ERQ',0),(14,5,63,0,0,'IziqeylQaJ','1Qmi',0),(15,5,64,0,0,'2uAnEr0QFn','FNx2',0),(16,5,65,0,0,'YB7bI3IucT','MCpN',0),(17,5,66,0,0,'qERnMf08KE','iKVU',0),(18,5,67,0,0,'YFJbiySL45','c8Mu',0),(19,5,68,0,0,'UFjIf2QqnV','3G2H',0),(20,5,69,0,0,'EzuYburVJs','qkIU',0),(21,5,70,0,0,'6Vzmmu1ksV','SHdA',0),(22,5,71,0,0,'MbIr2yNNJT','yV7I',0),(23,5,72,0,0,'JzyeInn1Pi','Gmmb',0),(24,5,73,0,0,'imiQraBLcN','Pa2p',0),(25,5,74,0,0,'EJZRZrJMbq','W2IS',0),(26,5,75,0,0,'eqAfaiWH7R','D1B8',0),(27,5,76,0,0,'UFj2uq57f4','SQ9u',0),(28,5,77,0,0,'Bf6vEfdCoU','sgnk',0),(29,5,78,0,0,'imaqyala0O','oTAG',0),(30,5,79,0,0,'VfMV7fnMhl','TWAr',0),(31,5,80,0,0,'QVbeqiRTAZ','eaCW',0),(32,5,81,0,0,'JBBfUvPgwv','uzc5',0),(33,5,82,0,0,'FFNJzmsgjK','NU7M',0),(34,5,83,0,0,'2aiEZbNudq','ynBq',0),(35,5,84,0,0,'3aMFVfKSwN','gkRD',0),(36,5,85,0,0,'uqiYfaxfkv','QxfD',0),(37,5,86,0,0,'VVZzyaLcG0','HRhA',0),(38,5,87,0,0,'FJv2mmUflN','Fg90',0),(39,5,15,1,0,'73eA32Tg7o','4uA5',0),(40,5,16,1,0,'YNfUzmZhx8','nEMH',0),(41,5,17,1,0,'eiiQFjdEpA','sBNK',0),(42,5,18,1,0,'YreIjqrjMS','CdZc',0),(43,5,88,0,0,'QfIzAvSL40','lZcP',0),(44,4,19,1,0,'j6ZnqaMTRo','wAvF',0),(45,4,89,0,0,'VZVnumE7Km','02tC',0),(46,5,90,0,0,'NbUFFfo3sb','J8tF',0),(47,5,91,0,0,'EfQ3QbG4aK','Bctq',0),(48,5,92,0,0,'NZb6B3ic49','jrDc',0),(49,5,93,0,0,'aqUNNnZmR2','632a',0),(50,5,94,0,0,'qeeMFrQTea','adpb',0),(51,5,95,0,0,'v6vyIbYLEW','5Guc',0),(52,5,96,0,0,'FZrIZ3YkZE','7d65',0),(53,5,97,0,0,'FzyqmqBrEb','2xry',0),(54,5,98,0,0,'qim2qmNTqN','2yOS',0),(55,5,99,0,0,'iuQJnuSQHT','UJmM',0),(56,5,100,0,0,'MBbuUrgjwi','lmSD',0),(57,5,101,0,0,'3yUF7vPc7e','I0uV',0),(58,5,102,0,0,'mm6ZRfXZCa','prqi',0),(59,5,103,0,0,'ryqeuivWSs','i5Ly',0),(60,5,104,0,0,'UN3M3mhxHw','ZpfC',0),(61,5,105,0,0,'FRZjyewFnu','SRYT',0),(62,5,106,0,0,'muQ3aeS48W','ic2y',0),(63,5,107,0,0,'qY3yi2Wfc9','nRHo',0),(64,5,108,0,0,'iAfEryWcv1','upsi',0),(65,5,109,0,0,'7VVjUzFoMO','jwTR',0),(66,5,110,0,0,'ENrUZfUfgi','xYVP',0),(67,5,111,0,0,'nMNf2u68pm','idbJ',0),(68,5,112,0,0,'RvINn2qOaE','nFo1',0),(69,5,113,0,0,'F3aYnacuCu','azXJ',0),(70,5,114,0,0,'6FR3mebo4b','IqyQ',0),(71,5,115,0,0,'mi2Qjm9MOT','6tKy',0),(72,5,116,0,0,'U32IvaBozx','JP7x',0),(73,5,117,0,0,'IVRBJbXC8c','ZO9x',0),(74,5,118,0,0,'ANn2muSUlr','fWlr',0),(75,5,119,0,0,'qiYvUv3ERC','GP8y',0),(76,5,120,0,0,'jQVRRftjKV','y8Gz',0),(77,5,121,0,0,'vmyIre9Isy','QQ9G',0),(78,5,122,0,0,'iQ7Nva6kEo','H2P8',0),(79,5,123,0,0,'6BBn2eGfaa','Fngu',0),(80,5,124,0,0,'FZBFBjTu6D','QN63',0),(81,5,125,0,0,'aimiyqgMq7','fIjC',0),(82,5,126,0,0,'q6Nn2iu8v9','cZ6U',0),(83,5,127,0,0,'umy6ZnVIzB','YO7G',0),(84,5,128,0,0,'zqmUZfk2y3','MnYF',0),(85,5,129,0,0,'3eEbUzMnxT','2zTb',0),(86,5,130,0,0,'JZjU3aeep6','6fuE',0),(87,5,131,0,0,'2IF3u25i8Y','LcbB',0),(88,5,132,0,0,'biaiaqZkzS','OqbL',0),(89,5,133,0,0,'FfQRJjr7NK','6btE',0),(90,5,134,0,0,'BRFnQfqGqa','wgTz',0),(91,5,135,0,0,'RzmmYv8Qjg','OJcS',0),(92,5,136,0,0,'nMRvI3Xo05','b8t3',0),(93,5,137,0,0,'y67nEnWzjz','lhK7',0),(94,5,138,0,0,'3YVB3qb5b7','o3GV',0),(95,5,139,0,0,'r6jEJfmGhy','3U6u',0),(96,5,140,0,0,'yI7jAvQrtQ','m3Do',0),(97,5,141,0,0,'yAR7fqlAYT','A1ft',0),(98,5,142,0,0,'VJbai2zHA8','lQjh',0),(99,5,143,0,0,'NrYVvqD4sP','StfT',0),(100,5,144,0,0,'uauIFjPko6','sijd',0),(101,5,21,1,0,'eIRrQnOHwE','RhXA',0),(102,5,145,0,0,'UbIRB3mwAm','lFCk',0),(103,5,146,0,0,'mMVJryGgMx','tSWc',0),(104,5,147,0,0,'jaymMn1wGq','mdRd',0),(105,5,148,0,0,'ZvIJrqS7Le','wT76',0),(106,5,149,0,0,'Vb2UVvXaa4','scFW',0),(107,5,150,0,0,'NjuIn2UYst','FpEu',0),(108,5,151,0,0,'7zMnamgVkz','0f5q',0),(109,5,152,0,0,'NRvyUj2gSj','HS0r',0),(110,5,153,0,0,'MfIFNv3eXU','iXem',0),(111,5,154,0,0,'3IF7RrQmXS','j6h7',0),(112,5,155,0,0,'EbUnMz8tEk','Kd6r',0),(113,5,156,0,0,'yUfI7vCa0g','zVjs',0),(114,5,157,0,0,'YnqQ3uQyZP','uUBj',0),(115,5,158,0,0,'Nnqauir1hq','QCNO',0),(116,5,159,0,0,'EJbayy279G','CBDs',0),(117,5,160,0,0,'zmUzuu8VXP','R3P7',0),(118,5,161,0,0,'RruAjyBGlS','dnbr',0),(119,5,162,0,0,'22MRZfAi5u','IMMz',0),(120,4,163,0,0,'jEjyEbzADW','Tn3M',0),(121,4,164,0,0,'AZfqaqOZHp','0xsQ',0),(122,4,22,1,0,'RBf6zyBuO9','f4fg',0),(123,4,165,0,0,'Z7jqqaU6RB','Wb6i',0),(124,4,23,1,0,'nY7B3anZl7','QkE0',0),(125,4,166,0,0,'63YJvq0WBf','6666',1),(126,4,167,0,0,'2I3Mzyqy4W','HOO8',1),(127,5,168,0,0,'z6ju6fQ6l1','UW4P',1),(128,5,169,0,0,'AFBnEnmKNE','c5ug',0); +/*!40000 ALTER TABLE `sk_shares` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sk_stores` +-- + +DROP TABLE IF EXISTS `sk_stores`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sk_stores` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0' COMMENT '所属用户', + `shares_id` int(11) NOT NULL DEFAULT '0' COMMENT '分享id', + `origin_name` varchar(255) NOT NULL DEFAULT '' COMMENT '源文件名', + `file_name` text NOT NULL COMMENT '存储文件名', + `size` bigint(20) NOT NULL DEFAULT '0' COMMENT '文件大小', + `meta` text COMMENT '文件元属性', + `mime_type` varchar(60) NOT NULL DEFAULT '' COMMENT '文件类型', + `ext` varchar(60) NOT NULL DEFAULT '' COMMENT '文件后缀', + `parent_folder` int(11) NOT NULL DEFAULT '0' COMMENT '所属目录', + `policy_id` int(11) NOT NULL DEFAULT '0' COMMENT '存储策略', + `count_down` int(11) NOT NULL DEFAULT '0' COMMENT '下载量', + `count_open` int(11) NOT NULL DEFAULT '0' COMMENT '浏览量', + `dir` text COMMENT '文件目录', + `desc` text COMMENT '文件描述', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间', + `delete_time` int(11) DEFAULT NULL COMMENT '软删除', + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=170 DEFAULT CHARSET=utf8 COMMENT='储存文件'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sk_stores` +-- + +LOCK TABLES `sk_stores` WRITE; +/*!40000 ALTER TABLE `sk_stores` DISABLE KEYS */; +INSERT INTO `sk_stores` VALUES (163,4,120,'hidatarecovery_7df90c1c.exe','/uploads/20210929/4/file_6153ee4b6ce301632890443.exe',1449440,'','','exe',23,4,20,37,'',NULL,1632890447,1632902713,NULL),(166,4,125,'new-skapn.rar','/uploads/20210929/4/file_6154301dc6bb01632907293.rar',1632931,'','','rar',1,5,5,15,'',NULL,1632907297,1632907297,NULL),(167,4,126,'ShenDuHuiFu_DNGJ8.1.4.exe','/uploads/20210929/4/file_615436d49b4601632909012.exe',4394904,'','','exe',1,5,23,55,'',NULL,1632909021,1632909021,NULL),(169,5,128,'1.png','/uploads/20210930/5/file_61555172827541632981362.png',4286,NULL,'','png',8,5,0,0,NULL,NULL,1632981362,1632981362,NULL); +/*!40000 ALTER TABLE `sk_stores` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sk_users` +-- + +DROP TABLE IF EXISTS `sk_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sk_users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(60) NOT NULL DEFAULT '' COMMENT '用户名', + `nickname` varchar(60) DEFAULT NULL COMMENT '用户昵称', + `email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮箱账号', + `password` varchar(40) NOT NULL DEFAULT '' COMMENT '密码', + `avatar` varchar(255) DEFAULT NULL COMMENT '用户头像', + `desc` varchar(255) DEFAULT NULL COMMENT '个性签名', + `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '用户余额', + `group` int(11) NOT NULL DEFAULT '0' COMMENT '用户组', + `group_expire` int(11) NOT NULL DEFAULT '0' COMMENT '用户组过期时间', + `is_auth` tinyint(3) NOT NULL DEFAULT '0' COMMENT '是否实名认证', + `wx_openid` varchar(64) DEFAULT NULL COMMENT '微信开放平台ID', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '注册时间', + `login_time` int(11) NOT NULL DEFAULT '0' COMMENT '最近登录时间', + `login_real_ip` varchar(60) NOT NULL DEFAULT '', + `status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '用户状态 1 正常 0封禁', + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='用户表'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sk_users` +-- + +LOCK TABLES `sk_users` WRITE; +/*!40000 ALTER TABLE `sk_users` DISABLE KEYS */; +INSERT INTO `sk_users` VALUES (1,'admin','管理员','admin@skpan.net','3e9464c59cc03ef5f3c5ed555e2757e2',NULL,NULL,10.00,1,0,0,NULL,1631009197,0,'',1),(4,'1655545174','DDDAAA','1655545174@qq.com','bbc3b9b91ed52618ee9d2259bd467099','/avatar/20210930/afd3f2595c23f931de482215bbec6243.jpg','你好世界',0.00,3,0,0,NULL,1631186682,0,'',1),(5,'ceshi123','ceshi1233','1950412285@qq.com','221da9e890927b42c61a73770d331f39',NULL,'',270.00,3,0,1,NULL,1631210019,0,'',1),(6,'aa1122','AAAA','aa1122@qq.com','221da9e890927b42c61a73770d331f39',NULL,NULL,0.00,3,0,0,NULL,1631553201,0,'',1),(7,'aa11223','abc','aa1122d@qq.com','99c0342da49856be2e9f6fbf55116e57',NULL,NULL,0.00,3,0,0,NULL,1631553262,0,'',1); +/*!40000 ALTER TABLE `sk_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sk_withdraw` +-- + +DROP TABLE IF EXISTS `sk_withdraw`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `sk_withdraw` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0' COMMENT '提现用户', + `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '提现金额', + `alipay_account` varchar(255) DEFAULT NULL COMMENT '支付宝帐号', + `alipay_name` varchar(60) DEFAULT NULL COMMENT '支付宝姓名', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '提现时间', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '提现状态 0 等待处理 1提现成功', + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='用户提现记录'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sk_withdraw` +-- + +LOCK TABLES `sk_withdraw` WRITE; +/*!40000 ALTER TABLE `sk_withdraw` DISABLE KEYS */; +INSERT INTO `sk_withdraw` VALUES (1,5,20.00,'1655545174@qq.com','蓝天',1631487541,1),(2,5,10.00,'1655545174@qq.com','蓝天',1631489052,1),(3,5,100.00,'1655545174@qq.com','啊啊',1631537650,2),(4,5,20.00,'1655545174@qq.com','啊啊',1631538068,2); +/*!40000 ALTER TABLE `sk_withdraw` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping events for database 'newskpan' +-- + +-- +-- Dumping routines for database 'newskpan' +-- +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2021-09-30 14:22:45 diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..c5a7fbb --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,7 @@ + + RewriteEngine on + RewriteBase / + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L] + \ No newline at end of file diff --git a/public/admin.php b/public/admin.php new file mode 100644 index 0000000..a14d014 --- /dev/null +++ b/public/admin.php @@ -0,0 +1,13 @@ +bind('admin')->run()->send(); diff --git a/public/assets/css/app.css b/public/assets/css/app.css new file mode 100644 index 0000000..bd5024a --- /dev/null +++ b/public/assets/css/app.css @@ -0,0 +1,1673 @@ +body, +html { + margin: 0; + height: 100%; + width: 100%; + font-family: Avenir, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +body { + overflow-x: hidden +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box +} + +a { + text-decoration: none; + color: #fff; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +a:active, +a:hover, +a:link, +a:visited { + text-decoration: none; + outline: 0 +} + +.banner[data-v-785fdba7] { + width: 100%; + height: 48px; + line-height: 40px; + background: linear-gradient(99.78deg, #7a90ff 36.43%, #526efa 61.54%), #fff; + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + font-size: 16px; + text-align: center; + color: #fff; + position: fixed; + top: 0; + transform: translateZ(1000px); + z-index: 1 +} + +.banner .banner-text[data-v-785fdba7] { + width: 477px; + height: 40px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + display: flex +} + +.banner .banner-text .banner-image[data-v-785fdba7] { + position: absolute; + width: 22px; + height: 22px; + background: url(../index_static/img/banner-icon.png); + background-size: cover; + left: 40px; + top: 50%; + transform: translateY(-50%) +} + +.banner .banner-text .banner-content[data-v-785fdba7] { + flex: 1 +} + +.banner .banner-text .banner-content span[data-v-785fdba7]:nth-child(3) { + position: absolute; + margin-left: 8px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAC5SURBVHgB7dfbDYJAEIXhs4Z3pYMtyQ7EEuwIS7EEK9AOtINxJgRddU3MBth5OF+yCdfwB8INICIiGonIBh5pWNRxkcEO3mhUJ+98RdqlTc6g28jIyCkwcir/RjaZHe1hahu2mN9JR0zmez0+QgjHcUH43EM36DEE1tRq5N0mVpmVa9T3fCU2mZUHHWcsI+L7au317F1R24+bpIMHjCvFuFKu44zGbN3GGXl9sN7cxaXE608TERGVewCXtGQospdrRgAAAABJRU5ErkJggg==); + background-size: cover +} + +.banner .banner-icon[data-v-785fdba7] { + position: absolute; + width: 13.5px; + height: 13.5px; + top: 17px; + right: 25.5px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAYAAAAfrhY5AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADXSURBVHgBvZdRDoQgDER7JG8kN5Gb6El3Vnc1QUKxQMf5dcJ7MdqqSBYAkxCjnr9fWPDPLBzwfJ6/aGAwBBIwbgLHrUA5LgIF8C9pITAENPDBy4uuAmawt0Az2EugGzwqMAzuFXADtwq4g60CNLBBYKWCDQJccINAEGZ2wKaAV2EG+sN1hbKOLWCOQAW8UQXw8B6DtI7NA8RdAI2TqyaA5MPFHWwQCCYBDM7qbgE4LYkT9DELwHk7mQVAWos1gaswMcBPAmkhMsAVgZgXIgNcEIha4bW/1C8MRWR4wytkNQAAAABJRU5ErkJggg==); + background-size: cover; + cursor: pointer +} + +.banner.active[data-v-785fdba7] { + top: 0; + z-index: 99999 +} + +@media (max-width:1200px) { + .banner[data-v-785fdba7] { + height: 74px; + line-height: 40px; + font-size: 16px; + background: linear-gradient(92.49deg, #7a90ff 2.19%, #526efa 97.37%), #fff + } + .banner .banner-text[data-v-785fdba7] { + width: 300px + } + .banner .banner-text .banner-image[data-v-785fdba7] { + display: none; + width: 18px; + height: 18px; + left: 0 + } + .banner .banner-icon[data-v-785fdba7] { + top: 30.5px; + right: 30.5px + } +} + +a[data-v-e9e0751c] { + text-decoration: none +} + +.header[data-v-e9e0751c] { + width: 100%; + height: 748px; + /*padding-top: 48px;*/ + background: rgba(224, 229, 255, .58) +} + +.header .header-content[data-v-e9e0751c] { + width: 1200px; + height: 748px; + margin: 0 auto; + position: relative +} + +.header .header-content .header-logo[data-v-e9e0751c] { + position: absolute; + background: url(../index_static/img/logo.png); + background-size: cover; + width: 137px; + height: 32.57px; + margin-top: 32px +} + +.header .header-content .header-body[data-v-e9e0751c] { + width: 100%; + height: 748px; + display: flex; + justify-content: space-between; + align-items: center +} + +.header .header-content .header-body .body-left[data-v-e9e0751c] { + width: 477px; + height: 748px; + z-index: 1 +} + +.header .header-content .header-body .body-left .left-title[data-v-e9e0751c] { + font-style: normal; + font-weight: 800; + font-size: 66px; + line-height: 72px; + color: #0b0e51; + margin-bottom: 20px; + margin-top: 238px; + font-family: Alibaba-PuHuiTi-Heavy +} + +.header .header-content .header-body .body-left .left-text[data-v-e9e0751c] { + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + font-size: 20px; + line-height: 28px; + color: #4154b5; + margin-bottom: 40px +} + +.header .header-content .header-body .body-left .left-download[data-v-e9e0751c] { + display: flex +} + +.header .header-content .header-body .body-left .left-download .apps[data-v-e9e0751c], +.header .header-content .header-body .body-left .left-download .pc[data-v-e9e0751c] { + width: 164px; + height: 60px; + font-style: normal; + border-radius: 16px; + font-weight: 500; + font-size: 16px; + line-height: 60px; + text-align: center +} + +.header .header-content .header-body .body-left .left-download .apps[data-v-e9e0751c] { + background: linear-gradient(96.15deg, #526efa 2.85%, #7a90ff), #fff; + margin-right: 24px +} + +.header .header-content .header-body .body-left .left-download .pc[data-v-e9e0751c] { + border: 2px solid #859aff; + color: #446dff +} + +.header .header-content .header-body .body-left .left-reservation[data-v-e9e0751c] { + margin-top: 28px; + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 20px; + color: #637dff; + position: relative +} + +.header .header-content .header-body .body-left .left-reservation span[data-v-e9e0751c]:nth-child(3) { + position: absolute; + margin-left: 8px; + width: 20px; + height: 20px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEwSURBVHgB7ddBTsJAFMbx7xXiVrgBR/AIehJq2LjUvTGNXsC9IRlv4A30Ct6AIzRhR52O86BtgBIy06SvLN4vIWlgJvxDh2kLKKWUUrXHzE0QiSDgIXOzwuLbH878N6bLV/oMnZtAwGaDW3AcczCLFzcPnSsSWF7hywGr5o2ISJFAk1FejnDXJVJkDdZSvxYTvxapPt27grNrUjSQxUaKB7KYyEECWWhkK5A303WJubOYomdE233x8I9yFNkKXDw705okzK4xNe+U83F7myFcY2gTNJfE8fFndoSnpMAvBJw6xf4Xu19mtGrGYCAH1+cKx328kdkfN0hgaBwTD4yJY6KBsXFMLLBLHJO/Ya2ExFXj+lf84QYd4qqx/bNj/PC9oH/lMXHi0g4PTUoppS7cP/azhivFOT4PAAAAAElFTkSuQmCC); + background-size: cover +} + +.header .header-content .header-body .body-right[data-v-e9e0751c] { + width: 602.45px; + height: 406px; + position: relative +} + +.header .header-content .header-body .body-right .right-round1[data-v-e9e0751c], +.header .header-content .header-body .body-right .right-round2[data-v-e9e0751c], +.header .header-content .header-body .body-right .right-round3[data-v-e9e0751c], +.header .header-content .header-body .body-right .right-round4[data-v-e9e0751c], +.header .header-content .header-body .body-right .right-round5[data-v-e9e0751c] { + position: absolute; + border-radius: 50% +} + +.header .header-content .header-body .body-right .right-round1[data-v-e9e0751c] { + bottom: -27px; + left: -176px; + width: 339px; + height: 339px; + filter: blur(74px) +} + +.header .header-content .header-body .body-right .right-round5[data-v-e9e0751c] { + width: 312px; + height: 312px; + bottom: 0; + left: -149px; + background: linear-gradient(152.33deg, hsla(0, 0%, 100%, 0) 16.59%, hsla(0, 0%, 100%, .3) 82.8%) +} + +.header .header-content .header-body .body-right .right-round2[data-v-e9e0751c] { + bottom: 49px; + left: -56px; + width: 276px; + height: 276px; + background: linear-gradient(126.16deg, #ff83d5 6.69%, rgba(131, 240, 255, 0) 88.42%); + opacity: .5 +} + +.header .header-content .header-body .body-right .right-round3[data-v-e9e0751c] { + bottom: 195px; + left: 163px; + width: 276px; + height: 276px; + background: linear-gradient(180deg, #c7b4ff, rgba(215, 255, 208, 0)); + opacity: .5 +} + +.header .header-content .header-body .body-right .right-round4[data-v-e9e0751c] { + bottom: -16px; + left: 372px; + width: 211px; + height: 211px; + background: linear-gradient(205.25deg, rgba(148, 249, 255, .5) 11.13%, rgba(255, 227, 173, .45) 88.33%); + -webkit-backdrop-filter: blur(16px); + backdrop-filter: blur(16px); + z-index: 2 +} + +.header .header-content .header-body .body-right .header-img[data-v-e9e0751c] { + width: 602.45px; + height: 406px; + z-index: 1; + position: relative; + background: url(../index_static/img/header.png); + background-size: cover +} + +@media (max-width:1200px) { + .header[data-v-e9e0751c] { + width: 100%; + height: auto + } + .header .header-content[data-v-e9e0751c] { + width: 100%; + position: relative; + height: auto + } + .header .header-content .header-logo-box[data-v-e9e0751c] { + width: 304px; + margin: 0 auto; + position: relative + } + .header .header-content .header-logo-box .header-logo[data-v-e9e0751c] { + top: 20px; + width: 90px; + height: 22px; + background-size: contain + } + .header .header-content .header-body[data-v-e9e0751c] { + width: 100%; + height: auto; + flex-direction: column; + align-items: normal + } + .header .header-content .header-body .body-left[data-v-e9e0751c] { + width: 304px; + height: auto; + margin: 0 auto + } + .header .header-content .header-body .body-left .left-title[data-v-e9e0751c] { + font-weight: 800; + font-size: 48px; + line-height: 48px; + color: #0b0e51; + margin-top: 155px + } + .header .header-content .header-body .body-left .left-text[data-v-e9e0751c] { + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 24px; + color: #4154b5; + margin-bottom: 34px + } + .header .header-content .header-body .body-left .left-download[data-v-e9e0751c] { + flex-direction: column + } + .header .header-content .header-body .body-left .left-download .apps[data-v-e9e0751c], + .header .header-content .header-body .body-left .left-download .pc[data-v-e9e0751c] { + width: 304px; + border-radius: 16px; + font-size: 16px + } + .header .header-content .header-body .body-left .left-download .apps[data-v-e9e0751c] { + margin-bottom: 24px + } + .header .header-content .header-body .body-left .left-download .pc[data-v-e9e0751c] { + display: none + } + .header .header-content .header-body .body-left .left-reservation[data-v-e9e0751c] { + margin-top: 0; + margin-bottom: 32px + } + .header .header-content .header-body .body-left .left-reservation span[data-v-e9e0751c]:nth-child(2) { + position: absolute; + margin-left: 8px; + width: 20px; + height: 20px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEwSURBVHgB7ddBTsJAFMbx7xXiVrgBR/AIehJq2LjUvTGNXsC9IRlv4A30Ct6AIzRhR52O86BtgBIy06SvLN4vIWlgJvxDh2kLKKWUUrXHzE0QiSDgIXOzwuLbH878N6bLV/oMnZtAwGaDW3AcczCLFzcPnSsSWF7hywGr5o2ISJFAk1FejnDXJVJkDdZSvxYTvxapPt27grNrUjSQxUaKB7KYyEECWWhkK5A303WJubOYomdE233x8I9yFNkKXDw705okzK4xNe+U83F7myFcY2gTNJfE8fFndoSnpMAvBJw6xf4Xu19mtGrGYCAH1+cKx328kdkfN0hgaBwTD4yJY6KBsXFMLLBLHJO/Ya2ExFXj+lf84QYd4qqx/bNj/PC9oH/lMXHi0g4PTUoppS7cP/azhivFOT4PAAAAAElFTkSuQmCC); + background-size: cover + } + .header .header-content .header-body .body-right[data-v-e9e0751c] { + width: 100%; + height: auto + } + .header .header-content .header-body .body-right .right-round1[data-v-e9e0751c], + .header .header-content .header-body .body-right .right-round2[data-v-e9e0751c], + .header .header-content .header-body .body-right .right-round3[data-v-e9e0751c], + .header .header-content .header-body .body-right .right-round4[data-v-e9e0751c], + .header .header-content .header-body .body-right .right-round5[data-v-e9e0751c] { + display: none + } + .header .header-content .header-body .body-right .header-img[data-v-e9e0751c] { + width: 100%; + height: auto; + background: none + } + .header .header-content .header-body .body-right .header-img img[data-v-e9e0751c] { + width: 100%; + max-width: 450px; + display: block; + margin: 0 auto + } +} + +.space[data-v-35ecef7e] { + width: 100% +} + +.space .space-content[data-v-35ecef7e] { + /*width: 1200px;*/ + width: 85%; + margin: 0 auto +} + +.space .space-content .space-title[data-v-35ecef7e] { + margin-top: 100px; + font-style: normal; + font-weight: 800; + font-size: 54px; + line-height: 72px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51; + font-family: Alibaba-PuHuiTi-Heavy +} + +.space .space-content .space-body[data-v-35ecef7e] { + display: flex; + flex-wrap: wrap; + padding: 0 76px; + justify-content: space-between; + margin-top: 133px; + margin-bottom: 100px; +} + +.space .space-content .space-body .body-item[data-v-35ecef7e] { + width: 454px; + height: 372px; + border-radius: 44px; + margin-bottom: 104px; + position: relative +} + +.space .space-content .space-body .body-item p[data-v-35ecef7e] { + text-align: center; + margin: 0 +} + +.space .space-content .space-body .body-item p[data-v-35ecef7e]:first-child, +.space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(2) { + font-style: normal; + font-weight: 700; + font-size: 32px; + line-height: 42px; + color: #0b0e51 +} + +.space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(3), +.space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(4) { + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 24px; + text-align: center; + color: #8789ae +} + +.space .space-content .space-body .body-item p[data-v-35ecef7e]:first-child { + margin-top: 154px +} + +.space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(2) { + margin-bottom: 11px +} + +.space .space-content .space-body .body-item .space-logo[data-v-35ecef7e] { + position: absolute; + width: 236px; + height: 236px; + left: 109px; + top: -89px +} + +.space .space-content .space-body .body-item[data-v-35ecef7e]:first-child { + background-color: #fff5cf +} + +.space .space-content .space-body .body-item:first-child .space-logo[data-v-35ecef7e] { + background: url(../image/space-img1.png); + background-size: cover +} + +.space .space-content .space-body .body-item[data-v-35ecef7e]:nth-child(4) { + background-color: #dbe0ff; + margin-top: 48px +} + +.space .space-content .space-body .body-item:nth-child(4) .space-logo[data-v-35ecef7e] { + background: url(../image/space-img2.png); + background-size: cover +} + +.space .space-content .space-body .body-item[data-v-35ecef7e]:nth-child(2) { + background-color: #daf1ff +} + +.space .space-content .space-body .body-item:nth-child(2) .space-logo[data-v-35ecef7e] { + background: url(../image/space-img3.png); + background-size: cover +} + +.space .space-content .space-body .body-item[data-v-35ecef7e]:nth-child(3) { + background-color: #e0e5ff; + /*margin-top: 48px*/ +} + +.space .space-content .space-body .body-item:nth-child(3) .space-logo[data-v-35ecef7e] { + background: url(../image/space-img4.png); + background-size: cover +} + +@media (max-width:1200px) { + .space[data-v-35ecef7e] { + width: 100% + } + .space .space-content[data-v-35ecef7e] { + width: 375px; + margin: 0 auto + } + .space .space-content .space-title[data-v-35ecef7e] { + width: 375px; + height: 100px; + margin: 0 auto; + font-style: normal; + font-weight: 800; + font-size: 38px; + line-height: 50px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51; + margin-top: 100px; + } + .space .space-content .space-body[data-v-35ecef7e] { + margin-top: 114px; + padding: 0; + margin-bottom: 86px + } + .space .space-content .space-body .body-item[data-v-35ecef7e] { + width: 335px; + height: auto; + margin: 0 auto; + margin-bottom: 94px + } + .space .space-content .space-body .body-item p[data-v-35ecef7e]:first-child, + .space .space-content .space-body .body-item P[data-v-35ecef7e]:nth-child(2) { + font-style: normal; + font-weight: 600; + font-size: 32px; + line-height: 42px; + color: #0b0e51 + } + .space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(3), + .space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(4) { + width: 285px; + margin: 0 auto; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 24px; + text-align: center; + color: #8789ae + } + .space .space-content .space-body .body-item p[data-v-35ecef7e]:first-child { + margin-top: 124px + } + .space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(2) { + margin-bottom: 12px + } + .space .space-content .space-body .body-item p[data-v-35ecef7e]:nth-child(4) { + margin-bottom: 48px + } + .space .space-content .space-body .body-item .space-logo[data-v-35ecef7e] { + width: 158px; + height: 158px; + top: -54px; + left: 89px + } +} + +[data-v-e39358dc] { + margin: 0 +} + +.collect[data-v-e39358dc] { + width: 100%; + background: #f6f8ff +} + +.collect .collect-item[data-v-e39358dc] { + display: flex; + position: relative; + width: 1440px; + margin: 0 auto +} + +.collect .collect-left[data-v-e39358dc] { + width: 602px; + position: sticky; + left: 0; + top: 0; + height: 100vh; + min-height: 860px +} + +.collect .collect-left .collect-img1[data-v-e39358dc] { + width: 162px; + height: 159px; + position: absolute; + top: 40px; + background: url(.../image/collect-img1.png); + background-size: cover +} + +.collect .collect-left .collect-body[data-v-e39358dc] { + width: 394px; + height: 100%; + position: absolute; + top: 0; + left: 185px +} + +.collect .collect-left .collect-body .left-title[data-v-e39358dc] { + margin-top: 130px; + margin-bottom: 86px +} + +.collect .collect-left .collect-body .left-title p[data-v-e39358dc] { + font-style: normal; + font-weight: 800; + font-size: 54px; + line-height: 62px; + letter-spacing: 1px; + color: #0b0e51; + font-family: Alibaba-PuHuiTi-Heavy +} + +.collect .collect-left .collect-body .left-content[data-v-e39358dc] { + position: absolute; + top: 50%; + transform: translateY(-30%); + padding-top: 10px +} + +.collect .collect-left .collect-body .left-content .left-item[data-v-e39358dc] { + height: 67px; + width: 100%; + margin-bottom: 48px +} + +.collect .collect-left .collect-body .left-content .left-item p[data-v-e39358dc]:first-child { + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + font-size: 32px; + line-height: 32px; + color: #0b0e51; + margin-bottom: 12px; + font-weight: 600 +} + +.collect .collect-left .collect-body .left-content .left-item p[data-v-e39358dc]:nth-child(2) { + font-family: PingFang SC; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #8789ae +} + +.collect .collect-left .collect-body .left-content .left-item p.active[data-v-e39358dc] { + color: #8789ae +} + +.collect .collect-left .collect-body .left-content .left-line-box[data-v-e39358dc] { + position: absolute; + top: 0; + left: -23px; + width: 9px; + height: 100% +} + +.collect .collect-left .collect-body .left-content .left-line-box .left-line[data-v-e39358dc] { + position: absolute; + width: 9px; + height: 73px; + top: 0; + background: url(../image/collect-line.svg); + background-size: cover +} + +.collect .collect-right[data-v-e39358dc] { + flex: 1; + background: #f6f8ff +} + +.collect .collect-right .right-item[data-v-e39358dc] { + width: 100%; + height: 100vh; + min-height: 860px; + position: relative +} + +.collect .collect-right .right-item .item-round[data-v-e39358dc] { + margin-top: 70px; + width: 552px; + height: 552px; + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 101px; + border-radius: 50% +} + +.collect .collect-right .right-item .item-round .item-image[data-v-e39358dc] { + width: 333px; + height: 629px; + position: absolute; + top: -107px; + left: 50%; + transform: translateX(-50%) +} + +.collect .collect-right .right-item .item-round .item-image .image-left[data-v-e39358dc] { + position: absolute; + left: -110px; + top: 481px; + width: 186px; + height: 73px; + background: url(../image/collect-image-left.png); + background-size: cover +} + +.collect .collect-right .right-item .item-round .item-image .image-right[data-v-e39358dc] { + position: absolute; + right: -97px; + top: 430px; + width: 186px; + height: 73px; + background: url(../image/collect-image-right.png); + background-size: cover +} + +.collect .collect-right .right-item:nth-child(2) .item-round[data-v-e39358dc] { + background: linear-gradient(107.92deg, #5a76ff 18.23%, #8fa2ff 82.77%), #fff +} + +.collect .collect-right .right-item:nth-child(2) .item-round .item-image[data-v-e39358dc] { + background: url(../image/collect-item1.png); + background-size: cover +} + +.collect .collect-right .right-item:nth-child(3) .item-round[data-v-e39358dc] { + background: linear-gradient(107.92deg, #8fc9ff 18.23%, #c6e4ff 82.77%), #fff +} + +.collect .collect-right .right-item:nth-child(3) .item-round .item-image[data-v-e39358dc] { + background: url(../image/collect-item2.png); + background-size: cover +} + +.collect .collect-right .right-item:nth-child(4) .item-round[data-v-e39358dc] { + background: linear-gradient(107.92deg, #a68fff 18.23%, #cbbeff 82.77%), #fff +} + +.collect .collect-right .right-item:nth-child(4) .item-round .item-image[data-v-e39358dc] { + background: url(../image/collect-item3.png); + background-size: cover +} + +.collect .collect-right .right-img[data-v-e39358dc] { + float: left; + height: 100vh; + min-height: 860px; + width: 100%; + position: sticky; + left: 0; + top: 0; + z-index: 1 +} + +.collect .collect-right .right-img .right-img1[data-v-e39358dc] { + position: absolute; + left: 630px; + top: -49px; + width: 108px; + height: 107px; + background: url(../image/collect-img2.png); + background-size: cover +} + +.collect .collect-right .right-img .right-img2[data-v-e39358dc] { + position: absolute; + left: 563px; + bottom: 108px; + width: 241px; + height: 176px; + background: url(../image/collect-img3.png); + background-size: cover +} + +.collect .collect-right .right-img .right-img3[data-v-e39358dc] { + position: absolute; + left: 764px; + bottom: 259px; + width: 40px; + height: 40px; + background: url(../image/collect-img4.png); + background-size: cover +} + +a[data-v-20ff4511] { + text-decoration: none +} + +.footer[data-v-20ff4511] { + width: 100%; + background: #f6f8ff; + -webkit-backdrop-filter: blur(32.6194px); + backdrop-filter: blur(32.6194px); + position: relative; + padding-top: 130px +} + +.footer .footer-item[data-v-20ff4511] { + width: 1200px; + margin: 0 auto; + height: 600px +} + +.footer .footer-item .footer-img[data-v-20ff4511] { + position: relative; + width: 1200px; + margin: 0 auto +} + +.footer .footer-item .footer-img .footer-img1[data-v-20ff4511] { + position: absolute; + left: -99px; + width: 367px; + height: 322px; + transform: rotate(-13.32deg); + background: url(../image/footer-img1.png); + background-size: cover; + margin-top: 84px; + margin-left: 15px +} + +.footer .footer-item .footer-img .footer-img2[data-v-20ff4511] { + position: absolute; + width: 290px; + height: 252px; + background: url(../image/footer-img2.png); + background-size: contain; + background-repeat: no-repeat; + margin-top: -72px; + top: -130px; + right: -75px +} + +.footer .footer-item .footer-title[data-v-20ff4511] { + font-style: normal; + font-weight: 800; + font-size: 54px; + line-height: 60px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51; + padding-top: 50px; + margin-bottom: 64px; + font-family: Alibaba-PuHuiTi-Heavy +} + +.footer .footer-item .footer-content[data-v-20ff4511] { + width: 356px; + height: 60px; + margin: 0 auto; + display: flex; + position: absolute; + left: 50%; + transform: translateX(-50%); + justify-content: space-between +} + +.footer .footer-item .footer-content .content-apps[data-v-20ff4511], +.footer .footer-item .footer-content .content-pc[data-v-20ff4511] { + width: 164px; + height: 60px; + font-style: normal; + border-radius: 16px; + font-weight: 500; + font-size: 16px; + line-height: 60px; + text-align: center +} + +.footer .footer-item .footer-content .content-apps[data-v-20ff4511] { + background: linear-gradient(96.15deg, #446dff 2.85%, rgba(99, 125, 255, .75)), #fff; + color: #fff +} + +.footer .footer-item .footer-content .content-pc[data-v-20ff4511] { + border: 2px solid #859aff; + color: #446dff +} + +.footer .footer-item .footer-text[data-v-20ff4511] { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 90px; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 20px; + text-align: center; + color: #8286a6; + background: #f9faff +} + +.footer .footer-item .footer-text .footer-text-links[data-v-20ff4511] { + margin: 20px auto; + width: 208px; + display: flex; + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 5px; + text-align: center; + color: #8286a6 +} + +.footer .footer-item .footer-text .footer-text-links ul[data-v-20ff4511] { + display: flex; + justify-content: space-between +} + +.footer .footer-item .footer-text .footer-text-links ul li[data-v-20ff4511] { + list-style: none; + border-right: 2px solid #8286a6 +} + +.footer .footer-item .footer-text .footer-text-links ul li a[data-v-20ff4511] { + color: #8286a6; + padding: 0 6px +} + +.footer .footer-item .footer-text .footer-text-links ul li:first-child a[data-v-20ff4511] { + padding-left: 0 +} + +.footer .footer-item .footer-text .footer-text-links ul li[data-v-20ff4511]:nth-child(3) { + border: none +} + +.footer .footer-item .footer-text .footer-text-links ul li:nth-child(3) a[data-v-20ff4511] { + padding-right: 0 +} + +.footer .footer-item .footer-text .footer-text-content[data-v-20ff4511] { + line-height: 12px +} + +@media (max-width:1200px) { + .footer[data-v-20ff4511] { + height: 780px; + padding: 0 + } + .footer .footer-item[data-v-20ff4511] { + width: 375px; + height: 780px + } + .footer .footer-item .footer-img[data-v-20ff4511] { + width: 375px; + position: absolute + } + .footer .footer-item .footer-img .footer-img1[data-v-20ff4511] { + position: absolute; + width: 237px; + height: 208px; + left: 0; + top: 425px; + margin: 0 + } + .footer .footer-item .footer-img .footer-img2[data-v-20ff4511] { + position: absolute; + width: 90px; + height: 152.5px; + top: 340px; + left: 217px; + background: url(../image/footer-img2.png); + background-size: contain; + background-repeat: no-repeat; + margin: 0 + } + .footer .footer-item .footer-title[data-v-20ff4511] { + padding-top: 124px; + margin-bottom: 44px + } + .footer .footer-item .footer-title p[data-v-20ff4511] { + position: static; + font-style: normal; + font-weight: 800; + font-size: 38px; + line-height: 50px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51; + margin: 0 + } + .footer .footer-item .footer-content[data-v-20ff4511] { + flex-direction: column; + height: auto + } + .footer .footer-item .footer-content .content-apps[data-v-20ff4511], + .footer .footer-item .footer-content .content-pc[data-v-20ff4511] { + width: 304px; + height: 60px; + margin: 0 auto + } + .footer .footer-item .footer-content .content-apps[data-v-20ff4511] { + margin-bottom: 24px + } + .footer .footer-item .footer-content .content-pc[data-v-20ff4511] { + display: none + } + .footer .footer-item .footer-text[data-v-20ff4511] { + width: 100%; + height: 104px; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 18px; + text-align: center; + color: #8286a6 + } + .footer .footer-item .footer-text .footer-text-links[data-v-20ff4511] { + margin-bottom: 12px + } + .footer .footer-item .footer-text .footer-text-content[data-v-20ff4511] { + width: 220px; + margin: 0 auto; + line-height: 18px + } +} + +.mobile-collect[data-v-f34ce26c] { + width: 100%; + background: #f6f8ff; + position: relative +} + +.mobile-collect .mobile-collect-item[data-v-f34ce26c] { + width: 375px; + margin: 0 auto; + position: relative +} + +.mobile-collect .mobile-collect-item .mobile-collect-title[data-v-f34ce26c] { + height: 100px; + margin-left: 45px; + padding-top: 60px; + font-style: normal; + font-weight: 800; + font-size: 38px; + line-height: 50px; + letter-spacing: 1px; + color: #0b0e51; + padding-bottom: 80px; + font-family: Alibaba-PuHuiTi-Heavy; + margin-bottom: 80px +} + +.mobile-collect .mobile-collect-item .mobile-collect-title p[data-v-f34ce26c] { + margin: 0 +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item[data-v-f34ce26c] { + width: 100%; + padding-bottom: 124px +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-text[data-v-f34ce26c] { + margin-left: 45px; + margin-bottom: 125px +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-text p[data-v-f34ce26c] { + margin: 0 +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-text p[data-v-f34ce26c]:first-child { + font-style: normal; + font-weight: 600; + font-size: 28px; + line-height: 28px; + color: #0b0e51; + margin-bottom: 12px +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-text p[data-v-f34ce26c]:nth-child(2) { + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 16px; + color: #8789ae +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-body[data-v-f34ce26c] { + width: 324px; + height: 324px; + border-radius: 50%; + background: linear-gradient(107.92deg, #5a76ff 18.23%, #8fa2ff 82.77%), #fff; + position: relative; + margin: 0 auto +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-body .body-img[data-v-f34ce26c] { + width: 247px; + height: 478px; + position: absolute; + left: 50%; + transform: translateX(-50%); + top: -105px; + background: url(../index_static/img/mobile-collect-img1.png); + background-size: cover +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-body .body-img .body-img-left[data-v-f34ce26c] { + position: absolute; + width: 138px; + height: 50px; + left: -58px; + top: 356px; + background: url(../index_static/img/mobile-collect-img-left.png); + background-size: cover +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item .item-body .body-img .body-img-right[data-v-f34ce26c] { + position: absolute; + width: 122px; + height: 48px; + right: -48px; + top: 338px; + background: url(../index_static/img/mobile-collect-img-right.png); + background-size: cover +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item:nth-child(2) .item-body[data-v-f34ce26c] { + background: linear-gradient(107.92deg, #8fc9ff 18.23%, #c6e4ff 82.77%), #fff +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item:nth-child(2) .item-body .body-img[data-v-f34ce26c] { + background: url(../index_static/img/mobile-collect-img2.png); + background-size: cover +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item:nth-child(3) .item-body[data-v-f34ce26c] { + background: linear-gradient(107.92deg, #a68fff 18.23%, #cbbeff 82.77%), #fff +} + +.mobile-collect .mobile-collect-item .mobile-collect-content .mobile-content-item:nth-child(3) .item-body .body-img[data-v-f34ce26c] { + background: url(../index_static/img/mobile-collect-img3.png); + background-size: cover +} + +.mobile-collect .mobile-collect-item .mobile-collect-box[data-v-f34ce26c] { + width: 110px; + height: 107px; + position: absolute; + left: 20px; + top: -59px; + background: url(../index_static/img/collect-img1.png); + background-size: cover +} + +.apps[data-v-ce7600a4] { + height: 1584px; + position: relative; + padding-top: 48px +} + +.apps .apps-content[data-v-ce7600a4] { + width: 1200px; + margin: 0 auto; + position: relative; + margin-bottom: 149px +} + +.apps .apps-content .apps-logo[data-v-ce7600a4] { + width: 137px; + height: 32px; + position: absolute; + left: 0; + top: 32px; + background: url(../index_static/img/logo.png); + background-size: cover +} + +.apps .apps-content .apps-title[data-v-ce7600a4] { + font-style: normal; + font-weight: 800; + font-size: 66px; + line-height: 72px; + color: #0b0e51; + text-align: center; + padding-top: 161px; + font-family: Alibaba-PuHuiTi-Heavy +} + +.apps .apps-content .apps-text[data-v-ce7600a4] { + width: 713px; + height: 140px; + margin: 0 auto; + font-style: normal; + font-weight: 400; + font-size: 20px; + line-height: 28px; + text-align: center; + color: #4154b5; + margin-top: 20px; + margin-bottom: 120px +} + +.apps .apps-content .apps-text p a[data-v-ce7600a4] { + border-bottom: 1px solid #4154b5; + text-decoration: none; + color: #4154b5 +} + +.apps .apps-content .apps-download[data-v-ce7600a4] { + width: 900px; + height: 400px; + margin: 0 auto; + display: flex; + justify-content: space-between +} + +.apps .apps-content .apps-download .download-android[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios[data-v-ce7600a4] { + width: 400px; + height: 400px; + border-radius: 44px; + border: 2px solid #e0e5ff; + position: relative +} + +.apps .apps-content .apps-download .download-android .item-icon[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-icon[data-v-ce7600a4] { + position: absolute; + width: 0; + height: 0; + border-color: #5c7eff #5c7eff transparent transparent; + border-style: solid; + border-width: 44px; + border-radius: 0 44px 0 0; + right: -2px; + top: -2px +} + +.apps .apps-content .apps-download .download-android .item-icon .icon[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-icon .icon[data-v-ce7600a4] { + position: absolute; + top: -31px; + left: 0; + width: 26px; + height: 26px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKbSURBVHgB7ZmBcdswDEW/eh2gG5Qb1BvEGzgbxO0CTbpA4g2SDdxO4E5QbVBvYG1gdwIWiOU7BSElQKTqa8x3x5NDMl8iBYIQCBQKhUKHKlTpvZ/R5Z7KB6RRV1W1Cug/0uUT0mio3JH+YbAn3fCXz4cT2tc+H7fy2d/h35P61nu13mOYLZUn6GFz/arsy+ZyBxu8FFysUTOgJ7LTNQyQKWgHtB2hPUfPgM5hcpOieUMvoBliu51162iWa2Qgh7ZpQK3H+g2xGKme3ecj0mFtJ7RXpP0AJVaTcwh7qdQ95TRZLtB0AwNvbg1d/IBiYcYfpHNAWL+BAZNToMW5JVv/TD+vOtU8mAckwjFZq70QTSsYMLvtdiNcYwJIe0OXDRK4yDVkcskyuh5gZunfbry9z6MxudtQmJ4JfsAd6SMXF2NyP5EHjqYbUVfD6IojsItfy8oq1ru116SPscBgsmkTB9Xnd6EwLbE0Ftv3NdKpY+soBt27N2cgtL9DA4mufR527eRo77v0NuZSI+a2PyIPDjZvZvVaTlZoIgW+yRZ6HHQm8woOTv0x4nY93W5g1fcvM6emsIdNTJiFQ0bEsy1luyb0MZnBuTc78/cQI2Y9646dqm0KTvlm7LnoZ7fsqS6Hi382p4C2yeTHpLFcoH6BRNo3Mw80adPKz4wyuTOzp3L6gKpl4/84oC9UfuC4vhrZaB3Q1GmsELvuH62TiCZSxqSx+KyI01inCKChkpzXbtNYnLJadLR5MN+QytDmpfj/yTbWIcr50NTQG620fclMX6WLNAO6p5tcQY/ra/TH48ocGzGvZz6XGu7ppz3Wz8lMPntsDeWKzUInCk2gnx9R9gHt6Ce4o8sS6dTyjLTV5plNTWNtShqrUMjPX8PG7FALyrWSAAAAAElFTkSuQmCC); + background-size: cover +} + +.apps .apps-content .apps-download .download-android .item-logo[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-logo[data-v-ce7600a4] { + width: 102px; + height: 102px; + margin: 66px auto 40px; + background: url(../index_static/img/apps-ios.png); + background-size: cover +} + +.apps .apps-content .apps-download .download-android .item-text[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-text[data-v-ce7600a4] { + font-style: normal; + font-weight: 600; + font-size: 32px; + line-height: 42px; + text-align: center; + color: #0b0e51; + margin-bottom: 25px +} + +.apps .apps-content .apps-download .download-android .item-download[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-download[data-v-ce7600a4] { + width: 177px; + height: 60px; + background: linear-gradient(96.15deg, #446dff 2.85%, rgba(99, 125, 255, .75)), #fff; + border-radius: 16px; + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 60px; + text-align: center; + color: #fff; + margin: 0 auto +} + +.apps .apps-content .apps-download .download-android .item-download.active[data-v-ce7600a4], +.apps .apps-content .apps-download .download-ios .item-download.active[data-v-ce7600a4] { + display: none +} + +.apps .apps-content .apps-download .download-android .item-logo[data-v-ce7600a4] { + background: url(../index_static/img/apps-android.png); + background-size: cover +} + +.apps .apps-content .apps-download .download-item:hover .item-logo[data-v-ce7600a4] { + width: 178px; + height: 178px; + margin: 95px auto 20px +} + +.apps .apps-content .apps-download .download-item:hover .item-text[data-v-ce7600a4] { + display: none +} + +.apps .apps-content .apps-download .download-item:hover .item-download[data-v-ce7600a4] { + display: none; + width: 82px; + height: 28px; + background: #fff; + border: none; + font-weight: 500; + font-size: 20px; + line-height: 28px; + text-align: center; + color: #0b0e51 +} + +.apps .apps-content .apps-download .download-item:hover .item-download.active[data-v-ce7600a4] { + display: block +} + +@media (min-width:1200px) { + .apps .apps-content .apps-download .download-ios:hover .item-logo[data-v-ce7600a4] { + background: url(../index_static/img/ios-erweima.png); + background-size: cover + } + .apps .apps-content .apps-download .download-android:hover .item-logo[data-v-ce7600a4] { + background: url(../index_static/img/android-erweima.png); + background-size: cover + } +} + +.apps .apps-provide .provide-title[data-v-ce7600a4] { + font-family: Alibaba-PuHuiTi-Heavy; + font-style: normal; + font-weight: 400; + font-size: 54px; + line-height: 72px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51 +} + +.apps .apps-provide .provide-content[data-v-ce7600a4] { + width: 900px; + height: 186px; + display: flex; + justify-content: space-between; + margin: 0 auto; + margin-top: 60px +} + +.apps .apps-provide .provide-content .provide-item[data-v-ce7600a4] { + width: 286px; + height: 186px; + background: #f8f8f8; + border-radius: 16px +} + +.apps .apps-provide .provide-content .provide-item .provide-item-logo[data-v-ce7600a4] { + width: 83px; + height: 83px; + margin: 28px auto 18px; + background: url(../index_static/img/provide-img1.png); + background-size: cover +} + +.apps .apps-provide .provide-content .provide-item .provide-item-text[data-v-ce7600a4] { + font-style: normal; + font-weight: 600; + font-size: 20px; + line-height: 28px; + text-align: center; + color: #a0a0a0 +} + +.apps .apps-provide .provide-content .provide-item:nth-child(2) .provide-item-logo[data-v-ce7600a4] { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKYAAACmCAYAAABQiPR3AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA5/SURBVHgB7Z1dUhTJFscPNDagODaGDxpheJsHQV5mwPs+Ms77SLiAEV3A1XsXoDILGMcN+DELuOIGxnYWIE2EESAaQ3sf1AcjBBVEpOGef1nVUzT9kdXdVZmn+vwiKqr6g+oi61//kyczK6uHlLrMz8/nDh06lC+XyxOZTObIzs7OSG9v7xH+KL+7u5sPfTVfZxerwdLT07PKf4PlJda8nyLvb3Vzc7M4OTm5SsoeekjxWFxczPNqigU0waL5jsUzwa9zlAwQLoS6wOsCL6XR0dEidTFdK8zl5WUI7xwLcIrXWJISoSlwUYi0wOvH3SbUrhEmwvLBgwfhiBdYjNPknhCbUYJI+dgfbmxsFNIe/lMtzJAYryYcmpNgDsvY2Nh9SiGpFCbXFyHGaV4uUbrEWAvUT+c4Qbs/Pj5eoJSQGmH6GTSEOO3XG7uRFV5m0+Ci4oUJQQ4NDV3ljPYapd8dTSlxy8K97e1tuGiJBCJWmCpIMzjM3+MwPytNoOKEqYJsDWkCFSNMFWRH8EL86dOnZ8lxRAgTWTYX6F2q3/WnRMP5JMlpYaKbkPuo73Zxlh0rLof3XnIU7jK8yi45r6KMDy7bGS7jJ0tLS9fIMZxzTHVJO7B7PmL3vOKKezrlmOqS9uAy/wHu+ezZs0vkAE44pt9rc4MLx7mQ0o2we95aX1//xeZAEevCROjmK/URacbtGivcNHfeVmi3Gso5bEwjdJOK0kVG/NA+TRawJsznz5/f4NUD0sZylxnm5b/+uUoUK6Gck5xbWp8UxS6752ySPUaJCtNPciDKGVIk8mBjY+NKEklRYsL0R5MjyZkgRTLzLM7zcYszEWGqKFPHPGfsF+PM2GMXpjYHpZYVds6zcTlnrMJM2im5YZgUrxeHEiK2sB7bmUxKlBDjgQMHvKVamHgdPknB53iv+rMovxfso9Znre6z+jjr7cfkMw6z3vL58+ckRBqLOGNrx2RRYvxkrKLkKgJ+h7LZbE23rD4peB28F+WEhfcd3kez32uVRvsx+Qzl0tfX55UN1jEzyS0tv1KHicUxk2inhFhQ8GHR4IT09/cncTKcpFwuey6JdRh2NM9B4wT966Ojo/+hDtFxYaKXgAvhJsVMtSiPHDlCQ0NDpBB9/PiRPnz4UBEjnBTijJmONsJ3VJh+v+oDihk4IpwxIJfLEYcTSpLt7e2GnweuHYR+uHmSwDnfvn2753WzY+4AqEtcHBsbm6M26Zgw/WYhDMiIve8bdUokOwDOOTw8TEkCJ1pbW2v4ncOHD3vihHvhWMMXUlK8f//ec04AUUKcCfCOy+dsu22cHRGmn4EnNkpoYGCg4kAnTpygTCZDSdMoCQJJO2QtcAG9evXK2w7qnwnRdhtnR0oPg3wpwQb0cPZpQ5QA9Vv8fr3FBYLs3AIjrInr1AZtHzWH8BlbI4UCAUCoW1tbpHwFF6vtlgloYmlp6X9nzpz5jVqgrVCeZL0yDOprgRsglEOYnz59IuUrEGZQp339+rVXvwwa3BOm5fpmWzEHdzOSDvQVQYLdlGGGWSN3qAVaFibuaNS7GeVgaxwBNNLKfestCRMhnH/wJlmilW7FbiVoPbBYVnxN9Fz3H75gTEvC5PrdTbIcwlWUoogc0iMLE1k4r5y4KV6RA0I6Jkcz/X5kYbJbJn7HXDUOhCcxOFRWPaydO+iMMflyJGH6t3HmSRGDY4OnR7jXzigRMhYmKq/cJjVDiihciyrsmv8ycU1jYfoJT54cQUO5GQ6W07CJaxoJ00/1NeFROoKJaxoJ03dLZ1CnFE9T12wqTJfdUgVqhovVnmau2VSYfX19zolS65fmBHeEOkhD12wqTM3E5ePqRdzINRsK0+/lyZOjqGua4XA55QYHB2dqfdBQmC708tRDRRkNR8sLvUE/1fqgrjD9fs08KUqM1OtDrytMVvIMOYw6phkCEkUMi5uuPsZGofwCOYqOx4yOy2XFwvy5WCzuSYJqCtNPevSWiRTh+Ex4SILOhd+oKUwO4866ZYC6pRlCoguSoKvhY9wnzJWVFTillUdoKPEgoUOCj28iHM73CXNra2uKhKCu2ZygjARMarsnnNcK5c67pXZJRkNIeXnZefCiljDPkaLY4cLTp0+9jT3CXF5exgzAeVJSh5AIk8tms94s1HuEubOzM0UC0DBujrSyCjS4R5gc48WEca1nmiGsnJChTWGjuo45RUqqkPaIGT7e770ZmIM3/PqliN4edUpzBJZVbmlpKV8RJv8DeRKEhnJzBJbTVFiYU6Qo9kF75kRFmNxX+R0pqUPiSCzW4rdhxxTzZFwN49GQVlbQoidMf+CGmGFu+jDT1JPzhLm5uSnqOeI6UDg60srKEybHdHGDgjWcmyG1jDxhcjeQKMdUoiFRnJ4wuc6mt1GkHGHi7AmE+Q8ShM4obI7UclLHVJzEEyZfUSpMxSmCBnZRwtRQbo7oUE56D3nqEdmOSSpMxTHsPjtYiR3poVwcWsdMNyKFqYJMP6IdUzFDQ3lCqCjTTyDMEglCx2OmH7GOqcmPGVLLSmwdU0k3wSCOEimKQ3jCLJfLL0kgGsrNkDzsbZUEofVLc6TeHyUyK1dSz24wHlOUYwJ1TDNE34yWyWSKJAi9fTcaYuuYBw4cKJGSakTWMUdGRhDKxSVAihkCy2q10sDOmbmocI5uSRVncySWER9zsSLMnZ2dBRKEijLVLIRnexPjmJr8mCOwzRcHWwj3lRdIECpKM4KRWMLmx3xZEeb4+HiJhCVASnMkJj6jo6PF6tFFBRKCdkumEz6nj7HurfWm66ggzRE2HtOrX2JjjzA5thdISRXSRvuzBvc7JmI7aT0zVQiLLiVfg/tHsHN75kMSgIZzc6SEcj7GQrC9T5hspXOkpA4BIR1XTkV7+4SZzWYL5Hg41wb26Egoq0+fPv0ZbO8TJgZ0SOg3V1GaIySMP5ycnKwYYm+dL90mJRVIaSZiM3wQfqOmMF0P5+qW0XG8zFbHxsZ+D79RU5gI5/yP3CeH0Z4fMySUEx/fvoS7N8qXFSUGdmuZYF1hjo+PFzjuF0hR4qXEWtvXFd5wihhXG9uF9f9axfFywoHdrPVBQ2H29/ffIweTIJ3tLTqOirNUnfQENBQmkiB2TeeajtQpU8Eua6tugt10treBgYHfyEHXVHGa4XgoryvMpk+tgGsuLi7e5j70G+QYQYEjtB88eJCU+rgmTj6ee/5dEzUxmh/TNddUt4yOY/VyNBH90ugLRsJ0sa7paoja3NykjY0N2t7eJhdwcMDLbjO3BMYPoIJrbm1tXSV9ilpd3rx54wkz4OjRo/TNN9+QbRy7gEvN3BIYT3XtaobuCh8/ftwjSrC6uoq2YFIqeJl4M7cEkeZg9+uaK2QZFxvYq0UJIEqOMqRUQC/PrMkXIwnTd80r5AifP392pi6XzWZrvt/XZ/dxnSgfRy7iur08tYj81Aq/D/0RWYSbrirb6+vr5AJDQ0P7RJjL5awKc21tzaUk7F69Xp5aRBYmKJfLcM13ZIlMJlNxgZUV6zULD1wsJ0+epGPHjnmCPH78uLe2yYsXLyrlhDKzyDuThCdMS8JE5TXqD3WSwcHByjYc8/nz5+QKcE4IkuvjZBOIEvXeoP0yXGYJg+ahWZOEJ0xbra7Ly8t/8I/+QBaAINFeGNDf30+nTp3ymmhs1+tsgbCNckEUCVdxcJEcPnyYbMD6eHTmzJnzFJG2ziBCOoewJ7w5TAmDLkhkvF++fPFewx34QvG2bbuVLZAMgnBXLS7SQ4cOkSUQwltKltvup1paWrrGBXCLLIH2w7BzBrQy47DUWYrrHTcuXizhZDFBcEAzURKeMB3pQGVx3uLCuUaWYOeuNB0FDdo4UfXmhqz1fvi9etvh71W/F/5u+G9rvR/+zer9Vu+zmup9hn8HwCGR6CBqWBKkf1i7tzmE/5tapCPC5DpNjsMqQvoIKQrRXxzF/hm+TzwqHRtysri4mLdV31Sc4h1HrbNRs/BqOub1/oE40yukWAH1icvtihJ0tBLCFd05vlqM+kKV1IEBGrOsgY7cwBjL6FHbyZCSOJ4oTQdomBDbsOZnz57d5dUMKWnHmz6QnfIidZDY2hOy2SyaCuZJSTvznIF3PLeI9UYQvxnpD96cJCWNQJTn22kWqkfsdyhpG2dq+YvrlT92IgOvRexdA/7gYnTia1hPD0/QgB6XKEFi93RqWE8FSHQQvn+MI3yHSawzFc7JCRGc8wEpEvFuJEtClMDKXfDazimOtgdlRMXK8BP8g34PkU6p4T5e43mSogRW5w3hRvhpXt0hHfjhKriv63KnuhmjYH1CG39UEpIibU5yB0SylTibg5phbSRpAP5xTorOch0GkyloaLePV5+MuzmoGU5NAcbuOcPu+StpaLcF7tFBfdL6VEDOzRmN0J7JZO5wAU2Rg8eXUuCSBdw4ZtMlwzh74v2b3K6TumfcOOOSYZx2JLgnr25weL9E6p6dxjmXDCPiZPt1T7inZu7tgwSzxBn35VrP13EFUS7EAr3JAv2ZVKCtAEF6c5xubm7eTqJbsR3EhUcN75ERJcgAsSdWBdoUkYIMEH9CfYHO+CEe290uUtGCDEjNSXz69CmmRgmSpDx1n0C9LJv//7n19fXfpQoyIHUnD1PwsVNM0VcX/Ym+PmUjrSL13BGPVcZjvF3OsqOSalcJuegFfnnBf1v6/xyIscgdEOjTfizdHWvRFeEOM6EtLCzkBgcHp7juNc1C/Z6+hnvgehkEA1sgxjkW48O0ijFMVyYKcNJsNjvBm+f4ZJ/j9RT9/WAt22VSESIveBBDgdd/jo6OFqmL0GYW+luoLNK8P3jkWxYEhBue3b+TZVU9vM8Lzbxe8NePXewmTBIVZh0Q/ovFYm5gYGCCQ3+OqwATLNYcL6f4M6xzwZrqPMaQPy+FXpb8ZY33VyqXy6tc/13gDLqU9rDcCv8HSVokl+YaLMIAAAAASUVORK5CYII=); + background-size: cover +} + +.apps .apps-provide .provide-content .provide-item:nth-child(3) .provide-item-logo[data-v-ce7600a4] { + background: url(../index_static/img/provide-img3.png); + background-size: cover +} + +.apps .apps-footer[data-v-ce7600a4] { + position: absolute; + bottom: 13px; + left: 50%; + transform: translateX(-50%); + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 12px; + text-align: center; + color: #8286a6 +} + +@media (max-width:1200px) { + .apps[data-v-ce7600a4] { + height: auto; + padding-top: 74px + } + .apps .apps-content[data-v-ce7600a4] { + width: 375px; + margin-bottom: 120px + } + .apps .apps-content .apps-logo[data-v-ce7600a4] { + width: 93px; + height: 22px; + top: 20px; + left: 32px + } + .apps .apps-content .apps-title[data-v-ce7600a4] { + width: 314px; + margin: 0 auto; + font-style: normal; + font-weight: 800; + font-size: 48px; + line-height: 48px; + color: #0b0e51; + padding-top: 155px; + text-align: center + } + .apps .apps-content .apps-text[data-v-ce7600a4] { + width: 314px; + height: 192px; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 24px; + color: #4154b5; + margin-bottom: 84px; + text-align: left + } + .apps .apps-content .apps-text p[data-v-ce7600a4] { + margin: 0 + } + .apps .apps-content .apps-text p a[data-v-ce7600a4] { + border-bottom: 1px solid #4154b5; + text-decoration: none; + color: #4154b5 + } + .apps .apps-content .apps-text .apps-mobile-go[data-v-ce7600a4] { + margin-top: 22px + } + .apps .apps-content .apps-download[data-v-ce7600a4] { + width: 375px; + height: auto; + flex-direction: column + } + .apps .apps-content .apps-download .download-android[data-v-ce7600a4], + .apps .apps-content .apps-download .download-ios[data-v-ce7600a4] { + width: 335px; + height: 335px; + border-radius: 36.5px; + background: #fff; + border: 1.66px solid #e0e5ff; + margin: 0 auto + } + .apps .apps-content .apps-download .download-android .item-icon[data-v-ce7600a4], + .apps .apps-content .apps-download .download-ios .item-icon[data-v-ce7600a4] { + display: none + } + .apps .apps-content .apps-download .download-android .item-logo[data-v-ce7600a4], + .apps .apps-content .apps-download .download-ios .item-logo[data-v-ce7600a4] { + margin: 33px auto 40px + } + .apps .apps-content .apps-download .download-android .item-text[data-v-ce7600a4], + .apps .apps-content .apps-download .download-ios .item-text[data-v-ce7600a4] { + font-style: normal; + font-weight: 600; + font-size: 32px; + line-height: 42px; + text-align: center; + color: #0b0e51 + } + .apps .apps-content .apps-download .download-android .item-download[data-v-ce7600a4], + .apps .apps-content .apps-download .download-ios .item-download[data-v-ce7600a4] { + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 60px; + text-align: center; + color: #fff + } + .apps .apps-content .apps-download .download-ios[data-v-ce7600a4] { + margin-bottom: 60px + } + .apps .apps-provide[data-v-ce7600a4] { + padding-bottom: 148px + } + .apps .apps-provide .provide-title[data-v-ce7600a4] { + font-style: normal; + font-weight: 400; + font-size: 38px; + line-height: 50px; + text-align: center; + letter-spacing: 1px; + color: #0b0e51 + } + .apps .apps-provide .provide-content[data-v-ce7600a4] { + width: 335px; + height: auto; + margin-top: 40px; + flex-wrap: wrap + } + .apps .apps-provide .provide-content .provide-item[data-v-ce7600a4] { + width: 158px; + height: 192px; + margin-bottom: 20px + } + .apps .apps-provide .provide-content .provide-item .provide-item-logo[data-v-ce7600a4] { + width: 60px; + height: 60px; + margin: 28px auto 20px + } + .apps .apps-provide .provide-content .provide-item .provide-item-text[data-v-ce7600a4] { + font-style: normal; + font-weight: 600; + font-size: 20px; + line-height: 28px; + text-align: center; + color: #a0a0a0 + } + .apps .apps-provide .provide-content .provide-item .provide-item-text p[data-v-ce7600a4] { + margin: 0 + } + .apps .apps-footer[data-v-ce7600a4] { + width: 259px; + height: 36px; + bottom: 8px; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 18px; + text-align: center; + color: #8286a6 + } +} + + +/* 头部*/ +*{ + padding: 0; + margin: 0; + list-style: none; + text-decoration: none; + font-family: "microsoft yahei"; +} +.clear{ + clear: both; +} + +/*头部开始*/ + +#header{ + height: 72px; + position: fixed; + width: 100%; + top:0; + background-color: white; + min-width: 960px; + z-index: 9; +} +.fixwid{ + width: 1190px; + margin: 0 auto; + overflow: hidden; +} +.logo{ + height: 72px; + float: left; +} +.logo img{ + width: 40px; + margin-top: 11px; + float: left; +} +.logo span{ + float: left; + font-size: 24px; + color: #11b4ea; + margin-left: 10px; + height: 72px; + line-height: 72px; +} +.nav{ + height: 72px; + float: right; +} +.nav ul{ + float: left; + height: 72px; + line-height: 72px; +} +.nav ul li{ + float: left; + padding: 0 19px; +} +.login{ + float: left; + width: 80px; + height: 72px; + line-height: 72px; + text-align: center; + margin-left: 24px; + background-color: #11b4ea; +} +.login .a_area{ + display: block; +} +.a_line{ + color: #242424; +} +.a_line:hover{ + color: #11b4ea!important; +} + +.nav .a_link{ + font-size: 16px; +} + +.a_area{ + color: white; + background-color: #11b4ea; +} +.a_area:hover{ + background-color: #47c4f0!important; + color: white; +} + +.nav .a_area{ + font-size: 16px; +} + +#header>img{ + width: 100%; + height: 29px; + position: relative; +} + +/*头部结束*/ + diff --git a/public/assets/css/app1.css b/public/assets/css/app1.css new file mode 100644 index 0000000..65162ef --- /dev/null +++ b/public/assets/css/app1.css @@ -0,0 +1,417 @@ +.child-view { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transition: all .5s cubic-bezier(.55, 0, .1, 1); + transition: all .5s cubic-bezier(.55, 0, .1, 1) +} + +.slide-left-enter, +.slide-right-leave-active { + opacity: 0; + -webkit-transform: translate(30px); + transform: translate(30px) +} + +.slide-left-leave-active, +.slide-right-enter { + opacity: 0; + -webkit-transform: translate(-30px); + transform: translate(-30px) +} + +.content { + width: 1100px; + margin: 0 auto +} + +.flex { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex +} + +.flex-box { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center +} + +.align-center, +.flex-box, +.space-between { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center +} + +.space-between { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between +} + +.text-overflow { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +input:focus { + outline: none +} + +.dis-btn1 { + cursor: pointer +} + +html { + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre { + font-family: monospace, monospace; + font-size: 1em +} + +a { + background-color: transparent +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted +} + +b, +strong { + font-weight: bolder +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +img { + border-style: none +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=button], +[type=reset], +[type=submit], +button { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText +} + +fieldset { + padding: .35em .75em .625em +} + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress { + vertical-align: baseline +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +details { + display: block +} + +summary { + display: list-item +} + +[hidden], +template { + display: none +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +embed, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +html, +i, +iframe, +img, +input, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +output, +p, +pre, +q, +ruby, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-weight: 400; + vertical-align: baseline +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +menu, +nav, +section { + display: block +} + +body { + line-height: 1 +} + +blockquote, +q { + quotes: none +} + +blockquote:after, +blockquote:before, +q:after, +q:before { + content: none +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +a { + color: #7e8c8d; + -webkit-backface-visibility: hidden; + text-decoration: none +} + +li { + list-style: none +} + +body { + -webkit-text-size-adjust: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +body, +html { + font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback; + -webkit-tap-highlight-color: transparent; + background: #f4f4f4; +} + +* { + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +img { + display: block; + max-width: 100% +} + +.app, +body, +html { + width: 100%; + height: 100%; + position: relative; + background: #fff +} \ No newline at end of file diff --git a/public/assets/css/bootstrap-datetimepicker.min.css b/public/assets/css/bootstrap-datetimepicker.min.css new file mode 100644 index 0000000..7969773 --- /dev/null +++ b/public/assets/css/bootstrap-datetimepicker.min.css @@ -0,0 +1,9 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;/*width:20px;*/height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(top,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{}.datetimepicker thead tr:first-child th,.datetimepicker tfoot tr:first-child th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot tr:first-child th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px} \ No newline at end of file diff --git a/public/assets/css/bootstrap-editable.css b/public/assets/css/bootstrap-editable.css new file mode 100644 index 0000000..cba0ae0 --- /dev/null +++ b/public/assets/css/bootstrap-editable.css @@ -0,0 +1,706 @@ +/*! X-editable - v1.5.3 +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery +* http://github.com/vitalets/x-editable +* Copyright (c) 2019 Vitaliy Potapov; Licensed MIT */ +.editableform { + margin-bottom: 0; /* overwrites bootstrap margin */ +} + +.editableform .control-group { + margin-bottom: 0; /* overwrites bootstrap margin */ + white-space: nowrap; /* prevent wrapping buttons on new line */ + line-height: 20px; /* overwriting bootstrap line-height. See #133 */ +} + +/* + BS3 fix: stop css from breaking when the form is inside a popup and inside a form with the class .form-horizontal + See: https://github.com/vitalets/x-editable/issues/682 +*/ +.form-horizontal .editable-popup .editableform .form-group { + margin-left:0; + margin-right:0; +} + + +/* + BS3 width:1005 for inputs breaks editable form in popup + See: https://github.com/vitalets/x-editable/issues/393 +*/ +.editableform .form-control { + width: auto; +} + +.editable-buttons { + display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */ + vertical-align: top; + margin-left: 7px; + /* inline-block emulation for IE7*/ + zoom: 1; + *display: inline; +} + +.editable-button { + width: 24px; + height: 1px; + display: inline-block; + vertical-align: middle; + margin: 8px 2px 8px 5px; + cursor: pointer; + position: relative; +} + +.editable-button .icon{ + position: absolute; + color: #09AAFF; +} + +.editable-button .icon1 { + top: 0; + left: 0; + font-size: 24px; + filter: alpha(opacity=30); + -moz-opacity: .3; + opacity: .3; +} + +.editable-button .icon2 { + position: absolute; + top: 6px; + left: 5px; + font-size: 12px; +} + +.editable-buttons.editable-buttons-bottom { + display: block; + margin-top: 7px; + margin-left: 0; +} + +.editable-input { + margin: 9px 0; + vertical-align: top; + display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */ + width: auto; /* bootstrap-responsive has width: 100% that breakes layout */ + white-space: normal; /* reset white-space decalred in parent*/ + /* display-inline emulation for IE7*/ + zoom: 1; + *display: inline; +} + +.editable-buttons .editable-cancel { + margin-left: 7px; +} + +/*for jquery-ui buttons need set height to look more pretty*/ +.editable-buttons button.ui-button-icon-only { + height: 24px; + width: 30px; +} + +.editableform-loading { + background: url('../image/loading.gif') center center no-repeat; + height: 25px; + width: auto; + min-width: 25px; +} + +.editable-inline .editableform-loading { + background-position: left 5px; +} + + .editable-error-block { + max-width: 300px; + margin: 5px 0 0 0; + width: auto; + white-space: normal; +} + +/*add padding for jquery ui*/ +.editable-error-block.ui-state-error { + padding: 3px; +} + +.editable-error { + color: red; +} + +/* ---- For specific types ---- */ + +.editableform .editable-date { + padding: 0; + margin: 0; + float: left; +} + +/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */ +.editable-inline .add-on .icon-th { + margin-top: 3px; + margin-left: 1px; +} + + +/* checklist vertical alignment */ +.editable-checklist label input[type="checkbox"], +.editable-checklist label span { + vertical-align: middle; + margin: 0; +} + +.editable-checklist label { + white-space: nowrap; +} + +/* set exact width of textarea to fit buttons toolbar */ +.editable-wysihtml5 { + width: 566px; + height: 250px; +} + +/* clear button shown as link in date inputs */ +.editable-clear { + clear: both; + font-size: 0.9em; + text-decoration: none; + text-align: right; +} + +/* IOS-style clear button for text inputs */ +.editable-clear-x { + background: url('../image/clear.png') center center no-repeat; + display: block; + width: 13px; + height: 13px; + position: absolute; + opacity: 0.6; + z-index: 100; + + top: 50%; + right: 6px; + margin-top: -6px; + +} + +.editable-clear-x:hover { + opacity: 1; +} + +.editable-pre-wrapped { + white-space: pre-wrap; +} + +.editable-container.editable-popup { + max-width: none !important; /* without this rule poshytip/tooltip does not stretch */ +} + +.editable-container.popover { + width: auto; /* without this rule popover does not stretch */ +} + +.editable-container.editable-inline { + display: inline-block; + vertical-align: middle; + width: auto; + /* inline-block emulation for IE7*/ + zoom: 1; + *display: inline; +} + +.editable-container.ui-widget { + font-size: inherit; /* jqueryui widget font 1.1em too big, overwrite it */ + z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */ +} +.editable-click, +a.editable-click, +a.editable-click:hover { + text-decoration: none; + border-bottom: dashed 1px #0088cc; +} + +.editable-click.editable-disabled, +a.editable-click.editable-disabled, +a.editable-click.editable-disabled:hover { + color: #585858; + cursor: default; + border-bottom: none; +} + +.editable-empty, .editable-empty:hover, .editable-empty:focus{ + font-style: italic; + color: #DD1144; + /* border-bottom: none; */ + text-decoration: none; +} + +.editable-unsaved { + font-weight: bold; +} + +.editable-unsaved:after { +/* content: '*'*/ +} + +.editable-bg-transition { + -webkit-transition: background-color 1400ms ease-out; + -moz-transition: background-color 1400ms ease-out; + -o-transition: background-color 1400ms ease-out; + -ms-transition: background-color 1400ms ease-out; + transition: background-color 1400ms ease-out; +} + +/*see https://github.com/vitalets/x-editable/issues/139 */ +.form-horizontal .editable +{ + padding-top: 5px; + display:inline-block; +} + + +/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.datepicker { + padding: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; + /*.dow { + border-top: 1px solid #ddd !important; + }*/ + +} +.datepicker-inline { + width: 220px; +} +.datepicker.datepicker-rtl { + direction: rtl; +} +.datepicker.datepicker-rtl table tr td span { + float: right; +} +.datepicker-dropdown { + top: 0; + left: 0; +} +.datepicker-dropdown:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 6px; +} +.datepicker-dropdown:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 7px; +} +.datepicker > div { + display: none; +} +.datepicker.days div.datepicker-days { + display: block; +} +.datepicker.months div.datepicker-months { + display: block; +} +.datepicker.years div.datepicker-years { + display: block; +} +.datepicker table { + margin: 0; +} +.datepicker td, +.datepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + border: none; +} +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} +.datepicker table tr td.day:hover { + background: #eeeeee; + cursor: pointer; +} +.datepicker table tr td.old, +.datepicker table tr td.new { + color: #999999; +} +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: #999999; + cursor: default; +} +.datepicker table tr td.today, +.datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); + background-image: linear-gradient(top, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #000; +} +.datepicker table tr td.today:hover, +.datepicker table tr td.today:hover:hover, +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today.disabled:hover:hover, +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today:hover.disabled, +.datepicker table tr td.today.disabled.disabled, +.datepicker table tr td.today.disabled:hover.disabled, +.datepicker table tr td.today[disabled], +.datepicker table tr td.today:hover[disabled], +.datepicker table tr td.today.disabled[disabled], +.datepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active { + background-color: #fbf069 \9; +} +.datepicker table tr td.today:hover:hover { + color: #000; +} +.datepicker table tr td.today.active:hover { + color: #fff; +} +.datepicker table tr td.range, +.datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:hover { + background: #eeeeee; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today, +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:hover { + background-color: #f3d17a; + background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); + background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a); + background-image: -o-linear-gradient(top, #f3c17a, #f3e97a); + background-image: linear-gradient(top, #f3c17a, #f3e97a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); + border-color: #f3e97a #f3e97a #edde34; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:hover:hover, +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today.disabled:hover:hover, +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today:hover.disabled, +.datepicker table tr td.range.today.disabled.disabled, +.datepicker table tr td.range.today.disabled:hover.disabled, +.datepicker table tr td.range.today[disabled], +.datepicker table tr td.range.today:hover[disabled], +.datepicker table tr td.range.today.disabled[disabled], +.datepicker table tr td.range.today.disabled:hover[disabled] { + background-color: #f3e97a; +} +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active { + background-color: #efe24b \9; +} +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + background-color: #9e9e9e; + background-image: -moz-linear-gradient(top, #b3b3b3, #808080); + background-image: -ms-linear-gradient(top, #b3b3b3, #808080); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); + background-image: -webkit-linear-gradient(top, #b3b3b3, #808080); + background-image: -o-linear-gradient(top, #b3b3b3, #808080); + background-image: linear-gradient(top, #b3b3b3, #808080); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); + border-color: #808080 #808080 #595959; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected:hover:hover, +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.disabled:hover:hover, +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected:hover.disabled, +.datepicker table tr td.selected.disabled.disabled, +.datepicker table tr td.selected.disabled:hover.disabled, +.datepicker table tr td.selected[disabled], +.datepicker table tr td.selected:hover[disabled], +.datepicker table tr td.selected.disabled[disabled], +.datepicker table tr td.selected.disabled:hover[disabled] { + background-color: #808080; +} +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active { + background-color: #666666 \9; +} +.datepicker table tr td.active, +.datepicker table tr td.active:hover, +.datepicker table tr td.active.disabled, +.datepicker table tr td.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td.active:hover, +.datepicker table tr td.active:hover:hover, +.datepicker table tr td.active.disabled:hover, +.datepicker table tr td.active.disabled:hover:hover, +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active, +.datepicker table tr td.active.disabled, +.datepicker table tr td.active:hover.disabled, +.datepicker table tr td.active.disabled.disabled, +.datepicker table tr td.active.disabled:hover.disabled, +.datepicker table tr td.active[disabled], +.datepicker table tr td.active:hover[disabled], +.datepicker table tr td.active.disabled[disabled], +.datepicker table tr td.active.disabled:hover[disabled] { + background-color: #0044cc; +} +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span { + display: block; + width: 23%; + height: 54px; + line-height: 54px; + float: left; + margin: 1%; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker table tr td span:hover { + background: #eeeeee; +} +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: #999999; + cursor: default; +} +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active:hover.disabled, +.datepicker table tr td span.active.disabled.disabled, +.datepicker table tr td span.active.disabled:hover.disabled, +.datepicker table tr td span.active[disabled], +.datepicker table tr td span.active:hover[disabled], +.datepicker table tr td span.active.disabled[disabled], +.datepicker table tr td span.active.disabled:hover[disabled] { + background-color: #0044cc; +} +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active { + background-color: #003399 \9; +} +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: #999999; +} +.datepicker th.datepicker-switch { + width: 145px; +} +.datepicker thead tr:first-child th, +.datepicker tfoot tr th { + cursor: pointer; +} +.datepicker thead tr:first-child th:hover, +.datepicker tfoot tr th:hover { + background: #eeeeee; +} +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} +.datepicker thead tr:first-child th.cw { + cursor: default; + background-color: transparent; +} +.input-append.date .add-on i, +.input-prepend.date .add-on i { + display: block; + cursor: pointer; + width: 16px; + height: 16px; +} +.input-daterange input { + text-align: center; +} +.input-daterange input:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-daterange input:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-daterange .add-on { + display: inline-block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + vertical-align: middle; + background-color: #eeeeee; + border: 1px solid #ccc; + margin-left: -5px; + margin-right: -5px; +} diff --git a/public/assets/css/bootstrap-table-fixed-columns.css b/public/assets/css/bootstrap-table-fixed-columns.css new file mode 100644 index 0000000..40855f9 --- /dev/null +++ b/public/assets/css/bootstrap-table-fixed-columns.css @@ -0,0 +1,27 @@ +.fixed-table-header-columns, +.fixed-table-body-columns { + position: absolute; + background-color: #fff; + display: none; + box-sizing: border-box; + overflow: hidden; +} + +.fixed-table-header-columns .table, +.fixed-table-body-columns .table { + border-right: 1px solid #ddd; +} + +.fixed-table-header-columns .table.table-no-bordered, +.fixed-table-body-columns .table.table-no-bordered { + border-right: 1px solid transparent; +} + +.fixed-table-body-columns table { + position: absolute; + animation: none; +} + +.bootstrap-table .table-hover > tbody > tr.hover > td{ + background-color: #f5f5f5; +} \ No newline at end of file diff --git a/public/assets/css/bootstrap-table.min.css b/public/assets/css/bootstrap-table.min.css new file mode 100644 index 0000000..bfad989 --- /dev/null +++ b/public/assets/css/bootstrap-table.min.css @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.18.1 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +.bootstrap-table .fixed-table-toolbar::after{content:"";display:block;clear:both}.bootstrap-table .fixed-table-toolbar .bs-bars,.bootstrap-table .fixed-table-toolbar .columns,.bootstrap-table .fixed-table-toolbar .search{position:relative;margin-top:10px;margin-bottom:10px}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group{display:inline-block;margin-left:-1px!important}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group>.btn{border-radius:0}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group:first-child>.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.bootstrap-table .fixed-table-toolbar .columns .btn-group>.btn-group:last-child>.btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.bootstrap-table .fixed-table-toolbar .columns .dropdown-menu{text-align:left;max-height:300px;overflow:auto;-ms-overflow-style:scrollbar;z-index:1001}.bootstrap-table .fixed-table-toolbar .columns label{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429}.bootstrap-table .fixed-table-toolbar .columns-left{margin-right:5px}.bootstrap-table .fixed-table-toolbar .columns-right{margin-left:5px}.bootstrap-table .fixed-table-toolbar .pull-right .dropdown-menu{right:0;left:auto}.bootstrap-table .fixed-table-container{position:relative;clear:both}.bootstrap-table .fixed-table-container .table{width:100%;margin-bottom:0!important}.bootstrap-table .fixed-table-container .table td,.bootstrap-table .fixed-table-container .table th{vertical-align:middle;box-sizing:border-box}.bootstrap-table .fixed-table-container .table thead th{vertical-align:bottom;padding:0;margin:0}.bootstrap-table .fixed-table-container .table thead th:focus{outline:0 solid transparent}.bootstrap-table .fixed-table-container .table thead th.detail{width:30px}.bootstrap-table .fixed-table-container .table thead th .th-inner{padding:.75rem;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bootstrap-table .fixed-table-container .table thead th .sortable{cursor:pointer;background-position:right;background-repeat:no-repeat;padding-right:30px!important}.bootstrap-table .fixed-table-container .table thead th .both{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC")}.bootstrap-table .fixed-table-container .table thead th .asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==)}.bootstrap-table .fixed-table-container .table thead th .desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=)}.bootstrap-table .fixed-table-container .table tbody tr.selected td{background-color:#daebfe}.bootstrap-table .fixed-table-container .table tbody tr.no-records-found td{text-align:center}.bootstrap-table .fixed-table-container .table tbody tr .card-view{display:flex}.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-title{font-weight:700;display:inline-block;min-width:30%;text-align:left!important}.bootstrap-table .fixed-table-container .table tbody tr .card-view .card-view-value{width:100%}.bootstrap-table .fixed-table-container .table .bs-checkbox{text-align:center}.bootstrap-table .fixed-table-container .table .bs-checkbox label{margin-bottom:0}.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type=checkbox],.bootstrap-table .fixed-table-container .table .bs-checkbox label input[type=radio]{margin:0 auto!important}.bootstrap-table .fixed-table-container .table.table-sm .th-inner{padding:.3rem}.bootstrap-table .fixed-table-container.fixed-height.has-card-view{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .fixed-table-border{border-left:1px solid #dee2e6;border-right:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .table thead th{border-bottom:1px solid #dee2e6}.bootstrap-table .fixed-table-container.fixed-height .table-dark thead th{border-bottom:1px solid #32383e}.bootstrap-table .fixed-table-container .fixed-table-header{overflow:hidden}.bootstrap-table .fixed-table-container .fixed-table-body{overflow-x:auto;overflow-y:auto;height:100%}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading{align-items:center;background:#fff;display:flex;justify-content:center;position:absolute;bottom:0;width:100%;z-index:1000;transition:visibility 0s,opacity .15s ease-in-out;opacity:0;visibility:hidden}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.open{visibility:visible;opacity:1}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap{align-items:baseline;display:flex;justify-content:center}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .loading-text{margin-right:6px}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap{align-items:center;display:flex;justify-content:center}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::before{content:"";animation-duration:1.5s;animation-iteration-count:infinite;animation-name:LOADING;background:#212529;border-radius:50%;display:block;height:5px;margin:0 4px;opacity:0;width:5px}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-dot{animation-delay:.3s}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading .loading-wrap .animation-wrap::after{animation-delay:.6s}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark{background:#212529}.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-dot,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::after,.bootstrap-table .fixed-table-container .fixed-table-body .fixed-table-loading.table-dark .animation-wrap::before{background:#fff}.bootstrap-table .fixed-table-container .fixed-table-footer{overflow:hidden}.bootstrap-table .fixed-table-pagination::after{content:"";display:block;clear:both}.bootstrap-table .fixed-table-pagination>.pagination,.bootstrap-table .fixed-table-pagination>.pagination-detail{margin-top:10px;margin-bottom:10px}.bootstrap-table .fixed-table-pagination>.pagination-detail .pagination-info{line-height:34px;margin-right:5px}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list{display:inline-block}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list .btn-group{position:relative;display:inline-block;vertical-align:middle}.bootstrap-table .fixed-table-pagination>.pagination-detail .page-list .btn-group .dropdown-menu{margin-bottom:0}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination{margin:0}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a{color:#c8c8c8}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a::before{content:'\2B05'}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.page-intermediate a::after{content:'\27A1'}.bootstrap-table .fixed-table-pagination>.pagination ul.pagination li.disabled a{pointer-events:none;cursor:default}.bootstrap-table.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important;background:#fff;height:calc(100vh);overflow-y:scroll}.bootstrap-table.bootstrap4 .pagination-lg .page-link,.bootstrap-table.bootstrap5 .pagination-lg .page-link{padding:.5rem 1rem}div.fixed-table-scroll-inner{width:100%;height:200px}div.fixed-table-scroll-outer{top:0;left:0;visibility:hidden;width:200px;height:150px;overflow:hidden}@keyframes LOADING{0%{opacity:0}50%{opacity:1}to{opacity:0}} \ No newline at end of file diff --git a/public/assets/css/bootstrap.min.css b/public/assets/css/bootstrap.min.css new file mode 100644 index 0000000..56bd5a1 --- /dev/null +++ b/public/assets/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-. +5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../font/glyphicons-halflings-regular.eot);src:url(../font/glyphicons-halflings-regular.eot#iefix) format('embedded-opentype'),url(../font/glyphicons-halflings-regular.woff2) format('woff2'),url(../font/glyphicons-halflings-regular.woff) format('woff'),url(../font/glyphicons-halflings-regular.ttf) format('truetype'),url(https://static.skpan.cn/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #C3EAFF;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #f2f6fd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#F0F8FD}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#F0F8FD}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #C3EAFF;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{outline: 0;-webkit-box-shadow: 0 0 5px 0 #09AAFF;-moz-box-shadow: 0 0 5px 0 #09AAFF;box-shadow: 0 0 5px 0 #09AAFF;}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #C3EAFF;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #C3EAFF;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #C3EAFF;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/public/assets/css/elementui.css b/public/assets/css/elementui.css new file mode 100644 index 0000000..b3a8bfe --- /dev/null +++ b/public/assets/css/elementui.css @@ -0,0 +1 @@ +.el-pagination--small .arrow.disabled,.el-table--hidden,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-dialog,.el-pager li{background:#fff;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-pager,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0 !important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0 !important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0 !important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none !important;box-shadow:none !important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\E6DA";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0);transform:rotate(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotate(180deg);transform:rotate(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#fff}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform:translateY(.5px);transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent !important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div,.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td div{padding:3px 0}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409eff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#409eff}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409eff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel,.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px !important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:inset 0 0 2px 2px #409eff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{vertical-align:middle;display:inline-block}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-slider__button,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409eff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative !important}.el-loading-parent--hidden{overflow:hidden !important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-2,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-push-0,.el-col-push-1,.el-col-push-2,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}@-webkit-keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner:after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner:after{height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border:1px solid #ebeef5;background-color:#fff;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;-webkit-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;-webkit-flex-shrink:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto !important;-webkit-flex-basis:auto !important;flex-basis:auto !important;-ms-flex-negative:0;-webkit-flex-shrink:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;-webkit-flex-grow:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;-webkit-flex-grow:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;-webkit-flex-grow:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45);transform:scale(.45)}.collapse-transition{-webkit-transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{-webkit-transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out;transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-cascader__tags,.el-collapse-item__wrap,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;-webkit-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.el-color-predefine__colors{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409eff;box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:-webkit-gradient(linear,left top,right top,color-stop(0,red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:-webkit-linear-gradient(left,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:-webkit-gradient(linear,left top,left bottom,color-stop(0,red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:-webkit-linear-gradient(top,red,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(hsla(0,0%,100%,0)));background:-webkit-linear-gradient(left,#fff,hsla(0,0%,100%,0));background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:-webkit-linear-gradient(bottom,#000,transparent);background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-gradient(linear,left top,right top,color-stop(0,hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(left,hsla(0,0%,100%,0),#fff);background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background:-webkit-gradient(linear,left top,left bottom,color-stop(0,hsla(0,0%,100%,0)),to(#fff));background:-webkit-linear-gradient(top,hsla(0,0%,100%,0),#fff);background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 8px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;-webkit-transition:all .3s;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px}.el-input__icon,.el-input__prefix{-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#409eff;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block !important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;-ms-flex-preferred-size:auto;-webkit-flex-basis:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;-webkit-flex-shrink:0;flex-shrink:0}.el-aside{overflow:auto}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;-ms-flex-preferred-size:auto;-webkit-flex-basis:auto;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-ms-flex-negative:0;-webkit-flex-shrink:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox,.el-image-viewer__btn{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;-webkit-align-self:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-backtop,.el-calendar-table td.is-today{color:#409eff}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{line-height:24px}.el-page-header,.el-page-header__left{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.el-page-header__left{cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;-webkit-align-self:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox,.el-checkbox-button__inner,.el-radio{font-weight:500;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409eff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none !important;box-shadow:none !important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity .34s ease-out;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:background-color .3s;transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity .12s ease-out;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;color:#72767b;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child,.el-drawer__title{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;-webkit-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0} \ No newline at end of file diff --git a/public/assets/css/file.css b/public/assets/css/file.css new file mode 100644 index 0000000..55ce30a --- /dev/null +++ b/public/assets/css/file.css @@ -0,0 +1,255 @@ +/* 文件列表图标 关于母猪的产后护养研究 */ +.file-icon{ + cursor: default; + display: inline-block; /* 一行显示 */ + height: 26px; + width: 26px; + left: 43px; + top: 10px; + margin-right: 5px; + vertical-align:middle; /* 对齐 */ +} + +.filename{ + vertical-align:middle; + font-size:13px; +} + + +.viewer{ + + cursor:pointer; /* 鼠标样式 */ +} + +.folder{ + cursor:pointer; /* 鼠标样式 */ +} + +.icon-search:hover{ + color: #09AAFF; +} + +/* 鼠标悬浮显示更多按钮 */ +.gengduo { + z-index: 3; + float:right; + margin-top: 5px; + cursor:pointer; + display: none; +} + + +/* 图标 */ +.icon-color { + color: #09AAFF; +} + + +/* 路劲导航 */ +.daohang { + background-color: #fff; + height: 16px; + line-height: 16px; + margin-bottom: 15px; + position: relative; + font-size: 13px; + display: block; + padding: 15px 0 7px 9px; + margin-top: 0px; + color: #666; +} + +.daohang-path { + line-height: 16px; + background: #fff; + overflow: hidden; + white-space: nowrap; +} + +.daohang-path li { + float: left; +} + +.daohang-path a { + color: #09aaff; +} + +.daohang-path .fuhao { + padding: 0 5px; + color: #c5d8f3; + padding: 0 3px; +} + + + + +/* 空文件样式 */ +.emptyFile { + top: 20px; + left: 0; + width: 100%; + height: 100%; + line-height: 30px; +} + +.emptyFile p { + color: #424e67; + margin: 20px 0; + font-weight: 200; + display: block; + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0px; + margin-inline-end: 0px; + font-size: 14px; +} + +.emptyFile2 { + margin: 0; + display: block; + text-align: left; + position: relative; + overflow-x: hidden; + overflow-y: auto; + height: 100%; + min-height: 400px; +} +.emptyFile2 .img { + background: url(../image/emptyfile.png) no-repeat scroll center 0 transparent; + padding-top: 150px; + width: 488px; + position: absolute; + left: 50%; /* 左边距实现居中 */ + top: 90%; + text-align: center; + margin: -190px 0 0 -244px; +} + +/* 空回收站样式 */ +.emptyRecyclebin .img { + background: url(/assets/image/emptyRecyclebin.png) no-repeat scroll center 0 transparent; + padding-top: 80px; +} + +.emptyRecyclebin-p { + font-size: 16px; + font-weight: 700; + color: #03081a; +} + +/* 搜索未找到时 */ +.emptySousuo .img { + background: url(/assets/image/emptySousuo.png) no-repeat scroll center 0 transparent; + padding-top: 110px; +} + + + +/* 开关按钮 */ +.switch { + position: relative; + /*display: inline-block;*/ + width: 60px; + height: 34px; + } + + .switch input {display:none;} + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + } + + .slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + } + + input:checked + .slider { + background-color: #2196F3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196F3; + } + + input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + + /* Rounded sliders */ + .slider.round { + border-radius: 34px; + } + + .slider.round:before { + border-radius: 50%; + } + + +/* 右键菜单 */ +.context-menu .list { + border: 1px solid #dde0e4; + border-radius: 5px; + box-shadow: 0 0 8px #ccc; +} + +.context-menu .list { + min-height: 23px; + padding: 2px 0; + position: absolute; + background-color: #FFF; + color: #000; +} + +.context-menu .list li { + display: list-item; + cursor: default; + width: 110px; + height: 23px; + line-height: 23px; + white-space: nowrap; + position: relative; + z-index: 1; + box-sizing: border-box; + padding: 0 27px 0 20px; +} + +.context-menu .list .separate, +.context-menu .list .separate.list-hover { + padding: 0; + margin: 5px 0; + height: 1px; + line-height: 0; + font-size: 0 !important; + background-color: #e9e9e9; + cursor: default; +} +.context-menu .list li:hover { + background-color: #4281F4; + color: #FFF!important; +} + +.context-menu ul, .context-menu li { + list-style: none; + padding: 0; + margin: 0; + font-size: 13px!important; + color: #5b667b!important; +} \ No newline at end of file diff --git a/public/assets/css/home.css b/public/assets/css/home.css new file mode 100644 index 0000000..38b9da1 --- /dev/null +++ b/public/assets/css/home.css @@ -0,0 +1,291 @@ + + +.brdCom { + content: " "; + position: absolute; + width: 100%; + -webkit-transform: scaleY(.5); + transform: scaleY(.5) +} + +.header { + height: 100% +} + +.pub-right { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center +} + +.pub-header { + width: 100%; + height: 100% +} + +.pub-header .logo { + cursor: pointer +} + +.pub-header .head-box { + cursor: pointer +} + +.pub-header .head-box .head-img { + width: 34px; + height: 34px; + border-radius: 50%; + margin-right: 8px +} + +.pub-header .head-box .text { + font-size: 18px; + color: #434343; + margin-right: 14px +} + +.pub-header .head-box .down { + width: 14px; + height: 9px; + margin-right: 30px +} + +.pub-header .head-box .line { + width: 2px; + height: 20px; + background: #dcdcdc +} + +.pub-header .pub-header1 { + margin-left: 30px; + cursor: pointer +} + +.pub-header .pub-header1 .yq { + width: 17px; + height: 17px +} + +.pub-header .pub-header1 .xgmm { + width: 13px; + height: 17px +} + +.pub-header .pub-header1 .tc { + width: 15px; + height: 16px +} + +.pub-header .pub-header1 .text { + font-size: 14px; + color: #313131; + margin-left: 8px +} + +.pop-box { + padding-bottom: 20px +} + +.pop-box .pop-top { + width: 100%; + height: 90px; + background-image: -webkit-gradient(linear, right top, left top, from(#5a84f0), to(#6aafef)); + background-image: -webkit-linear-gradient(right, #5a84f0, #6aafef); + background-image: linear-gradient(-90deg, #5a84f0, #6aafef); + border-top-left-radius: 10px; + border-top-right-radius: 10px; + padding: 20px 15px 0 15px +} + +.pop-box .pop-top .text { + font-size: 12px; + color: #fff +} + +.pop-box .pop-top .pro { + width: 230px; + height: 6px; + background-color: #fff; + border-radius: 3px; + margin: 15px 0 +} + +.pop-box .pop-top .pro p { + height: 100%; + width: 65px; + border-radius: 3px; + background-color: #fdd30d +} + +.pop-box .pop-bottom { + padding: 0 14px +} + +.pop-box .pop-bottom .text-box { + margin-top: 20px; + font-size: 14px; + color: #313131 +} + +.pop-box .pop-bottom .text-box .text { + font-size: 14px; + color: #313131 +} + +.pop-box .pop-bottom .text-box .btn { + border-radius: 3px; + width: 47px; + height: 22px; + background-color: #bcbcbc; + font-size: 14px; + color: #fff; + cursor: pointer +} + +.yq-box { + margin-top: 14px +} + +.yq-box .text { + font-size: 14px +} + +.yq-box .text1 { + width: 214px; + height: 22px; + border-radius: 4px; + border: 1px solid #dcdcdc; + margin-left: 8px; + font-size: 12px; + color: #fff; + padding: 0 5px +} + +.yq-box .text1 .text2 { + width: 100%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden +} + +.yq-box .btn { + width: 47px; + height: 22px; + background-color: #fdd30d; + border-radius: 4px; + font-size: 12px; + color: #fff; + cursor: pointer +} + +.el-dialog__header { + background: #f6f6f6; + border-top-left-radius: 4px; + border-top-right-radius: 4px +} + +.el-header { + width: 100%; + height: 70px; + background-color: #fff; + -webkit-box-shadow: 0 3px 15px 0 hsla(0, 0%, 71%, .2); + box-shadow: 0 3px 15px 0 hsla(0, 0%, 71%, .2); + padding: 0 42px 0 25px +} + +.el-aside { + background: #f7f7f7; + overflow: hidden +} + +.el-col { + width: 100% +} + +.el-dialog { + border-radius: 4px +} + +.el-popover { + padding: 0; + background-color: #fff; + -webkit-box-shadow: 0 3px 15px 0 hsla(0, 0%, 71%, .2); + box-shadow: 0 3px 15px 0 hsla(0, 0%, 71%, .2); + border-radius: 10px +} + +.el-popper .popper__arrow, +.el-popper .popper__arrow:after { + border-color: transparent transparent #5c89f0 transparent +} + +.el-popper[x-placement^=bottom] .popper__arrow:after { + border-bottom-color: #5c89f0 +} + +.el-dialog .text { + font-size: 12px; + color: #4f7cec; + text-align: center; + padding-bottom: 10px +} + +.el-dialog .input { + width: 322px; + height: 32px; + border-radius: 2px; + border: 1px solid #dcdcdc; + padding-left: 12px; + font-size: 12px; + display: block; + margin: 20px auto 0 auto +} + +.el-dialog .dis-btn { + width: 322px; + height: 34px; + background-color: #4f7cec; + border-radius: 4px; + font-size: 14px; + color: #fff; + margin: 40px auto 0 auto; + cursor: pointer +} + +.el-dialog .code-box { + margin-top: 20px; + margin-left: 21px +} + +.el-dialog .code-box .input1 { + width: 222px; + height: 32px; + border-radius: 2px; + border: 1px solid #dcdcdc; + padding-left: 12px; + font-size: 12px +} + +.el-dialog .code-box .dis-btn1 { + width: 86px; + height: 32px; + background-color: #4f7cec; + border-radius: 2px; + margin-left: 14px; + font-size: 12px; + color: #fff; + cursor: pointer +} + +.el-aside { + width: 195px; +} +@media (max-width:576px) { + .el-aside { + width: 100px; + } + .el-menu-item{ + padding: 0 0px; + } +} \ No newline at end of file diff --git a/public/assets/css/icon.css b/public/assets/css/icon.css new file mode 100644 index 0000000..88f1218 --- /dev/null +++ b/public/assets/css/icon.css @@ -0,0 +1,499 @@ +@font-face { + font-family:yunfont; + src:url(../font/yunfont.eot); + src:url(../font/yunfont.eot#iefix) + format('embedded-opentype'),url(../font/yunfont.ttf) + format('truetype'),url(../font/yunfont.woff) + format('woff'),url(https://static.skpan.cn/icon/font/yunfont.svg?t=1610419101922?de437c#yunfont) format('svg'); + font-weight:400; + font-style:normal; +} + + +.g-button-right{ + padding-left: 20px; + color: #666; + background-color: rgb(247, 247, 247); +} + +.g-button-right .icon{ + height: 38px; + width: 23px; + line-height: 38px; + margin-left: 5px; + margin-top: -2px; + font-size: 16px; + display: inline-block; +} + +.icon { + font-family: yunfont!important; + speak: never; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.icon-my-share:before { + content: "\e900" +} + +.icon-disk:before { + content: "\e901" +} + +.icon-share:before { + content: "\e902" +} + +.icon-delete:before { + content: "\e903" +} + +.icon-theme:before { + content: "\e904" +} + +.icon-search:before { + content: "\e905" +} + +.icon-newfolder:before { + content: "\e906" +} + +.icon-download:before { + content: "\e907" +} + +.icon-border:before { + content: "\e908" +} + +.icon-face:before { + content: "\e909" +} + +.icon-android:before { + content: "\e90a" +} + +.icon-apple:before { + content: "\e90b" +} + +.icon-device:before { + content: "\e90c" +} + +.icon-check:before { + content: "\e90d" +} + +.icon-cancel:before { + content: "\e90e" +} + +.icon-print:before { + content: "\e90f" +} + +.icon-order:before { + content: "\e910" +} + +.icon-grid:before { + content: "\e911" +} + +.icon-right:before { + content: "\e912" +} + +.icon-more:before { + content: "\e913" +} + +.icon-copy:before { + content: "\e914" +} + +.icon-upload:before { + content: "\e915" +} + +.icon-yunguanjia:before { + content: "\e916" +} + +.icon-iPad:before { + content: "\e917" +} + +.icon-win:before { + content: "\e918" +} + +.icon-mail:before { + content: "\e919" +} + +.icon-sync:before { + content: "\e91a" +} + +.icon-share-cancel:before { + content: "\e91b" +} + +.icon-qrcode:before { + content: "\e91c" +} + +.icon-beauty:before { + content: "\e91d" +} + +.icon-edit:before { + content: "\e91e" +} + +.icon-save-disk:before { + content: "\e91f" +} + +.icon-list:before { + content: "\e920" +} + +.icon-history:before { + content: "\e921" +} + +.icon-notice:before { + content: "\e922" +} + +.icon-recovery:before { + content: "\e923" +} + +.icon-mosaic:before { + content: "\e924" +} + +.icon-speed:before { + content: "\e925" +} + +.icon-play:before { + content: "\e926" +} + +.icon-poly:before { + content: "\e927" +} + +.icon-feedback:before { + content: "\e928" +} + +.icon-search-del:before { + content: "\e929" +} + +.icon-small-lock:before { + content: "\e92a" +} + +.icon-close:before { + content: "\e92b" +} + +.icon-minimize:before { + content: "\e92c" +} + +.icon-maximizing:before { + content: "\e92d" +} + +.icon-share-community:before { + content: "\e92e" +} + +.icon-share-email:before { + content: "\e92f" +} + +.icon-share-link:before { + content: "\e930" +} + +.icon-share-friend:before { + content: "\e931" +} + +.icon-sort-select:before { + content: "\e932" +} + +.icon-dropdown-arrow:before { + content: "\e933" +} + +.icon-friendlist:before { + content: "\e934" +} + +.icon-checkgridsmall:before { + content: "\e935" +} + +.icon-mboxchate:before { + content: "\e936" +} + +.icon-checksmall:before { + content: "\e937" +} + +.icon-downtitle:before { + content: "\e938" +} + +.icon-up:before { + content: "\e939" +} + +.icon-rename-cancel:before { + content: "\e93a" +} + +.icon-circle:before { + content: "\e93b" +} + +.icon-mac:before { + content: "\e93c" +} + +.icon-musicpause:before { + content: "\e93d" +} + +.icon-musicloop:before { + content: "\e93e" +} + +.icon-musicprev:before { + content: "\e93f" +} + +.icon-musicrandom:before { + content: "\e940" +} + +.icon-musicloop2:before { + content: "\e941" +} + +.icon-musicnext:before { + content: "\e942" +} + +.icon-musicplay:before { + content: "\e943" +} + +.icon-musicvolume:before { + content: "\e944" +} + +.icon-arrow-up:before { + content: "\e945" +} + +.icon-arrow-down:before { + content: "\e946" +} + +.icon-arrow-right:before { + content: "\e947" +} + +.icon-arrow-left:before { + content: "\e948" +} + +.icon-appeal:before { + content: "\e949" +} + +.icon-radio-checked:before { + content: "\e94a" +} + +.icon-radio-non:before { + content: "\e94b" +} + +.icon-director:before { + content: "\e94c" +} + +.icon-dropdown-select:before { + content: "\e94d" +} + +.icon-tips-detail:before { + content: "\e94e" +} + +.icon-tips-success:before { + content: "\e94f" +} + +.icon-tips-close:before { + content: "\e950" +} + +.icon-tips-caution:before { + content: "\e951" +} + +.icon-imageEnlarge:before { + content: "\e952" +} + +.icon-hollowCircle:before { + content: "\e953" +} + +.icon-picpre-enlarge:before { + content: "\e954" +} + +.icon-picpre-close:before { + content: "\e955" +} + +.icon-picpre-beautify:before { + content: "\e956" +} + +.icon-picpre-delete:before { + content: "\e957" +} + +.icon-picpre-before:before { + content: "\e958" +} + +.icon-picpre-pulldown2:before { + content: "\e959" +} + +.icon-picpre-next:before { + content: "\e95a" +} + +.icon-picpre-download:before { + content: "\e95b" +} + +.icon-picpre-detail:before { + content: "\e95c" +} + +.icon-picpre-pullup:before { + content: "\e95d" +} + +.icon-picpre-rotate:before { + content: "\e95e" +} + +.icon-picpre-phone:before { + content: "\e95f" +} + +.icon-picpre-cloudprint:before { + content: "\e960" +} + +.icon-picpre-facesearch:before { + content: "\e961" +} + +.icon-remark-edit:before { + content: "\e962" +} + +.icon-remark-remove:before { + content: "\e963" +} + +.icon-camera:before { + content: "\e964" +} + +.icon-sharedir:before { + content: "\e965" +} + +.icon-sharedir-info:before { + content: "\e966" +} + +.icon-classify-modify-remove:before { + content: "\e967" +} + +.icon-setting:before { + content: "\e968" +} + +.icon-share-sellmall:before { + content: "\e969" +} + +.icon-pdf2word:before { + content: "\e96a" +} + +.icon-uniE96D:before { + content: "\e96b" +} + +.icon-uniE96E:before { + content: "\e96c" +} + +.icon-uniE96F:before { + content: "\e96d" +} + +.icon-sjck:before { + content: "\e96e" +} + +.icon-addwp:before { + content: "\e96f" +} + +.icon-wpedit:before { + content: "\e970" +} + +.icon-share-lock:before { + content: "\e971" +} + +.icon-svg-s-close:before { + content: "\e972" +} \ No newline at end of file diff --git a/public/assets/css/index.css b/public/assets/css/index.css new file mode 100644 index 0000000..b3bfefa --- /dev/null +++ b/public/assets/css/index.css @@ -0,0 +1,637 @@ +* { + -webkit-box-sizing: content-box !important; + -moz-box-sizing: content-box !important; + box-sizing: content-box !important; +} + +body { + font-size: 14px !important; + font-family: arial, \5FAE\8F6F\96C5\9ED1, sans-serif; + margin: auto; + color: #3f3f3f +} + +.h3, h3 { + font-size: 14px !important; +} +.h2, h2 { + font-size: 14px !important; +} +.h1, h1 { + font-size: 14px !important; +} + +a:link { + text-decoration: none; +} + +a:visited { + text-decoration: none; +} + +a:hover { + text-decoration: none; + color: #f32 +} + +a:active { + text-decoration: none; + color: #ff0 +} + +.dx:link { + color: #fff; + background-color: #09f +} + +.dx:hover { + color: #fff; + background-color: #5bf +} + +.d1 { + background: #fafafa; + box-shadow: 0 2px 6px 0 rgba(0,0,0,.05); + position: fixed; + top: 0; + _top: expression(eval(document.compatMode&&document.compatMode=='CSS1Compat')?documentElement.scrollTop:document.body.scrollTop); + filter: alpha(opacity=70); + -moz-opacity: .7; + -khtml-opacity: .7; + opacity: .7; + z-index: 100; + width: 100%; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #fc6; + height: 49px +} + +.d1 a:link { + text-decoration: none +} + +.d1 a:visited { + text-decoration: none +} + +.d1 a:hover { + color: #333; + text-decoration: none +} + +.d1 a:active { + text-decoration: none +} + +.d11 { + float: left; + background-image: url(../image/logo3.gif); + background-repeat: no-repeat; + background-position: 17px 14px; + padding-top: 18px; + height: 29px +} + +.d12 { + font-size: 16px; + float: right; + padding-right: 30px; + padding-top: 18px; + height: 29px +} + +.d7 { + display: block; + text-align: right; + width: 230px +} + +.pc { + background-color: #09f; + height: 15px; + background-image: url(../image/logo3.gif); + background-repeat: no-repeat; + background-position: 90% bottom; + margin-top: 45px; + _margin-top: 0; + width: 100% +} + +.li { + text-align: center; + padding-top: 17px; + padding-bottom: 7px; + font-size: 20px; + color: #bbb; + font-family: MingLiU, PMingLiU +} + +.q7 { + background-color: #fc3; + width: 100%; + margin-right: auto; + margin-left: auto +} + +.q1 { + font-size: 37px; + font-weight: bold; + text-align: center; + padding-top: 70px; + padding-left: 150px +} + +.q1 span { + font-family: \9ED1\4F53 +} + +.q2 { + font-size: 20px; + color: #ff9; + text-align: center; + margin-top: 27px; + margin-bottom: 13px; + padding-left: 150px; + font-family: MingLiU, PMingLiU +} + +.q3 { + text-align: center; + padding-left: 150px; + padding-top: 20px; + font-size: 16px +} + +.q5 { + background-image: url(../image/q2.gif); + background-repeat: no-repeat; + background-position: 0 30px; + height: 300px; + float: left; + width: 700px +} + +.q9 { + height: 306px; + width: 998px; + margin-right: auto; + margin-left: auto; + background-image: url(../image/q9.gif); + background-repeat: no-repeat; + background-position: right bottom; + padding-top: 23px; + padding-bottom: 23px +} + +.y0 { + background-color: #fff; + padding: 23px; + _top: expression(eval(document.compatMode&&document.compatMode=='CSS1Compat')?documentElement.scrollTop:document.body.scrollTop); + filter: alpha(opacity=70); + -moz-opacity: .7; + -khtml-opacity: .7; + opacity: .7; + z-index: 100; + width: 220px; + border-radius: 5px; + float: right +} + +.y1 { + font-size: 26px; + text-align: center; + padding-top: 17px +} + +.y2 { + width: 170px; + margin-right: auto; + margin-left: auto; + line-height: 37px; + margin-top: 11px; + margin-bottom: 11px; + color: #f60; + text-align: center +} + +.y3 { + text-align: center; + color: #777 +} + +.y6 { + border: 1px solid #D5D5D5; + background-image: linear-gradient(#FCFCFC, #EEE); + background-color: #f7f7f7; + text-shadow: 0 2px 0 rgba(255, 255, 255, 0.9); + text-align: center; + margin-right: auto; + margin-left: auto; + width: 130px; + margin-top: 7px; + display: block; + padding: 7px; + border-radius: 5px; + color: #000 +} + +.y6:link { + color: #000 +} + +.y6:hover { + border: 1px solid #fc3; + color: #999; +} + +.y6:visited { + color: #333 +} + +.y6:active { + background-color: #ffc; + background-image: linear-gradient(#dcdcdc, #d8d8d8); + box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.15) +} + +.v1 { + font-family: "Raleway", "Open Sans", "Helvetica Neue", Microsoft JhengHei, arial, sans-serif, \5FAE\8F6F\96C5\9ED1, Arial, sans-serif; + font-size: 26px; + margin-top: 7px; + margin-bottom: 7px; + text-align: center; + color: #333 +} + +.v2 { + text-align: center; + margin-top: 17px +} + +.v3 { + height: 210px; + background-color: #19a9e5; + padding-top: 39px; + width: 100% +} + +.v4 { + font-family: "Raleway", "Open Sans", "Helvetica Neue", Microsoft JhengHei, arial, sans-serif, \5FAE\8F6F\96C5\9ED1, Arial, sans-serif; + font-size: 30px; + color: #fff; + padding: 7px +} + +.v5 { + color: #fff; + padding: 7px; + font-size: 13px +} + +.v6 { + font-size: 17px; + color: #adf; + padding: 7px +} + +.v7 { + height: 33px; + width: 118px; + background-color: #6b0; + text-align: center; + margin-left: 7px; + border-radius: 5px; + display: block; + line-height: 33px +} + +.v7:link { + color: #fff; + text-decoration: none +} + +.v7:hover { + background-color: #81d658; + color: #fff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5) +} + +.v7:visited { + color: #fff +} + +.v7:active { + background-color: #509100; + box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.15) +} + +.p8 { + float: left; + width: 220px; + margin-left: 3px; + padding-top: 160px; + border: 1px solid #fff; + padding-bottom: 30px +} + +.p8:hover { + background-image: url(../image/i1.gif); + background-repeat: no-repeat; + background-position: -820px 22px; + color: #000; + border: 1px solid #eee +} + +.p7 { + float: left; + width: 220px; + margin-left: 3px; + padding-top: 160px; + border: 1px solid #fff; + padding-bottom: 30px +} + +.p7:hover { + background-image: url(../image/i1.gif); + background-repeat: no-repeat; + background-position: -1046px 22px; + color: #000; + border: 1px solid #eee +} + +.p6 { + float: left; + width: 220px; + margin-left: 3px; + padding-top: 160px; + border: 1px solid #fff; + padding-bottom: 30px +} + +.p6:hover { + background-image: url(../image/i1.gif); + background-repeat: no-repeat; + background-position: -1270px 22px; + color: #000; + border: 1px solid #eee +} + +.p5 { + float: left; + width: 220px; + margin-left: 3px; + padding-top: 160px; + border: 1px solid #fff; + padding-bottom: 30px +} + +.p5:hover { + background-image: url(../image/i1.gif); + background-repeat: no-repeat; + background-position: -1496px 22px; + color: #000; + border: 1px solid #eee +} + +.p9 { + width: 927px; + height: 273px; + background-image: url(../image/i1.gif); + background-repeat: no-repeat; + margin-right: auto; + margin-left: auto; + background-position: 59px 23px; + color: #999 +} + +.c { + clear: both; + height: 70px +} + +.h1 { + width: 600px; + padding-top: 100px; + padding-right: 398px; + padding-bottom: 100px; + margin-right: auto; + margin-left: auto; + background-image: url(../image/i18.gif); + background-repeat: no-repeat; + background-position: 682px -719px +} + +.h1:hover { + background-image: url(../image/i18.gif); + background-repeat: no-repeat; + background-position: 683px -719px +} + +.h2 { + width: 460px; + margin-right: auto; + margin-left: auto; + padding-top: 20px; + padding-bottom: 20px; + padding-left: 538px; + background-image: url(../image/i18.gif); + background-repeat: no-repeat; + background-position: 0 -460px +} + +.h3 { + height: 180px; + width: 640px; + margin-right: auto; + margin-left: auto; + padding-top: 7px; + padding-right: 358px; + padding-bottom: 7px; + background-image: url(../image/i18.gif); + background-repeat: no-repeat; + background-position: 718px -218px +} + +.u { + width: 998px; + margin-right: auto; + margin-left: auto; + height: 200px +} + +.u1 { + width: 998px; + margin-top: 27px; + border-top: 1px solid #e1e1e1; + margin-right: auto; + margin-left: auto; + margin-bottom: 70px +} + +.u2 { + width: 365px; + float: right; + background-image: url(../image/i9.png); + background-repeat: repeat; + height: 197px +} + +.u2:hover { + border-right-width: 1px; + border-right-style: solid; + border-right-color: #fff +} + +.u3 { + height: 100px; + width: 500px; + padding-top: 50px; + padding-bottom: 50px; + float: left +} + +.u5 { + height: 193px; + width: 362px; + background-image: url(../image/i18.gif); + background-repeat: no-repeat +} + +.m1 { + font-family: "Raleway", "Open Sans", "Helvetica Neue", Microsoft JhengHei, arial, sans-serif, \5FAE\8F6F\96C5\9ED1, Arial, sans-serif; + font-size: 26px; + padding: 7px +} + +.m2 { + color: #999; + padding: 7px; + line-height: 1.5em +} + +.foot { + width: 100%; + padding-top: 39px; + padding-bottom: 30px; + color: #aaa; + font-size: 12px; + line-height: 30px; + border-top-width: 1px; + border-top-style: solid; + border-top-color: #ddd +} + +.foot a:link { + color: #19a9e5 +} + +.foot a:visited { + text-decoration: none; + color: #19a9e5 +} + +.foot a:hover { + color: #f32 +} + +.f0 { + font-size: 14px; + border-radius: 5px; + margin-bottom: 17px; + line-height: normal; + color: #333 +} + +.f1 { + font-size: 12px; + text-align: center; + word-spacing: 7px; + width: 100%; + margin-right: auto; + margin-left: auto; + margin-top: 50px; + padding-bottom: 98px; + padding-top: 8px +} + +.f3 { + float: left; + width: 198px +} + +.f5 { + clear: both; + width: 998px; + height: 1px +} + +.f6 { + width: 998px; + margin-right: auto; + margin-left: auto +} + +.f7 { + display: block; + height: 41px; + width: 130px; + background-image: url(https://static.skpan.cn/pan/img/y3.gif); + margin-right: auto; + margin-left: auto; + border: 1px solid #000 +} + +.f7:hover { + background-image: url(https://static.skpan.cn/pan/img/y3.gif); + border: 1px solid #ccc; + background-position: 0 95px +} + +.f9 { + height: 40px; + width: 130px; + background-image: url(../image/logo.gif); +} + +.up { + width: 50px; + height: 50px; + background: url(https://static.skpan.cn/img/top.gif) no-repeat 0 0 +} + +.up:hover { + background: url(https://static.skpan.cn/img/top.gif) no-repeat 0 -50px +} + +.up:active { + box-shadow: inset 0 5px 5px rgba(0, 0, 0, 0.15) +} + +::-moz-selection { + background: #000; + color: #fff +} + +::selection { + background: #000; + color: #fff +} + +::-webkit-scrollbar { + background: rgba(0, 0, 0, 0.1); + height: 9px; + width: 9px +} + +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2) +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.3); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(0, 0, 0, 0.5); +} \ No newline at end of file diff --git a/public/assets/css/layer.css b/public/assets/css/layer.css new file mode 100644 index 0000000..d323d27 --- /dev/null +++ b/public/assets/css/layer.css @@ -0,0 +1,2 @@ +/** layui-v2.5.4 MIT License By https://www.layui.com */ + .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/public/assets/css/layer/default/icon-ext.png b/public/assets/css/layer/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/public/assets/css/layer/default/icon-ext.png differ diff --git a/public/assets/css/layer/default/icon.png b/public/assets/css/layer/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/public/assets/css/layer/default/icon.png differ diff --git a/public/assets/css/layer/default/layer.css b/public/assets/css/layer/default/layer.css new file mode 100644 index 0000000..d323d27 --- /dev/null +++ b/public/assets/css/layer/default/layer.css @@ -0,0 +1,2 @@ +/** layui-v2.5.4 MIT License By https://www.layui.com */ + .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/public/assets/css/layer/default/loading-0.gif b/public/assets/css/layer/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/public/assets/css/layer/default/loading-0.gif differ diff --git a/public/assets/css/layer/default/loading-1.gif b/public/assets/css/layer/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/public/assets/css/layer/default/loading-1.gif differ diff --git a/public/assets/css/layer/default/loading-2.gif b/public/assets/css/layer/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/public/assets/css/layer/default/loading-2.gif differ diff --git a/public/assets/css/layui.css b/public/assets/css/layui.css new file mode 100644 index 0000000..c574b3e --- /dev/null +++ b/public/assets/css/layui.css @@ -0,0 +1,2 @@ +/** layui-v2.5.4 MIT License By https://www.layui.com */ + .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-body,.layui-edge,.layui-elip{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=250);src:url(../font/iconfont.eot?v=250#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=250) format('woff2'),url(../font/iconfont.woff?v=250) format('woff'),url(../font/iconfont.ttf?v=250) format('truetype'),url(../font/iconfont.svg?v=250#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-home:before{content:"\e68e"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-cols:before{content:"\e610"}.layui-icon-export:before{content:"\e67d"}.layui-icon-print:before{content:"\e66d"}.layui-icon-slider:before{content:"\e714"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-service:before{content:"\e626"}.layui-icon-transfer:before{content:"\e691"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:fixed;top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:16.666666%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:85px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:115px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#e6e6e6}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#e6e6e6;color:#C9C9C9}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f2f2f2;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:55px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:'';position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:'';position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:'';position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} \ No newline at end of file diff --git a/public/assets/css/list.css b/public/assets/css/list.css new file mode 100644 index 0000000..f3560b6 --- /dev/null +++ b/public/assets/css/list.css @@ -0,0 +1,298 @@ +/* 滚动条样式 */ +::-webkit-scrollbar { + width: 12px; + height: 10px; +} +::-webkit-scrollbar-thumb { + height: 30px; + background-color: #999; + -webkit-border-radius: 7px; + outline: 2px solid #fff; + outline-offset: -2px; + border: 2px solid #fff; +} +::-webkit-scrollbar-track-piece { + background-color: #fff; + -webkit-border-radius: 3px; +} + +.g-button-right { + color: #666; +} + +.select { + color: #09AAFF; + background: rgba(0,0,0,.05); +} + +.brdCom{ + content: " "; + position: absolute; + width: 100%; + -webkit-transform: scaleY(.5); + transform: scaleY(.5) +} + +.top-item{ + color: #409eff; + height: 34px; + border-radius: 4px; + border: 1px solid #C3EAFF; + padding: 0 18px 0 15px; + cursor: pointer; + margin-right: 10px; + position: relative +} + + +.top-item .text{ + color: #409eff; + font-size: 14px; + margin-left: 10px +} + +.top-item:hover .text { + border: none; + color: #2f6aff +} + +.icon-box{ + border: 1px solid #4f7cec; + border-radius: 4px +} + +.icon-box .top-item{ + border: none; + border-radius: 0; + margin-right: 0; + border-right: 1px solid #4f7cec +} + +.icon-box .top-item:last-child { + border-right: none +} + +.top-right{ + width: 316px; + height: 32px; + background-color: #f1f2f4; + border-radius: 16px; + padding: 0 15px +} + +.top-right input{ + font-size: 14px; + background: none; + border: none; + width: 250px +} + +.top-right .icon{ + color: #434343; + cursor: pointer +} + +.all-box1{ + margin-top: 14px +} + +.all-box1 .text{ + font-size: 12px; + color: #535353 +} + +.all-box1 .text1{ + font-size: 12px; + color: #626262 +} + +.cz-box .icon,.cz-box img{ + cursor: pointer; + margin-right: 15px +} + +.cz-box .icon{ + color: #4f7cec +} + +.scop-text{ + cursor: pointer; + color: #313131; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.dis-form{ + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding-left: 20px; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center +} + +.dis-form.from1{ + margin-top: 35px +} + +.dis-form .text1{ + width: 85px; + font-size: 14px; + color: #a0a0a0 +} + +.dis-form .text2{ + font-size: 14px; + color: #b5b5b5; + margin-left: 15px +} + +.lj{ + width: 370px; + height: 40px; + border: 1px solid #dcdcdc; + font-size: 14px; + color: #b5b5b5; + margin: 30px auto 0 auto; + border-radius: 4px +} + +.share-img{ + width: 151px; + margin: 30px auto 0 auto +} + +.dis-btn1{ + width: 115px; + height: 34px; + background-color: #4f7cec; + border-radius: 4px; + font-size: 14px; + color: #fff; + margin: 30px auto 0 auto +} + +.tqm{ + width: 257px; + height: 34px; + background-color: #eee; + border-radius: 4px; + border: 1px solid #dcdcdc; + font-size: 14px; + color: #707070; + margin-top: 10px; + margin-left: 130px +} + +.file-box{ + max-height: 400px; + overflow-y: auto +} + +.code-text{ + position: absolute; + bottom: 68px; + left: 200px; + color: #000 +} + +.el-pagination { + margin-top: 20px +} + +.el-dialog__title { + width: 370px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.el-select { + width: 110px +} + +.el-upload-dragger { + width: 83px; + height: 34px +} + +.file-box .el-radio { + margin-top: 20px +} + +.url-box { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center +} + +.url-box .url { + width: 350px; + margin-right: 20px +} + +.url-box .url,.url-box .url1 { + height: 42px; + border: 1px solid #dcdcdc +} + +.url-box .url1 { + width: 130px; + text-align: center; + line-height: 42px +} + +.code-img { + width: 300px; + display: block; + margin: 20px auto +} + +.shareimg-box { + position: relative +} + +.shareimg-box .code-box { + position: absolute; + bottom: 93px; + left: 149px; + width: 120px; + height: 120px; + background: #fff +} + +.top-right .el-input__inner { + background: none; + border: none +} + +/* 上传按钮 */ +.upload { + color: #fff; + background-color:#09AAFF; + border: 1px solid #fff; +} + +.upload:hover { + background-color:#09a0f1; +} + +.upload .text { + color: #fff; +} + +.upload:hover .text { + color: #fff; +} + diff --git a/public/assets/css/login.css b/public/assets/css/login.css new file mode 100644 index 0000000..a8c4d04 --- /dev/null +++ b/public/assets/css/login.css @@ -0,0 +1,419 @@ +body { + font: 14px \5FAE\8F6F\96C5\9ED1, "Raleway", "Open Sans", "Helvetica Neue", Microsoft JhengHei, Arial, sans-serif; + margin: auto; + color: #3F3F3F; +} + +a:link { + text-decoration: none; + color: #0099FF; +} + +a:visited { + text-decoration: none; + color: #0099FF; +} + +a:hover { + text-decoration: none; + color: #FF3311; +} + +a:active { + text-decoration: none; + color: #FFFF00; +} + +.dx:link { + color: #FFFFFF; + background-color: #0099FF; +} + +.dx:hover { + color: #FFFFFF; + background-color: #55BBFF; +} + +.d1 { + background: #fafafa; + box-shadow: 0 2px 6px 0 rgba(0,0,0,.05); + position: fixed; + top: 0; + _top: expression(eval(document.compatMode&&document.compatMode=='CSS1Compat')?documentElement.scrollTop:document.body.scrollTop); + filter: alpha(opacity=70); + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; + z-index: 100; + width: 100%; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #dee9f5; + height: 49px; + } + +.d1 a:link { + color: #999999; + text-decoration: none; +} + +.d1 a:visited { + color: #a8d6f1; + text-decoration: none; +} + +.d1 a:hover { + color: #333333; + text-decoration: none; +} + +.d1 a:active { + text-decoration: none; +} + +.d11 { + float: left; + background-image: url(../image/logo3.gif); + background-repeat: no-repeat; + background-position: 17px 14px; + padding-top: 18px; + height: 29px; +} + +.d12 { + float: right; + padding-right: 30px; + padding-top: 18px; + height: 29px; + position: absolute; + right: 0; +} + +.d7 { + display: block; + width: 230px; + text-align: right; +} + +.pc { + background-color: #0099FF; + height: 15px; + background-image: url(../image/logo3.gif); + background-repeat: no-repeat; + background-position: 90% bottom; + margin-top: 45px; + _margin-top: 0px; +} + +.d { + width: 993px; + margin-right: auto; + margin-left: auto; + height: auto; +} + +.b { + font-size: 30px; + text-align: center; + padding: 56px 0px 20px 0px; +} + +.d2 { + line-height: 43px; + border-top: 1px solid #EEEEEE; + padding: 28px 10px 16px 10px; +} + +.z { + padding-left: 270px; + height: 56px; +} + +.dx2 { + text-align: center; + width: 128px; + float: left; + background-color: #FF6452; + margin: 13px; + line-height: 30px; + height: 30px; +} + +.dx2 a:link { + color: #FFFFFF; + text-decoration: none; +} + +.dx2 a:visited { + color: #FFFFFF; +} + +.dx2 a:hover { + color: #CCCCCC; +} + +.d3 { + clear: both; +} + +.foot_info { + font-size: 12px; + text-align: center; + color: #93D393; + padding: 60px 0px 36px 0px; +} + +.p9 { + margin-right: auto; + margin-left: auto; + padding-top: 60px; +} + +.p8 { + padding: 9px; + font-size: 16px; + width: 93%; + border: 1px solid #D6D6D6; + border-radius: 4px; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + background: #fafafa; +} + +.p8:focus { + border: #52A6EF 1px solid; + box-shadow: 0 0 3px rgba(82, 166, 239, 0.8); + outline: none; + background: #fff; +} + +.btn { + height: 38px; + width: 100%; + background-color: #18BC9C; + color: #FFFFFF; + font-size: 16px; + font-family: \9ED1\4F53; + border: 1px solid #3ed3b6; + border-radius: 16px; + margin-bottom: 4px; + cursor: pointer; +} + +.btn:hover { + background-color: #3ed3b6; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.btn:active { + background-color: #3ed3b6; + box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.15); +} + +.btn:focus { + outline: none; +} + +.p7 { + color: #BBBBBB; + padding-right: 16px; +} + +.j { + font-weight: 700; +} + +::-webkit-scrollbar { + background: rgba(0, 0, 0, 0.1); + height: 8px; + width: 8px +} + +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2) +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.3); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(0, 0, 0, 0.5); +} + + +.d12 { + display: none; +} + +.input { + padding: 9px 9px 9px 31px; + font-size: 16px; + width: 83%; + border: 1px solid #D6D6D6; + border-radius: 4px; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + background-image: url(../image/logo7.gif); + background-repeat: no-repeat; + background-position: -121px -158px; +} + +.pwd { + background-image: url(../image/logo7.gif); + background-repeat: no-repeat; + background-position: -121px -188px; +} + +.input:hover { + border: #52A6EF 1px solid; +} + +.input:focus { + border: #52A6EF 1px solid; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.275); + outline: none; +} + +.btn:disabled { + border: #D5D5D5 1px solid; + background-color: #D5D5D5; + color: #9E9E9E; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.9); + box-shadow: initial; +} + +.p4 { + text-align: center; + line-height: 2.1em; + color: #888888; +} + +.p6 { + text-align: center; + font-size: 30px; + line-height: 2.0em; + color: #585858; +} + +.p5 { + height: 52px; + width: 78px; + margin-right: auto; + margin-left: auto; + background-image: url(../image/logo7.gif); + background-repeat: no-repeat; + background-position: 0px -56px; +} + +.p3 { + padding: 4px; +} + +.p2 { + height: 102px; + width: 99px; + margin-right: auto; + margin-left: auto; + background-image: url(../image/logo7.gif); + background-repeat: no-repeat; + background-position: 0px -111px; +} + +.p1 { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3); + border: 29px solid #F5F5F5; + margin-left: auto; + margin-right: auto; + background-color: #F5F5F5; + width: 258px; + padding-bottom: 20px; +} + +.e_u { + display: none; + position: absolute; + background-color: #FFF; + border: 1px solid #999; + padding: 6px; + border-radius: 3px; + box-shadow: 0 2px 3px rgba(0, 0, 0, .15); + margin-top: -30px; + margin-left: 185px; +} + + +.ylogin { + display: none; + position: absolute; + text-align: center; + width: 250px; + line-height: 36px; + background: #f5f5f5; + height: 40px; + cursor: pointer; +} + +.usersel { + position: absolute; + margin-left: 218px; + color: #08f; +} + +.copyright { + line-height: 1.5em; + padding-top: 100px; + margin-bottom: -50px; + text-align: center; + font-size: 12px; + color: #999; + line-height: 1.5em; +} + +.main-title { + display: block; + margin-top: 5px; + margin-bottom: 30px; + font-size: 24px; + color: #3d3d3d; + text-align: center; + line-height: 30px; +} + +.wx-title { + display: block; + /* 居中 */ + position: relative; + margin-top: 10px; + color: #3d3d3d; + text-align: center; + font-size: 14px; +} +.wx-title img{ + margin-bottom:-4px; +} + +.wx-img { + width: 172px; + height: 172px; +} + +.wx-img img { + margin-left: 43px; + max-width: 100%; + border: 1px solid #e2e2e2; +} + +.errorBox { + border: 1px solid #fdd3d3; + bottom: 8px; + padding-left: 33px; + padding-top: 5px; + padding-bottom: 5px; + color: #e63333; + opacity: 1; + display: none; + background: url(../image/login_iconb536.png) -104px -50px no-repeat #feefef; +} + +input:-webkit-autofill { /* 取消Chrome记住密码的背景颜色 */ + -webkit-box-shadow: 0 0 0 1000px white inset !important; +} \ No newline at end of file diff --git a/public/assets/css/main.css b/public/assets/css/main.css new file mode 100644 index 0000000..1a62972 --- /dev/null +++ b/public/assets/css/main.css @@ -0,0 +1,316 @@ +*{ + padding: 0; + margin: 0; + list-style: none; + text-decoration: none; + font-family: "microsoft yahei"; +} +.clear{ + clear: both; +} + +/*头部开始*/ + +#header{ + height: 72px; + position: fixed; + width: 100%; + top:0; + background-color: white; + min-width: 960px; + z-index: 9; +} +.fixwid{ + width: 960px; + margin: 0 auto; + overflow: hidden; +} +.logo{ + height: 72px; + float: left; +} +.logo img{ + width: 46px; + margin-top: 11px; + float: left; +} +.logo span{ + float: left; + font-size: 24px; + color: #11b4ea; + margin-left: 10px; + height: 72px; + line-height: 72px; +} +.nav{ + height: 72px; + float: right; +} +.nav ul{ + float: left; + height: 72px; + line-height: 72px; +} +.nav ul li{ + float: left; + padding: 0 19px; +} +.login{ + float: left; + width: 80px; + height: 72px; + line-height: 72px; + text-align: center; + margin-left: 24px; + background-color: #11b4ea; +} +.login .a_area{ + display: block; +} +.a_line{ + color: #242424; +} +.a_line:hover{ + color: #11b4ea!important; +} + +.nav .a_link{ + font-size: 16px; +} + +.a_area{ + color: white; + background-color: #11b4ea; +} +.a_area:hover{ + background-color: #47c4f0!important; + color: white; +} + +.nav .a_area{ + font-size: 16px; +} + +#header>img{ + width: 100%; + height: 29px; + position: relative; +} + +/*头部结束*/ + + +/*轮播开始*/ + +#banner{ + width: 100%; + height: 400px; + overflow: hidden; + margin-top: 72px; +} +#banner .carousel-inner{ + height: 400px; +} +#banner .carousel-inner .item img{ + height: 400px; + width: 100%; +} +#banner .carousel-indicators li{ + width: 48px; + height: 4px; + background-color: white; + border: none; +} +#banner .carousel-indicators .active{ + width: 48px; + height: 4px; + background-color: #73c3fc; + border: none; +} +#banner .glyphicon-chevron-lef img{ + width: 40px; + position: absolute; + top: 140px; + left: 0; +} +#banner .glyphicon-chevron-righ img{ + width: 40px; + position: absolute; + top: 140px; + right: 0; +} + +/*轮播结束*/ + + + +/*主体开始*/ + +#main{ + +} +.project{ + overflow: hidden; +} +.project_c{ + width: 320px; + float: left; +} +.project_c img{ + display: block; + margin: 50px auto 30px; +} +.project_c h1{ + text-align: center; + font-size: 16px; + color: #11b4ea; + font-weight: normal; + margin-bottom: 20px; +} +.project_c p{ + display: block; + font-size: 14px; + color: #7e7e7e; + text-align: center; + margin: 0 68px 40px; +} + +.course{ + overflow: hidden; +} +.title{ + position: relative; + height: 100px; + overflow: hidden; +} +.title h1{ + color: #242424; + width: 188px; + margin-top: 40px; + left: 50%; + margin-left: -94px; + background-color: white; + font-size: 26px; + font-weight: normal; + text-align: center; + position: absolute; + z-index: 2; +} +.title hr{ + position: absolute; + top:36px; + left: 50%; + margin-left: -294px; + height: 1px; + border: none; + background-color: #d9d9d9; + width: 588px; + left: 50%-294px; +} + + +.course{ + +} +.course_c{ + width: 220px; + margin-right: 26px; + float: left; + margin-top: 42px; +} +.course_c img{ + width: 220px; +} +.course_c span{ + display: block; + text-align: center; + font-size: 14px; + margin-top: 22px; +} +.course_c span .a_line{ + color: #7e7e7e; +} +.course>a{ + display: block; + margin: 50px auto; + width: 194px; + font-size: ; + color: ; + padding: 16px 62px; +} + +.display{ + position: relative; +} +/*.display #carousel-example-generic{ + height: 400px; +} +.display .carousel-inner{ + height: 400px; + width: 748px; + margin: 0 auto; +}*/ + +.about{ + margin-top: 40px; +} +.about img{ + display: block; + margin:0 auto; + width: 86px; + margin-bottom: 40px; + margin-top: 10px; +} +.about span{ + color: #7e7e7e; + display: block; + text-align: center; + font-size: 14px; + margin-bottom: 80px; +} + +/*底部开始*/ + +#footer{ + height: 100px; + background-color: #717980; + width: 100%; + font-size: 14px; + color: white; +} +.footer_l{ + height: 100px; + float: left; + line-height: 100px; + text-indent: 4px; + position: relative; +} +.footer_l img{ + display: block; + margin-top: 42px; + float: left; +} +.footer_r{ + height: 100px; + float: right; + line-height: 100px; +} + +/*底部结束*/ + + +.scroll_horizontal{position:relative;width:768px;height:400px;padding:10px;margin: 0 auto;} +.scroll_horizontal .box{overflow:hidden;position:relative;width:748px;height:400px;margin:0 auto;} +.scroll_horizontal .list{overflow:hidden;width:9999px;} +.scroll_horizontal .list li{float:left;width:748px;} +.scroll_horizontal .list li span{ + display: block; + text-align: center; + margin: 20px auto 30px; + color: #bebdbd; + font-size: 18px; +} +.scroll_horizontal .prev, +.scroll_horizontal .next{position:absolute;top:50%;margin-top:-25px;width:28px;height:61px;background-repeat:no-repeat;font:0/0 Arial;cursor:pointer;} +.scroll_horizontal .prev{left:-85px;background-image:url(https://static.skpan.cn/pan/images/dis_l.png);} +.scroll_horizontal .next{right:-85px;background-image:url(https://static.skpan.cn/pan/images/dis_r.png);} \ No newline at end of file diff --git a/public/assets/css/t0.css b/public/assets/css/t0.css new file mode 100644 index 0000000..72d6fca --- /dev/null +++ b/public/assets/css/t0.css @@ -0,0 +1,377 @@ +/* CSS Document */ +body { + font: 14px Arial, \5FAE\8F6F\96C5\9ED1, sans-serif; + margin: auto; + color: #3F3F3F; +} + +.bgimg { + background-image: url(../image/logo3.gif); + background-repeat: no-repeat; + background-position: 17px 14px; +} + +a:link { + text-decoration: none; + color: #0099FF; +} + +a:visited { + text-decoration: none; + color: #0099FF; +} + +a:hover { + text-decoration: none; + color: #FF3311; +} + +a:active { + text-decoration: none; + color: #FFFF00; +} + +.dx:link { + color: #FFFFFF; + background-color: #0099FF; +} + +.dx:hover { + color: rgb(255, 255, 255); + background-color: #55BBFF; +} + +.d1 { + background: #fafafa; + box-shadow: 0 2px 6px 0 rgba(0,0,0,.05); + position: fixed; + top: 0; + filter: alpha(opacity=70); + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; + z-index: 100; + width: 100%; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #dee9f5; + height: 49px; +} + +.d1 a:link { + text-decoration: none; +} + +.d1 a:visited { + color: #0099FF; + text-decoration: none; +} + +.d1 a:hover { + color: #333333; + text-decoration: none; +} + +.d1 a:active { + text-decoration: none; +} + +.d11 { + float: left; + background-repeat: no-repeat; + background-position: 17px 14px; + padding-top: 18px; + height: 29px; +} + +.d12 { + float: right; +} + +.d12 a { + display: inline-block; + font-size: 16px; + margin-top: 16px; + margin-right: 28px; +} + +.d7 { + display: block; + width: 230px; + text-align: right; +} + +.pc { + background-color: #0099FF; + height: 15px; + background-repeat: no-repeat; + background-position: 90% bottom; + margin-top: 45px; + _margin-top: 0px; +} + +.d { + width: 993px; + margin-right: auto; + margin-left: auto; + height: auto; + padding-bottom: 100px; +} + +.b { + font-size: 30px; + text-align: center; + padding: 56px 0px 20px 0px; +} + +.d2 { + line-height: 43px; + border-top: 1px solid #EEEEEE; + padding: 28px 10px 16px 10px; +} + +.d3 { + clear: both; +} + +.foot_info { + font-size: 12px; + text-align: center; + color: #93D393; + margin-top: 130px; +} + +.foot_copy { + color: #888; + padding-bottom: 10px; +} + +.p9 { + margin-right: auto; + margin-left: auto; + padding-top: 60px; +} + +.p8 { + padding: 9px; + font-size: 16px; + width: 93%; + border: 1px solid #D6D6D6; + border-radius: 4px; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + background: #fafafa; +} + +.p8:focus { + border: #52A6EF 1px solid; + box-shadow: 0 0 3px rgba(82, 166, 239, 0.8); + outline: none; + background: #fff; +} + +.btn { + height: 38px; + width: 100%; + background-color: #FFA300; + color: #FFFFFF; + font-size: 16px; + font-family: \9ED1\4F53; + border-radius: 4px; + border: none; +} + +.p7 { + color: #BBBBBB; + padding-right: 16px; +} + +.btn:hover { + background-color: #FFD360; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +} + +.btn:active { + background-color: #FFA000; + box-shadow: inset 0 4px 5px rgba(0, 0, 0, 0.15); +} + +.btn:focus { + outline: none; +} + +.ios { + background-color: #F1F1F1; + font-size: 12px; + padding: 3px; + border-radius: 2px; + color: #A5A5A5; + margin-left: 17px; +} + +.j { + font-weight: 700; +} + +.load { + text-align: center; + padding: 50px 0; +} + +.load a { + cursor: default; + display: inline-block; + line-height: initial; +} + +.load a:focus { + outline: 0; +} + +.txt { + font-size: 14px; + cursor: pointer; + color: #fff; + background-color: #ff5b5b; + padding: 6px 30px; + box-shadow: 0 1px 1px rgba(0, 0, 0, .17); + transition: .2s; + border: 1px solid #ff5b5b; + border-radius: 4px; +} + +.txt:hover { + background-color: #ff3434; + box-shadow: 0 1px 2px rgba(0, 0, 0, .26); + border: 1px solid #ff3434; +} + +.txt:active { + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.17); + background: #ff5b5b; + transition: .0s; + border: 1px solid #ff5b5b; +} + +.txtc { + margin: 0 26px; +} + +::-webkit-scrollbar { + background: rgba(0, 0, 0, 0.1); + height: 8px; + width: 8px +} + +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2) +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.3); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(0, 0, 0, 0.5); +} + +.load2 .loader, +.load2 .loader:before, +.load2 .loader:after { + border-radius: 50%; +} + +.load2 .loader:before, +.load2 .loader:after { + position: absolute; + content: ''; +} + +.load2 .loader:before { + width: 16px; + height: 32px; + background: #fff; + border-radius: 32px 0 0 32px; + top: -1px; + left: -1px; + transform-origin: 16px 16px; + animation: load2 2s infinite ease 1.5s; +} + +.load2 .loader { + font-size: 11px; + text-indent: -99999em; + margin: auto; + position: relative; + width: 30px; + height: 30px; + box-shadow: inset 0 0 0 4px #09f; +} + +.load2 .loader:after { + width: 16px; + height: 32px; + background: #fff; + border-radius: 0 31px 31px 0; + top: -1px; + left: 15px; + transform-origin: 0px 16px; + animation: load2 2s infinite ease; +} + +@keyframes load2 { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.ifr { + width: 100%; + height: 45px; + margin-top: -31px; + position: relative; + z-index: 9; +} + +.ifr2 { + z-index: 1; + visibility: inherit; + overflow: hidden; + width: 100%; + height: 100%; +} + + +.n_bot { + text-align: center; + padding: 3%; +} + +#code { + margin: auto; + width: 300px; + margin-top: 20px; +} + +.wap-down{ + font-size: 15px; + color: #7e8c8d; +} + +.shenmin { + color: #8a6d3b; + background-color: #fcf8e3; + padding: 5px; + border: 1px solid #faebcc; + border-radius: 3px; + font-size: 12px; + clear: both; + width: 400px; + margin: auto; + text-align: center; + line-height: initial; + margin-bottom: 10px; +} \ No newline at end of file diff --git a/public/assets/css/upload.css b/public/assets/css/upload.css new file mode 100644 index 0000000..993bfb7 --- /dev/null +++ b/public/assets/css/upload.css @@ -0,0 +1,515 @@ +/* CSS Document */ +::-webkit-scrollbar{background:rgba(0,0,0,0.1);height: 8px;width:8px}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0.2)} +::-webkit-scrollbar-thumb:hover {background:rgba(0,0,0,0.3);} +::-webkit-scrollbar-thumb:active {background:rgba(0,0,0,0.5);} +body {font:13px Arial,\5FAE\8F6F\96C5\9ED1,\5B8B\4F53,\65B0\5B8B\4F53,sans-serif;margin: 0px;padding: 0px;color: #3F3F3F;background: #fff;SCROLLBAR-FACE-COLOR: #A8A8A8;SCROLLBAR-HIGHLIGHT-COLOR: #F5F5F5;SCROLLBAR-SHADOW-COLOR: #F5F5F5;SCROLLBAR-3DLIGHT-COLOR: #F5F5F5;SCROLLBAR-ARROW-COLOR: #505050;SCROLLBAR-TRACK-COLOR: #F5F5F5;SCROLLBAR-DARKSHADOW-COLOR: #F5F5F5;SCROLLBAR-BASE-COLOR: #BCBCBC;} +a:link {color: #3377FF;}a:visited {color: #3377FF;}a:hover {color: #FF6666;}a:active {color: #ccc;} +.aspanlink{cursor: pointer;color: #3377FF;} +.aspanlink:hover{color: #FF6666;} +.toplink{display: block;height: 45px;width: 127px;position: absolute;} +.toum{background-image: url(../image/logo7.gif);background-repeat: no-repeat;border-bottom: 1px solid #EEEEEE;border-top: 1px solid #FF7868;} +.n1{width: 860px;margin-left: 16px;margin-top: 17px;padding: 12px 13px 9px 13px;} +.footm{text-align: center;padding-top: 50px;font-size: 12px;color: #93D393;} +ul{padding:0; margin:0;} +li{list-style-type:none;} +table {font-size: 13px;} +.vip1{color: #F00;} +.vip2{border: 1px solid #BF8026;border-radius: 2px;font-size: 12px;color: #BF8026;margin-left: 5px;padding-left: 3px;} +.vip3{background: #BF8026;color: #FFFFFF;padding: 0 3px;margin-left: 3px;background-image: linear-gradient(#FFC276, #CC9104);} +.svip1{color: #F00;} +.svip2{border: 1px solid #e40b04;border-radius: 2px;font-size: 12px;color: #23201f;padding-left: 3px;} +.svip3{background:#b92828;color: #FFFFFF;padding: 0 3px;margin-left: 3px;background-image: linear-gradient(#ff3f36, #ca2220);} +.btn { width:118px; height:34px;font:12px \9ED1\4F53;font-weight:700;border-radius: 4px;border: 1px solid #D5D5D5;background-image: linear-gradient(#FCFCFC, #EEE);background-color: #f7f7f7;text-shadow: 0 2px 0 rgba(255, 255, 255, 0.9);} +.btn:focus{border-color: #51a7e8;outline: none;box-shadow: 0 0 5px rgba(81,167,232,0.5);} +.btn:hover{background:#eee;background-image: linear-gradient(#EEE, #DDD);} +.btn:active{box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.25);background-color:#CCC;border-color: #ABABAB;background-image: none;} +.btn:disabled{background-image: linear-gradient(#eee, #eee);border: 1px solid #eee;} +form {padding:0;margin:0;} +a {text-decoration: none;} +textarea{border: 1px solid #59bff1;padding: 5px;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.175);border-radius: 3px;} +textarea:hover{border: 1px solid #209EFF;} +textarea:focus{outline: none;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.375);} +#menu_container{padding:0px;} +.mydisk_nav{margin:17px 0 0 150px;} +.mydisk_nav ul{ list-style:none;} +.mydisk_nav li{ float:left; width:80px; background:#FFEECF; margin-right:5px; line-height:29px; height:28px; text-align:center;} +.mydisk_nav li a{display:block;color: #111111;cursor: default;} +.mydisk_nav li a:hover{background:#FFD360;color: #111111;} +.mydisk_nav li a:active{background:#FFB100;color: #111111;box-shadow: inset 0 5px 5px rgba(0, 0, 0, 0.15);} +#mydisk_nav_sel{background:#FFD360;} +.mydisk_bar{ border-radius: 8px;float: right;padding: 15px;padding-bottom: 0;line-height: 20px;background:#fff url(/images/u.gif) 0px 17px no-repeat;padding-left: 18px; position: absolute;right: 0;} +.mydisk_file_bar{ line-height:33px; height:33px;padding-left: 10px;} +.mydisk_file_bar a:link{color: #FFFFFF;text-decoration: none;} +.mydisk_file_bar a:visited{color: #FFFFFF;} +.rank_info{width:280px;border:1px #FFD360 solid;line-height:23px;overflow: hidden;padding-right: 18px;} +.file_box{height:200px; overflow-y:scroll; border:1px #CCCCCC solid;} +.file_box li{padding: 9px 0 0 15px;} +.cfm_info li{height: 46px;} +.tb_box_msg{padding:18px; color:#008800;} +.img_light{padding-bottom: 3px;} +.up_msg_box{background: #f7f7f7;width:auto; padding:30px; margin:auto;} +#container {width: 100%;height:auto;margin:13px auto 0px;} +.clear{ clear:both} +.tips_box{padding: 13px;margin: 17px;clear: both;} +.tips_box li{margin-bottom:5px;} +.txtgray { color: #AAAAAA; } +.txtgray:hover{background: #f7f7f7;} +.txtgreen{ color:#008800;} +.txtred{ color:#FD8888;} +.box_style{padding:10px 20px 30px;} +.p_bar{padding: 15px 0 10px 0;background: #FFFFFF;} +.p_bar a:hover{background: #ddd;border: 1px solid #ddd;color: #3377FF;} +.p_redirect{padding:7px; border:1px #cccccc solid; margin:0 7px 0 0; text-align:center;} +.p_num{padding:7px; border:1px #cccccc solid; margin:0 7px 0 0; text-align:center;} +.p_info{padding:7px;border:1px #cccccc solid;text-align:center;margin-right: 7px;} +.p_curpage{padding:7px; border:1px #cccccc solid; margin:0 7px 0 0; text-align:center; color:#f00; font-weight:bold;} +.td_line td{height:38px} +.menu_common{position: absolute; top: 0px; left: 0px; background-color: #FFFFFF; visibility: hidden; margin-bottom:8px; overflow: hidden; border: 1px solid #92B7E5; } +.menu_box2 {width: 50px; height: auto; padding-top:5px;} +.menu_box2 a{display:block; height:18px; text-align:center;} +.menu_thumb{ background-color: #D0F2C3; padding:8px; line-height: 20px; height: 38px; } +.info_box{line-height: 2.8;padding-top: 2%;} +.info_b2{line-height: 2em;font-size: 14px;} +.progressWrapper {overflow: hidden;} +.progressContainer {margin: 9px;padding: 6px;background-color: #aae4ff;overflow: hidden;border-radius: 3px;} +.progressContainer:hover{background-color: #9addfd;} +.progressContainer textarea{width: 96%;margin-top: 4px;margin-left: 8px;} +.message {margin: 1em 0;padding: 10px 20px; border: solid 1px #FFDD99; background-color: #FFFFCC; overflow: hidden; } +.up_red {background-color: #FFEBEB;} +.up_blue {background-color: #337ABB;} +.progressName {white-space: nowrap;} +.progressBarInProgress, +.progressBarComplete, +.progressBarError {font-size: 4px;width: 0%;height: 19px;background-color: #33CC00;border:1px solid #33CC00;} +.progressBarComplete {width: 100%;background-color: green;visibility: hidden;} +.progressBarError {width: 100%;background-color: red;visibility: hidden;} +.progressBarStatus {} +a.progressCancel {font-size: 0;display: block;height: 13px;width: 13px;background-image: url(../image/upload_cancel.gif);background-repeat: no-repeat;background-position: -13px 0px;float: right;} +a.progressCancel:hover {background-position: 0px 0px;} +.upload_style{margin-left:10px;float:left;padding:7px \9;border: 1px solid #209EFF;background-image: url(/img/up.gif);background-repeat: no-repeat;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.08);} +.upload_style:hover{border: 1px solid #ccc;} +.upload_style:active{box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.12);background:#ddd;border: 1px solid #a7a7a7;} +.swfupload{padding:7px;} +.upload_btn{ margin-left:10px;float:left;} +#upl_detail{display:none; padding:8px; color:#252525;} +.store_nav{padding:10px;color: #008800;} +#up_msg_tips{color:#008800;text-align: center;} +.menu{ cursor: pointer;color: #3377FF;background: url(/img/qq.gif) 0px 1px no-repeat;display: inline-block;padding-left: 28px;} +.menu:hover{color:#FF6666;} +.submenu{background-color: #fff; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);right: 0;top: 0;height: 100%;position: fixed; width: 26%;_width:300px;_position: absolute;} +.subcl{position: absolute;width: 32px;height: 32px; background: #DCDEE2 url(/img/cl.gif) 9px 8px no-repeat; margin-left: -33px;} +.subcl:hover{background-color: #CDD1D8;} +.subcl:active{box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +.subtp{padding: 10px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);} +.subbx{padding: 8px;line-height: 36px;} +.subbx p{margin: 8% 9% 8% 9%;} +.subbx span{ display: block;margin-left: 16%;color: #888;line-height: 20px;padding-top: 12px;} +.diskdao{float: left;width: 88px;margin-left: 5px;background-color: #209EFF;text-align: center;overflow: hidden;height: 32px;cursor: default;border-radius: 3px;margin-top: 3px;} +.diskdao:hover{background-color: #62BCFF;} +.diskdao:active{background-color: #197CC8;box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +.diskdao3{float: left;width: 88px;margin-left: 5px;background-color: #FF4949;text-align: center;height: 32px;cursor: default;border-radius: 3px;margin-top: 3px;} +.diskdao3:hover{background-color: #FF7979;} +.diskdao3:active{background-color: #CC3300;box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +.k1{font-size: 22px;width: 290px;border: 1px solid #CCCCCC;padding: 5px;*height: 38px;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);border-radius: 3px;} +.k1:hover{border:#52A6EF 1px solid;} +.k1:focus{border:#52A6EF 1px solid;background: #fff;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.275);outline: none;} +.up{width:50px;height:50px;background:url(/img/top.gif) no-repeat 0 0;} +.up:hover{background:url(/img/top.gif) no-repeat 0px -50px;} +.up:active{box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +.t1{padding-left: 130px;background-image: url(/img/n5.gif);background-repeat: repeat-y;background-position: 316px 10px;} +.t2{float: left;padding-top: 20px;padding-bottom: 68px;} +.t3{background-image: url(/img/n7.gif);background-repeat: no-repeat;background-position: 180px 30px;color: #AAA;width: 258px;float: left;line-height: 78px;font-size: 16px;} +.t5{background-image: url(/img/n6.gif);background-repeat: no-repeat;background-position: 158px 0px;font-size: 24px;line-height: 68px;text-indent: 80px;} + +.highslide-heading{display:none;font-weight:bold;margin:.4em} +.highslide-dimming{background:black} +a.highslide-full-expand{background:url(/images/graphics/fullexpand.gif) no-repeat;display:block;margin:0 10px 10px 0;width:34px;height:34px} +.highslide-loading{display:block;text-transform:uppercase;text-decoration:none;padding:8px;padding-left:22px;background-image:url(/images/graphics/loader.white.gif);background-repeat:no-repeat} +a.highslide-credits,a.highslide-credits i{padding:2px;color:silver;text-decoration:none;font-size:10px} +a.highslide-credits:hover,a.highslide-credits:hover i{color:white;background-color:gray} +.highslide-move,.highslide-move *{cursor:move} +.highslide-viewport{display:none;position:fixed;width:100%;height:100%;z-index:1;background:0;left:0;top:0} +.highslide-overlay{display:none} +.hidden-container{display:none} +.closebutton{position:relative;top:-15px;left:15px;width:30px;height:30px;cursor:pointer;background:url(/images/graphics/close.png)} +.highslide-gallery ul{list-style-type:none;margin:0;padding:0} +.highslide-gallery ul li{display:block;position:relative;float:left;width:106px;height:106px;border:1px solid silver;background:#ededed;margin:2px;line-height:0;overflow:hidden} +.highslide-gallery ul a{position:absolute;top:50%;left:50%} +.highslide-gallery ul img{position:relative;top:-50%;left:-50%} +html>/**/body .highslide-gallery ul li{display:table;text-align:center} +html>/**/body .highslide-gallery ul li{text-align:center} +html>/**/body .highslide-gallery ul a{position:static;display:table-cell;vertical-align:middle} +html>/**/body .highslide-gallery ul img{position:static} +.highslide-controls{width:195px;height:40px;background:url(/images/graphics/controlbar-white.gif) 0 -90px no-repeat;margin:20px 15px 10px 0} +.highslide-controls ul{position:relative;left:15px;height:40px;list-style:none;margin:0;padding:0;background:url(/images/graphics/controlbar-white.gif) right -90px no-repeat} +.highslide-controls li{float:left;padding:5px 0;margin:0;list-style:none} +.highslide-controls a{background-image:url(/images/graphics/controlbar-white.gif);display:block;float:left;height:30px;width:30px;outline:0} +.highslide-controls a.disabled{cursor:default} +.highslide-controls a.disabled span{cursor:default} +.highslide-controls a span{display:none;cursor:pointer} +.highslide-maincontent{display:none} +.highslide-html{background-color:white} +.highslide-html-content{display:none;width:400px} +.highslide-header ul{margin:0;padding:0;text-align:right} +.highslide-header ul li{display:inline;padding-left:1em} +.highslide-header ul li.highslide-previous,.highslide-header ul li.highslide-next{display:none} +.highslide-header a{font-weight:bold;color:gray;text-transform:uppercase;text-decoration:none} +.highslide-header a:hover{color:black} +.highslide-header .highslide-move a{cursor:move} +.highslide-footer .highslide-resize{display:block;float:right;margin-top:5px;height:11px;width:11px;background:url(/images/graphics/resize.gif) no-repeat} +.highslide-footer .highslide-resize span{display:none} +.highslide-resize{cursor:nw-resize} + +.draggable-header .highslide-header{height:33px;background-color:#ffd360} +.draggable-header .highslide-heading{position:absolute;margin:9px 7px .4em} +.draggable-header .highslide-header .highslide-move{cursor:move;display:block;height:30px;position:absolute;right:24px;top:0;width:100%;z-index:1} +.draggable-header .highslide-header .highslide-move *{display:none} +.draggable-header .highslide-header .highslide-close{position:absolute;right:6px;top:6px;z-index:5;padding:0} +.draggable-header .highslide-header .highslide-close a{display:block;height:14px;width:14px;background-image:url(img/upload_cancel.gif)} +.draggable-header .highslide-header .highslide-close a:hover{background-position:0 14px} +.draggable-header .highslide-header .highslide-close span{display:none} +.draggable-header .highslide-maincontent{padding-top:1em} +::-moz-selection{background:#000;color:#fff}::selection{background:#000;color:#fff} + +.jifen{margin-left: 3%; font-size: 16px;} +.jifen span{color: #3DB6F3;font-family:"Raleway","Open Sans","Helvetica Neue",Microsoft JhengHei,arial,sans-serif,\5FAE\8F6F\96C5\9ED1,Arial,sans-serif;font-size: 24px; margin-left: 18px;} +.jf_item{text-align: center;margin-left: 3%;margin-top: 38px;width: 280px;float: left;padding-bottom: 27px;border: 1px solid #fff;} +.jf_item:hover{border: 1px solid #ddd;} +.jf_img{} +.jf_img img{} +.jf_tit{font-size: 14px;} +.jf_rd{color: #3DB6F3;padding: 10px;font-size: 14px;} +.jf_go{font-weight: 700;width: 70%;margin-left: auto;margin-right: auto;} +.jf_go a{color: #555;display: block;background: #F5F5F5;border: 1px solid #D6D5D5;border-radius: 2px;padding: 5px;box-shadow: 1px 1px #F5F3F3;} +.jf_go a:hover{border: 1px solid #3DB6F3;} +.jf_go a:active{box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.25);} +.jf_red{color: #aaa;margin-left: 6%;margin-top: 58px;} + +.mf{padding: 23px 26px; line-height: 2em;} +.mf1{width: 153px;text-align: right; position: absolute;} +.mf2{margin-left: 199px;} + +.mq{padding: 25px 26px;} +.mq1{width: 153px;text-align: right;} +.mq2{margin-left: 199px;margin-top: -23px;} + +.mq3{width: 160px;} +.mq5{border: 1px solid #209eff;padding: 0 3px;font-size: 12px;margin-left: 8px;color: #888;opacity: .5;border-radius: 2px;} +.mq5:hover{opacity: 1;} + +.pad{ float: left;} +.pad0{float: left;display: block;padding-top: 6px;margin-left: 12px;} +.pad1{background: #fff;width: 3px;height: 1px;border: 3px solid #ddd;border-top: 2px solid #ddd;border-bottom: 2px solid #ddd;border-radius: 2px;} +.pad2{background: #ddd;height: 8px;width: 2px;margin-left: 3px;} +.pad3{border-top: 1px solid #ddd;border-bottom: 2px solid #ddd;width: 3px;height: 1px;position: absolute;margin-top: -6px;margin-left: 4px;} + +.pad1s{background: #fff;width: 3px;height: 1px;border: 3px solid #ffd360;border-top: 2px solid #ffd360;border-bottom: 2px solid #ffd360;border-radius: 2px;} +.pad2s{background: #ffd360;height: 8px;width: 2px;margin-left: 3px;} +.pad3s{border-top: 1px solid #ffd360;border-bottom: 2px solid #ffd360;width: 3px;height: 1px;position: absolute;margin-top: -6px;margin-left: 4px;} + + + +.if_top{color: #3F731F;border: 1px solid #B3DAC5;position: fixed;z-index: 9;padding: 2px;left: 37px;border-radius: 0 0 5px 5px;font-size: 12px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.07);width: 300px;text-align: center;background: #E9FFE7;border-top: 0;top: 0;margin: auto;left: 0;right: 0;} +.f_tp{padding: 5px;} +.f_th{background-color: #fbfbfb;padding: 6px;clear: both;height: 22px;line-height: 22px; border-bottom: 3px solid #eee; color: #aaa;} +.f_name{float: left;width: 480px;} +.f_name2{float: left;} +.f_size{float: left;width: 66px;text-align: center;} +.f_time{float: left;width: 110px;text-align: center;} +.f_down{float: left;width: 100px;text-align: center;} +.f_sel{float: right;width: 65px;text-align: center;} +.f_tb{color: #aaa;padding: 6px;clear: both;height: 26px;line-height: 26px;} +.f_tb:hover{background:#F3F5F9;box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +.f_tb2{padding: 10px 6px;clear: both;} + +.f_up{position: relative;margin-left: 15px;color: #000;} +.f_upb{position: absolute;top:-1000px;width: 520px;height: 370px;z-index: 9;background-color: #fff;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);border-radius: 7px;} +.f_upc{position: absolute;top: 8px;right: 7px;height: 14px;width: 14px;background-image: url(img/upload_cancel.gif);cursor: pointer;} +.f_upc:hover{opacity: .15;} +.queueList {margin: 22px 20px;border: 3px dashed #e6e6e6;} +.filep{color:#888;font-size:14px; padding-top: 15px;} +.placeholder {height: 200px;padding-top: 125px;text-align: center;font-size: 18px;position: relative;background-color: #F7F7F7;} +.placeholder:hover {background-color: #fff;} +.webuploader-container {position: relative;} +#filePicker{text-align: center; width: 118px;color: #fff;cursor: pointer;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);height: 38px;margin: auto;font-size: 14px;background: #209EFF;border-radius: 3px;line-height: 38px;} +#filePicker:hover{background: #62BCFF;box-shadow:none;box-shadow: inset 2px 2px 1px rgba(0, 0, 0, 0.05);} +#filePicker:active{background-color: #197CC8;box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +#filePicker2{text-align: center;width:90px;height:34px;font-size: 14px;color: #fff;cursor: pointer;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);background: #209EFF;border-radius: 3px;line-height: 34px;} +#filePicker2:hover{background: #62BCFF;box-shadow: inset 2px 2px 1px rgba(0, 0, 0, 0.05);} +#filePicker2:active{box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.11);} +#fileup:active{ box-shadow: inset 0 3px 4px rgba(0, 0, 0, 0.15);} +.webuploader-element-invisible {position: absolute !important;clip: rect(1px 1px 1px 1px);clip: rect(1px,1px,1px,1px);} +.fileho{display: none;cursor: default;background-color: #ccc;font-size: 14px;border-radius: 3px;line-height: 34px;width:90px;text-align:center;color: #fff;} +.uploadbtn{position: absolute;font-size: 14px;background: #F5713E;border-radius: 3px;line-height: 34px;padding: 0 17px;color: #fff;margin: 0 auto 0 auto;cursor: pointer;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);margin-left: 100px;margin-top: -34px;} +.uploadbtn:hover{background: #E86F4B;box-shadow: inset 2px 2px 1px rgba(0, 0, 0, 0.05);} +.uploadbtn:active{box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.21);} +.disabled{background-color:#ccc; cursor: default;box-shadow: none;} +.disabled:hover{background: #ccc;} +.disabled:active{box-shadow: none;} +#uploader p {margin: 0;} +.filelist {list-style: none;margin: 0;padding: 0;} +.element-invisible {position: absolute !important;clip: rect(1px 1px 1px 1px);clip: rect(1px,1px,1px,1px);} +.filled {padding: 17px;margin: 0;border: 0;overflow-y: auto;height: 267px;} +.filelist li{background-color: #f0f0f0;height: 56px;position: relative;overflow: hidden;margin-bottom: 7px;animation-name: fadeIn2; +animation-duration: 0.7s;animation-iteration-count: 1;animation-delay: 0s;} +.filelist li:hover{background-color: #f7f7f7; box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +.filelist li .progress{position: absolute;width: 100%;top: 0;left: 0;overflow: hidden;margin: 0;border-radius: 0;background: none;height: 100%;border-left: 1px solid #8cea7f;} +.filelist li .progress span{display: none;overflow: hidden;width:0;height: 100%;background-color: #8cea7f;} +.title{padding-top: 10px;padding-left: 10px;position: absolute;overflow: hidden;} +.fsize{color: #95C5A9;padding-left: 38px;position: absolute;overflow: hidden;top: 30px;} +.fdecs{position: absolute;top: 22px;right: 15px;height: 14px;width: 14px;background-image: url(../image/upload_cancel.gif);font-size: 0;opacity: 0.39;} +.fdecs:hover{cursor: pointer;opacity: 1;} +.fdecs2{position: absolute;right: 36px;top: 0;bottom: 0;font-size: 12px;color: #E84545;line-height: 56px;} +.fload{color:#000} +.statusbar{padding: 17px;margin: 0;border-bottom: 1px solid #eee;/*box-shadow: 0 0px 5px rgba(0, 0, 0, 0.07);*/border-radius: 7px 7px 0 0;background-color: #f7f7f7;border-bottom: 1px solid #DADADA;} +.info{position: absolute;bottom: 0;left: 0;background-color: #eee;line-height: 20px;font-size: 12px;min-width: 270px;text-indent: 7px;} +.info font{background-color: #FF4949;color: #fff;cursor: pointer;padding: 0 3px;} +#ready{background: #e1ffd8;animation-name: fadeIn2;animation-duration: 3s;animation-iteration-count: 1;animation-delay: 0s;border-bottom: 1px solid #fff;} +.f_img{border:0;margin-right: 3px; background-color: #F0F0F0;border-radius: 2px;} +@keyframes fadeIn2 { +0% { +opacity: 0.1; +} +50% { +opacity: 1; +} +100% { +} +} + +.f_sela{display: block;width: 30px;height: 16px;font: 12px \9ED1\4F53;border-radius: 4px;border: 1px solid #D5D5D5;background-image: linear-gradient(#FCFCFC, #EEE);background-color: #f7f7f7;text-shadow: 0 2px 0 rgba(255, 255, 255, 0.9);float: left;margin-left: 12px;margin-top: 3px;outline:0;cursor: pointer;} +.f_selb{ background: url(/images/recycle_icon.gif) 0px 1px no-repeat;display: block;width: 16px;height: 16px;float: left;margin-left: 5px;margin-top: 3px;cursor: pointer;} +.f_selb:hover{opacity: .5;} +.f_sela span{background-color: #333;width: 3px;height: 3px;display: inline-block;border-radius: 2px;margin: 7px 1px;} +.f_sela:hover{background: #eee;background-image: linear-gradient(#EEE, #DDD);} +.f_focus{box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.25);background-color: #CCC;background-image: linear-gradient(#EEE, #DDD);border-color: #ABABAB;} +.redcolor{color:#FF8572;display:block} +.redcolor:hover{} +.f_selcd{position: relative;margin-top: 28px;margin-left: 66px;} +.f_selc{position:relative;margin-top: 28px; margin-left: 38px;} +.f_view{position: absolute;background-color: #fff;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);width: 170px;border-radius: 0px;border: 0px solid #ddd;border-top:0; z-index: 9;} +.f_view div{height: 30px;cursor: default;line-height: 30px;background: #fff;color: #333;border-top: 1px solid #F1F3F7;font-size: 12px;cursor: pointer;} +.f_view div:hover{background-color: #F1F3F7;color:#888} +.f_viewtop{border-radius: 3px 3px 0 0;} +.f_viewbot{border-radius: 0 0 3px 3px;border-bottom: 0;} +#f_more{position: relative;} +.f_cl{cursor: pointer;background: #fff url(/img/cl.gif) 8px 8px no-repeat;font-size:0;border-radius: 50%;width: 30px;height: 30px;line-height: 30px;text-align: center;position: absolute;right: -15px;top: -15px;border: 1px solid #ddd;border-bottom: 0;border-left: 0;} +.f_cl:hover{background: #DCDEE2 url(/img/cl.gif) 8px 8px no-repeat; color: #209EFF;} +#f_sha{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;text-align: center;position: fixed;top: 0;left: 300px;width: 270px;} +.f_sha0{width: 40px;height: 40px;border-radius: 50%;background: #08f;color: #fff;line-height: 40px;font-size: 20px;margin: auto;} +#f_sha1{background-color: #D0F2C3;border-radius: 3px;padding: 13px 13px;font-size: 14px;margin: 15px 0;word-wrap: break-word; word-break: normal; text-align: left;} +#f_sha1:hover{background-color: #C2ECB2; box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +.f_tcn{border-bottom: 1px solid #fff;margin: 0 8px 8px 8px;padding-bottom: 8px;} +#code{} +#code img{margin: auto;padding-top: 15px;} +#f_surl{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.f_surl0{} +.f_surl2{color: #888; font-size: 12px;} +.durls{margin: 15px 0;} +#f_des{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.f_des1{margin-top: 15px; text-align: right;} +.f_des2{margin: 15px 0;} +#f_pwd{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.f_pwd2{ width: 270px;} +#fol_des{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.fol_des1{} +#fol_pwd{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.fol_pwd3{height: 30px;line-height: 30px;} +#tongle{position: absolute;right: 20px;cursor: pointer;} +#on{background: #4dbf08;height: 26px;width: 60px;border-radius: 30px;box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15);} +#off{background: #eee;height: 26px;width: 60px;border-radius: 30px;box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15);} +.off1{border-radius: 50%;width: 25px;background: #fff;height: 25px;box-shadow: 2px 2px 1px rgba(0, 0, 0, 0.15);} +.on1{border-radius: 50%;width: 25px;background: #fff;height: 25px; +box-shadow: 2px 2px 1px rgba(0, 0, 0, 0.15);float: right;} +.fol_pwd2{ width: 270px;} +#fol_cre{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.nofile{text-align: center;padding: 8px;} +.fnow{background-color: #eee;padding: 5px 10px;border-radius: 3px;color: #57865F;} +.fnow:hover{ box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +.fnow span{display: inline-block;} +#f_nowid{} +#nowpwd{} +#f_midf{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +#f_midf1{margin-top: 10px; max-height: 300px;overflow: auto; border: 1px solid #ddd;} +#f_midf4hover{color: #3377ff;} +#f_linkcdn{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.f_midf5{border: 2px solid #ddd;width: 15px;height: 15px;border-radius: 50%;margin-top: 7px;float: right;} +.f_midf6{height: 34px;line-height: 34px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;padding: 0 10px;} +.f_midf6:hover{color:#08f; cursor: pointer; background-color: #F3F5F9; box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +.f_midf6 .f_midf5:hover{border: 2px solid #209EFF;} +.f_midf5:active{ background-color: #209EFF;} +.fkey{display:none;margin-left: 6px;padding: 0px 8px;border-radius: 3px;border: 1px solid #eee;} +.fkey:hover{ border: 1px solid #aaa;} +.finfo{display:none;margin-left: 6px;padding: 0px 8px;border-radius: 3px;border: 1px solid #eee;} +.finfo:hover{ border: 1px solid #aaa;} +.finfos{display:none;position: absolute;background: #fff;border-radius: 3px;border: 1px solid #ddd;margin-top: 10px;padding: 7px 10px; color: #333; max-width: 300px;} +.finfost{ color: #5E9039;} +.file_ico{padding: 2px 8px;border-radius: 3px;display: none;} +#f_linkcdn_info{background-color: #D0F2C3;border-radius: 3px;padding: 13px;font-size: 14px;margin: 15px 0;} +#f_linkcdn_info:hover{background-color: #C2ECB2; box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +#f_linkcdn_txt{display:none;} +#f_diy{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +#f_diy_box{display: none;} +#f_diy_set{display: none;} +.f_diy_set{background-color: #D0F2C3;border-radius: 3px;font-size: 14px;margin: 15px 0;word-wrap: break-word;word-break: normal;height: 46px;line-height: 46px;padding: 0 5px;} +.f_diy_set:hover{ box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +#f_ename{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +#f_diy_domain{float: left;} +#f_diy_input{height: 38px;border: 0;margin-top: 4px;float: left;background: #fff;width: 150px;box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.17); border: 1px solid #d0f2c3;} +#f_diy_input:hover{border: 1px solid #96ce81;} +#f_diy_input:focus{outline: none;border: 1px solid #96ce81;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.275);} +#f_diy_info{background-color: #D0F2C3;border-radius: 3px;padding: 13px 13px;font-size: 14px;margin: 15px 0;word-wrap: break-word;word-break: normal;text-align: center;} +#f_diy_info:hover{box-shadow: inset 1px 1px 0px rgba(0, 0, 0, 0.05);} +#f_ico{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +#f_ico_box{} +#f_ico_info{background: #f7f7f7;height: 90px;text-align: center;line-height: 90px;display: none;margin-bottom: 10px;} +#file_lock{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +#file_lock2{background: #fff;display: none;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);margin-top: 10%;padding: 20px;position: fixed;top: 0;left: 300px;min-width: 270px;} +.lockspan{font-size: 16px;display: block;padding-bottom: 10px;} +.filelock{display: none;margin-left: 6px;padding: 0px 2px;border-radius: 3px;border: 1px solid #ff9a9a;color: #f77;font-size: 12px;cursor: pointer;} +.f_wringd{cursor: pointer;color: #FFFFFF;background-color: #F19586;padding: 0 3px;border-radius: 3px;} +#f_right{position: absolute;left: 1000px;top: 100px;} +.f_wring{display: none;border-radius: 3px;border: 1px solid #ddd;width: 300px; margin-bottom: 30px;} +.f_wring1{color: #E2513A;border-bottom: 1px solid #ddd;padding: 10px;font-size: 14px;text-align: center;} +.f_wring2{line-height: 1.8em;padding: 0 17px; word-wrap: break-word;} +#wring{background: rgba(0, 0, 0, 0.7) none repeat scroll 0 0 !important;position: fixed;top: -100px;color: #fff;border-radius: 3px;padding: 2px 13px;margin: auto;left: 0;right: 0;text-align: center;;max-width: 200px;z-index: 999; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.22);} +.helpinfo{width: 300px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);} +.helpinfoa{padding: 5px 0;display: block;} +.helpinfotop{text-align: center;border-bottom:1px solid #eee;height: 35px;line-height: 35px;} +.helpinfobox{padding: 10px;line-height: 1.7em;} +.helpinfolist{padding: 10px;background: #f5f5f5;margin: 10px;border-radius: 3px;display: none;font-size: 12px;} + +.f_right_vip{ width: 300px;border: 1px solid #eee;border-radius: 3px;} +.f_right_vip_box{padding: 10px;height: 30px;} +.f_right_vip_ico{ float: left;border-radius: 3px;width: 40px;height: 30px;text-align: center;line-height: 30px;font-size: 26px;background: #484b4c;color: #fff;} +.f_right_vip_title{ float: left;margin-left: 10px;} +.f_right_vip_time{color: #9e9e9e;font-size: 12px;} +.f_right_vip_now{float: right;color: #72b15e; height: 30px;line-height: 30px;} +.f_right_vip_now_span{color: #ef6354;} +.f_right_vip_over{padding: 10px;background: #f1f1f1;} +.f_right_vip_over span{color: #999;margin-right: 5px;font-size: 12px;} + +.follink{color: #3377FF;cursor: pointer;} +.follink:hover{color: #999} +.f_tpspan{padding-left: 5px;color: #37f;cursor: pointer;margin-right: 5px;} +.f_tpspan:hover{color: #999} +.f_tpspannow{color: #333;cursor: default;} + +@media (max-width: 519px){ +.toum{background-image:none} +.mydisk_nav{width: 97%;margin-left: auto;margin-right: auto;} +.tips_box{display:none;} +.pro{ padding-top: 90px;} +.mf{border-top: 1px solid #f1f1f1;clear: both;padding: 20px 18px;} +.mf1{width: 100%;text-align: left;color: #888;position: initial;} +.mf2{margin-left: 0;margin-top: -17px;text-align: right;} +.mq{padding: 26px 18px 0px 18px;clear: both;} +.mq1{position: absolute;margin-top: 8px;width: auto;text-align: left;color: #888;} +.mq2{margin-left:0;margin-top: 1px;text-align: right;} +.mq3{width: 100%;} +.mq4{display:none} +.txtred{display:none} +.helpinfo{display:none} +.mk1{width: 100%;border: 0;border-bottom: 1px solid #ddd;box-shadow: inset 0 0px 0px rgba(0, 0, 0, 0);border-radius: 0; padding-left: 99px;} +.mk1:hover{border: 0;border-bottom: 1px solid #ddd;} +.mk1:focus{border: 0;border-bottom: 1px solid #ddd;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0);} +.mbtn{width: 100%;} +.t1{border-top: 1px solid #f1f1f1;clear: both;padding-left: 0;padding: 10px 20px;background-image: none;} +.t2{float: inherit;padding-bottom: 0;} +.t3{background-image: none;width: 100%;text-align: right;line-height: 20px;} +.t5{display: none;} +.jf_item{width:98%;margin-left: 0;} +.n1{width: 100%;margin-left: 0;border: 0;padding: 0;} +.mydisk_file_bar{padding-left: 0;padding-bottom: 18px; opacity: .5;} +.footm{display:none;} +.mobdao{display:none;} +.diskdao{width: 78px;} +.diskdao3{width: 78px;} +::-webkit-scrollbar{background:rgba(0,0,0,0);height: 1px;width:1px}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)} +::-webkit-scrollbar-thumb:hover {background:rgba(0,0,0,0);} +::-webkit-scrollbar-thumb:active {background:rgba(0,0,0,0);} +.mydisk_file_bar{position:absolute;right: 3%;opacity: .5;top: -10px;} +.n1{border:0;margin-left: auto;width:97%;padding:0;margin-right: auto;} +.my{border-top: 1px solid #eee;padding-top: 18px;} +.mi{padding-left: 22px;} +.mi span{margin-right: 8px;} +.mii{float: right;} +.footm{display: none;} +.f_up{margin: 0 15px; top: 50px;} +.f_upb{width: 100%;height: auto;} + +#f_surl,#f_sha,#f_pwd,#f_des,#fol_des,#fol_pwd,#fol_cre,#f_midf,#f_linkcdn,#f_diy,#f_ico,#f_ename{margin: 0;min-width: auto; width: auto;right: 15px;left: 15px;top: 30px;} +.btn{width: 100%;} +.k1{width: 100%;} +.f_view{width: auto;right: 15px;left: 15px;position: fixed;bottom: 15px;} +.f_pwd2{width: 100%;} + +.f_time{ width: auto;} +.f_tb{height: 60px;border-top: 1px solid #eee;} +.mobbot{display:none} +.pad{float: inherit;} +.f_name {float: inherit;width: 100%;} +#topcontrol{display:none} +.mq4{display:block} +.f_view div{line-height: 50px;height: 50px;} +.tongle{ float: right;} +#f_diy_input{width: 100%;border: 1px solid #CCCCCC;padding: 5px;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);border-radius: 3px;} +.f_diy_set{ padding: 0;} +.f_ename{ padding: 0;} +#f_right{display:none;} +} + +@media (min-width: 1260px){ + #f_right{display:block;position: absolute;left: initial;top: 100px; right: 30px;} +} + +.upimgbtn{ + display: inline-block; + padding: 20px 30px; + vertical-align: middle; + -ms-touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + background: #fff; + background-image: none; + background-size: 100%; + border: 1px solid #eee; + font-size: 20px; + } + a.upimgbtn:hover{ + background-color: #f5f5f5; + border: 1px solid #08f; + } +.upimgbtntop{margin-top: 10px;background: #f7f7f7;padding: 10px;} +.progress{ + margin-top:2px; + width: 200px; + height: 14px; + margin-bottom: 10px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1); + } +.progress-bar{ + background-color: rgb(92, 184, 92); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.14902) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.14902) 50%, rgba(255, 255, 255, 0.14902) 75%, transparent 75%, transparent); + background-size: 40px 40px; + box-shadow: rgba(0, 0, 0, 0.14902) 0px -1px 0px 0px inset; + box-sizing: border-box; + color: rgb(255, 255, 255); + display: block; + float: left; + font-size: 12px; + height: 20px; + line-height: 20px; + text-align: center; + transition-delay: 0s; + transition-duration: 0.6s; + transition-property: width; + transition-timing-function: ease; + width: 266.188px; +} \ No newline at end of file diff --git a/public/assets/css/userapp.css b/public/assets/css/userapp.css new file mode 100644 index 0000000..65162ef --- /dev/null +++ b/public/assets/css/userapp.css @@ -0,0 +1,417 @@ +.child-view { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transition: all .5s cubic-bezier(.55, 0, .1, 1); + transition: all .5s cubic-bezier(.55, 0, .1, 1) +} + +.slide-left-enter, +.slide-right-leave-active { + opacity: 0; + -webkit-transform: translate(30px); + transform: translate(30px) +} + +.slide-left-leave-active, +.slide-right-enter { + opacity: 0; + -webkit-transform: translate(-30px); + transform: translate(-30px) +} + +.content { + width: 1100px; + margin: 0 auto +} + +.flex { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex +} + +.flex-box { + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center +} + +.align-center, +.flex-box, +.space-between { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center +} + +.space-between { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between +} + +.text-overflow { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +input:focus { + outline: none +} + +.dis-btn1 { + cursor: pointer +} + +html { + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre { + font-family: monospace, monospace; + font-size: 1em +} + +a { + background-color: transparent +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted +} + +b, +strong { + font-weight: bolder +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +img { + border-style: none +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=button], +[type=reset], +[type=submit], +button { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText +} + +fieldset { + padding: .35em .75em .625em +} + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress { + vertical-align: baseline +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +details { + display: block +} + +summary { + display: list-item +} + +[hidden], +template { + display: none +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +embed, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +html, +i, +iframe, +img, +input, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +output, +p, +pre, +q, +ruby, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-weight: 400; + vertical-align: baseline +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +menu, +nav, +section { + display: block +} + +body { + line-height: 1 +} + +blockquote, +q { + quotes: none +} + +blockquote:after, +blockquote:before, +q:after, +q:before { + content: none +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +a { + color: #7e8c8d; + -webkit-backface-visibility: hidden; + text-decoration: none +} + +li { + list-style: none +} + +body { + -webkit-text-size-adjust: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +body, +html { + font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback; + -webkit-tap-highlight-color: transparent; + background: #f4f4f4; +} + +* { + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +img { + display: block; + max-width: 100% +} + +.app, +body, +html { + width: 100%; + height: 100%; + position: relative; + background: #fff +} \ No newline at end of file diff --git a/public/assets/file_ext/apk.png b/public/assets/file_ext/apk.png new file mode 100644 index 0000000..8738ae5 Binary files /dev/null and b/public/assets/file_ext/apk.png differ diff --git a/public/assets/file_ext/code.png b/public/assets/file_ext/code.png new file mode 100644 index 0000000..c39d65f Binary files /dev/null and b/public/assets/file_ext/code.png differ diff --git a/public/assets/file_ext/excel.png b/public/assets/file_ext/excel.png new file mode 100644 index 0000000..d40d805 Binary files /dev/null and b/public/assets/file_ext/excel.png differ diff --git a/public/assets/file_ext/exe.png b/public/assets/file_ext/exe.png new file mode 100644 index 0000000..0036fda Binary files /dev/null and b/public/assets/file_ext/exe.png differ diff --git a/public/assets/file_ext/folder.png b/public/assets/file_ext/folder.png new file mode 100644 index 0000000..32648b0 Binary files /dev/null and b/public/assets/file_ext/folder.png differ diff --git a/public/assets/file_ext/fonts.png b/public/assets/file_ext/fonts.png new file mode 100644 index 0000000..6d97d0f Binary files /dev/null and b/public/assets/file_ext/fonts.png differ diff --git a/public/assets/file_ext/img.png b/public/assets/file_ext/img.png new file mode 100644 index 0000000..42dd42b Binary files /dev/null and b/public/assets/file_ext/img.png differ diff --git a/public/assets/file_ext/ipa.png b/public/assets/file_ext/ipa.png new file mode 100644 index 0000000..3fe9fa5 Binary files /dev/null and b/public/assets/file_ext/ipa.png differ diff --git a/public/assets/file_ext/links.png b/public/assets/file_ext/links.png new file mode 100644 index 0000000..299efbd Binary files /dev/null and b/public/assets/file_ext/links.png differ diff --git a/public/assets/file_ext/music.png b/public/assets/file_ext/music.png new file mode 100644 index 0000000..b874ac4 Binary files /dev/null and b/public/assets/file_ext/music.png differ diff --git a/public/assets/file_ext/ppt.png b/public/assets/file_ext/ppt.png new file mode 100644 index 0000000..3f5829d Binary files /dev/null and b/public/assets/file_ext/ppt.png differ diff --git a/public/assets/file_ext/ps.png b/public/assets/file_ext/ps.png new file mode 100644 index 0000000..acadfb0 Binary files /dev/null and b/public/assets/file_ext/ps.png differ diff --git a/public/assets/file_ext/text.png b/public/assets/file_ext/text.png new file mode 100644 index 0000000..81395f0 Binary files /dev/null and b/public/assets/file_ext/text.png differ diff --git a/public/assets/file_ext/unknown.png b/public/assets/file_ext/unknown.png new file mode 100644 index 0000000..a87dfd5 Binary files /dev/null and b/public/assets/file_ext/unknown.png differ diff --git a/public/assets/file_ext/video.png b/public/assets/file_ext/video.png new file mode 100644 index 0000000..987bf84 Binary files /dev/null and b/public/assets/file_ext/video.png differ diff --git a/public/assets/file_ext/word.png b/public/assets/file_ext/word.png new file mode 100644 index 0000000..ff00849 Binary files /dev/null and b/public/assets/file_ext/word.png differ diff --git a/public/assets/file_ext/zip.png b/public/assets/file_ext/zip.png new file mode 100644 index 0000000..86c3ded Binary files /dev/null and b/public/assets/file_ext/zip.png differ diff --git a/public/assets/font-awesome/css/font-awesome.min.css b/public/assets/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/public/assets/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/public/assets/icon/font/glyphicons-halflings-regular.eot b/public/assets/icon/font/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/public/assets/icon/font/glyphicons-halflings-regular.eot differ diff --git a/public/assets/icon/font/glyphicons-halflings-regular.ttf b/public/assets/icon/font/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/public/assets/icon/font/glyphicons-halflings-regular.ttf differ diff --git a/public/assets/icon/font/glyphicons-halflings-regular.woff b/public/assets/icon/font/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/public/assets/icon/font/glyphicons-halflings-regular.woff differ diff --git a/public/assets/icon/font/glyphicons-halflings-regular.woff2 b/public/assets/icon/font/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/public/assets/icon/font/glyphicons-halflings-regular.woff2 differ diff --git a/public/assets/icon/font/yunfont.eot b/public/assets/icon/font/yunfont.eot new file mode 100644 index 0000000..ceff968 Binary files /dev/null and b/public/assets/icon/font/yunfont.eot differ diff --git a/public/assets/icon/font/yunfont.ttf b/public/assets/icon/font/yunfont.ttf new file mode 100644 index 0000000..904d46b Binary files /dev/null and b/public/assets/icon/font/yunfont.ttf differ diff --git a/public/assets/icon/font/yunfont.woff b/public/assets/icon/font/yunfont.woff new file mode 100644 index 0000000..a02ca41 Binary files /dev/null and b/public/assets/icon/font/yunfont.woff differ diff --git a/public/assets/icon/icon.css b/public/assets/icon/icon.css new file mode 100644 index 0000000..9750f3a --- /dev/null +++ b/public/assets/icon/icon.css @@ -0,0 +1,499 @@ +@font-face { + font-family:yunfont; + src:url(./font/yunfont.eot?t=1610419101922?de437c); + src:url(./font/yunfont.eot?t=1610419101922?de437c#iefix) + format('embedded-opentype'),url(./font/yunfont.ttf?t=1610419101922?de437c) + format('truetype'),url(./font/yunfont.woff?t=1610419101922?de437c) + format('woff'),url(./font/yunfont.svg?t=1610419101922?de437c#yunfont) format('svg'); + font-weight:400; + font-style:normal; +} + + +.g-button-right{ + padding-left: 20px; + color: #666; + background-color: rgb(247, 247, 247); +} + +.g-button-right .icon{ + height: 38px; + width: 23px; + line-height: 38px; + margin-left: 5px; + margin-top: -2px; + font-size: 16px; + display: inline-block; +} + +.icon { + font-family: yunfont!important; + speak: never; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.icon-my-share:before { + content: "\e900" +} + +.icon-disk:before { + content: "\e901" +} + +.icon-share:before { + content: "\e902" +} + +.icon-delete:before { + content: "\e903" +} + +.icon-theme:before { + content: "\e904" +} + +.icon-search:before { + content: "\e905" +} + +.icon-newfolder:before { + content: "\e906" +} + +.icon-download:before { + content: "\e907" +} + +.icon-border:before { + content: "\e908" +} + +.icon-face:before { + content: "\e909" +} + +.icon-android:before { + content: "\e90a" +} + +.icon-apple:before { + content: "\e90b" +} + +.icon-device:before { + content: "\e90c" +} + +.icon-check:before { + content: "\e90d" +} + +.icon-cancel:before { + content: "\e90e" +} + +.icon-print:before { + content: "\e90f" +} + +.icon-order:before { + content: "\e910" +} + +.icon-grid:before { + content: "\e911" +} + +.icon-right:before { + content: "\e912" +} + +.icon-more:before { + content: "\e913" +} + +.icon-copy:before { + content: "\e914" +} + +.icon-upload:before { + content: "\e915" +} + +.icon-yunguanjia:before { + content: "\e916" +} + +.icon-iPad:before { + content: "\e917" +} + +.icon-win:before { + content: "\e918" +} + +.icon-mail:before { + content: "\e919" +} + +.icon-sync:before { + content: "\e91a" +} + +.icon-share-cancel:before { + content: "\e91b" +} + +.icon-qrcode:before { + content: "\e91c" +} + +.icon-beauty:before { + content: "\e91d" +} + +.icon-edit:before { + content: "\e91e" +} + +.icon-save-disk:before { + content: "\e91f" +} + +.icon-list:before { + content: "\e920" +} + +.icon-history:before { + content: "\e921" +} + +.icon-notice:before { + content: "\e922" +} + +.icon-recovery:before { + content: "\e923" +} + +.icon-mosaic:before { + content: "\e924" +} + +.icon-speed:before { + content: "\e925" +} + +.icon-play:before { + content: "\e926" +} + +.icon-poly:before { + content: "\e927" +} + +.icon-feedback:before { + content: "\e928" +} + +.icon-search-del:before { + content: "\e929" +} + +.icon-small-lock:before { + content: "\e92a" +} + +.icon-close:before { + content: "\e92b" +} + +.icon-minimize:before { + content: "\e92c" +} + +.icon-maximizing:before { + content: "\e92d" +} + +.icon-share-community:before { + content: "\e92e" +} + +.icon-share-email:before { + content: "\e92f" +} + +.icon-share-link:before { + content: "\e930" +} + +.icon-share-friend:before { + content: "\e931" +} + +.icon-sort-select:before { + content: "\e932" +} + +.icon-dropdown-arrow:before { + content: "\e933" +} + +.icon-friendlist:before { + content: "\e934" +} + +.icon-checkgridsmall:before { + content: "\e935" +} + +.icon-mboxchate:before { + content: "\e936" +} + +.icon-checksmall:before { + content: "\e937" +} + +.icon-downtitle:before { + content: "\e938" +} + +.icon-up:before { + content: "\e939" +} + +.icon-rename-cancel:before { + content: "\e93a" +} + +.icon-circle:before { + content: "\e93b" +} + +.icon-mac:before { + content: "\e93c" +} + +.icon-musicpause:before { + content: "\e93d" +} + +.icon-musicloop:before { + content: "\e93e" +} + +.icon-musicprev:before { + content: "\e93f" +} + +.icon-musicrandom:before { + content: "\e940" +} + +.icon-musicloop2:before { + content: "\e941" +} + +.icon-musicnext:before { + content: "\e942" +} + +.icon-musicplay:before { + content: "\e943" +} + +.icon-musicvolume:before { + content: "\e944" +} + +.icon-arrow-up:before { + content: "\e945" +} + +.icon-arrow-down:before { + content: "\e946" +} + +.icon-arrow-right:before { + content: "\e947" +} + +.icon-arrow-left:before { + content: "\e948" +} + +.icon-appeal:before { + content: "\e949" +} + +.icon-radio-checked:before { + content: "\e94a" +} + +.icon-radio-non:before { + content: "\e94b" +} + +.icon-director:before { + content: "\e94c" +} + +.icon-dropdown-select:before { + content: "\e94d" +} + +.icon-tips-detail:before { + content: "\e94e" +} + +.icon-tips-success:before { + content: "\e94f" +} + +.icon-tips-close:before { + content: "\e950" +} + +.icon-tips-caution:before { + content: "\e951" +} + +.icon-imageEnlarge:before { + content: "\e952" +} + +.icon-hollowCircle:before { + content: "\e953" +} + +.icon-picpre-enlarge:before { + content: "\e954" +} + +.icon-picpre-close:before { + content: "\e955" +} + +.icon-picpre-beautify:before { + content: "\e956" +} + +.icon-picpre-delete:before { + content: "\e957" +} + +.icon-picpre-before:before { + content: "\e958" +} + +.icon-picpre-pulldown2:before { + content: "\e959" +} + +.icon-picpre-next:before { + content: "\e95a" +} + +.icon-picpre-download:before { + content: "\e95b" +} + +.icon-picpre-detail:before { + content: "\e95c" +} + +.icon-picpre-pullup:before { + content: "\e95d" +} + +.icon-picpre-rotate:before { + content: "\e95e" +} + +.icon-picpre-phone:before { + content: "\e95f" +} + +.icon-picpre-cloudprint:before { + content: "\e960" +} + +.icon-picpre-facesearch:before { + content: "\e961" +} + +.icon-remark-edit:before { + content: "\e962" +} + +.icon-remark-remove:before { + content: "\e963" +} + +.icon-camera:before { + content: "\e964" +} + +.icon-sharedir:before { + content: "\e965" +} + +.icon-sharedir-info:before { + content: "\e966" +} + +.icon-classify-modify-remove:before { + content: "\e967" +} + +.icon-setting:before { + content: "\e968" +} + +.icon-share-sellmall:before { + content: "\e969" +} + +.icon-pdf2word:before { + content: "\e96a" +} + +.icon-uniE96D:before { + content: "\e96b" +} + +.icon-uniE96E:before { + content: "\e96c" +} + +.icon-uniE96F:before { + content: "\e96d" +} + +.icon-sjck:before { + content: "\e96e" +} + +.icon-addwp:before { + content: "\e96f" +} + +.icon-wpedit:before { + content: "\e970" +} + +.icon-share-lock:before { + content: "\e971" +} + +.icon-svg-s-close:before { + content: "\e972" +} \ No newline at end of file diff --git a/public/assets/image/apps-android.png b/public/assets/image/apps-android.png new file mode 100644 index 0000000..df78e46 Binary files /dev/null and b/public/assets/image/apps-android.png differ diff --git a/public/assets/image/apps-ios.png b/public/assets/image/apps-ios.png new file mode 100644 index 0000000..0bf6657 Binary files /dev/null and b/public/assets/image/apps-ios.png differ diff --git a/public/assets/image/clear.png b/public/assets/image/clear.png new file mode 100644 index 0000000..580b52a Binary files /dev/null and b/public/assets/image/clear.png differ diff --git a/public/assets/image/collect-image-left.png b/public/assets/image/collect-image-left.png new file mode 100644 index 0000000..eea091c Binary files /dev/null and b/public/assets/image/collect-image-left.png differ diff --git a/public/assets/image/collect-image-right.png b/public/assets/image/collect-image-right.png new file mode 100644 index 0000000..d84749e Binary files /dev/null and b/public/assets/image/collect-image-right.png differ diff --git a/public/assets/image/collect-img1.png b/public/assets/image/collect-img1.png new file mode 100644 index 0000000..02714c1 Binary files /dev/null and b/public/assets/image/collect-img1.png differ diff --git a/public/assets/image/collect-img3.png b/public/assets/image/collect-img3.png new file mode 100644 index 0000000..fedf9c9 Binary files /dev/null and b/public/assets/image/collect-img3.png differ diff --git a/public/assets/image/collect-line.svg b/public/assets/image/collect-line.svg new file mode 100644 index 0000000..a341deb --- /dev/null +++ b/public/assets/image/collect-line.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/image/emptyRecyclebin.png b/public/assets/image/emptyRecyclebin.png new file mode 100644 index 0000000..044c332 Binary files /dev/null and b/public/assets/image/emptyRecyclebin.png differ diff --git a/public/assets/image/emptySousuo.png b/public/assets/image/emptySousuo.png new file mode 100644 index 0000000..75bde8e Binary files /dev/null and b/public/assets/image/emptySousuo.png differ diff --git a/public/assets/image/emptyfile.png b/public/assets/image/emptyfile.png new file mode 100644 index 0000000..7b2af75 Binary files /dev/null and b/public/assets/image/emptyfile.png differ diff --git a/public/assets/image/footer-img1.png b/public/assets/image/footer-img1.png new file mode 100644 index 0000000..6fb767c Binary files /dev/null and b/public/assets/image/footer-img1.png differ diff --git a/public/assets/image/footer-img2.png b/public/assets/image/footer-img2.png new file mode 100644 index 0000000..be68098 Binary files /dev/null and b/public/assets/image/footer-img2.png differ diff --git a/public/assets/image/header.png b/public/assets/image/header.png new file mode 100644 index 0000000..aa0afe6 Binary files /dev/null and b/public/assets/image/header.png differ diff --git a/public/assets/image/i1.gif b/public/assets/image/i1.gif new file mode 100644 index 0000000..0ac543e Binary files /dev/null and b/public/assets/image/i1.gif differ diff --git a/public/assets/image/i18.gif b/public/assets/image/i18.gif new file mode 100644 index 0000000..b679615 Binary files /dev/null and b/public/assets/image/i18.gif differ diff --git a/public/assets/image/i9.png b/public/assets/image/i9.png new file mode 100644 index 0000000..1271340 Binary files /dev/null and b/public/assets/image/i9.png differ diff --git a/public/assets/image/icon-tree_77d7929.png b/public/assets/image/icon-tree_77d7929.png new file mode 100644 index 0000000..5c8efa8 Binary files /dev/null and b/public/assets/image/icon-tree_77d7929.png differ diff --git a/public/assets/image/loading.gif b/public/assets/image/loading.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/public/assets/image/loading.gif differ diff --git a/public/assets/image/login_iconb536.png b/public/assets/image/login_iconb536.png new file mode 100644 index 0000000..afbe403 Binary files /dev/null and b/public/assets/image/login_iconb536.png differ diff --git a/public/assets/image/logo.gif b/public/assets/image/logo.gif new file mode 100644 index 0000000..44a5fbc Binary files /dev/null and b/public/assets/image/logo.gif differ diff --git a/public/assets/image/logo.png b/public/assets/image/logo.png new file mode 100644 index 0000000..f064f89 Binary files /dev/null and b/public/assets/image/logo.png differ diff --git a/public/assets/image/logo3.gif b/public/assets/image/logo3.gif new file mode 100644 index 0000000..16f6aa5 Binary files /dev/null and b/public/assets/image/logo3.gif differ diff --git a/public/assets/image/logo7.gif b/public/assets/image/logo7.gif new file mode 100644 index 0000000..a4972b0 Binary files /dev/null and b/public/assets/image/logo7.gif differ diff --git a/public/assets/image/mobile-collect-img-left.png b/public/assets/image/mobile-collect-img-left.png new file mode 100644 index 0000000..dc7d9ec Binary files /dev/null and b/public/assets/image/mobile-collect-img-left.png differ diff --git a/public/assets/image/mobile-collect-img-right.png b/public/assets/image/mobile-collect-img-right.png new file mode 100644 index 0000000..6bc3551 Binary files /dev/null and b/public/assets/image/mobile-collect-img-right.png differ diff --git a/public/assets/image/provide-img1.png b/public/assets/image/provide-img1.png new file mode 100644 index 0000000..9b62a34 Binary files /dev/null and b/public/assets/image/provide-img1.png differ diff --git a/public/assets/image/provide-img3.png b/public/assets/image/provide-img3.png new file mode 100644 index 0000000..c97771a Binary files /dev/null and b/public/assets/image/provide-img3.png differ diff --git a/public/assets/image/q2.gif b/public/assets/image/q2.gif new file mode 100644 index 0000000..439ee6f Binary files /dev/null and b/public/assets/image/q2.gif differ diff --git a/public/assets/image/q9.gif b/public/assets/image/q9.gif new file mode 100644 index 0000000..30f2e24 Binary files /dev/null and b/public/assets/image/q9.gif differ diff --git a/public/assets/image/space-img1.png b/public/assets/image/space-img1.png new file mode 100644 index 0000000..ebee8ea Binary files /dev/null and b/public/assets/image/space-img1.png differ diff --git a/public/assets/image/space-img2.png b/public/assets/image/space-img2.png new file mode 100644 index 0000000..e36a49a Binary files /dev/null and b/public/assets/image/space-img2.png differ diff --git a/public/assets/image/space-img3.png b/public/assets/image/space-img3.png new file mode 100644 index 0000000..b99ecc9 Binary files /dev/null and b/public/assets/image/space-img3.png differ diff --git a/public/assets/image/space-img4.png b/public/assets/image/space-img4.png new file mode 100644 index 0000000..65dd3ea Binary files /dev/null and b/public/assets/image/space-img4.png differ diff --git a/public/assets/image/upload_cancel.gif b/public/assets/image/upload_cancel.gif new file mode 100644 index 0000000..b8e24fb Binary files /dev/null and b/public/assets/image/upload_cancel.gif differ diff --git a/public/assets/image/userhead.png b/public/assets/image/userhead.png new file mode 100644 index 0000000..0f3eaac Binary files /dev/null and b/public/assets/image/userhead.png differ diff --git a/public/assets/js/admin.js b/public/assets/js/admin.js new file mode 100644 index 0000000..25e46b2 --- /dev/null +++ b/public/assets/js/admin.js @@ -0,0 +1,1110 @@ +;(function () { + //全局ajax处理 + $.ajaxSetup({ + complete: function (jqXHR) { + }, + data: {}, + error: function (jqXHR, textStatus, errorThrown) { + //请求失败处理 + } + }); + + if ($.browser && $.browser.msie) { + //ie 都不缓存 + $.ajaxSetup({ + cache: false + }); + } + + //不支持placeholder浏览器下对placeholder进行处理 + if (document.createElement('input').placeholder !== '') { + $('[placeholder]').focus(function () { + var input = $(this); + if (input.val() == input.attr('placeholder')) { + input.val(''); + input.removeClass('placeholder'); + } + }).blur(function () { + var input = $(this); + if (input.val() == '' || input.val() == input.attr('placeholder')) { + input.addClass('placeholder'); + input.val(input.attr('placeholder')); + } + }).blur().parents('form').submit(function () { + $(this).find('[placeholder]').each(function () { + var input = $(this); + if (input.val() == input.attr('placeholder')) { + input.val(''); + } + }); + }); + } + + // 所有加了dialog类名的a链接,自动弹出它的href + if ($('a.js-dialog').length) { + Wind.css('artDialog'); + Wind.use('artDialog', 'iframeTools', function () { + $('.js-dialog').on('click', function (e) { + e.preventDefault(); + var $this = $(this); + art.dialog.open($(this).prop('href'), { + close: function () { + $this.focus(); // 关闭时让触发弹窗的元素获取焦点 + return true; + }, + title: $this.prop('title') + }); + }).attr('role', 'button'); + + }); + } + + // 所有的ajax form提交,由于大多业务逻辑都是一样的,故统一处理 + var ajaxForm_list = $('form.js-ajax-form'); + if (ajaxForm_list.length) { + + //设置td标签点击也选中 + $("td").click(function(){ + if($(this).find("input").length && $(this).find("input").hasClass("js-check")){ + $(this).find("input").attr("checked",true); + } + }); + + Wind.css('artDialog'); + Wind.use('ajaxForm', 'artDialog', 'noty', 'validate', function () { + var $btn; + $('button.js-ajax-submit').on('click', function (e) { + var btn = $(this), form = btn.parents('form.js-ajax-form'); + $btn = btn; + if (btn.data("loading")) { + return; + } + //批量操作 判断选项 + if (btn.data('subcheck')) { + btn.parent().find('span').remove(); + if (form.find('input.js-check:checked').length) { + btn.data('subcheck', false); + } else { + $('请至少选择一项').appendTo(btn.parent()).fadeIn('fast'); + return false; + } + } + + + var msg = btn.data('msg'); + if (msg) { + art.dialog({ + id: 'warning', + icon: 'warning', + content: btn.data('msg'), + cancelVal: '关闭', + cancel: function () { + //btn.data('subcheck', false); + //btn.click(); + }, + ok: function () { + btn.data('msg', false); + btn.click(); + } + }); + + return false; + } + + //ie处理placeholder提交问题 + if ($.browser && $.browser.msie) { + form.find('[placeholder]').each(function () { + var input = $(this); + if (input.val() == input.attr('placeholder')) { + input.val(''); + } + }); + } + }); + + ajaxForm_list.each(function () { + $(this).validate({ + //是否在获取焦点时验证 + //onfocusout : false, + //是否在敲击键盘时验证 + //onkeyup : false, + //当鼠标点击时验证 + //onclick : false, + //给未通过验证的元素加效果,闪烁等 + highlight: function (element, errorClass, validClass) { + if (element.type === "radio") { + this.findByName(element.name).addClass(errorClass).removeClass(validClass); + } else { + var $element = $(element); + $element.addClass(errorClass).removeClass(validClass); + $element.parent().addClass("has-error");//bootstrap3表单 + $element.parents('.control-group').addClass("error");//bootstrap2表单 + + } + }, + unhighlight: function (element, errorClass, validClass) { + if (element.type === "radio") { + this.findByName(element.name).removeClass(errorClass).addClass(validClass); + } else { + var $element = $(element); + $element.removeClass(errorClass).addClass(validClass); + $element.parent().removeClass("has-error");//bootstrap3表单 + $element.parents('.control-group').removeClass("error");//bootstrap2表单 + } + }, + showErrors: function (errorMap, errorArr) { + var i, elements, error; + for (i = 0; this.errorList[i]; i++) { + error = this.errorList[i]; + if (this.settings.highlight) { + this.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.validClass); + } + //this.showLabel( error.element, error.message ); + } + if (this.errorList.length) { + //this.toShow = this.toShow.add( this.containers ); + } + if (this.settings.success) { + for (i = 0; this.successList[i]; i++) { + //this.showLabel( this.successList[ i ] ); + } + } + if (this.settings.unhighlight) { + for (i = 0, elements = this.validElements(); elements[i]; i++) { + this.settings.unhighlight.call(this, elements[i], this.settings.errorClass, this.settings.validClass); + } + } + this.toHide = this.toHide.not(this.toShow); + this.hideErrors(); + this.addWrapper(this.toShow).show(); + }, + submitHandler: function (form) { + var $form = $(form); + $form.ajaxSubmit({ + url: $btn.data('action') ? $btn.data('action') : $form.attr('action'), //按钮上是否自定义提交地址(多按钮情况) + dataType: 'json', + beforeSubmit: function (arr, $form, options) { + + $btn.data("loading", true); + var text = $btn.text(); + + //按钮文案、状态修改 + $btn.text(text + '...').prop('disabled', true).addClass('disabled'); + }, + success: function (data, statusText, xhr, $form) { + + function _refresh() { + if (data.url) { + //返回带跳转地址 + window.location.href = data.url; + } else { + if (data.code == 1) { + //刷新当前页 + reloadPage(window); + } + } + } + + var text = $btn.text(); + + //按钮文案、状态修改 + $btn.removeClass('disabled').prop('disabled', false).text(text.replace('...', '')).parent().find('span').remove(); + if (data.code == 1) { + if ($btn.data('success')) { + var successCallback = $btn.data('success'); + window[successCallback](data, statusText, xhr, $form); + return; + } + if ($btn.data('refresh') == undefined || $btn.data('refresh')) { + _refresh(); + } + parent.layer.closeAll(); + parent.layer.msg(data.msg, {time:800, icon:1, shift:4}); + /* + noty({ + text: data.msg, + type: 'success', + layout: 'topCenter', + modal: true, + // animation: { + // open: 'animated bounceInDown', // Animate.css class names + // close: 'animated bounceOutUp', // Animate.css class names + // }, + timeout: 300, + callback: { + onShow: function () { + if ($btn.data('refresh') == undefined || $btn.data('refresh')) { + _refresh(); + } + } + } + }).show(); + */ + $(window).focus(); + } else if (data.code == 0) { + var $verify_img = $form.find(".verify_img"); + if ($verify_img.length) { + $verify_img.attr("src", $verify_img.attr("src") + "&refresh=" + Math.random()); + } + + var $verify_input = $form.find("[name='verify']"); + $verify_input.val(""); + + //$('' + data.msg + '').appendTo($btn.parent()).fadeIn('fast'); + $btn.removeProp('disabled').removeClass('disabled'); + + noty({ + text: data.msg, + type: 'error', + layout: 'topCenter', + modal: true, + // animation: { + // open: 'animated bounceInDown', // Animate.css class names + // close: 'animated bounceOutUp', // Animate.css class names + // }, + timeout: 800, + callback: { + afterClose: function () { + _refresh(); + } + } + }).show(); + $(window).focus(); + } + + + }, + error: function (xhr, e, statusText) { + art.dialog({ + id: 'warning', + icon: 'warning', + content: statusText, + cancelVal: '关闭', + cancel: function () { + reloadPage(window); + }, + ok: function () { + reloadPage(window); + } + }); + + }, + complete: function () { + $btn.data("loading", false); + } + }); + } + }); + }); + + }); + } + + //dialog弹窗内的关闭方法 + $('#js-dialog-close').on('click', function (e) { + e.preventDefault(); + try { + art.dialog.close(); + } catch (err) { + Wind.css('artDialog'); + Wind.use('artDialog', 'iframeTools', function () { + art.dialog.close(); + }); + } + ; + }); + + //所有的删除操作,删除数据后刷新页面 + if ($('a.js-ajax-delete').length) { + Wind.css('artDialog'); + Wind.use('artDialog', 'noty', function () { + $('.js-ajax-delete').on('click', function (e) { + e.preventDefault(); + var $_this = this, + $this = $($_this), + href = $this.data('href'), + refresh = $this.data('refresh'), + msg = $this.data('msg'); + href = href ? href : $this.attr('href'); + + art.dialog({ + title: false, + icon: 'question', + content: msg ? msg : '确定要删除吗?', + follow: $_this, + close: function () { + $_this.focus(); //关闭时让触发弹窗的元素获取焦点 + return true; + }, + okVal: "确定", + ok: function () { + $.getJSON(href).done(function (data) { + if (data.code == '1') { + + if (refresh == undefined || refresh) { + if (data.url) { + //返回带跳转地址 + window.location.href = data.url; + } else { + //刷新当前页 + reloadPage(window); + } + } + parent.layer.closeAll(); + parent.layer.msg(data.msg, {time:800, icon:1, shift:4}); + + /* + noty({ + text: data.msg, + type: 'success', + layout: 'topCenter', + modal: true, + // animation: { + // open: 'animated bounceInDown', // Animate.css class names + // close: 'animated bounceOutUp', // Animate.css class names + // }, + timeout: 800, + callback: { + afterClose: function () { + if (refresh == undefined || refresh) { + if (data.url) { + //返回带跳转地址 + window.location.href = data.url; + } else { + //刷新当前页 + reloadPage(window); + } + } + } + } + }).show(); + */ + + } else if (data.code == '0') { + //art.dialog.alert(data.info); + //alert(data.info);//暂时处理方案 + art.dialog({ + content: data.msg, + icon: 'warning', + ok: function () { + this.title(data.msg); + return true; + } + }); + } + }); + }, + cancelVal: '关闭', + cancel: true + }); + }); + + }); + } + + + if ($('a.js-ajax-dialog-btn').length) { + Wind.use('artDialog', 'noty', function () { + $('.js-ajax-dialog-btn').on('click', function (e) { + e.preventDefault(); + var $_this = this, + $this = $($_this), + href = $this.data('href'), + refresh = $this.data('refresh'), + msg = $this.data('msg'); + href = href ? href : $this.attr('href'); + if (!msg) { + msg = "您确定要进行此操作吗?"; + } + art.dialog({ + title: false, + icon: 'question', + content: msg, + follow: $_this, + close: function () { + $_this.focus(); //关闭时让触发弹窗的元素获取焦点 + return true; + }, + ok: function () { + + $.ajax({ + url: href, + type: 'post', + success: function (data) { + if (data.code == 1) { + + + if (refresh == undefined || refresh) { + if (data.url) { + //返回带跳转地址 + window.location.href = data.url; + } else { + //刷新当前页 + reloadPage(window); + } + } + parent.layer.closeAll(); + parent.layer.msg(data.msg, {time:800, icon:1, shift:4}); + + /* + noty({ + text: data.msg, + type: 'success', + layout: 'topCenter', + modal: true, + // animation: { + // open: 'animated bounceInDown', // Animate.css class names + // close: 'animated bounceOutUp', // Animate.css class names + // }, + timeout: 800, + callback: { + afterClose: function () { + if (refresh == undefined || refresh) { + if (data.url) { + //返回带跳转地址 + window.location.href = data.url; + } else { + //刷新当前页 + reloadPage(window); + } + } + } + } + }).show(); + */ + + } else if (data.code == 0) { + //art.dialog.alert(data.info); + art.dialog({ + content: data.msg, + icon: 'warning', + ok: function () { + this.title(data.msg); + return true; + } + }); + } + } + }) + }, + cancelVal: '关闭', + cancel: true + }); + }); + + }); + } + + if ($('a.js-ajax-btn').length) { + Wind.use('noty', function () { + $('.js-ajax-btn').on('click', function (e) { + e.preventDefault(); + var $_this = this, + $this = $($_this), + href = $this.data('href'), + msg = $this.data('msg'); + refresh = $this.data('refresh'); + href = href ? href : $this.attr('href'); + refresh = refresh == undefined ? 1 : refresh; + + + $.getJSON(href).done(function (data) { + if (data.code == 1) { + + if (data.url) { + location.href = data.url; + return; + } + + if (refresh || refresh == undefined) { + reloadPage(window); + } + parent.layer.closeAll(); + parent.layer.msg(data.msg, {time:800, icon:1, shift:4}); + + /* + noty({ + text: data.msg, + type: 'success', + layout: 'center', + callback: { + afterClose: function () { + if (data.url) { + location.href = data.url; + return; + } + + if (refresh || refresh == undefined) { + reloadPage(window); + } + } + } + }); + */ + } else if (data.code == 0) { + noty({ + text: data.msg, + type: 'error', + layout: 'center', + callback: { + afterClose: function () { + if (data.url) { + location.href = data.url; + } + } + } + }); + } + }); + + }); + + }); + } + + + /*复选框全选(支持多个,纵横双控全选)。 + *实例:版块编辑-权限相关(双控),验证机制-验证策略(单控) + *说明: + * "js-check"的"data-xid"对应其左侧"js-check-all"的"data-checklist"; + * "js-check"的"data-yid"对应其上方"js-check-all"的"data-checklist"; + * 全选框的"data-direction"代表其控制的全选方向(x或y); + * "js-check-wrap"同一块全选操作区域的父标签class,多个调用考虑 + */ + + if ($('.js-check-wrap').length) { + var total_check_all = $('input.js-check-all'); + + //遍历所有全选框 + $.each(total_check_all, function () { + var check_all = $(this), + check_items; + + //分组各纵横项 + var check_all_direction = check_all.data('direction'); + check_items = $('input.js-check[data-' + check_all_direction + 'id="' + check_all.data('checklist') + '"]').not(":disabled"); + + //点击全选框 + check_all.change(function (e) { + var check_wrap = check_all.parents('.js-check-wrap'); //当前操作区域所有复选框的父标签(重用考虑) + + if ($(this).prop('checked')) { + //全选状态 + check_items.prop('checked', true); + + //所有项都被选中 + if (check_wrap.find('input.js-check').length === check_wrap.find('input.js-check:checked').length) { + check_wrap.find(total_check_all).prop('checked', true); + } + + } else { + //非全选状态 + check_items.removeProp('checked'); + + check_wrap.find(total_check_all).removeProp('checked'); + + //另一方向的全选框取消全选状态 + var direction_invert = check_all_direction === 'x' ? 'y' : 'x'; + check_wrap.find($('input.js-check-all[data-direction="' + direction_invert + '"]')).removeProp('checked'); + } + + }); + + //点击非全选时判断是否全部勾选 + check_items.change(function () { + + if ($(this).prop('checked')) { + + if (check_items.filter(':checked').length === check_items.length) { + //已选择和未选择的复选框数相等 + check_all.prop('checked', true); + } + + } else { + check_all.removeProp('checked'); + } + + }); + + + }); + + } + + //日期选择器 + var dateInput = $("input.js-date"); + if (dateInput.length) { + Wind.use('datePicker', function () { + dateInput.datePicker(); + }); + } + + //日期+时间选择器 + var dateTimeInput = $("input.js-datetime"); + if (dateTimeInput.length) { + Wind.use('datePicker', function () { + dateTimeInput.datePicker({ + time: true + }); + }); + } + + var yearInput = $("input.js-year"); + if (yearInput.length) { + Wind.use('datePicker', function () { + yearInput.datePicker({ + startView: 'decade', + minView: 'decade', + format: 'yyyy', + autoclose: true + }); + }); + } + + // bootstrap年选择器 + var bootstrapYearInput = $("input.js-bootstrap-year") + if (bootstrapYearInput.length) { + Wind.css('bootstrapDatetimePicker'); + Wind.use('bootstrapDatetimePicker', function () { + bootstrapYearInput.datetimepicker({ + language: 'zh-CN', + format: 'yyyy', + minView: 'decade', + startView: 'decade', + todayBtn: 1, + autoclose: true + }); + }); + } + + // bootstrap日期选择器 + var bootstrapDateInput = $("input.js-bootstrap-date") + if (bootstrapDateInput.length) { + Wind.css('bootstrapDatetimePicker'); + Wind.use('bootstrapDatetimePicker', function () { + bootstrapDateInput.datetimepicker({ + language: 'zh-CN', + format: 'yyyy-mm-dd', + minView: 'month', + todayBtn: 1, + autoclose: true + }); + }); + } + + // bootstrap日期选择器日期+时间选择器 + var bootstrapDateTimeInput = $("input.js-bootstrap-datetime"); + if (bootstrapDateTimeInput.length) { + Wind.css('bootstrapDatetimePicker'); + Wind.use('bootstrapDatetimePicker', function () { + bootstrapDateTimeInput.datetimepicker({ + language: 'zh-CN', + format: 'yyyy-mm-dd hh:ii', + todayBtn: 1, + autoclose: true + }); + }); + } + + //tab + var tabs_nav = $('ul.js-tabs-nav'); + if (tabs_nav.length) { + Wind.use('tabs', function () { + tabs_nav.tabs('.js-tabs-content > div'); + }); + } + + //地址联动 + var $js_address_select = $('.js-address-select'); + if ($js_address_select.length > 0) { + $('.js-address-province-select,.js-address-city-select').change(function () { + var $this = $(this); + var id = $this.val(); + var $child_area_select; + var $this_js_address_select = $this.parents('.js-address-select'); + if ($this.is('.js-address-province-select')) { + $child_area_select = $this_js_address_select.find('.js-address-city-select'); + $this_js_address_select.find('.js-address-district-select').hide(); + } else { + $child_area_select = $this_js_address_select.find('.js-address-district-select'); + } + + var empty_option = ''; + $child_area_select.html(empty_option); + + var child_area_html = $this.data('childarea' + id); + if (child_area_html) { + $child_area_select.show(); + $child_area_select.html(child_area_html); + return; + } + + $.ajax({ + url: $this_js_address_select.data('url'), + type: 'POST', + dataType: 'JSON', + data: {id: id}, + success: function (data) { + if (data.code == 1) { + if (data.data.areas.length > 0) { + var html = [empty_option]; + + $.each(data.data.areas, function (i, area) { + var area_html = ''; + area_html = area_html.replace('[name]', area.name); + area_html = area_html.replace('[id]', area.id); + html.push(area_html); + }); + html = html.join('', html); + $this.data('childarea' + id, html); + $child_area_select.html(html); + $child_area_select.show(); + } else { + $child_area_select.hide(); + + } + } + }, + error: function () { + + }, + complete: function () { + + } + }); + }); + + } + //地址联动end + +})(); + +//重新刷新页面,使用location.reload()有可能导致重新提交 +function reloadPage(win) { + var location = win.location; + location.href = location.pathname + location.search; +} + +/** + * 页面跳转 + * @param url 要打开的页面地址 + */ +function redirect(url) { + location.href = url; +} + +/** + * 读取cookie + * @param name + * @returns + */ +function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; +} + +/** + * 设置cookie + */ +function setCookie(name, value, options) { + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE + } + var path = options.path ? '; path=' + options.path : ''; + var domain = options.domain ? '; domain=' + options.domain : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); +} + +/** + * 打开iframe式的窗口对话框 + * @param url + * @param title + * @param options + */ +function openIframeDialog(url, title, options) { + Wind.css('artDialog'); + var params = { + title: title, + lock: true, + opacity: 0, + width: "95%", + height: '90%' + }; + params = options ? $.extend(params, options) : params; + Wind.use('artDialog', 'iframeTools', function () { + art.dialog.open(url, params); + }); +} + +/** + * 打开地图对话框 + * + * @param url + * @param title + * @param options + * @param callback + */ +function openMapDialog(url, title, options, callback) { + Wind.css('artDialog'); + var params = { + title: title, + lock: true, + opacity: 0, + width: "95%", + height: 400, + ok: function () { + if (callback) { + var d = this.iframe.contentWindow; + var lng = $("#lng_input", d.document).val(); + var lat = $("#lat_input", d.document).val(); + var address = {}; + address.address = $("#address_input", d.document).val(); + address.province = $("#province_input", d.document).val(); + address.city = $("#city_input", d.document).val(); + address.district = $("#district_input", d.document).val(); + callback.apply(this, [lng, lat, address]); + } + } + }; + params = options ? $.extend(params, options) : params; + Wind.use('artDialog', 'iframeTools', function () { + art.dialog.open(url, params); + }); +} + +/** + * 打开文件上传对话框 + * @param dialog_title 对话框标题 + * @param callback 回调方法,参数有(当前dialog对象,选择的文件数组,你设置的extra_params) + * @param extra_params 额外参数,object + * @param multi 是否可以多选 + * @param filetype 文件类型,image,video,audio,file + * @param app 应用名,CMF的应用名 + */ +function openUploadDialog(dialog_title, callback, extra_params, multi, filetype, app) { + Wind.css('artDialog'); + multi = multi ? 1 : 0; + filetype = filetype ? filetype : 'image'; + app = app ? app : GV.APP; + var params = '&multi=' + multi + '&filetype=' + filetype + '&app=' + app; + Wind.use("artDialog", "iframeTools", function () { + art.dialog.open(GV.ROOT + 'user/Asset/webuploader?' + params, { + title: dialog_title, + id: new Date().getTime(), + width: '600px', + height: '350px', + lock: true, + fixed: true, + background: "#CCCCCC", + opacity: 0, + ok: function () { + if (typeof callback == 'function') { + var iframewindow = this.iframe.contentWindow; + var files = iframewindow.get_selected_files(); + console.log(files); + if (files && files.length > 0) { + callback.apply(this, [this, files, extra_params]); + } else { + return false; + } + + } + }, + cancel: true + }); + }); +} + +/** + * 单个文件上传 + * @param dialog_title 上传对话框标题 + * @param input_selector 图片容器 + * @param filetype 文件类型,image,video,audio,file + * @param extra_params 额外参数,object + * @param app 应用名,CMF的应用名 + */ +function uploadOne(dialog_title, input_selector, filetype, extra_params, app) { + filetype = filetype ? filetype : 'file'; + openUploadDialog(dialog_title, function (dialog, files) { + $(input_selector).val(files[0].filepath); + $(input_selector + '-preview').attr('href', files[0].preview_url); + + $(input_selector + '-name').val(files[0].name); + $(input_selector + '-name-text').text(files[0].name); + }, extra_params, 0, filetype, app); +} + +/** + * 单个图片上传 + * @param dialog_title 上传对话框标题 + * @param input_selector 图片容器 + * @param extra_params 额外参数,object + * @param app 应用名,CMF的应用名 + */ +function uploadOneImage(dialog_title, input_selector, extra_params, app) { + openUploadDialog(dialog_title, function (dialog, files) { + $(input_selector).val(files[0].filepath); + $(input_selector + '-preview').attr('src', files[0].preview_url); + + $(input_selector + '-name').val(files[0].name); + $(input_selector + '-name-text').text(files[0].name); + + }, extra_params, 0, 'image', app); +} + +/** + * 多图上传 + * @param dialog_title 上传对话框标题 + * @param container_selector 图片容器 + * @param item_tpl_wrapper_id 单个图片html模板容器id + * @param extra_params 额外参数,object + * @param app 应用名,CMF 的应用名 + */ +function uploadMultiImage(dialog_title, container_selector, item_tpl_wrapper_id, extra_params, app) { + openUploadDialog(dialog_title, function (dialog, files) { + var tpl = $('#' + item_tpl_wrapper_id).html(); + var html = ''; + $.each(files, function (i, item) { + var itemtpl = tpl; + itemtpl = itemtpl.replace(/\{id\}/g, item.id); + itemtpl = itemtpl.replace(/\{url\}/g, item.url); + itemtpl = itemtpl.replace(/\{preview_url\}/g, item.preview_url); + itemtpl = itemtpl.replace(/\{filepath\}/g, item.filepath); + itemtpl = itemtpl.replace(/\{name\}/g, item.name); + html += itemtpl; + }); + $(container_selector).append(html); + + }, extra_params, 1, 'image', app); +} + +/** + * 多文件上传 + * @param dialog_title 上传对话框标题 + * @param container_selector 图片容器 + * @param item_tpl_wrapper_id 单个图片html模板容器id + * @param filetype 文件类型,image,video,audio,file + * @param extra_params 额外参数,object + * @param app 应用名,CMF 的应用名 + */ +function uploadMultiFile(dialog_title, container_selector, item_tpl_wrapper_id, filetype, extra_params, app) { + filetype = filetype ? filetype : 'file'; + openUploadDialog(dialog_title, function (dialog, files) { + var tpl = $('#' + item_tpl_wrapper_id).html(); + var html = ''; + $.each(files, function (i, item) { + var itemtpl = tpl; + itemtpl = itemtpl.replace(/\{id\}/g, item.id); + itemtpl = itemtpl.replace(/\{url\}/g, item.url); + itemtpl = itemtpl.replace(/\{preview_url\}/g, item.preview_url); + itemtpl = itemtpl.replace(/\{filepath\}/g, item.filepath); + itemtpl = itemtpl.replace(/\{name\}/g, item.name); + html += itemtpl; + }); + $(container_selector).append(html); + + }, extra_params, 1, filetype, app); +} + +/** + * 查看图片对话框 + * @param img 图片地址 + */ +function imagePreviewDialog(img) { + Wind.css('layer'); + + Wind.use("layer", function () { + layer.photos({ + photos: { + "title": "", //相册标题 + "id": 'image_preview', //相册id + "start": 0, //初始显示的图片序号,默认0 + "data": [ //相册包含的图片,数组格式 + { + "alt": "", + "pid": 666, //图片id + "src": img, //原图地址 + "thumb": img //缩略图地址 + } + ] + } //格式见API文档手册页 + , anim: 5, //0-6的选择,指定弹出图片动画类型,默认随机 + shadeClose: true, + // skin: 'layui-layer-nobg', + shade: [0.5, '#000000'], + shadeClose: true, + }) + }); +} + +function artdialogAlert(msg) { + Wind.css('artDialog'); + Wind.use("artDialog", function () { + art.dialog({ + id: new Date().getTime(), + icon: "error", + fixed: true, + lock: true, + background: "#CCCCCC", + opacity: 0, + content: msg, + ok: function () { + return true; + } + }); + }); + +} + +function openIframeLayer(url, title, options) { + + var params = { + type: 2, + title: title, + shadeClose: true, + // skin: 'layui-layer-nobg', + anim: -1, + shade: [0.001, '#000000'], + shadeClose: true, + area: ['95%', '90%'], + move: false, + content: url, + yes: function (index, layero) { + //do something + layer.close(index); //如果设定了yes回调,需进行手工关闭 + } + }; + params = options ? $.extend(params, options) : params; + + Wind.css('layer'); + + Wind.use("layer", function () { + layer.open(params); + }); + +} \ No newline at end of file diff --git a/public/assets/js/animate/animate.css b/public/assets/js/animate/animate.css new file mode 100644 index 0000000..1e79e03 --- /dev/null +++ b/public/assets/js/animate/animate.css @@ -0,0 +1,1579 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.2 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2017 Daniel Eden + */ + +.animated { + animation-duration: 1s; + animation-fill-mode: both; +} + +.animated.infinite { + animation-iteration-count: infinite; +} + +.animated.hinge { + animation-duration: 2s; +} + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + animation-duration: .75s; +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform: translate3d(0,0,0); + } + + 40%, 43% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -30px, 0); + } + + 70% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -15px, 0); + } + + 90% { + transform: translate3d(0,-4px,0); + } +} + +.bounce { + animation-name: bounce; + transform-origin: center bottom; +} + +@keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes pulse { + from { + transform: scale3d(1, 1, 1); + } + + 50% { + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.pulse { + animation-name: pulse; +} + +@keyframes rubberBand { + from { + transform: scale3d(1, 1, 1); + } + + 30% { + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + transform: scale3d(.95, 1.05, 1); + } + + 75% { + transform: scale3d(1.05, .95, 1); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + animation-name: rubberBand; +} + +@keyframes shake { + from, to { + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + transform: translate3d(10px, 0, 0); + } +} + +.shake { + animation-name: shake; +} + +@keyframes headShake { + 0% { + transform: translateX(0); + } + + 6.5% { + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + transform: translateX(2px) rotateY(3deg); + } + + 50% { + transform: translateX(0); + } +} + +.headShake { + animation-timing-function: ease-in-out; + animation-name: headShake; +} + +@keyframes swing { + 20% { + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + transform-origin: top center; + animation-name: swing; +} + +@keyframes tada { + from { + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.tada { + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes wobble { + from { + transform: none; + } + + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + transform: none; + } +} + +.wobble { + animation-name: wobble; +} + +@keyframes jello { + from, 11.1%, to { + transform: none; + } + + 22.2% { + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + animation-name: jello; + transform-origin: center; +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + 20% { + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + animation-name: bounceIn; +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, 25px, 0); + } + + 75% { + transform: translate3d(0, -10px, 0); + } + + 90% { + transform: translate3d(0, 5px, 0); + } + + to { + transform: none; + } +} + +.bounceInDown { + animation-name: bounceInDown; +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(25px, 0, 0); + } + + 75% { + transform: translate3d(-10px, 0, 0); + } + + 90% { + transform: translate3d(5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInLeft { + animation-name: bounceInLeft; +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(-25px, 0, 0); + } + + 75% { + transform: translate3d(10px, 0, 0); + } + + 90% { + transform: translate3d(-5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInRight { + animation-name: bounceInRight; +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + 75% { + transform: translate3d(0, 10px, 0); + } + + 90% { + transform: translate3d(0, -5px, 0); + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + animation-name: bounceInUp; +} + +@keyframes bounceOut { + 20% { + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + animation-name: bounceOut; +} + +@keyframes bounceOutDown { + 20% { + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + animation-name: bounceOutDown; +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + animation-name: bounceOutLeft; +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + animation-name: bounceOutRight; +} + +@keyframes bounceOutUp { + 20% { + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + animation-name: bounceOutUp; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDown { + animation-name: fadeInDown; +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDownBig { + animation-name: fadeInDownBig; +} + +@keyframes fadeInLeft { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeft { + animation-name: fadeInLeft; +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeftBig { + animation-name: fadeInLeftBig; +} + +@keyframes fadeInRight { + from { + opacity: 0; + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRight { + animation-name: fadeInRight; +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRightBig { + animation-name: fadeInRightBig; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUp { + animation-name: fadeInUp; +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUpBig { + animation-name: fadeInUpBig; +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + animation-name: fadeOut; +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + animation-name: fadeOutDown; +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + animation-name: fadeOutDownBig; +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + animation-name: fadeOutLeft; +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + animation-name: fadeOutLeftBig; +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + animation-name: fadeOutRight; +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + animation-name: fadeOutRightBig; +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + animation-name: fadeOutUp; +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + animation-name: fadeOutUpBig; +} + +@keyframes flip { + from { + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + animation-timing-function: ease-out; + } + + 40% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + animation-timing-function: ease-out; + } + + 50% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + animation-timing-function: ease-in; + } + + 80% { + transform: perspective(400px) scale3d(.95, .95, .95); + animation-timing-function: ease-in; + } + + to { + transform: perspective(400px); + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + animation-name: flip; +} + +@keyframes flipInX { + from { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInX; +} + +@keyframes flipInY { + from { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInY; +} + +@keyframes flipOutX { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@keyframes flipOutY { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipOutY; +} + +@keyframes lightSpeedIn { + from { + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + transform: skewX(20deg); + opacity: 1; + } + + 80% { + transform: skewX(-5deg); + opacity: 1; + } + + to { + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + animation-name: lightSpeedIn; + animation-timing-function: ease-out; +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + animation-name: lightSpeedOut; + animation-timing-function: ease-in; +} + +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + transform-origin: center; + transform: none; + opacity: 1; + } +} + +.rotateIn { + animation-name: rotateIn; +} + +@keyframes rotateInDownLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + animation-name: rotateInDownLeft; +} + +@keyframes rotateInDownRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + animation-name: rotateInDownRight; +} + +@keyframes rotateInUpLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + animation-name: rotateInUpLeft; +} + +@keyframes rotateInUpRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + animation-name: rotateInUpRight; +} + +@keyframes rotateOut { + from { + transform-origin: center; + opacity: 1; + } + + to { + transform-origin: center; + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + animation-name: rotateOut; +} + +@keyframes rotateOutDownLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + animation-name: rotateOutDownLeft; +} + +@keyframes rotateOutDownRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + animation-name: rotateOutDownRight; +} + +@keyframes rotateOutUpLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + animation-name: rotateOutUpLeft; +} + +@keyframes rotateOutUpRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + animation-name: rotateOutUpRight; +} + +@keyframes hinge { + 0% { + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + transform: rotate3d(0, 0, 1, 80deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + transform: rotate3d(0, 0, 1, 60deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + animation-name: hinge; +} + +@keyframes jackInTheBox { + from { + opacity: 0; + transform: scale(0.1) rotate(30deg); + transform-origin: center bottom; + } + + 50% { + transform: rotate(-10deg); + } + + 70% { + transform: rotate(3deg); + } + + to { + opacity: 1; + transform: scale(1); + } +} + +.jackInTheBox { + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollIn { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + transform: none; + } +} + +.rollIn { + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + animation-name: rollOut; +} + +@keyframes zoomIn { + from { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + animation-name: zoomIn; +} + +@keyframes zoomInDown { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + animation-name: zoomInDown; +} + +@keyframes zoomInLeft { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + animation-name: zoomInLeft; +} + +@keyframes zoomInRight { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + animation-name: zoomInRight; +} + +@keyframes zoomInUp { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + animation-name: zoomInUp; +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + animation-name: zoomOut; +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + animation-name: zoomOutDown; +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(.1) translate3d(-2000px, 0, 0); + transform-origin: left center; + } +} + +.zoomOutLeft { + animation-name: zoomOutLeft; +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(.1) translate3d(2000px, 0, 0); + transform-origin: right center; + } +} + +.zoomOutRight { + animation-name: zoomOutRight; +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + animation-name: zoomOutUp; +} + +@keyframes slideInDown { + from { + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + animation-name: slideInDown; +} + +@keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + animation-name: slideInLeft; +} + +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + animation-name: slideInRight; +} + +@keyframes slideInUp { + from { + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + animation-name: slideInUp; +} + +@keyframes slideOutDown { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + animation-name: slideOutDown; +} + +@keyframes slideOutLeft { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + animation-name: slideOutLeft; +} + +@keyframes slideOutRight { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + animation-name: slideOutRight; +} + +@keyframes slideOutUp { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + animation-name: slideOutUp; +} diff --git a/public/assets/js/bootstrap-datetimepicker.js b/public/assets/js/bootstrap-datetimepicker.js new file mode 100644 index 0000000..e958e00 --- /dev/null +++ b/public/assets/js/bootstrap-datetimepicker.js @@ -0,0 +1,1770 @@ +/* ========================================================= + * bootstrap-datetimepicker.js + * ========================================================= + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Improvements by Sébastien Malot + * Improvements by Yun Lai + * Project URL : http://www.malot.fr/bootstrap-datetimepicker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +/* + * Improvement by CuGBabyBeaR @ 2013-09-12 + * + * Make it work in bootstrap v3 + */ + +!function ($) { + + function UTCDate() { + return new Date(Date.UTC.apply(Date, arguments)); + } + + function UTCToday() { + var today = new Date(); + return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate(), today.getUTCHours(), today.getUTCMinutes(), today.getUTCSeconds(), 0); + } + + // Picker object + + var Datetimepicker = function (element, options) { + var that = this; + + this.element = $(element); + + // add container for single page application + // when page switch the datetimepicker div will be removed also. + this.container = options.container || 'body'; + + this.language = options.language || this.element.data('date-language') || "en"; + this.language = this.language in dates ? this.language : "en"; + this.isRTL = dates[this.language].rtl || false; + this.formatType = options.formatType || this.element.data('format-type') || 'standard'; + this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType); + this.isInline = false; + this.isVisible = false; + this.isInput = this.element.is('input'); + + + this.bootcssVer = this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ); + + this.component = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar').parent()) : false; + this.componentReset = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-remove').parent() : this.element.find('.add-on .icon-remove').parent()) : false; + this.hasInput = this.component && this.element.find('input').length; + if (this.component && this.component.length === 0) { + this.component = false; + } + this.linkField = options.linkField || this.element.data('link-field') || false; + this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType); + this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5; + this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right'; + this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false; + this.initialDate = options.initialDate || new Date(); + + this._attachEvents(); + + this.formatViewType = "datetime"; + if ('formatViewType' in options) { + this.formatViewType = options.formatViewType; + } else if ('formatViewType' in this.element.data()) { + this.formatViewType = this.element.data('formatViewType'); + } + + this.minView = 0; + if ('minView' in options) { + this.minView = options.minView; + } else if ('minView' in this.element.data()) { + this.minView = this.element.data('min-view'); + } + this.minView = DPGlobal.convertViewMode(this.minView); + + this.maxView = DPGlobal.modes.length - 1; + if ('maxView' in options) { + this.maxView = options.maxView; + } else if ('maxView' in this.element.data()) { + this.maxView = this.element.data('max-view'); + } + this.maxView = DPGlobal.convertViewMode(this.maxView); + + this.wheelViewModeNavigation = false; + if ('wheelViewModeNavigation' in options) { + this.wheelViewModeNavigation = options.wheelViewModeNavigation; + } else if ('wheelViewModeNavigation' in this.element.data()) { + this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation'); + } + + this.wheelViewModeNavigationInverseDirection = false; + + if ('wheelViewModeNavigationInverseDirection' in options) { + this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection; + } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) { + this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir'); + } + + this.wheelViewModeNavigationDelay = 100; + if ('wheelViewModeNavigationDelay' in options) { + this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay; + } else if ('wheelViewModeNavigationDelay' in this.element.data()) { + this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay'); + } + + this.startViewMode = 2; + if ('startView' in options) { + this.startViewMode = options.startView; + } else if ('startView' in this.element.data()) { + this.startViewMode = this.element.data('start-view'); + } + this.startViewMode = DPGlobal.convertViewMode(this.startViewMode); + this.viewMode = this.startViewMode; + + this.viewSelect = this.minView; + if ('viewSelect' in options) { + this.viewSelect = options.viewSelect; + } else if ('viewSelect' in this.element.data()) { + this.viewSelect = this.element.data('view-select'); + } + this.viewSelect = DPGlobal.convertViewMode(this.viewSelect); + + this.forceParse = true; + if ('forceParse' in options) { + this.forceParse = options.forceParse; + } else if ('dateForceParse' in this.element.data()) { + this.forceParse = this.element.data('date-force-parse'); + } + + this.picker = $((this.bootcssVer == 3) ? DPGlobal.templateV3 : DPGlobal.template) + .appendTo(this.isInline ? this.element : this.container) // 'body') + .on({ + click: $.proxy(this.click, this), + mousedown: $.proxy(this.mousedown, this) + }); + + if (this.wheelViewModeNavigation) { + if ($.fn.mousewheel) { + this.picker.on({mousewheel: $.proxy(this.mousewheel, this)}); + } else { + console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option"); + } + } + + if (this.isInline) { + this.picker.addClass('datetimepicker-inline'); + } else { + this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu'); + } + if (this.isRTL) { + this.picker.addClass('datetimepicker-rtl'); + if (this.bootcssVer == 3) { + this.picker.find('.prev span, .next span') + .toggleClass('glyphicon-arrow-left glyphicon-arrow-right'); + } else { + this.picker.find('.prev i, .next i') + .toggleClass('icon-arrow-left icon-arrow-right'); + } + ; + + } + $(document).on('mousedown', function (e) { + // Clicked outside the datetimepicker, hide it + if ($(e.target).closest('.datetimepicker').length === 0) { + that.hide(); + } + }); + + this.autoclose = false; + if ('autoclose' in options) { + this.autoclose = options.autoclose; + } else if ('dateAutoclose' in this.element.data()) { + this.autoclose = this.element.data('date-autoclose'); + } + + this.keyboardNavigation = true; + if ('keyboardNavigation' in options) { + this.keyboardNavigation = options.keyboardNavigation; + } else if ('dateKeyboardNavigation' in this.element.data()) { + this.keyboardNavigation = this.element.data('date-keyboard-navigation'); + } + + this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false); + this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false); + + this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7); + this.weekEnd = ((this.weekStart + 6) % 7); + this.startDate = -Infinity; + this.endDate = Infinity; + this.daysOfWeekDisabled = []; + this.setStartDate(options.startDate || this.element.data('date-startdate')); + this.setEndDate(options.endDate || this.element.data('date-enddate')); + this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled')); + this.fillDow(); + this.fillMonths(); + this.update(); + this.showMode(); + + if (this.isInline) { + this.show(); + } + }; + + Datetimepicker.prototype = { + constructor: Datetimepicker, + + _events: [], + _attachEvents: function () { + this._detachEvents(); + if (this.isInput) { // single input + this._events = [ + [this.element, { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }] + ]; + } + else if (this.component && this.hasInput) { // component: input + button + this._events = [ + // For components that are not readonly, allow keyboard nav + [this.element.find('input'), { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }], + [this.component, { + click: $.proxy(this.show, this) + }] + ]; + if (this.componentReset) { + this._events.push([ + this.componentReset, + {click: $.proxy(this.reset, this)} + ]); + } + } + else if (this.element.is('div')) { // inline datetimepicker + this.isInline = true; + } + else { + this._events = [ + [this.element, { + click: $.proxy(this.show, this) + }] + ]; + } + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.on(ev); + } + }, + + _detachEvents: function () { + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.off(ev); + } + this._events = []; + }, + + show: function (e) { + this.picker.show(); + this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); + if (this.forceParse) { + this.update(); + } + this.place(); + $(window).on('resize', $.proxy(this.place, this)); + if (e) { + e.stopPropagation(); + e.preventDefault(); + } + this.isVisible = true; + this.element.trigger({ + type: 'show', + date: this.date + }); + }, + + hide: function (e) { + if (!this.isVisible) return; + if (this.isInline) return; + this.picker.hide(); + $(window).off('resize', this.place); + this.viewMode = this.startViewMode; + this.showMode(); + if (!this.isInput) { + $(document).off('mousedown', this.hide); + } + + if ( + this.forceParse && + ( + this.isInput && this.element.val() || + this.hasInput && this.element.find('input').val() + ) + ) + this.setValue(); + this.isVisible = false; + this.element.trigger({ + type: 'hide', + date: this.date + }); + }, + + remove: function () { + this._detachEvents(); + this.picker.remove(); + delete this.picker; + delete this.element.data().datetimepicker; + }, + + getDate: function () { + var d = this.getUTCDate(); + return new Date(d.getTime() + (d.getTimezoneOffset() * 60000)); + }, + + getUTCDate: function () { + return this.date; + }, + + setDate: function (d) { + this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000))); + }, + + setUTCDate: function (d) { + if (d >= this.startDate && d <= this.endDate) { + this.date = d; + this.setValue(); + this.viewDate = this.date; + this.fill(); + } else { + this.element.trigger({ + type: 'outOfRange', + date: d, + startDate: this.startDate, + endDate: this.endDate + }); + } + }, + + setFormat: function (format) { + this.format = DPGlobal.parseFormat(format, this.formatType); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element && element.val()) { + this.setValue(); + } + }, + + setValue: function () { + var formatted = this.getFormattedDate(); + if (!this.isInput) { + if (this.component) { + this.element.find('input').val(formatted); + } + this.element.data('date', formatted); + } else { + this.element.val(formatted); + } + if (this.linkField) { + $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat)); + } + }, + + getFormattedDate: function (format) { + if (format == undefined) format = this.format; + return DPGlobal.formatDate(this.date, format, this.language, this.formatType); + }, + + setStartDate: function (startDate) { + this.startDate = startDate || -Infinity; + if (this.startDate !== -Infinity) { + this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType); + } + this.update(); + this.updateNavArrows(); + }, + + setEndDate: function (endDate) { + this.endDate = endDate || Infinity; + if (this.endDate !== Infinity) { + this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType); + } + this.update(); + this.updateNavArrows(); + }, + + setDaysOfWeekDisabled: function (daysOfWeekDisabled) { + this.daysOfWeekDisabled = daysOfWeekDisabled || []; + if (!$.isArray(this.daysOfWeekDisabled)) { + this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/); + } + this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + place: function () { + if (this.isInline) return; + + var index_highest = 0; + $('div').each(function () { + var index_current = parseInt($(this).css("zIndex"), 10); + if (index_current > index_highest) { + index_highest = index_current; + } + }); + var zIndex = index_highest + 10; + + var offset, top, left, containerOffset; + if (this.container instanceof $) { + containerOffset = this.container.offset(); + } else { + containerOffset = $(this.container).offset(); + } + + if (this.component) { + offset = this.component.offset(); + left = offset.left; + if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') { + left += this.component.outerWidth() - this.picker.outerWidth(); + } + } else { + offset = this.element.offset(); + left = offset.left; + } + + if(left+220 > document.body.clientWidth){ + left = document.body.clientWidth-220; + } + + if (this.pickerPosition == 'top-left' || this.pickerPosition == 'top-right') { + top = offset.top - this.picker.outerHeight(); + } else { + top = offset.top + this.height; + } + + top = top - containerOffset.top; + left = left - containerOffset.left; + + this.picker.css({ + top: top, + left: left, + zIndex: zIndex + }); + }, + + update: function () { + var date, fromArgs = false; + if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) { + date = arguments[0]; + fromArgs = true; + } else { + date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate; + if (typeof date == 'string' || date instanceof String) { + date = date.replace(/^\s+|\s+$/g,''); + } + } + + if (!date) { + date = new Date(); + fromArgs = false; + } + + this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType); + + if (fromArgs) this.setValue(); + + if (this.date < this.startDate) { + this.viewDate = new Date(this.startDate); + } else if (this.date > this.endDate) { + this.viewDate = new Date(this.endDate); + } else { + this.viewDate = new Date(this.date); + } + this.fill(); + }, + + fillDow: function () { + var dowCnt = this.weekStart, + html = ''; + while (dowCnt < this.weekStart + 7) { + html += '' + dates[this.language].daysMin[(dowCnt++) % 7] + ''; + } + html += ''; + this.picker.find('.datetimepicker-days thead').append(html); + }, + + fillMonths: function () { + var html = '', + i = 0; + while (i < 12) { + html += '' + dates[this.language].monthsShort[i++] + ''; + } + this.picker.find('.datetimepicker-months td').html(html); + }, + + fill: function () { + if (this.date == null || this.viewDate == null) { + return; + } + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + dayMonth = d.getUTCDate(), + hours = d.getUTCHours(), + minutes = d.getUTCMinutes(), + startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, + startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity, + endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, + endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() : Infinity, + currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), + today = new Date(); + this.picker.find('.datetimepicker-days thead th:eq(1)') + .text(dates[this.language].months[month] + ' ' + year); + if (this.formatViewType == "time") { + var hourConverted = hours % 12 ? hours % 12 : 12; + var hoursDisplay = (hourConverted < 10 ? '0' : '') + hourConverted; + var minutesDisplay = (minutes < 10 ? '0' : '') + minutes; + var meridianDisplay = dates[this.language].meridiem[hours < 12 ? 0 : 1]; + this.picker.find('.datetimepicker-hours thead th:eq(1)') + .text(hoursDisplay + ':' + minutesDisplay + ' ' + (meridianDisplay ? meridianDisplay.toUpperCase() : '')); + this.picker.find('.datetimepicker-minutes thead th:eq(1)') + .text(hoursDisplay + ':' + minutesDisplay + ' ' + (meridianDisplay ? meridianDisplay.toUpperCase() : '')); + } else { + this.picker.find('.datetimepicker-hours thead th:eq(1)') + .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + this.picker.find('.datetimepicker-minutes thead th:eq(1)') + .text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + } + this.picker.find('tfoot th.today') + .text(dates[this.language].today) + .toggle(this.todayBtn !== false); + this.updateNavArrows(); + this.fillMonths(); + /*var prevMonth = UTCDate(year, month, 0,0,0,0,0); + prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/ + var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0), + day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); + prevMonth.setUTCDate(day); + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7); + var nextMonth = new Date(prevMonth); + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); + nextMonth = nextMonth.valueOf(); + var html = []; + var clsName; + while (prevMonth.valueOf() < nextMonth) { + if (prevMonth.getUTCDay() == this.weekStart) { + html.push(''); + } + clsName = ''; + if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) { + clsName += ' old'; + } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) { + clsName += ' new'; + } + // Compare internal UTC date with local today, not UTC today + if (this.todayHighlight && + prevMonth.getUTCFullYear() == today.getFullYear() && + prevMonth.getUTCMonth() == today.getMonth() && + prevMonth.getUTCDate() == today.getDate()) { + clsName += ' today'; + } + if (prevMonth.valueOf() == currentDate) { + clsName += ' active'; + } + if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate || + $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1) { + clsName += ' disabled'; + } + html.push('' + prevMonth.getUTCDate() + ''); + if (prevMonth.getUTCDay() == this.weekEnd) { + html.push(''); + } + prevMonth.setUTCDate(prevMonth.getUTCDate() + 1); + } + this.picker.find('.datetimepicker-days tbody').empty().append(html.join('')); + + html = []; + var txt = '', meridian = '', meridianOld = ''; + for (var i = 0; i < 24; i++) { + var actual = UTCDate(year, month, dayMonth, i); + clsName = ''; + // We want the previous hour for the startDate + if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) { + clsName += ' disabled'; + } else if (hours == i) { + clsName += ' active'; + } + if (this.showMeridian && dates[this.language].meridiem.length == 2) { + meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian != meridianOld) { + if (meridianOld != '') { + html.push(''); + } + html.push('
    ' + meridian.toUpperCase() + ''); + } + meridianOld = meridian; + txt = (i % 12 ? i % 12 : 12); + html.push('' + txt + ''); + if (i == 23) { + html.push('
    '); + } + } else { + txt = i + ':00'; + html.push('' + txt + ''); + } + } + this.picker.find('.datetimepicker-hours td').html(html.join('')); + + html = []; + txt = '', meridian = '', meridianOld = ''; + for (var i = 0; i < 60; i += this.minuteStep) { + var actual = UTCDate(year, month, dayMonth, hours, i, 0); + clsName = ''; + if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) { + clsName += ' disabled'; + } else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) { + clsName += ' active'; + } + if (this.showMeridian && dates[this.language].meridiem.length == 2) { + meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian != meridianOld) { + if (meridianOld != '') { + html.push(''); + } + html.push('
    ' + meridian.toUpperCase() + ''); + } + meridianOld = meridian; + txt = (hours % 12 ? hours % 12 : 12); + //html.push(''+txt+''); + html.push('' + txt + ':' + (i < 10 ? '0' + i : i) + ''); + if (i == 59) { + html.push('
    '); + } + } else { + txt = i + ':00'; + //html.push(''+txt+''); + html.push('' + hours + ':' + (i < 10 ? '0' + i : i) + ''); + } + } + this.picker.find('.datetimepicker-minutes td').html(html.join('')); + + var currentYear = this.date.getUTCFullYear(); + var months = this.picker.find('.datetimepicker-months') + .find('th:eq(1)') + .text(year) + .end() + .find('span').removeClass('active'); + if (currentYear == year) { + months.eq(this.date.getUTCMonth()).addClass('active'); + } + if (year < startYear || year > endYear) { + months.addClass('disabled'); + } + if (year == startYear) { + months.slice(0, startMonth).addClass('disabled'); + } + if (year == endYear) { + months.slice(endMonth + 1).addClass('disabled'); + } + + html = ''; + year = parseInt(year / 10, 10) * 10; + var yearCont = this.picker.find('.datetimepicker-years') + .find('th:eq(1)') + .text(year + '-' + (year + 9)) + .end() + .find('td'); + year -= 1; + for (var i = -1; i < 11; i++) { + html += '' + year + ''; + year += 1; + } + yearCont.html(html); + this.place(); + }, + + updateNavArrows: function () { + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + day = d.getUTCDate(), + hour = d.getUTCHours(); + switch (this.viewMode) { + case 0: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate() + && hour <= this.startDate.getUTCHours()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate() + && hour >= this.endDate.getUTCHours()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 1: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 2: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 3: + case 4: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + } + }, + + mousewheel: function (e) { + + e.preventDefault(); + e.stopPropagation(); + + if (this.wheelPause) { + return; + } + + this.wheelPause = true; + + var originalEvent = e.originalEvent; + + var delta = originalEvent.wheelDelta; + + var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1; + + if (this.wheelViewModeNavigationInverseDirection) { + mode = -mode; + } + + this.showMode(mode); + + setTimeout($.proxy(function () { + + this.wheelPause = false + + }, this), this.wheelViewModeNavigationDelay); + + }, + + click: function (e) { + e.stopPropagation(); + e.preventDefault(); + var target = $(e.target).closest('span, td, th, legend'); + if (target.is('.glyphicon')) { + target = $(target).parent().closest('span, td, th, legend'); + } + if (target.length == 1) { + if (target.is('.disabled')) { + this.element.trigger({ + type: 'outOfRange', + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + return; + } + switch (target[0].nodeName.toLowerCase()) { + case 'th': + switch (target[0].className) { + case 'switch': + this.showMode(1); + break; + case 'prev': + case 'next': + var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1); + switch (this.viewMode) { + case 0: + this.viewDate = this.moveHour(this.viewDate, dir); + break; + case 1: + this.viewDate = this.moveDate(this.viewDate, dir); + break; + case 2: + this.viewDate = this.moveMonth(this.viewDate, dir); + break; + case 3: + case 4: + this.viewDate = this.moveYear(this.viewDate, dir); + break; + } + this.fill(); + this.element.trigger({ + type: target[0].className + ':' + this.convertViewModeText(this.viewMode), + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + break; + case 'today': + var date = new Date(); + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0); + + // Respect startDate and endDate. + if (date < this.startDate) date = this.startDate; + else if (date > this.endDate) date = this.endDate; + + this.viewMode = this.startViewMode; + this.showMode(0); + this._setDate(date); + this.fill(); + if (this.autoclose) { + this.hide(); + } + break; + } + break; + case 'span': + if (!target.is('.disabled')) { + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + day = this.viewDate.getUTCDate(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + + if (target.is('.month')) { + this.viewDate.setUTCDate(1); + month = target.parent().find('span').index(target); + day = this.viewDate.getUTCDate(); + this.viewDate.setUTCMonth(month); + this.element.trigger({ + type: 'changeMonth', + date: this.viewDate + }); + if (this.viewSelect >= 3) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.year')) { + this.viewDate.setUTCDate(1); + year = parseInt(target.text(), 10) || 0; + this.viewDate.setUTCFullYear(year); + this.element.trigger({ + type: 'changeYear', + date: this.viewDate + }); + if (this.viewSelect >= 4) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.hour')) { + hours = parseInt(target.text(), 10) || 0; + if (target.hasClass('hour_am') || target.hasClass('hour_pm')) { + if (hours == 12 && target.hasClass('hour_am')) { + hours = 0; + } else if (hours != 12 && target.hasClass('hour_pm')) { + hours += 12; + } + } + this.viewDate.setUTCHours(hours); + this.element.trigger({ + type: 'changeHour', + date: this.viewDate + }); + if (this.viewSelect >= 1) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.minute')) { + minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0; + this.viewDate.setUTCMinutes(minutes); + this.element.trigger({ + type: 'changeMinute', + date: this.viewDate + }); + if (this.viewSelect >= 0) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + if (this.viewMode != 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + } + break; + case 'td': + if (target.is('.day') && !target.is('.disabled')) { + var day = parseInt(target.text(), 10) || 1; + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + if (target.is('.old')) { + if (month === 0) { + month = 11; + year -= 1; + } else { + month -= 1; + } + } else if (target.is('.new')) { + if (month == 11) { + month = 0; + year += 1; + } else { + month += 1; + } + } + this.viewDate.setUTCFullYear(year); + this.viewDate.setUTCMonth(month, day); + this.element.trigger({ + type: 'changeDay', + date: this.viewDate + }); + if (this.viewSelect >= 2) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + break; + } + } + }, + + _setDate: function (date, which) { + if (!which || which == 'date') + this.date = date; + if (!which || which == 'view') + this.viewDate = date; + this.fill(); + this.setValue(); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + if (this.autoclose && (!which || which == 'date')) { + //this.hide(); + } + } + this.element.trigger({ + type: 'changeDate', + date: this.date + }); + }, + + moveMinute: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep)); + return new_date; + }, + + moveHour: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCHours(new_date.getUTCHours() + dir); + return new_date; + }, + + moveDate: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCDate(new_date.getUTCDate() + dir); + return new_date; + }, + + moveMonth: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()), + day = new_date.getUTCDate(), + month = new_date.getUTCMonth(), + mag = Math.abs(dir), + new_month, test; + dir = dir > 0 ? 1 : -1; + if (mag == 1) { + test = dir == -1 + // If going back one month, make sure month is not current month + // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) + ? function () { + return new_date.getUTCMonth() == month; + } + // If going forward one month, make sure month is as expected + // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) + : function () { + return new_date.getUTCMonth() != new_month; + }; + new_month = month + dir; + new_date.setUTCMonth(new_month); + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 + if (new_month < 0 || new_month > 11) + new_month = (new_month + 12) % 12; + } else { + // For magnitudes >1, move one month at a time... + for (var i = 0; i < mag; i++) + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... + new_date = this.moveMonth(new_date, dir); + // ...then reset the day, keeping it in the new month + new_month = new_date.getUTCMonth(); + new_date.setUTCDate(day); + test = function () { + return new_month != new_date.getUTCMonth(); + }; + } + // Common date-resetting loop -- if date is beyond end of month, make it + // end of month + while (test()) { + new_date.setUTCDate(--day); + new_date.setUTCMonth(new_month); + } + return new_date; + }, + + moveYear: function (date, dir) { + return this.moveMonth(date, dir * 12); + }, + + dateWithinRange: function (date) { + return date >= this.startDate && date <= this.endDate; + }, + + keydown: function (e) { + if (this.picker.is(':not(:visible)')) { + if (e.keyCode == 27) // allow escape to hide and re-show picker + this.show(); + return; + } + var dateChanged = false, + dir, day, month, + newDate, newViewDate; + switch (e.keyCode) { + case 27: // escape + this.hide(); + e.preventDefault(); + break; + case 37: // left + case 39: // right + if (!this.keyboardNavigation) break; + dir = e.keyCode == 37 ? -1 : 1; + viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode == 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode == 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode == 2) { + newDate = this.moveDate(this.date, dir); + newViewDate = this.moveDate(this.viewDate, dir); + } else if (viewMode == 1) { + newDate = this.moveHour(this.date, dir); + newViewDate = this.moveHour(this.viewDate, dir); + } else if (viewMode == 0) { + newDate = this.moveMinute(this.date, dir); + newViewDate = this.moveMinute(this.viewDate, dir); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 38: // up + case 40: // down + if (!this.keyboardNavigation) break; + dir = e.keyCode == 38 ? -1 : 1; + viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode == 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode == 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode == 2) { + newDate = this.moveDate(this.date, dir * 7); + newViewDate = this.moveDate(this.viewDate, dir * 7); + } else if (viewMode == 1) { + if (this.showMeridian) { + newDate = this.moveHour(this.date, dir * 6); + newViewDate = this.moveHour(this.viewDate, dir * 6); + } else { + newDate = this.moveHour(this.date, dir * 4); + newViewDate = this.moveHour(this.viewDate, dir * 4); + } + } else if (viewMode == 0) { + newDate = this.moveMinute(this.date, dir * 4); + newViewDate = this.moveMinute(this.viewDate, dir * 4); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 13: // enter + if (this.viewMode != 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + e.preventDefault(); + break; + case 9: // tab + this.hide(); + break; + } + if (dateChanged) { + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + } + this.element.trigger({ + type: 'changeDate', + date: this.date + }); + } + }, + + showMode: function (dir) { + if (dir) { + var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir)); + if (newViewMode >= this.minView && newViewMode <= this.maxView) { + this.element.trigger({ + type: 'changeMode', + date: this.viewDate, + oldViewMode: this.viewMode, + newViewMode: newViewMode + }); + + this.viewMode = newViewMode; + } + } + /* + vitalets: fixing bug of very special conditions: + jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover. + Method show() does not set display css correctly and datetimepicker is not shown. + Changed to .css('display', 'block') solve the problem. + See https://github.com/vitalets/x-editable/issues/37 + + In jquery 1.7.2+ everything works fine. + */ + //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); + this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block'); + this.updateNavArrows(); + }, + + reset: function (e) { + this._setDate(null, 'date'); + }, + + convertViewModeText: function (viewMode) { + switch (viewMode) { + case 4: + return 'decade'; + case 3: + return 'year'; + case 2: + return 'month'; + case 1: + return 'day'; + case 0: + return 'hour'; + } + } + }; + + $.fn.datetimepicker = function (option) { + var args = Array.apply(null, arguments); + args.shift(); + var internal_return; + this.each(function () { + var $this = $(this), + data = $this.data('datetimepicker'), + options = typeof option == 'object' && option; + if (!data) { + $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options)))); + } + if (typeof option == 'string' && typeof data[option] == 'function') { + internal_return = data[option].apply(data, args); + if (internal_return !== undefined) { + return false; + } + } + }); + if (internal_return !== undefined) + return internal_return; + else + return this; + }; + + $.fn.datetimepicker.defaults = { + }; + $.fn.datetimepicker.Constructor = Datetimepicker; + var dates = $.fn.datetimepicker.dates = { + en: { + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + meridiem: ["am", "pm"], + suffix: ["st", "nd", "rd", "th"], + today: "Today" + } + }; + + var DPGlobal = { + modes: [ + { + clsName: 'minutes', + navFnc: 'Hours', + navStep: 1 + }, + { + clsName: 'hours', + navFnc: 'Date', + navStep: 1 + }, + { + clsName: 'days', + navFnc: 'Month', + navStep: 1 + }, + { + clsName: 'months', + navFnc: 'FullYear', + navStep: 1 + }, + { + clsName: 'years', + navFnc: 'FullYear', + navStep: 10 + } + ], + isLeapYear: function (year) { + return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) + }, + getDaysInMonth: function (year, month) { + return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] + }, + getDefaultFormat: function (type, field) { + if (type == "standard") { + if (field == 'input') + return 'yyyy-mm-dd hh:ii'; + else + return 'yyyy-mm-dd hh:ii:ss'; + } else if (type == "php") { + if (field == 'input') + return 'Y-m-d H:i'; + else + return 'Y-m-d H:i:s'; + } else { + throw new Error("Invalid format type."); + } + }, + validParts: function (type) { + if (type == "standard") { + return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g; + } else if (type == "php") { + return /[dDjlNwzFmMnStyYaABgGhHis]/g; + } else { + throw new Error("Invalid format type."); + } + }, + nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, + parseFormat: function (format, type) { + // IE treats \0 as a string end in inputs (truncating the value), + // so it's a bad format delimiter, anyway + var separators = format.replace(this.validParts(type), '\0').split('\0'), + parts = format.match(this.validParts(type)); + if (!separators || !separators.length || !parts || parts.length == 0) { + throw new Error("Invalid date format."); + } + return {separators: separators, parts: parts}; + }, + parseDate: function (date, format, language, type) { + if (date instanceof Date) { + var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000); + dateUTC.setMilliseconds(0); + return dateUTC; + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type); + } + if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) { + var part_re = /([-+]\d+)([dmwy])/, + parts = date.match(/([-+]\d+)([dmwy])/g), + part, dir; + date = new Date(); + for (var i = 0; i < parts.length; i++) { + part = part_re.exec(parts[i]); + dir = parseInt(part[1]); + switch (part[2]) { + case 'd': + date.setUTCDate(date.getUTCDate() + dir); + break; + case 'm': + date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir); + break; + case 'w': + date.setUTCDate(date.getUTCDate() + dir * 7); + break; + case 'y': + date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir); + break; + } + } + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0); + } + var parts = date && date.match(this.nonpunctuation) || [], + date = new Date(0, 0, 0, 0, 0, 0, 0), + parsed = {}, + setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P'], + setters_map = { + hh: function (d, v) { + return d.setUTCHours(v); + }, + h: function (d, v) { + return d.setUTCHours(v); + }, + HH: function (d, v) { + return d.setUTCHours(v == 12 ? 0 : v); + }, + H: function (d, v) { + return d.setUTCHours(v == 12 ? 0 : v); + }, + ii: function (d, v) { + return d.setUTCMinutes(v); + }, + i: function (d, v) { + return d.setUTCMinutes(v); + }, + ss: function (d, v) { + return d.setUTCSeconds(v); + }, + s: function (d, v) { + return d.setUTCSeconds(v); + }, + yyyy: function (d, v) { + return d.setUTCFullYear(v); + }, + yy: function (d, v) { + return d.setUTCFullYear(2000 + v); + }, + m: function (d, v) { + v -= 1; + while (v < 0) v += 12; + v %= 12; + d.setUTCMonth(v); + while (d.getUTCMonth() != v) + if (isNaN(d.getUTCMonth())) + return d; + else + d.setUTCDate(d.getUTCDate() - 1); + return d; + }, + d: function (d, v) { + return d.setUTCDate(v); + }, + p: function (d, v) { + return d.setUTCHours(v == 1 ? d.getUTCHours() + 12 : d.getUTCHours()); + } + }, + val, filtered, part; + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; + setters_map['dd'] = setters_map['d']; + setters_map['P'] = setters_map['p']; + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()); + if (parts.length == format.parts.length) { + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + val = parseInt(parts[i], 10); + part = format.parts[i]; + if (isNaN(val)) { + switch (part) { + case 'MM': + filtered = $(dates[language].months).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m == p; + }); + val = $.inArray(filtered[0], dates[language].months) + 1; + break; + case 'M': + filtered = $(dates[language].monthsShort).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m.toLowerCase() == p.toLowerCase(); + }); + val = $.inArray(filtered[0], dates[language].monthsShort) + 1; + break; + case 'p': + case 'P': + val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem); + break; + } + } + parsed[part] = val; + } + for (var i = 0, s; i < setters_order.length; i++) { + s = setters_order[i]; + if (s in parsed && !isNaN(parsed[s])) + setters_map[s](date, parsed[s]) + } + } + return date; + }, + formatDate: function (date, format, language, type) { + if (date == null) { + return ''; + } + var val; + if (type == 'standard') { + val = { + // year + yy: date.getUTCFullYear().toString().substring(2), + yyyy: date.getUTCFullYear(), + // month + m: date.getUTCMonth() + 1, + M: dates[language].monthsShort[date.getUTCMonth()], + MM: dates[language].months[date.getUTCMonth()], + // day + d: date.getUTCDate(), + D: dates[language].daysShort[date.getUTCDay()], + DD: dates[language].days[date.getUTCDay()], + p: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + // hour + h: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds() + }; + + if (dates[language].meridiem.length == 2) { + val.H = (val.h % 12 == 0 ? 12 : val.h % 12); + } + else { + val.H = val.h; + } + val.HH = (val.H < 10 ? '0' : '') + val.H; + val.P = val.p.toUpperCase(); + val.hh = (val.h < 10 ? '0' : '') + val.h; + val.ii = (val.i < 10 ? '0' : '') + val.i; + val.ss = (val.s < 10 ? '0' : '') + val.s; + val.dd = (val.d < 10 ? '0' : '') + val.d; + val.mm = (val.m < 10 ? '0' : '') + val.m; + } else if (type == 'php') { + // php format + val = { + // year + y: date.getUTCFullYear().toString().substring(2), + Y: date.getUTCFullYear(), + // month + F: dates[language].months[date.getUTCMonth()], + M: dates[language].monthsShort[date.getUTCMonth()], + n: date.getUTCMonth() + 1, + t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()), + // day + j: date.getUTCDate(), + l: dates[language].days[date.getUTCDay()], + D: dates[language].daysShort[date.getUTCDay()], + w: date.getUTCDay(), // 0 -> 6 + N: (date.getUTCDay() == 0 ? 7 : date.getUTCDay()), // 1 -> 7 + S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''), + // hour + a: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + g: (date.getUTCHours() % 12 == 0 ? 12 : date.getUTCHours() % 12), + G: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds() + }; + val.m = (val.n < 10 ? '0' : '') + val.n; + val.d = (val.j < 10 ? '0' : '') + val.j; + val.A = val.a.toString().toUpperCase(); + val.h = (val.g < 10 ? '0' : '') + val.g; + val.H = (val.G < 10 ? '0' : '') + val.G; + val.i = (val.i < 10 ? '0' : '') + val.i; + val.s = (val.s < 10 ? '0' : '') + val.s; + } else { + throw new Error("Invalid format type."); + } + var date = [], + seps = $.extend([], format.separators); + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + if (seps.length) { + date.push(seps.shift()); + } + date.push(val[format.parts[i]]); + } + if (seps.length) { + date.push(seps.shift()); + } + return date.join(''); + }, + convertViewMode: function (viewMode) { + switch (viewMode) { + case 4: + case 'decade': + viewMode = 4; + break; + case 3: + case 'year': + viewMode = 3; + break; + case 2: + case 'month': + viewMode = 2; + break; + case 1: + case 'day': + viewMode = 1; + break; + case 0: + case 'hour': + viewMode = 0; + break; + } + + return viewMode; + }, + headTemplate: '' + + '' + + '' + + '' + + '' + + '' + + '', + headTemplateV3: '' + + '' + + ' ' + + '' + + ' ' + + '' + + '', + contTemplate: '', + footTemplate: '' + }; + DPGlobal.template = '
    ' + + '
    ' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplate + + '' + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    '; + DPGlobal.templateV3 = '
    ' + + '
    ' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplateV3 + + '' + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    ' + + '' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '
    ' + + '
    ' + + '
    '; + $.fn.datetimepicker.DPGlobal = DPGlobal; + + /* DATETIMEPICKER NO CONFLICT + * =================== */ + + $.fn.datetimepicker.noConflict = function () { + $.fn.datetimepicker = old; + return this; + }; + + /* DATETIMEPICKER DATA-API + * ================== */ + + $(document).on( + 'focus.datetimepicker.data-api click.datetimepicker.data-api', + '[data-provide="datetimepicker"]', + function (e) { + var $this = $(this); + if ($this.data('datetimepicker')) return; + e.preventDefault(); + // component click requires us to explicitly show it + $this.datetimepicker('show'); + } + ); + $(function () { + $('[data-provide="datetimepicker-inline"]').datetimepicker(); + }); + +}(window.jQuery); + +/** + * Simplified Chinese translation for bootstrap-datetimepicker + * Yuan Cheung + */ +;(function($){ + $.fn.datetimepicker.dates['zh-CN'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今日", + suffix: [], + meridiem: ["上午", "下午"], + format: "yyyy-mm-dd" /*控制显示格式*/ + }; +}(jQuery)); diff --git a/public/assets/js/bootstrap-editable.js b/public/assets/js/bootstrap-editable.js new file mode 100644 index 0000000..a255366 --- /dev/null +++ b/public/assets/js/bootstrap-editable.js @@ -0,0 +1,6898 @@ +/*! X-editable - v1.5.3 +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery +* http://github.com/vitalets/x-editable +* Copyright (c) 2019 Vitaliy Potapov; Licensed MIT */ +/** +Form with single input element, two buttons and two states: normal/loading. +Applied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown. +Editableform is linked with one of input types, e.g. 'text', 'select' etc. + +@class editableform +@uses text +@uses textarea +**/ +(function ($) { + "use strict"; + + var EditableForm = function (div, options) { + this.options = $.extend({}, $.fn.editableform.defaults, options); + this.$div = $(div); //div, containing form. Not form tag. Not editable-element. + if(!this.options.scope) { + this.options.scope = this; + } + //nothing shown after init + }; + + EditableForm.prototype = { + constructor: EditableForm, + initInput: function() { //called once + //take input from options (as it is created in editable-element) + this.input = this.options.input; + + //set initial value + //todo: may be add check: typeof str === 'string' ? + this.value = this.input.str2value(this.options.value); + + //prerender: get input.$input + this.input.prerender(); + }, + initTemplate: function() { + this.$form = $($.fn.editableform.template); + }, + initButtons: function() { + var $btn = this.$form.find('.editable-buttons'); + $btn.append($.fn.editableform.buttons); + if(this.options.showbuttons === 'bottom') { + $btn.addClass('editable-buttons-bottom'); + } + }, + /** + Renders editableform + + @method render + **/ + render: function() { + //init loader + this.$loading = $($.fn.editableform.loading); + this.$div.empty().append(this.$loading); + + //init form template and buttons + this.initTemplate(); + if(this.options.showbuttons) { + this.initButtons(); + } else { + this.$form.find('.editable-buttons').remove(); + } + + //show loading state + this.showLoading(); + + //flag showing is form now saving value to server. + //It is needed to wait when closing form. + this.isSaving = false; + + /** + Fired when rendering starts + @event rendering + @param {Object} event event object + **/ + this.$div.triggerHandler('rendering'); + + //init input + this.initInput(); + + //append input to form + this.$form.find('div.editable-input').append(this.input.$tpl); + + //append form to container + this.$div.append(this.$form); + + //render input + $.when(this.input.render()) + .then($.proxy(function () { + //setup input to submit automatically when no buttons shown + if(!this.options.showbuttons) { + this.input.autosubmit(); + } + + //attach 'cancel' handler + this.$form.find('.editable-cancel').click($.proxy(this.cancel, this)); + + if(this.input.error) { + this.error(this.input.error); + this.$form.find('.editable-submit').attr('disabled', true); + this.input.$input.attr('disabled', true); + //prevent form from submitting + this.$form.submit(function(e){ e.preventDefault(); }); + } else { + this.error(false); + this.input.$input.removeAttr('disabled'); + this.$form.find('.editable-submit').removeAttr('disabled'); + var value = (this.value === null || this.value === undefined || this.value === '') ? this.options.defaultValue : this.value; + this.input.value2input(value); + //attach submit handler + this.$form.submit($.proxy(this.submit, this)); + } + + /** + Fired when form is rendered + @event rendered + @param {Object} event event object + **/ + this.$div.triggerHandler('rendered'); + + this.showForm(); + + //call postrender method to perform actions required visibility of form + if(this.input.postrender) { + this.input.postrender(); + } + }, this)); + }, + cancel: function() { + /** + Fired when form was cancelled by user + @event cancel + @param {Object} event event object + **/ + this.$div.triggerHandler('cancel'); + }, + showLoading: function() { + var w, h; + if(this.$form) { + //set loading size equal to form + w = this.$form.outerWidth(); + h = this.$form.outerHeight(); + if(w) { + this.$loading.width(w); + } + if(h) { + this.$loading.height(h); + } + this.$form.hide(); + } else { + //stretch loading to fill container width + w = this.$loading.parent().width(); + if(w) { + this.$loading.width(w); + } + } + this.$loading.show(); + }, + + showForm: function(activate) { + this.$loading.hide(); + this.$form.show(); + if(activate !== false) { + this.input.activate(); + } + /** + Fired when form is shown + @event show + @param {Object} event event object + **/ + this.$div.triggerHandler('show'); + }, + + error: function(msg) { + var $group = this.$form.find('.control-group'), + $block = this.$form.find('.editable-error-block'), + lines; + + if(msg === false) { + $group.removeClass($.fn.editableform.errorGroupClass); + $block.removeClass($.fn.editableform.errorBlockClass).empty().hide(); + } else { + //convert newline to
    for more pretty error display + if(msg) { + lines = (''+msg).split('\n'); + for (var i = 0; i < lines.length; i++) { + lines[i] = $('
    ').text(lines[i]).html(); + } + msg = lines.join('
    '); + } + $group.addClass($.fn.editableform.errorGroupClass); + $block.addClass($.fn.editableform.errorBlockClass).html(msg).show(); + } + }, + + submit: function(e) { + e.stopPropagation(); + e.preventDefault(); + + //get new value from input + var newValue = this.input.input2value(); + + //validation: if validate returns string or truthy value - means error + //if returns object like {newValue: '...'} => submitted value is reassigned to it + var error = this.validate(newValue); + if ($.type(error) === 'object' && error.newValue !== undefined) { + newValue = error.newValue; + this.input.value2input(newValue); + if(typeof error.msg === 'string') { + this.error(error.msg); + this.showForm(); + return; + } + } else if (error) { + this.error(error); + this.showForm(); + return; + } + + //if value not changed --> trigger 'nochange' event and return + /*jslint eqeq: true*/ + if (!this.options.savenochange && this.input.value2str(newValue) === this.input.value2str(this.value)) { + /*jslint eqeq: false*/ + /** + Fired when value not changed but form is submitted. Requires savenochange = false. + @event nochange + @param {Object} event event object + **/ + this.$div.triggerHandler('nochange'); + return; + } + + //convert value for submitting to server + var submitValue = this.input.value2submit(newValue); + + this.isSaving = true; + + //sending data to server + $.when(this.save(submitValue)) + .done($.proxy(function(response) { + this.isSaving = false; + + //run success callback + var res = typeof this.options.success === 'function' ? this.options.success.call(this.options.scope, response, newValue) : null; + + //if success callback returns false --> keep form open and do not activate input + if(res === false) { + this.error(false); + this.showForm(false); + return; + } + + //if success callback returns string --> keep form open, show error and activate input + if(typeof res === 'string') { + this.error(res); + this.showForm(); + return; + } + + //if success callback returns object like {newValue: } --> use that value instead of submitted + //it is useful if you want to chnage value in url-function + if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) { + newValue = res.newValue; + } + + //clear error message + this.error(false); + this.value = newValue; + /** + Fired when form is submitted + @event save + @param {Object} event event object + @param {Object} params additional params + @param {mixed} params.newValue raw new value + @param {mixed} params.submitValue submitted value as string + @param {Object} params.response ajax response + + @example + $('#form-div').on('save'), function(e, params){ + if(params.newValue === 'username') {...} + }); + **/ + this.$div.triggerHandler('save', {newValue: newValue, submitValue: submitValue, response: response}); + }, this)) + .fail($.proxy(function(xhr) { + this.isSaving = false; + + var msg; + if(typeof this.options.error === 'function') { + msg = this.options.error.call(this.options.scope, xhr, newValue); + } else { + msg = typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!'; + } + + this.error(msg); + this.showForm(); + }, this)); + }, + + save: function(submitValue) { + //try parse composite pk defined as json string in data-pk + this.options.pk = $.fn.editableutils.tryParseJson(this.options.pk, true); + + var pk = (typeof this.options.pk === 'function') ? this.options.pk.call(this.options.scope) : this.options.pk, + /* + send on server in following cases: + 1. url is function + 2. url is string AND (pk defined OR send option = always) + */ + send = !!(typeof this.options.url === 'function' || (this.options.url && ((this.options.send === 'always') || (this.options.send === 'auto' && pk !== null && pk !== undefined)))), + params; + + if (send) { //send to server + this.showLoading(); + + //standard params + params = { + name: this.options.name || '', + value: submitValue, + pk: pk + }; + + //additional params + if(typeof this.options.params === 'function') { + params = this.options.params.call(this.options.scope, params); + } else { + //try parse json in single quotes (from data-params attribute) + this.options.params = $.fn.editableutils.tryParseJson(this.options.params, true); + $.extend(params, this.options.params); + } + + if(typeof this.options.url === 'function') { //user's function + return this.options.url.call(this.options.scope, params); + } else { + //send ajax to server and return deferred object + return $.ajax($.extend({ + url : this.options.url, + data : params, + type : 'POST' + }, this.options.ajaxOptions)); + } + } + }, + + validate: function (value) { + if (value === undefined) { + value = this.value; + } + if (typeof this.options.validate === 'function') { + return this.options.validate.call(this.options.scope, value); + } + }, + + option: function(key, value) { + if(key in this.options) { + this.options[key] = value; + } + + if(key === 'value') { + this.setValue(value); + } + + //do not pass option to input as it is passed in editable-element + }, + + setValue: function(value, convertStr) { + if(convertStr) { + this.value = this.input.str2value(value); + } else { + this.value = value; + } + + //if form is visible, update input + if(this.$form && this.$form.is(':visible')) { + this.input.value2input(this.value); + } + } + }; + + /* + Initialize editableform. Applied to jQuery object. + + @method $().editableform(options) + @params {Object} options + @example + var $form = $('<div>').editableform({ + type: 'text', + name: 'username', + url: '/post', + value: 'vitaliy' + }); + + //to display form you should call 'render' method + $form.editableform('render'); + */ + $.fn.editableform = function (option) { + var args = arguments; + return this.each(function () { + var $this = $(this), + data = $this.data('editableform'), + options = typeof option === 'object' && option; + if (!data) { + $this.data('editableform', (data = new EditableForm(this, options))); + } + + if (typeof option === 'string') { //call method + data[option].apply(data, Array.prototype.slice.call(args, 1)); + } + }); + }; + + //keep link to constructor to allow inheritance + $.fn.editableform.Constructor = EditableForm; + + //defaults + $.fn.editableform.defaults = { + /* see also defaults for input */ + + /** + Type of input. Can be text|textarea|select|date|checklist + + @property type + @type string + @default 'text' + **/ + type: 'text', + /** + Url for submit, e.g. '/post' + If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks. + + @property url + @type string|function + @default null + @example + url: function(params) { + var d = new $.Deferred; + if(params.value === 'abc') { + return d.reject('error message'); //returning error via deferred object + } else { + //async saving data in js model + someModel.asyncSaveMethod({ + ..., + success: function(){ + d.resolve(); + } + }); + return d.promise(); + } + } + **/ + url:null, + /** + Additional params for submit. If defined as object - it is **appended** to original ajax data (pk, name and value). + If defined as function - returned object **overwrites** original ajax data. + @example + params: function(params) { + //originally params contain pk, name and value + params.a = 1; + return params; + } + + @property params + @type object|function + @default null + **/ + params:null, + /** + Name of field. Will be submitted on server. Can be taken from id attribute + + @property name + @type string + @default null + **/ + name: null, + /** + Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. {id: 1, lang: 'en'}. + Can be calculated dynamically via function. + + @property pk + @type string|object|function + @default null + **/ + pk: null, + /** + Initial value. If not defined - will be taken from element's content. + For __select__ type should be defined (as it is ID of shown text). + + @property value + @type string|object + @default null + **/ + value: null, + /** + Value that will be displayed in input if original field value is empty (`null|undefined|''`). + + @property defaultValue + @type string|object + @default null + @since 1.4.6 + **/ + defaultValue: null, + /** + Strategy for sending data on server. Can be `auto|always|never`. + When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally. + + @property send + @type string + @default 'auto' + **/ + send: 'auto', + /** + Function for client-side validation. If returns string - means validation not passed and string showed as error. + Since 1.5.1 you can modify submitted value by returning object from `validate`: + `{newValue: '...'}` or `{newValue: '...', msg: '...'}` + + @property validate + @type function + @default null + @example + validate: function(value) { + if($.trim(value) == '') { + return 'This field is required'; + } + } + **/ + validate: null, + /** + Success callback. Called when value successfully sent on server and **response status = 200**. + Usefull to work with json response. For example, if your backend response can be {success: true} + or `{success: false, msg: "server error"}` you can check it inside this callback. + If it returns **string** - means error occured and string is shown as error message. + If it returns **object like** `{newValue: <something>}` - it overwrites value, submitted by user + (useful when server changes value). + Otherwise newValue simply rendered into element. + + @property success + @type function + @default null + @example + success: function(response, newValue) { + if(!response.success) return response.msg; + } + **/ + success: null, + /** + Error callback. Called when request failed (response status != 200). + Usefull when you want to parse error response and display a custom message. + Must return **string** - the message to be displayed in the error block. + + @property error + @type function + @default null + @since 1.4.4 + @example + error: function(response, newValue) { + if(response.status === 500) { + return 'Service unavailable. Please try later.'; + } else { + return response.responseText; + } + } + **/ + error: null, + /** + Additional options for submit ajax request. + List of values: http://api.jquery.com/jQuery.ajax + + @property ajaxOptions + @type object + @default null + @since 1.1.1 + @example + ajaxOptions: { + type: 'put', + dataType: 'json' + } + **/ + ajaxOptions: null, + /** + Where to show buttons: left(true)|bottom|false + Form without buttons is auto-submitted. + + @property showbuttons + @type boolean|string + @default true + @since 1.1.1 + **/ + showbuttons: true, + /** + Scope for callback methods (success, validate). + If null means editableform instance itself. + + @property scope + @type DOMElement|object + @default null + @since 1.2.0 + @private + **/ + scope: null, + /** + Whether to save or cancel value when it was not changed but form was submitted + + @property savenochange + @type boolean + @default false + @since 1.2.0 + **/ + savenochange: false + }; + + /* + Note: following params could redefined in engine: bootstrap or jqueryui: + Classes 'control-group' and 'editable-error-block' must always present! + */ + $.fn.editableform.template = '
    '+ + '
    ' + + '
    '+ + '
    ' + + '
    ' + + '
    '; + + //loading div + $.fn.editableform.loading = '
    '; + + //buttons + $.fn.editableform.buttons = ''+ + ''; + + //error class attached to control-group + $.fn.editableform.errorGroupClass = null; + + //error class attached to editable-error-block + $.fn.editableform.errorBlockClass = 'editable-error'; + + //engine + $.fn.editableform.engine = 'jquery'; +}(window.jQuery)); + +/** +* EditableForm utilites +*/ +(function ($) { + "use strict"; + + //utils + $.fn.editableutils = { + /** + * classic JS inheritance function + */ + inherit: function (Child, Parent) { + var F = function() { }; + F.prototype = Parent.prototype; + Child.prototype = new F(); + Child.prototype.constructor = Child; + Child.superclass = Parent.prototype; + }, + + + /** + * 设置文字焦点 + * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area + */ + setCursorPosition: function(elem, pos) { + // see: https://github.com/vitalets/x-editable/issues/939 + if (elem.setSelectionRange && /text|search|password|url/i.test(elem.type)) { + try { elem.setSelectionRange(pos, pos); } catch (e) {} + + //选中文本 + }else if (elem.type == "tel"){ + var d = elem.value.lastIndexOf("."); + if(!d){ + d = elem.value.length; + } + elem.selectionStart = 0; // 选中开始位置 + elem.selectionEnd = d; + //elem.select(); + } else if (elem.createTextRange) { + var range = elem.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } + }, + + /** + * function to parse JSON in *single* quotes. (jquery automatically parse only double quotes) + * That allows such code as: + * safe = true --> means no exception will be thrown + * for details see http://stackoverflow.com/questions/7410348/how-to-set-json-format-to-html5-data-attributes-in-the-jquery + */ + tryParseJson: function(s, safe) { + if (typeof s === 'string' && s.length && s.match(/^[\{\[].*[\}\]]$/)) { + if (safe) { + try { + /*jslint evil: true*/ + s = (new Function('return ' + s))(); + /*jslint evil: false*/ + } catch (e) {} finally { + return s; + } + } else { + /*jslint evil: true*/ + s = (new Function('return ' + s))(); + /*jslint evil: false*/ + } + } + return s; + }, + + /** + * slice object by specified keys + */ + sliceObj: function(obj, keys, caseSensitive /* default: false */) { + var key, keyLower, newObj = {}; + + if (!$.isArray(keys) || !keys.length) { + return newObj; + } + + for (var i = 0; i < keys.length; i++) { + key = keys[i]; + if (obj.hasOwnProperty(key)) { + newObj[key] = obj[key]; + } + + if(caseSensitive === true) { + continue; + } + + //when getting data-* attributes via $.data() it's converted to lowercase. + //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery + //workaround is code below. + keyLower = key.toLowerCase(); + if (obj.hasOwnProperty(keyLower)) { + newObj[key] = obj[keyLower]; + } + } + + return newObj; + }, + + /* + exclude complex objects from $.data() before pass to config + */ + getConfigData: function($element) { + var data = {}; + $.each($element[0].dataset, function(k, v) { + if(typeof v !== 'object' || (v && typeof v === 'object' && (v.constructor === Object || v.constructor === Array))) { + data[k] = v; + } + }); + return data; + }, + + /* + returns keys of object + */ + objectKeys: function(o) { + if (Object.keys) { + return Object.keys(o); + } else { + if (o !== Object(o)) { + throw new TypeError('Object.keys called on a non-object'); + } + var k=[], p; + for (p in o) { + if (Object.prototype.hasOwnProperty.call(o,p)) { + k.push(p); + } + } + return k; + } + + }, + + /** + method to escape html. + **/ + escape: function(str) { + return $('
    ').text(str).html(); + }, + + /* + returns array items from sourceData having value property equal or inArray of 'value' + */ + itemsByValue: function(value, sourceData, valueProp) { + if(!sourceData || value === null) { + return []; + } + + if (typeof(valueProp) !== "function") { + var idKey = valueProp || 'value'; + valueProp = function (e) { return e[idKey]; }; + } + + var isValArray = $.isArray(value), + result = [], + that = this; + + $.each(sourceData, function(i, o) { + if(o.children) { + result = result.concat(that.itemsByValue(value, o.children, valueProp)); + } else { + /*jslint eqeq: true*/ + if(isValArray) { + if($.grep(value, function(v){ return v == (o && typeof o === 'object' ? valueProp(o) : o); }).length) { + result.push(o); + } + } else { + var itemValue = (o && (typeof o === 'object')) ? valueProp(o) : o; + if(value == itemValue) { + result.push(o); + } + } + /*jslint eqeq: false*/ + } + }); + + return result; + }, + + /* + Returns input by options: type, mode. + */ + createInput: function(options) { + var TypeConstructor, typeOptions, input, + type = options.type; + + //`date` is some kind of virtual type that is transformed to one of exact types + //depending on mode and core lib + if(type === 'date') { + //inline + if(options.mode === 'inline') { + if($.fn.editabletypes.datefield) { + type = 'datefield'; + } else if($.fn.editabletypes.dateuifield) { + type = 'dateuifield'; + } + //popup + } else { + if($.fn.editabletypes.date) { + type = 'date'; + } else if($.fn.editabletypes.dateui) { + type = 'dateui'; + } + } + + //if type still `date` and not exist in types, replace with `combodate` that is base input + if(type === 'date' && !$.fn.editabletypes.date) { + type = 'combodate'; + } + } + + //`datetime` should be datetimefield in 'inline' mode + if(type === 'datetime' && options.mode === 'inline') { + type = 'datetimefield'; + } + + //change wysihtml5 to textarea for jquery UI and plain versions + if(type === 'wysihtml5' && !$.fn.editabletypes[type]) { + type = 'textarea'; + } + + //create input of specified type. Input will be used for converting value, not in form + if(typeof $.fn.editabletypes[type] === 'function') { + TypeConstructor = $.fn.editabletypes[type]; + typeOptions = this.sliceObj(options, this.objectKeys(TypeConstructor.defaults)); + input = new TypeConstructor(typeOptions); + return input; + } else { + $.error('Unknown type: '+ type); + return false; + } + }, + + //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr + supportsTransitions: function () { + var b = document.body || document.documentElement, + s = b.style, + p = 'transition', + v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms']; + + if(typeof s[p] === 'string') { + return true; + } + + // Tests for vendor specific prop + p = p.charAt(0).toUpperCase() + p.substr(1); + for(var i=0; i +This method applied internally in $().editable(). You should subscribe on it's events (save / cancel) to get profit of it.
    +Final realization can be different: bootstrap-popover, jqueryui-tooltip, poshytip, inline-div. It depends on which js file you include.
    +Applied as jQuery method. + +@class editableContainer +@uses editableform +**/ +(function ($) { + "use strict"; + + var Popup = function (element, options) { + this.init(element, options); + }; + + var Inline = function (element, options) { + this.init(element, options); + }; + + //methods + Popup.prototype = { + containerName: null, //method to call container on element + containerDataName: null, //object name in element's .data() + innerCss: null, //tbd in child class + containerClass: 'editable-container editable-popup', //css class applied to container element + defaults: {}, //container itself defaults + + init: function(element, options) { + this.$element = $(element); + //since 1.4.1 container do not use data-* directly as they already merged into options. + this.options = $.extend({}, $.fn.editableContainer.defaults, options); + this.splitOptions(); + + //set scope of form callbacks to element + this.formOptions.scope = this.$element[0]; + + this.initContainer(); + + //flag to hide container, when saving value will finish + this.delayedHide = false; + + //bind 'destroyed' listener to destroy container when element is removed from dom + this.$element.on('destroyed', $.proxy(function(){ + this.destroy(); + }, this)); + + //attach document handler to close containers on click / escape + if(!$(document).data('editable-handlers-attached')) { + //close all on escape + $(document).on('keyup.editable', function (e) { + if (e.which === 27) { + $('.editable-open').editableContainer('hide', 'cancel'); + //todo: return focus on element + } + }); + + //close containers when click outside + //(mousedown could be better than click, it closes everything also on drag drop) + $(document).on('click.editable', function(e) { + var $target = $(e.target), i, + exclude_classes = ['.editable-container', + '.ui-datepicker-header', + '.datepicker', //in inline mode datepicker is rendered into body + '.modal-backdrop', + '.bootstrap-wysihtml5-insert-image-modal', + '.bootstrap-wysihtml5-insert-link-modal' + ]; + + // select2 has extra body click in IE + // see: https://github.com/ivaynberg/select2/issues/1058 + if ($('.select2-drop-mask').is(':visible')) { + return; + } + + //check if element is detached. It occurs when clicking in bootstrap datepicker + if (!$.contains(document.documentElement, e.target)) { + return; + } + + //for some reason FF 20 generates extra event (click) in select2 widget with e.target = document + //we need to filter it via construction below. See https://github.com/vitalets/x-editable/issues/199 + //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec + if($target.is(document)) { + return; + } + + //if click inside one of exclude classes --> no nothing + for(i=0; i container changes size before hide. + */ + + //if form already exist - delete previous data + if(this.$form) { + //todo: destroy prev data! + //this.$form.destroy(); + } + + this.$form = $('
    '); + + //insert form into container body + if(this.tip().is(this.innerCss)) { + //for inline container + this.tip().append(this.$form); + } else { + this.tip().find(this.innerCss).append(this.$form); + } + + //render form + this.renderForm(); + }, + + /** + Hides container with form + @method hide() + @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|undefined (=manual) + **/ + hide: function(reason) { + if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) { + return; + } + + //if form is saving value, schedule hide + if(this.$form.data('editableform').isSaving) { + this.delayedHide = {reason: reason}; + return; + } else { + this.delayedHide = false; + } + + this.$element.removeClass('editable-open'); + this.innerHide(); + + /** + Fired when container was hidden. It occurs on both save or cancel. + **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one. + The workaround is to check `arguments.length` that is always `2` for x-editable. + + @event hidden + @param {object} event event object + @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|manual + @example + $('#username').on('hidden', function(e, reason) { + if(reason === 'save' || reason === 'cancel') { + //auto-open next editable + $(this).closest('tr').next().find('.editable').editable('show'); + } + }); + **/ + this.$element.triggerHandler('hidden', reason || 'manual'); + }, + + /* internal show method. To be overwritten in child classes */ + innerShow: function () { + + }, + + /* internal hide method. To be overwritten in child classes */ + innerHide: function () { + + }, + + /** + Toggles container visibility (show / hide) + @method toggle() + @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. + **/ + toggle: function(closeAll) { + if(this.container() && this.tip() && this.tip().is(':visible')) { + this.hide(); + } else { + this.show(closeAll); + } + }, + + /* + Updates the position of container when content changed. + @method setPosition() + */ + setPosition: function() { + //tbd in child class + }, + + save: function(e, params) { + /** + Fired when new value was submitted. You can use $(this).data('editableContainer') inside handler to access to editableContainer instance + + @event save + @param {Object} event event object + @param {Object} params additional params + @param {mixed} params.newValue submitted value + @param {Object} params.response ajax response + @example + $('#username').on('save', function(e, params) { + //assuming server response: '{success: true}' + var pk = $(this).data('editableContainer').options.pk; + if(params.response && params.response.success) { + alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!'); + } else { + alert('error!'); + } + }); + **/ + this.$element.triggerHandler('save', params); + + //hide must be after trigger, as saving value may require methods of plugin, applied to input + this.hide('save'); + }, + + /** + Sets new option + + @method option(key, value) + @param {string} key + @param {mixed} value + **/ + option: function(key, value) { + this.options[key] = value; + if(key in this.containerOptions) { + this.containerOptions[key] = value; + this.setContainerOption(key, value); + } else { + this.formOptions[key] = value; + if(this.$form) { + this.$form.editableform('option', key, value); + } + } + }, + + setContainerOption: function(key, value) { + this.call('option', key, value); + }, + + /** + Destroys the container instance + @method destroy() + **/ + destroy: function() { + this.hide(); + this.innerDestroy(); + this.$element.off('destroyed'); + this.$element.removeData('editableContainer'); + }, + + /* to be overwritten in child classes */ + innerDestroy: function() { + + }, + + /* + Closes other containers except one related to passed element. + Other containers can be cancelled or submitted (depends on onblur option) + */ + closeOthers: function(element) { + $('.editable-open').each(function(i, el){ + //do nothing with passed element and it's children + if(el === element || $(el).find(element).length) { + return; + } + + //otherwise cancel or submit all open containers + var $el = $(el), + ec = $el.data('editableContainer'); + + if(!ec) { + return; + } + + if(ec.options.onblur === 'cancel') { + $el.data('editableContainer').hide('onblur'); + } else if(ec.options.onblur === 'submit') { + $el.data('editableContainer').tip().find('form').submit(); + } + }); + + }, + + /** + Activates input of visible container (e.g. set focus) + @method activate() + **/ + activate: function() { + if(this.tip && this.tip().is(':visible') && this.$form) { + this.$form.data('editableform').input.activate(); + } + } + + }; + + /** + jQuery method to initialize editableContainer. + + @method $().editableContainer(options) + @params {Object} options + @example + $('#edit').editableContainer({ + type: 'text', + url: '/post', + pk: 1, + value: 'hello' + }); + **/ + $.fn.editableContainer = function (option) { + var args = arguments; + return this.each(function () { + var $this = $(this), + dataKey = 'editableContainer', + data = $this.data(dataKey), + options = typeof option === 'object' && option, + Constructor = (options.mode === 'inline') ? Inline : Popup; + + if (!data) { + $this.data(dataKey, (data = new Constructor(this, options))); + } + + if (typeof option === 'string') { //call method + data[option].apply(data, Array.prototype.slice.call(args, 1)); + } + }); + }; + + //store constructors + $.fn.editableContainer.Popup = Popup; + $.fn.editableContainer.Inline = Inline; + + //defaults + $.fn.editableContainer.defaults = { + /** + Initial value of form input + + @property value + @type mixed + @default null + @private + **/ + value: null, + /** + Placement of container relative to element. Can be top|right|bottom|left. Not used for inline container. + + @property placement + @type string + @default 'top' + **/ + placement: 'top', + /** + Whether to hide container on save/cancel. + + @property autohide + @type boolean + @default true + @private + **/ + autohide: true, + /** + Action when user clicks outside the container. Can be cancel|submit|ignore. + Setting ignore allows to have several containers open. + + @property onblur + @type string + @default 'cancel' + @since 1.1.1 + **/ + onblur: 'cancel', + + /** + Animation speed (inline mode only) + @property anim + @type string + @default false + **/ + anim: false, + + /** + Mode of editable, can be `popup` or `inline` + + @property mode + @type string + @default 'popup' + @since 1.4.0 + **/ + mode: 'popup' + }; + + /* + * workaround to have 'destroyed' event to destroy popover when element is destroyed + * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom + */ + jQuery.event.special.destroyed = { + remove: function(o) { + if (o.handler) { + o.handler(); + } + } + }; + +}(window.jQuery)); + +/** +* Editable Inline +* --------------------- +*/ +(function ($) { + "use strict"; + + //copy prototype from EditableContainer + //extend methods + $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, { + containerName: 'editableform', + innerCss: '.editable-inline', + containerClass: 'editable-container editable-inline', //css class applied to container element + + initContainer: function(){ + //container is element + this.$tip = $(''); + + //convert anim to miliseconds (int) + if(!this.options.anim) { + this.options.anim = 0; + } + }, + + splitOptions: function() { + //all options are passed to form + this.containerOptions = {}; + this.formOptions = this.options; + }, + + tip: function() { + return this.$tip; + }, + + innerShow: function () { + this.$element.hide(); + this.tip().insertAfter(this.$element).show(); + }, + + innerHide: function () { + this.$tip.hide(this.options.anim, $.proxy(function() { + this.$element.show(); + this.innerDestroy(); + }, this)); + }, + + innerDestroy: function() { + if(this.tip()) { + this.tip().empty().remove(); + } + } + }); + +}(window.jQuery)); +/** +Makes editable any HTML element on the page. Applied as jQuery method. + +@class editable +@uses editableContainer +**/ +(function ($) { + "use strict"; + + var Editable = function (element, options) { + this.$element = $(element); + //data-* has more priority over js options: because dynamically created elements may change data-* + this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element)); + if(this.options.selector) { + this.initLive(); + } else { + this.init(); + } + + //check for transition support + if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) { + this.options.highlight = false; + } + }; + + Editable.prototype = { + constructor: Editable, + init: function () { + var isValueByText = false, + doAutotext, finalize; + + //name + this.options.name = this.options.name || this.$element.attr('id'); + + //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select) + //also we set scope option to have access to element inside input specific callbacks (e. g. source as function) + this.options.scope = this.$element[0]; + this.input = $.fn.editableutils.createInput(this.options); + if(!this.input) { + return; + } + + //set value from settings or by element's text + if (this.options.value === undefined || this.options.value === null) { + this.value = this.input.html2value($.trim(this.$element.html())); + isValueByText = true; + } else { + /* + value can be string when received from 'data-value' attribute + for complext objects value can be set as json string in data-value attribute, + e.g. data-value="{city: 'Moscow', street: 'Lenina'}" + */ + this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); + if(typeof this.options.value === 'string') { + this.value = this.input.str2value(this.options.value); + } else { + this.value = this.options.value; + } + } + + //add 'editable' class to every editable element + this.$element.addClass('editable'); + + //specifically for "textarea" add class .editable-pre-wrapped to keep linebreaks + if(this.input.type === 'textarea') { + this.$element.addClass('editable-pre-wrapped'); + } + + //attach handler activating editable. In disabled mode it just prevent default action (useful for links) + if(this.options.toggle !== 'manual') { + this.$element.addClass('editable-click'); + this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){ + //prevent following link if editable enabled + if(!this.options.disabled) { + e.preventDefault(); + } + + //stop propagation not required because in document click handler it checks event target + //e.stopPropagation(); + + if(this.options.toggle === 'mouseenter') { + //for hover only show container + this.show(); + } else { + //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener + var closeAll = (this.options.toggle !== 'click'); + this.toggle(closeAll); + } + }, this)); + } else { + this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually + } + + //if display is function it's far more convinient to have autotext = always to render correctly on init + //see https://github.com/vitalets/x-editable-yii/issues/34 + if(typeof this.options.display === 'function') { + this.options.autotext = 'always'; + } + + //check conditions for autotext: + switch(this.options.autotext) { + case 'always': + doAutotext = true; + break; + case 'auto': + //if element text is empty and value is defined and value not generated by text --> run autotext + doAutotext = !$.trim(this.$element.text()).length && this.value !== null && this.value !== undefined && !isValueByText; + break; + default: + doAutotext = false; + } + + //depending on autotext run render() or just finilize init + $.when(doAutotext ? this.render() : true).then($.proxy(function() { + if(this.options.disabled) { + this.disable(); + } else { + this.enable(); + } + /** + Fired when element was initialized by `$().editable()` method. + Please note that you should setup `init` handler **before** applying `editable`. + + @event init + @param {Object} event event object + @param {Object} editable editable instance (as here it cannot accessed via data('editable')) + @since 1.2.0 + @example + $('#username').on('init', function(e, editable) { + alert('initialized ' + editable.options.name); + }); + $('#username').editable(); + **/ + this.$element.triggerHandler('init', this); + }, this)); + }, + + /* + Initializes parent element for live editables + */ + initLive: function() { + //store selector + var selector = this.options.selector; + //modify options for child elements + this.options.selector = false; + this.options.autotext = 'never'; + //listen toggle events + this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){ + var $target = $(e.target).closest(selector); + if(!$target.data('editable')) { + //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user) + //see https://github.com/vitalets/x-editable/issues/137 + if($target.hasClass(this.options.emptyclass)) { + $target.empty(); + } + $target.editable(this.options).trigger(e); + } + }, this)); + }, + + /* + Renders value into element's text. + Can call custom display method from options. + Can return deferred object. + @method render() + @param {mixed} response server response (if exist) to pass into display function + */ + render: function(response) { + //do not display anything + if(this.options.display === false) { + return; + } + + //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded + if(this.input.value2htmlFinal) { + return this.input.value2html(this.value, this.$element[0], this.options.display, response); + //if display method defined --> use it + } else if(typeof this.options.display === 'function') { + return this.options.display.call(this.$element[0], this.value, response); + //else use input's original value2html() method + } else { + return this.input.value2html(this.value, this.$element[0]); + } + }, + + /** + Enables editable + @method enable() + **/ + enable: function() { + this.options.disabled = false; + this.$element.removeClass('editable-disabled'); + this.handleEmpty(this.isEmpty); + if(this.options.toggle !== 'manual') { + if(this.$element.attr('tabindex') === '-1') { + this.$element.removeAttr('tabindex'); + } + } + }, + + /** + Disables editable + @method disable() + **/ + disable: function() { + this.options.disabled = true; + this.hide(); + this.$element.addClass('editable-disabled'); + this.handleEmpty(this.isEmpty); + //do not stop focus on this element + this.$element.attr('tabindex', -1); + }, + + /** + Toggles enabled / disabled state of editable element + @method toggleDisabled() + **/ + toggleDisabled: function() { + if(this.options.disabled) { + this.enable(); + } else { + this.disable(); + } + }, + + /** + Sets new option + + @method option(key, value) + @param {string|object} key option name or object with several options + @param {mixed} value option new value + @example + $('.editable').editable('option', 'pk', 2); + **/ + option: function(key, value) { + //set option(s) by object + if(key && typeof key === 'object') { + $.each(key, $.proxy(function(k, v){ + this.option($.trim(k), v); + }, this)); + return; + } + + //set option by string + this.options[key] = value; + + //disabled + if(key === 'disabled') { + return value ? this.disable() : this.enable(); + } + + //value + if(key === 'value') { + this.setValue(value); + } + + //transfer new option to container! + if(this.container) { + this.container.option(key, value); + } + + //pass option to input directly (as it points to the same in form) + if(this.input.option) { + this.input.option(key, value); + } + + }, + + /* + * set emptytext if element is empty + */ + handleEmpty: function (isEmpty) { + //do not handle empty if we do not display anything + if(this.options.display === false) { + return; + } + + /* + isEmpty may be set directly as param of method. + It is required when we enable/disable field and can't rely on content + as node content is text: "Empty" that is not empty %) + */ + if(isEmpty !== undefined) { + this.isEmpty = isEmpty; + } else { + //detect empty + //for some inputs we need more smart check + //e.g. wysihtml5 may have
    ,

    , + if(typeof(this.input.isEmpty) === 'function') { + this.isEmpty = this.input.isEmpty(this.$element); + } else { + this.isEmpty = $.trim(this.$element.html()) === ''; + } + } + + //emptytext shown only for enabled + if(!this.options.disabled) { + if (this.isEmpty) { + this.$element.html(this.options.emptytext); + if(this.options.emptyclass) { + this.$element.addClass(this.options.emptyclass); + } + } else if(this.options.emptyclass) { + this.$element.removeClass(this.options.emptyclass); + } + } else { + //below required if element disable property was changed + if(this.isEmpty) { + this.$element.empty(); + if(this.options.emptyclass) { + this.$element.removeClass(this.options.emptyclass); + } + } + } + }, + + /** + Shows container with form + @method show() + @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. + **/ + show: function (closeAll) { + if(this.options.disabled) { + return; + } + + //init editableContainer: popover, tooltip, inline, etc.. + if(!this.container) { + var containerOptions = $.extend({}, this.options, { + value: this.value, + input: this.input //pass input to form (as it is already created) + }); + this.$element.editableContainer(containerOptions); + //listen `save` event + this.$element.on("save.internal", $.proxy(this.save, this)); + this.container = this.$element.data('editableContainer'); + } else if(this.container.tip().is(':visible')) { + return; + } + + //show container + this.container.show(closeAll); + }, + + /** + Hides container with form + @method hide() + **/ + hide: function () { + if(this.container) { + this.container.hide(); + } + }, + + /** + Toggles container visibility (show / hide) + @method toggle() + @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true. + **/ + toggle: function(closeAll) { + if(this.container && this.container.tip().is(':visible')) { + this.hide(); + } else { + this.show(closeAll); + } + }, + + /* + * called when form was submitted + */ + save: function(e, params) { + //mark element with unsaved class if needed + if(this.options.unsavedclass) { + /* + Add unsaved css to element if: + - url is not user's function + - value was not sent to server + - params.response === undefined, that means data was not sent + - value changed + */ + var sent = false; + sent = sent || typeof this.options.url === 'function'; + sent = sent || this.options.display === false; + sent = sent || params.response !== undefined; + sent = sent || (this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(params.newValue)); + + if(sent) { + this.$element.removeClass(this.options.unsavedclass); + } else { + this.$element.addClass(this.options.unsavedclass); + } + } + + //highlight when saving + if(this.options.highlight) { + var $e = this.$element, + bgColor = $e.css('background-color'); + + $e.css('background-color', this.options.highlight); + setTimeout(function(){ + if(bgColor === 'transparent') { + bgColor = ''; + } + $e.css('background-color', bgColor); + $e.addClass('editable-bg-transition'); + setTimeout(function(){ + $e.removeClass('editable-bg-transition'); + }, 1700); + }, 10); + } + + //set new value + this.setValue(params.newValue, false, params.response); + + /** + Fired when new value was submitted. You can use $(this).data('editable') to access to editable instance + + @event save + @param {Object} event event object + @param {Object} params additional params + @param {mixed} params.newValue submitted value + @param {Object} params.response ajax response + @example + $('#username').on('save', function(e, params) { + alert('Saved value: ' + params.newValue); + }); + **/ + //event itself is triggered by editableContainer. Description here is only for documentation + }, + + validate: function () { + if (typeof this.options.validate === 'function') { + return this.options.validate.call(this, this.value); + } + }, + + /** + Sets new value of editable + @method setValue(value, convertStr) + @param {mixed} value new value + @param {boolean} convertStr whether to convert value from string to internal format + **/ + setValue: function(value, convertStr, response) { + if(convertStr) { + this.value = this.input.str2value(value); + } else { + this.value = value; + } + if(this.container) { + this.container.option('value', this.value); + } + $.when(this.render(response)) + .then($.proxy(function() { + this.handleEmpty(); + }, this)); + }, + + /** + Activates input of visible container (e.g. set focus) + @method activate() + **/ + activate: function() { + if(this.container) { + this.container.activate(); + } + }, + + /** + Removes editable feature from element + @method destroy() + **/ + destroy: function() { + this.disable(); + + if(this.container) { + this.container.destroy(); + } + + this.input.destroy(); + + if(this.options.toggle !== 'manual') { + this.$element.removeClass('editable-click'); + this.$element.off(this.options.toggle + '.editable'); + } + + this.$element.off("save.internal"); + + this.$element.removeClass('editable editable-open editable-disabled'); + this.$element.removeData('editable'); + } + }; + + /* EDITABLE PLUGIN DEFINITION + * ======================= */ + + /** + jQuery method to initialize editable element. + + @method $().editable(options) + @params {Object} options + @example + $('#username').editable({ + type: 'text', + url: '/post', + pk: 1 + }); + **/ + $.fn.editable = function (option) { + //special API methods returning non-jquery object + var result = {}, args = arguments, datakey = 'editable'; + switch (option) { + /** + Runs client-side validation for all matched editables + + @method validate() + @returns {Object} validation errors map + @example + $('#username, #fullname').editable('validate'); + // possible result: + { + username: "username is required", + fullname: "fullname should be minimum 3 letters length" + } + **/ + case 'validate': + this.each(function () { + var $this = $(this), data = $this.data(datakey), error; + if (data && (error = data.validate())) { + result[data.options.name] = error; + } + }); + return result; + + /** + Returns current values of editable elements. + Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements. + If value of some editable is `null` or `undefined` it is excluded from result object. + When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object. + + @method getValue() + @param {bool} isSingle whether to return just value of single element + @returns {Object} object of element names and values + @example + $('#username, #fullname').editable('getValue'); + //result: + { + username: "superuser", + fullname: "John" + } + //isSingle = true + $('#username').editable('getValue', true); + //result "superuser" + **/ + case 'getValue': + if(arguments.length === 2 && arguments[1] === true) { //isSingle = true + result = this.eq(0).data(datakey).value; + } else { + this.each(function () { + var $this = $(this), data = $this.data(datakey); + if (data && data.value !== undefined && data.value !== null) { + result[data.options.name] = data.input.value2submit(data.value); + } + }); + } + return result; + + /** + This method collects values from several editable elements and submit them all to server. + Internally it runs client-side validation for all fields and submits only in case of success. + See
    creating new records for details. + Since 1.5.1 `submit` can be applied to single element to send data programmatically. In that case + `url`, `success` and `error` is taken from initial options and you can just call `$('#username').editable('submit')`. + + @method submit(options) + @param {object} options + @param {object} options.url url to submit data + @param {object} options.data additional data to submit + @param {object} options.ajaxOptions additional ajax options + @param {function} options.error(obj) error handler + @param {function} options.success(obj,config) success handler + @returns {Object} jQuery object + **/ + case 'submit': //collects value, validate and submit to server for creating new record + var config = arguments[1] || {}, + $elems = this, + errors = this.editable('validate'); + + // validation ok + if($.isEmptyObject(errors)) { + var ajaxOptions = {}; + + // for single element use url, success etc from options + if($elems.length === 1) { + var editable = $elems.data('editable'); + //standard params + var params = { + name: editable.options.name || '', + value: editable.input.value2submit(editable.value), + pk: (typeof editable.options.pk === 'function') ? + editable.options.pk.call(editable.options.scope) : + editable.options.pk + }; + + //additional params + if(typeof editable.options.params === 'function') { + params = editable.options.params.call(editable.options.scope, params); + } else { + //try parse json in single quotes (from data-params attribute) + editable.options.params = $.fn.editableutils.tryParseJson(editable.options.params, true); + $.extend(params, editable.options.params); + } + + ajaxOptions = { + url: editable.options.url, + data: params, + type: 'POST' + }; + + // use success / error from options + config.success = config.success || editable.options.success; + config.error = config.error || editable.options.error; + + // multiple elements + } else { + var values = this.editable('getValue'); + + ajaxOptions = { + url: config.url, + data: values, + type: 'POST' + }; + } + + // ajax success callabck (response 200 OK) + ajaxOptions.success = typeof config.success === 'function' ? function(response) { + config.success.call($elems, response, config); + } : $.noop; + + // ajax error callabck + ajaxOptions.error = typeof config.error === 'function' ? function() { + config.error.apply($elems, arguments); + } : $.noop; + + // extend ajaxOptions + if(config.ajaxOptions) { + $.extend(ajaxOptions, config.ajaxOptions); + } + + // extra data + if(config.data) { + $.extend(ajaxOptions.data, config.data); + } + + // perform ajax request + $.ajax(ajaxOptions); + } else { //client-side validation error + if(typeof config.error === 'function') { + config.error.call($elems, errors); + } + } + return this; + } + + //return jquery object + return this.each(function () { + var $this = $(this), + data = $this.data(datakey), + options = typeof option === 'object' && option; + + //for delegated targets do not store `editable` object for element + //it's allows several different selectors. + //see: https://github.com/vitalets/x-editable/issues/312 + if(options && options.selector) { + data = new Editable(this, options); + return; + } + + if (!data) { + $this.data(datakey, (data = new Editable(this, options))); + } + + if (typeof option === 'string') { //call method + data[option].apply(data, Array.prototype.slice.call(args, 1)); + } + }); + }; + + + $.fn.editable.defaults = { + /** + Type of input. Can be text|textarea|select|date|checklist and more + + @property type + @type string + @default 'text' + **/ + type: 'text', + /** + Sets disabled state of editable + + @property disabled + @type boolean + @default false + **/ + disabled: false, + /** + How to toggle editable. Can be click|dblclick|mouseenter|manual. + When set to manual you should manually call show/hide methods of editable. + **Note**: if you call show or toggle inside **click** handler of some DOM element, + you need to apply e.stopPropagation() because containers are being closed on any click on document. + + @example + $('#edit-button').click(function(e) { + e.stopPropagation(); + $('#username').editable('toggle'); + }); + + @property toggle + @type string + @default 'click' + **/ + toggle: 'click', + /** + Text shown when element is empty. + + @property emptytext + @type string + @default 'Empty' + **/ + emptytext: 'Empty', + /** + Allows to automatically set element's text based on it's value. Can be auto|always|never. Useful for select and date. + For example, if dropdown list is {1: 'a', 2: 'b'} and element's value set to 1, it's html will be automatically set to 'a'. + auto - text will be automatically set only if element is empty. + always|never - always(never) try to set element's text. + + @property autotext + @type string + @default 'auto' + **/ + autotext: 'auto', + /** + Initial value of input. If not set, taken from element's text. + Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option). + For example, to display currency sign: + @example + + + + @property value + @type mixed + @default element's text + **/ + value: null, + /** + Callback to perform custom displaying of value in element's text. + If `null`, default input's display used. + If `false`, no displaying methods will be called, element's text will never change. + Runs under element's scope. + _**Parameters:**_ + + * `value` current value to be displayed + * `response` server response (if display called after ajax submit), since 1.4.0 + + For _inputs with source_ (select, checklist) parameters are different: + + * `value` current value to be displayed + * `sourceData` array of items for current input (e.g. dropdown items) + * `response` server response (if display called after ajax submit), since 1.4.0 + + To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`. + + @property display + @type function|boolean + @default null + @since 1.2.0 + @example + display: function(value, sourceData) { + //display checklist as comma-separated values + var html = [], + checked = $.fn.editableutils.itemsByValue(value, sourceData); + + if(checked.length) { + $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); }); + $(this).html(html.join(', ')); + } else { + $(this).empty(); + } + } + **/ + display: null, + /** + Css class applied when editable text is empty. + + @property emptyclass + @type string + @since 1.4.1 + @default editable-empty + **/ + emptyclass: 'editable-empty', + /** + Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`). + You may set it to `null` if you work with editables locally and submit them together. + + @property unsavedclass + @type string + @since 1.4.1 + @default editable-unsaved + **/ + unsavedclass: 'editable-unsaved', + /** + If selector is provided, editable will be delegated to the specified targets. + Usefull for dynamically generated DOM elements. + **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, + as they actually become editable only after first click. + You should manually set class `editable-click` to these elements. + Also, if element originally empty you should add class `editable-empty`, set `data-value=""` and write emptytext into element: + + @property selector + @type string + @since 1.4.1 + @default null + @example +
    + + Empty + + Operator +
    + + + **/ + selector: null, + /** + Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers. + + @property highlight + @type string|boolean + @since 1.4.5 + @default #FFFF80 + **/ + highlight: '#FFFF80' + }; + +}(window.jQuery)); + +/** +AbstractInput - base class for all editable inputs. +It defines interface to be implemented by any input type. +To create your own input you can inherit from this class. + +@class abstractinput +**/ +(function ($) { + "use strict"; + + //types + $.fn.editabletypes = {}; + + var AbstractInput = function () { }; + + AbstractInput.prototype = { + /** + Initializes input + + @method init() + **/ + init: function(type, options, defaults) { + this.type = type; + this.options = $.extend({}, defaults, options); + }, + + /* + this method called before render to init $tpl that is inserted in DOM + */ + prerender: function() { + this.$tpl = $(this.options.tpl); //whole tpl as jquery object + this.$input = this.$tpl; //control itself, can be changed in render method + this.$clear = null; //clear button + this.error = null; //error message, if input cannot be rendered + }, + + /** + Renders input from tpl. Can return jQuery deferred object. + Can be overwritten in child objects + + @method render() + **/ + render: function() { + + }, + + /** + Sets element's html by value. + + @method value2html(value, element) + @param {mixed} value + @param {DOMElement} element + **/ + value2html: function(value, element) { + $(element)[this.options.escape ? 'text' : 'html']($.trim(value)); + }, + + /** + Converts element's html to value + + @method html2value(html) + @param {string} html + @returns {mixed} + **/ + html2value: function(html) { + return $('
    ').html(html).text(); + }, + + /** + Converts value to string (for internal compare). For submitting to server used value2submit(). + + @method value2str(value) + @param {mixed} value + @returns {string} + **/ + value2str: function(value) { + return String(value); + }, + + /** + Converts string received from server into value. Usually from `data-value` attribute. + + @method str2value(str) + @param {string} str + @returns {mixed} + **/ + str2value: function(str) { + return str; + }, + + /** + Converts value for submitting to server. Result can be string or object. + + @method value2submit(value) + @param {mixed} value + @returns {mixed} + **/ + value2submit: function(value) { + return value; + }, + + /** + Sets value of input. + + @method value2input(value) + @param {mixed} value + **/ + value2input: function(value) { + this.$input.val(value); + }, + + /** + Returns value of input. Value can be object (e.g. datepicker) + + @method input2value() + **/ + input2value: function() { + return this.$input.val(); + }, + + /** + Activates input. For text it sets focus. + + @method activate() + **/ + activate: function() { + if(this.$input.is(':visible')) { + this.$input.focus(); + } + }, + + /** + Creates input. + + @method clear() + **/ + clear: function() { + this.$input.val(null); + }, + + /** + method to escape html. + **/ + escape: function(str) { + return $('
    ').text(str).html(); + }, + + /** + attach handler to automatically submit form when value changed (useful when buttons not shown) + **/ + autosubmit: function() { + + }, + + /** + Additional actions when destroying element + **/ + destroy: function() { + }, + + // -------- helper functions -------- + setClass: function() { + if(this.options.inputclass) { + this.$input.addClass(this.options.inputclass); + } + }, + + setAttr: function(attr) { + if (this.options[attr] !== undefined && this.options[attr] !== null) { + this.$input.attr(attr, this.options[attr]); + } + }, + + option: function(key, value) { + this.options[key] = value; + } + + }; + + AbstractInput.defaults = { + /** + HTML template of input. Normally you should not change it. + + @property tpl + @type string + @default '' + **/ + tpl: '', + /** + CSS class automatically applied to input + + @property inputclass + @type string + @default null + **/ + inputclass: null, + + /** + If `true` - html will be escaped in content of element via $.text() method. + If `false` - html will not be escaped, $.html() used. + When you use own `display` function, this option obviosly has no effect. + + @property escape + @type boolean + @since 1.5.0 + @default true + **/ + escape: true, + + //scope for external methods (e.g. source defined as function) + //for internal use only + scope: null, + + //need to re-declare showbuttons here to get it's value from common config (passed only options existing in defaults) + showbuttons: true + }; + + $.extend($.fn.editabletypes, {abstractinput: AbstractInput}); + +}(window.jQuery)); + +/** +List - abstract class for inputs that have source option loaded from js array or via ajax + +@class list +@extends abstractinput +**/ +(function ($) { + "use strict"; + + var List = function (options) { + + }; + + $.fn.editableutils.inherit(List, $.fn.editabletypes.abstractinput); + + $.extend(List.prototype, { + render: function () { + var deferred = $.Deferred(); + + this.error = null; + this.onSourceReady(function () { + this.renderList(); + deferred.resolve(); + }, function () { + this.error = this.options.sourceError; + deferred.resolve(); + }); + + return deferred.promise(); + }, + + html2value: function (html) { + return null; //can't set value by text + }, + + value2html: function (value, element, display, response) { + var deferred = $.Deferred(), + success = function () { + if(typeof display === 'function') { + //custom display method + display.call(element, value, this.sourceData, response); + } else { + this.value2htmlFinal(value, element); + } + deferred.resolve(); + }; + + //for null value just call success without loading source + if(value === null) { + success.call(this); + } else { + this.onSourceReady(success, function () { deferred.resolve(); }); + } + + return deferred.promise(); + }, + + // ------------- additional functions ------------ + + onSourceReady: function (success, error) { + //run source if it function + var source; + if ($.isFunction(this.options.source)) { + source = this.options.source.call(this.options.scope); + this.sourceData = null; + //note: if function returns the same source as URL - sourceData will be taken from cahce and no extra request performed + } else { + source = this.options.source; + } + + //if allready loaded just call success + if(this.options.sourceCache && $.isArray(this.sourceData)) { + success.call(this); + return; + } + + //try parse json in single quotes (for double quotes jquery does automatically) + try { + source = $.fn.editableutils.tryParseJson(source, false); + } catch (e) { + error.call(this); + return; + } + + //loading from url + if (typeof source === 'string') { + //try to get sourceData from cache + if(this.options.sourceCache) { + var cacheID = source, + cache; + + if (!$(document).data(cacheID)) { + $(document).data(cacheID, {}); + } + cache = $(document).data(cacheID); + + //check for cached data + if (cache.loading === false && cache.sourceData) { //take source from cache + this.sourceData = cache.sourceData; + this.doPrepend(); + success.call(this); + return; + } else if (cache.loading === true) { //cache is loading, put callback in stack to be called later + cache.callbacks.push($.proxy(function () { + this.sourceData = cache.sourceData; + this.doPrepend(); + success.call(this); + }, this)); + + //also collecting error callbacks + cache.err_callbacks.push($.proxy(error, this)); + return; + } else { //no cache yet, activate it + cache.loading = true; + cache.callbacks = []; + cache.err_callbacks = []; + } + } + + //ajaxOptions for source. Can be overwritten bt options.sourceOptions + var ajaxOptions = $.extend({ + url: source, + type: 'get', + cache: false, + dataType: 'json', + success: $.proxy(function (data) { + if(cache) { + cache.loading = false; + } + this.sourceData = this.makeArray(data); + if($.isArray(this.sourceData)) { + if(cache) { + //store result in cache + cache.sourceData = this.sourceData; + //run success callbacks for other fields waiting for this source + $.each(cache.callbacks, function () { this.call(); }); + } + this.doPrepend(); + success.call(this); + } else { + error.call(this); + if(cache) { + //run error callbacks for other fields waiting for this source + $.each(cache.err_callbacks, function () { this.call(); }); + } + } + }, this), + error: $.proxy(function () { + error.call(this); + if(cache) { + cache.loading = false; + //run error callbacks for other fields + $.each(cache.err_callbacks, function () { this.call(); }); + } + }, this) + }, this.options.sourceOptions); + + //loading sourceData from server + $.ajax(ajaxOptions); + + } else { //options as json/array + this.sourceData = this.makeArray(source); + + if($.isArray(this.sourceData)) { + this.doPrepend(); + success.call(this); + } else { + error.call(this); + } + } + }, + + doPrepend: function () { + if(this.options.prepend === null || this.options.prepend === undefined) { + return; + } + + if(!$.isArray(this.prependData)) { + //run prepend if it is function (once) + if ($.isFunction(this.options.prepend)) { + this.options.prepend = this.options.prepend.call(this.options.scope); + } + + //try parse json in single quotes + this.options.prepend = $.fn.editableutils.tryParseJson(this.options.prepend, true); + + //convert prepend from string to object + if (typeof this.options.prepend === 'string') { + this.options.prepend = {'': this.options.prepend}; + } + + this.prependData = this.makeArray(this.options.prepend); + } + + if($.isArray(this.prependData) && $.isArray(this.sourceData)) { + this.sourceData = this.prependData.concat(this.sourceData); + } + }, + + /* + renders input list + */ + renderList: function() { + // this method should be overwritten in child class + }, + + /* + set element's html by value + */ + value2htmlFinal: function(value, element) { + // this method should be overwritten in child class + }, + + /** + * convert data to array suitable for sourceData, e.g. [{value: 1, text: 'abc'}, {...}] + */ + makeArray: function(data) { + var count, obj, result = [], item, iterateItem; + if(!data || typeof data === 'string') { + return null; + } + + if($.isArray(data)) { //array + /* + function to iterate inside item of array if item is object. + Caclulates count of keys in item and store in obj. + */ + iterateItem = function (k, v) { + obj = {value: k, text: v}; + if(count++ >= 2) { + return false;// exit from `each` if item has more than one key. + } + }; + + for(var i = 0; i < data.length; i++) { + item = data[i]; + if(typeof item === 'object') { + count = 0; //count of keys inside item + $.each(item, iterateItem); + //case: [{val1: 'text1'}, {val2: 'text2} ...] + if(count === 1) { + result.push(obj); + //case: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...] + } else if(count > 1) { + //removed check of existance: item.hasOwnProperty('value') && item.hasOwnProperty('text') + if(item.children) { + item.children = this.makeArray(item.children); + } + result.push(item); + } + } else { + //case: ['text1', 'text2' ...] + result.push({value: item, text: item}); + } + } + } else { //case: {val1: 'text1', val2: 'text2, ...} + $.each(data, function (k, v) { + result.push({value: k, text: v}); + }); + } + return result; + }, + + option: function(key, value) { + this.options[key] = value; + if(key === 'source') { + this.sourceData = null; + } + if(key === 'prepend') { + this.prependData = null; + } + } + + }); + + List.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { + /** + Source data for list. + If **array** - it should be in format: `[{value: 1, text: "text1"}, {value: 2, text: "text2"}, ...]` + For compability, object format is also supported: `{"1": "text1", "2": "text2" ...}` but it does not guarantee elements order. + + If **string** - considered ajax url to load items. In that case results will be cached for fields with the same source and name. See also `sourceCache` option. + + If **function**, it should return data in format above (since 1.4.0). + + Since 1.4.1 key `children` supported to render OPTGROUP (for **select** input only): + @example + [ + {text: "group1", children: [ + {value: 1, text: "text1"}, + {value: 2, text: "text2"} + ]}, + ... + ] + + + @property source + @type string | array | object | function + @default null + **/ + source: null, + /** + Data automatically prepended to the beginning of dropdown list. + + @property prepend + @type string | array | object | function + @default false + **/ + prepend: false, + /** + Error message when list cannot be loaded (e.g. ajax error) + + @property sourceError + @type string + @default Error when loading list + **/ + sourceError: 'Error when loading list', + /** + if `true` and source is **string url** - results will be cached for fields with the same source. + Usefull for editable column in grid to prevent extra requests. + + @property sourceCache + @type boolean + @default true + @since 1.2.0 + **/ + sourceCache: true, + /** + Additional ajax options to be used in $.ajax() when loading list from server. + Useful to send extra parameters or change request method. + + @property sourceOptions + @type object|function + @default null + @since 1.5.0 + @example + sourceOptions: { + data: {param: 123}, + type: 'post' + } + + **/ + sourceOptions: null + }); + + $.fn.editabletypes.list = List; + +}(window.jQuery)); + +/** +Text input + +@class text +@extends abstractinput +@final +@example +awesome + +**/ +(function ($) { + "use strict"; + + var Text = function (options) { + this.init('text', options, Text.defaults); + }; + + $.fn.editableutils.inherit(Text, $.fn.editabletypes.abstractinput); + + $.extend(Text.prototype, { + render: function() { + this.renderClear(); + this.setClass(); + this.setAttr('placeholder'); + }, + + activate: function() { + if(this.$input.is(':visible')) { + this.$input.focus(); +// if (this.$input.is('input,textarea') && !this.$input.is('[type="checkbox"],[type="range"],[type="number"],[type="email"]')) { + if (this.$input.is('input,textarea') && !this.$input.is('[type="checkbox"],[type="range"]')) { + $.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length); + } + + if(this.toggleClear) { + this.toggleClear(); + } + } + }, + + //render clear button + renderClear: function() { + if (this.options.clear) { + this.$clear = $(''); + this.$input.after(this.$clear) + .css('padding-right', 24) + .css('height', 25) + .css('width', 300) + .keyup($.proxy(function(e) { + //arrows, enter, tab, etc + if(~$.inArray(e.keyCode, [40,38,9,13,27])) { + return; + } + + clearTimeout(this.t); + var that = this; + this.t = setTimeout(function() { + that.toggleClear(e); + }, 100); + + }, this)) + .parent().css('position', 'relative'); + + this.$clear.click($.proxy(this.clear, this)); + } + }, + + postrender: function() { + /* + //now `clear` is positioned via css + if(this.$clear) { + //can position clear button only here, when form is shown and height can be calculated +// var h = this.$input.outerHeight(true) || 20, + var h = this.$clear.parent().height(), + delta = (h - this.$clear.height()) / 2; + + //this.$clear.css({bottom: delta, right: delta}); + } + */ + }, + + //show / hide clear button + toggleClear: function(e) { + if(!this.$clear) { + return; + } + + var len = this.$input.val().length, + visible = this.$clear.is(':visible'); + + if(len && !visible) { + this.$clear.show(); + } + + if(!len && visible) { + this.$clear.hide(); + } + }, + + clear: function() { + this.$clear.hide(); + this.$input.val('').focus(); + } + }); + + Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { + /** + @property tpl + @default + **/ + tpl: '', + /** + Placeholder attribute of input. Shown when input is empty. + + @property placeholder + @type string + @default null + **/ + placeholder: null, + + /** + Whether to show `clear` button + + @property clear + @type boolean + @default true + **/ + clear: true + }); + + $.fn.editabletypes.text = Text; + +}(window.jQuery)); + +/** +Textarea input + +@class textarea +@extends abstractinput +@final +@example +awesome comment! + +**/ +(function ($) { + "use strict"; + + var Textarea = function (options) { + this.init('textarea', options, Textarea.defaults); + }; + + $.fn.editableutils.inherit(Textarea, $.fn.editabletypes.abstractinput); + + $.extend(Textarea.prototype, { + render: function () { + this.setClass(); + this.setAttr('placeholder'); + this.setAttr('rows'); + + //ctrl + enter + this.$input.keydown(function (e) { + if (e.ctrlKey && e.which === 13) { + $(this).closest('form').submit(); + } + }); + + }, + + //using `white-space: pre-wrap` solves \n <--> BR conversion very elegant! + /* + value2html: function(value, element) { + var html = '', lines; + if(value) { + lines = value.split("\n"); + for (var i = 0; i < lines.length; i++) { + lines[i] = $('
    ').text(lines[i]).html(); + } + html = lines.join('
    '); + } + $(element).html(html); + }, + + html2value: function(html) { + if(!html) { + return ''; + } + + var regex = new RegExp(String.fromCharCode(10), 'g'); + var lines = html.split(//i); + for (var i = 0; i < lines.length; i++) { + var text = $('
    ').html(lines[i]).text(); + + // Remove newline characters (\n) to avoid them being converted by value2html() method + // thus adding extra
    tags + text = text.replace(regex, ''); + + lines[i] = text; + } + return lines.join("\n"); + }, + */ + activate: function() { + $.fn.editabletypes.text.prototype.activate.call(this); + } + }); + + Textarea.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, { + /** + @property tpl + @default + **/ + tpl:'', + /** + @property inputclass + @default input-large + **/ + inputclass: 'input-large', + /** + Placeholder attribute of input. Shown when input is empty. + + @property placeholder + @type string + @default null + **/ + placeholder: null, + /** + Number of rows in textarea + + @property rows + @type integer + @default 7 + **/ + rows: 7 + }); + + $.fn.editabletypes.textarea = Textarea; + +}(window.jQuery)); + +/** +Select (dropdown) + +@class select +@extends list +@final +@example + + +**/ +(function ($) { + "use strict"; + + var Select = function (options) { + this.init('select', options, Select.defaults); + }; + + $.fn.editableutils.inherit(Select, $.fn.editabletypes.list); + + $.extend(Select.prototype, { + renderList: function() { + this.$input.empty(); + var escape = this.options.escape; + + var fillItems = function($el, data) { + var attr; + if($.isArray(data)) { + for(var i=0; i', attr), data[i].children)); + } else { + attr.value = data[i].value; + if(data[i].disabled) { + attr.disabled = true; + } + var $option = $('