当前位置: 首页 > news >正文

gitee第三方登录获取openid | python+Django |已跑通

注:此项目根据美多改编,qq第三方需要备案gitee不用

一、获取appid和appsecret

点击右侧账号设置

左侧菜单栏数据管理里有第三方应用

点击创建应用,根据你的具体情况设置

二、以下是事例代码,根据需要修改即可

setting.py

#QQ登录参数
GITEE_CLIENT_ID='这里填你的appid'
GITEE_CLIENT_SECRET='这里填你的appsecret'
GITEE_REDIRECT_URI='你的回调地址'

utils.py


from urllib.parse import urlencode, parse_qs
import json
import requestsclass OAuthGITEE(object):"""认证辅助工具类"""def __init__(self, client_id=None, client_secret=None, redirect_uri=None, state=None):self.client_id = client_idself.client_secret = client_secretself.redirect_uri = redirect_uriself.state = state   # 用于保存登录成功后的跳转页面路径def get_gitee_url(self):# 登录url参数组建data_dict = {'response_type': 'code','client_id': self.client_id,'redirect_uri': self.redirect_uri,'state': self.state}# 构建urlgitee_url = 'https://gitee.com/oauth/authorize?' + urlencode(data_dict)return gitee_url# 获取access_token值def get_access_token(self, code):# 构建参数数据data_dict = {'grant_type': 'authorization_code','client_id': self.client_id,'client_secret': self.client_secret,'redirect_uri': self.redirect_uri,'code': code}# 构建urlaccess_url = 'https://gitee.com/oauth/token?' + urlencode(data_dict)# 发送请求try:response = requests.post(access_url)# 提取数据# access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14data = response.textexcept:raise Exception('请求失败')# 提取access_token db88data=json.loads(data)access_token = data.get('access_token', None)if not access_token:raise Exception('access_token获取失败')return access_token# 获取open_id值def get_open_id(self, access_token):# 构建请求url#https://gitee.com/api/v5/user?access_token='46ea64dd3bfe20a52e6753669f58289f'url = 'https://gitee.com/api/v5/user?access_token=' +access_token
#'ddeb0c2623c27e4d99281880f004f0a9'# 发送请求try:response = requests.get(url)# 提取数据data = response.textexcept:raise Exception('请求失败')# 转化为字典try:data_dict = json.loads(data)# 获取openidopenid = data_dict.get('id')#unresolved attribute reference get for strexcept:raise Exception('openid获取失败')return openid

urls.py

from apps.oauth.views import *
from django.urls import path
urlpatterns = [path('gitee/authorization/',GITEELoginURLView.as_view()),path('oauth_callback/',OauthGITEEView.as_view())
]

view.py

import http
from django.http import JsonResponse
from django_redis.serializers import json
from utils.util import makeToken,checkToken
from apps.users.models import User
from django.contrib.auth import login
from apps.oauth.models import OAuthGITEEUser
from django.views import View
import json
from meiduo_mall import settings
from apps.oauth.utils import OAuthGITEEclass GITEELoginURLView(View):def get(self, request):gitee=OAuthGITEE(client_id=settings.GITEE_CLIENT_ID,client_secret=settings.GITEE_CLIENT_SECRET,redirect_uri=settings.GITEE_REDIRECT_URI,state=None)#https://gitee.com/oauth/authorize?client_id=b567b3ee312c21b489c265407cd918b742a301dd87040849296b73c38cb74647&redirect_uri=http%3A%2F%2F192.168.55.82%3A8080%2Flogin.html&response_type=codegitee_login_url = gitee.get_gitee_url()return JsonResponse({'code':0,'errmsg':'ok','login_url':gitee_login_url})class OauthGITEEView(View):def get(self, request):# 1. 获取code  378acode = request.GET.get('code')if code is None:return JsonResponse({'code': 400, 'errmsg': '参数不全'})# 2. 通过code换取tokengitee = OAuthGITEE(client_id=settings.GITEE_CLIENT_ID,client_secret=settings.GITEE_CLIENT_SECRET,redirect_uri=settings.GITEE_REDIRECT_URI,state='xxxxx')token = gitee.get_access_token(code)# 3. 再通过token换取openidopenid = gitee.get_open_id(token)return

models.py

from django.db import models# Create your models here.
from django.db import models
from utils.models import BaseModelclass OAuthGITEEUser(BaseModel):"""登录用户数据"""user = models.ForeignKey('users.User', on_delete=models.CASCADE, verbose_name='用户')openid = models.CharField(max_length=64, verbose_name='openid', db_index=True)class Meta:db_table = 'tb_oauth_gitee'verbose_name = '登录用户数据'verbose_name_plural = verbose_name

login.html

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>美多商城-登录</title><link rel="stylesheet" type="text/css" href="css/reset.css"><link rel="stylesheet" type="text/css" href="css/main.css"><script type="text/javascript" src="js/host.js"></script><script type="text/javascript" src="js/vue-2.5.16.js"></script><script type="text/javascript" src="js/axios-0.18.0.min.js"></script>
</head>
<body><div class="login_top clearfix"><a href="index.html" class="login_logo"><img src="images/logo02.png"></a></div><div class="login_form_bg" id='app'><div class="login_form_wrap clearfix"><div class="login_banner fl"></div><div class="slogan fl">商品美 · 种类多 · 欢迎光临</div><div class="login_form fr"><div class="login_title clearfix"><a href="javascript:;" class="cur">账户登录</a></div><div class="form_con"><div class="form_input cur"><form id="login-form" @submit.prevent="on_submit"><input type="text" v-model="username" @blur="check_username" name="" class="name_input" placeholder="请输入用户名或手机号"><div v-show="error_username" class="user_error" v-cloak>请填写用户名或手机号</div><input type="password" v-model="password" @blur="check_pwd" name="pwd" class="pass_input" placeholder="请输入密码"><div v-show="error_pwd" class="pwd_error" v-cloak>{{ error_pwd_message }}</div><div class="more_input clearfix"><input type="checkbox" v-model="remember"><label>记住登录</label><a href="/find_password.html">忘记密码</a></div><input type="submit" name="" value="登 录" class="input_submit"></form></div></div><div class="third_party"><a @click="gitee_login" class="gitee_login">gitee</a><a href="/register.html" class="register_btn">立即注册</a></div></div></div></div><div class="footer no-mp"><div class="foot_link"><a href="#">关于我们</a><span>|</span><a href="#">联系我们</a><span>|</span><a href="#">招聘人才</a><span>|</span><a href="#">友情链接</a></div><p>CopyRight © 2016 北京美多商业股份有限公司 All Rights Reserved</p><p>电话:010-****888    京ICP备*******8号</p></div><script type="text/javascript" src="js/login.js"></script>
</body>
</html>

login.js

var vm = new Vue({el: '#app',data: {host: host,error_username: false,error_pwd: false,error_pwd_message: '请填写密码',username: '',password: '',remember: false},methods: {// 获取url路径参数get_query_string: function (name) {var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');var r = window.location.search.substr(1).match(reg);if (r != null) {return decodeURI(r[2]);}return null;},// 检查数据check_username: function () {if (!this.username) {this.error_username = true;} else {this.error_username = false;}},check_pwd: function () {if (!this.password) {this.error_pwd_message = '请填写密码';this.error_pwd = true;} else {this.error_pwd = false;}},test: function () {console.log(123)},// 表单提交on_submit: function () {this.check_username();this.check_pwd();if (this.error_username == false && this.error_pwd == false) {axios.post(this.host + '/login/', {username: this.username,password: this.password,remembered:this.remember,}, {responseType: 'json',// 发送请求的时候, 携带上cookiewithCredentials: true,// crossDomain: true}).then(response => {if (response.data.code == 0) {// 跳转页面var return_url = this.get_query_string('next');if (!return_url) {return_url = '/index.html';}location.href = return_url;} else if (response.data.code == 400) {this.error_pwd_message = '用户名或密码错误';this.error_pwd = true;}}).catch(error => {if (error.response.status == 400) {this.error_pwd_message = '用户名或密码错误';} else {this.error_pwd_message = '服务器错误';}this.error_pwd = true;})}},// 用户点击 QQ第三方登录按钮之后, 触发该方法:gitee_login: function () {// 获取参数var next = this.get_query_string('next') || '/';// 拼接请求:axios.get(this.host + '/gitee/authorization/?next=' + next, {responseType: 'json',withCredentials:true,})// 成功的回调:.then(response => {if (response.data.code == 0) {// 成功则跳转location.href = response.data.login_url;};})// 失败的回调:.catch(error => {// 打印处理console.log(error);})}}
});

main.css

body{font-family:'Microsoft Yahei';font-size:12px;color:#666;}
html,body{height:100%}
/* 顶部样式 */
.header_con{background-color:#f7f7f7;height:29px;border-bottom:1px solid #dddddd
}.header{width:1200px;height:29px;margin:0 auto;
}.welcome,.login_info,.login_btn,.user_link{line-height:29px;
}.login_info{display:none;
}.login_info em{color:#ff8800}.login_info .quit{color:#666;padding-left:10px;
}.login_info .quit:hover{color:#ff8800;
}.login_btn a,.user_link a{color:#666;
}.login_btn a:hover,.user_link a:hover{color:#ff8800;
}.login_btn span,.user_link span{color:#cecece;margin:0 10px;
}/* logo、搜索框、购物车样式 */.search_bar{width:1200px;height:115px;margin:0 auto;}
.logo{width:150px;height:59px;margin:29px 0 0 17px;}.search_wrap{width:618px;height:60px;margin:34px 0 0 124px;}.search_con{width:616px;height:32px;border:1px solid #fe0000;background:url(../images/icons.png) 10px -340px no-repeat;}.search_con .input_text{width:470px;height:28px;border:0px;margin:2px 0 0 36px;outline:none;font-size:12px;color:#737272;font-family:'Microsoft Yahei'}.search_con .input_btn{width:100px;height:32px;background-color:#fe0000;border:0px;font-size:14px;color:#fff;font-family:'Microsoft Yahei';outline:none;cursor:pointer;
}.search_suggest{width:618px;height:26px;
}.search_suggest li{float:left;
}.search_suggest li a{color:#999;line-height:24px;margin-right:15px;
}.search_suggest li a:hover{color:#f80;
}.mt40{margin-top:40px}.guest_cart{width:200px;height:32px;position:absolute;top:62px;left:50%;margin-left:400px;z-index:9997;
}.guest_cart .cart_name{width:158px;height:32px;line-height:32px;border:1px solid #dddddd;display:block;background:url(../images/icons.png) 13px -302px no-repeat #fff;font-size:14px;color:#fe0000;text-indent:56px;position:relative;z-index:9998;
}.guest_cart .goods_count{width:40px;height:34px;text-align:center;line-height:34px;font-size:18px;font-weight:bold;color:#fff;background-color:#fe0000;position:relative;z-index:9998;
}
/*.guest_cart:hover .cart_name{*//*position:relative;*//*z-index:9999;*//*border-bottom:1px solid #fff;*/
/*}*/
.guest_cart:hover .cart_goods_show{display:block;
}
.cart_goods_show{position:absolute;/*width:320px;*//*padding:10px;*/background:#fff;border:1px solid #ddd;right:0px;top:33px;z-index:9997;display:none;
}
.cart_goods_show li{border-bottom:1px dotted #ddd;overflow:hidden;padding:0px 10px;width:320px;
}
.cart_goods_show li img{margin-top:10px;float:left;width:50px;height:50px;
}
.cart_goods_show li h4{float:left;line-height:70px;font-size:12px;margin-left:20px;width:220px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
}
.cart_goods_show li div{float:right;line-height:70px;font-size:13px;margin-right:20px;
}
/* 菜单、幻灯片样式 */.navbar_con{height:30px;border-bottom:1px solid #ddd;background:#f9f9f9}
.navbar{width:1200px;margin:0 auto;}
.navbar h1{width:200px;line-height:30px;text-align: center;font-size:14px;color:#666;background-color:#f1f1f1;font-weight:bold;}.navbar .subnav_con{width:200px;height:40px;background-color:#39a93e;position:relative;cursor:pointer;}.navbar .subnav_con h1{position:absolute;left:0;top:0;text-align:left;text-indent:40px}
.navbar .subnav_con span{display:block;width:16px;height:9px;background:url(../images/down.png) no-repeat;position:absolute;right:27px;top:16px;transition:all 300ms ease-in;
}.navbar .subnav_con:hover span{transform:rotateZ(180deg)}.navbar .subnav_con .subnav{position:absolute;left:0;top:40px;display:none;border-top:2px solid  #39a93e;}
.navbar .subnav_con:hover .subnav{display:block;}.navlist{margin-left:34px;}
.navlist li{float:left;line-height:30px;}
.navlist li a{color:#666;font-size:14px}
.navlist li a:hover{color:#ff8800}
.navlist .interval{margin:0 15px;}.pos_center_con{width:100%;height:350px;margin:0 auto;position:relative;}
.center_con{width:1200px;height:270px;margin:0 auto;}
.subnav{width:200px;height:270px; background:#707070}
.subnav li{height:44px;border-bottom:1px solid #eee;background:url(../images/icons.png) 178px -257px no-repeat #fff;}.subnav li a{display:block;height:44px;line-height:44px;text-indent:71px;font-size:14px;color:#333}
.subnav li a:hover{color:#ff8800}.subnav li .fruit{background:url(../images/icons.png) 28px 0px no-repeat;}
.subnav li .seafood{background:url(../images/icons.png) 28px -43px no-repeat;}
.subnav li .meet{background:url(../images/icons.png) 28px -86px no-repeat;}
.subnav li .egg{background:url(../images/icons.png) 28px -132px no-repeat;}
.subnav li .vegetables{background:url(../images/icons.png) 28px -174px no-repeat;}
.subnav li .ice{background:url(../images/icons.png) 28px -220px no-repeat;}.points{width:100%;height:10px;position:absolute;left:0;bottom:20px;text-align:center;}
.points li{display:inline-block;width:10px;height:10px;margin:0 5px;background-color:#9f9f9f;border-radius:5px;cursor:pointer;transition:all 800ms ease;}
.points li.active{background-color:#cecece;width:26px}.adv{width:240px;height:270px; overflow:hidden; background-color:gold;}
.adv a{display:block;float:left;}.slide{width:100%;height:350px;position:relative;}
.slide li{width:100%;height:350px;position:absolute;left:0px;top:0px;overflow:hidden;}
.slide li a{display:block;width:100%;height:350px;}
.slide li a img{position:absolute;left:50%;top:0px;margin-left:-800px;
}.prev,.next{width:17px;height:23px;background:url(../images/icons.png) 5px -383px no-repeat #000;position:absolute;left:50%;top:163px;cursor:pointer;margin-left:-380px;opacity:0.4;padding:5px;border-radius:4px}
.next{background-position:5px -423px;left:50%;margin-left:353px}.sub_menu_con{width:200px;height:30px;position:relative;}.sub_menu_con .sub_menu{left:0px;top:30px;margin-left:0px;background:rgba(0,0,0,0.6);z-index:1000;display:none;
}
.sub_menu_con:hover .sub_menu{display:block;
}.sub_menu{width:170px;height:330px;background:rgba(0,0,0,0.4);position:absolute;left:50%;top:0px;margin-left:-600px;padding:10px 15px}.sub_menu li{height:30px;
}.sub_menu li:hover{background:#fbf1f5;margin:0px -15px;padding:0 15px;cursor: pointer;
}
.sub_menu li:hover .level1 a{color:#333;
}
.sub_menu .level1 a{line-height:30px;color:#fff;font-size:14px;margin-right:10px;
}
.sub_menu li:hover .level1 a:hover{color:#f00;
}
.sub_menu li .level2{background:#fbf1f5;width:770px;height:320px;padding:15px;position:absolute;left:200px;top:0px;display:none;
}
.sub_menu li:hover .level2{display:block;
}
.list_group{overflow:hidden;
}
.group_name{width:80px;text-align:right;font-size:14px;line-height:24px;font-weight:bold;padding-right:20px;
}
.group_detail{width:630px;padding-bottom:5px;border-bottom:1px dotted #999;margin-bottom:8px;
}
.group_detail a{font-size:14px;color:#666;line-height:24px;margin-right:15px;
}
.group_detail a:hover{color:#f00;
}.news{width:200px;height:350px;background:rgba(251,241,245,0.9);position:absolute;left:50%;margin-left:400px;top:0px;
}.news_title{margin-top:10px;height:26px;overflow: hidden;
}.news_title h3{float: left;line-height:26px;text-indent:10px;font-size:14px;font-weight:bold;color:#333;
}.news_title a{float:right;line-height:26px;margin-right:10px;
}
.news_title a:hover{color:#f00
}
.news_list{margin:10px;
}
.news_list li a{line-height:24px;color:#666;display:block;width:180px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
}
.news_list li a:hover{color:#f00
}/* 商品列表样式 */.list_model{width:1200px;height:491px;margin:15px auto 0;}
.list_title{height:40px;border-bottom:1px solid #719ef7}
.model02 .list_title{border-bottom:1px solid #61c1e6}
.model03 .list_title{border-bottom:1px solid #c584ec}.list_title h3{height:40px;line-height:40px;font-size:20px;color:#333;font-weight:normal;}
.list_title .subtitle{height:30px;line-height:30px;margin-top:10px}
.list_title .subtitle a{color:#666;float:left;font-size:14px;line-height:30px;padding:0px 15px;}.list_title .subtitle .active{background:#719ef7;color:#fff;}
.model02 .list_title .subtitle .active{background:#61c1e6}
.model03 .list_title .subtitle .active{background:#c584ec}.goods_more{height:20px;margin-top:15px;color:#666}.goods_con{height:450px;}
.goods_banner{width:210px;height:450px;}
.goods_banner img{width:210px;height:315px;}.goods_list_con{width:990px;height:450px;float:left;}
/*.goods_list{width:990px;height:450px;display:none;}*/
.goods_list{width:990px;height:450px;} /*vue改写后*/
.goods_list_show{display:block;}/*.goods_list{width:990px;height:450px;}*/
.goods_list li{height:224px;width:197px;border-right:1px solid #ededed;border-bottom:1px solid #ededed;float:left}
.goods_list .goods_pic{width:130px;height:130px;display:block;margin:20px auto 0;}.goods_list li h4{width:200px;margin:15px auto 0;text-align:center;}
.goods_list li h4 a{font-size:12px;color:#666;font-weight:normal;line-height:24px;width:160px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:block;margin:0 auto;}
.goods_list li h4 a:hover{color:#ff8800}.goods_list li img{width:130px;height:130px;}
.goods_list li .price{text-align:center;font-size:16px;color:#ff0027;margin-top:5px;}
.channel{height:32px;text-align:center;background:#6294f6
}.model02 .channel{background:#3eb8e9
}
.model03 .channel{background:#bf70ef
}.channel a{color:#fff;font-size:14px;padding:0px 5px;line-height:32px;
}.key_words{background:#719ef7;width:190px;height:83px;padding:10px;
}.model02 .key_words{background:#61c1e6;
}.model03 .key_words{background:#c584ec;
}.key_words a{display:inline-block;width:50px;color:#fff;font-size:12px;line-height:28px;margin:0px 5px;
}
.key_words a:hover{text-decoration:underline;
}/* 页面底部样式 */
.footer{border-top:1px solid #fe0000;margin:30px 0;
}.foot_link{text-align:center;margin-top:30px;}
.foot_link a,.foot_link span{color:#4e4e4e;}
.foot_link a:hover{color:#ff8800}
.foot_link span{padding:0 10px}
.footer p{text-align:center; margin-top:10px;}/* 二级页面面包屑导航 */
.breadcrumb{width:1200px;height:40px;margin:0 auto;
}
.breadcrumb a{line-height:40px;color:#fe0000}
.breadcrumb a:hover{color:#ff8800}
.breadcrumb span{line-height:40px;color:#fe0000;padding:0 5px;}.main_wrap{width:1200px;margin:0 auto;}
.l_wrap{width:200px;}
.r_wrap{width:980px;}/* 新品推荐样式 */.new_goods{border:1px solid #ededed;border-top:2px solid #f80000;padding-bottom:10px;
}.new_goods h3{height:33px;line-height:33px;background-color:#fcfcfc;border-bottom:1px solid #ededed;font-size:14px;font-weight:normal;text-indent:10px;
}.new_goods ul{width:160px;margin:0 auto;overflow:hidden;}
.new_goods li{border-bottom:1px solid #ededed;margin-bottom:-1px;}
.new_goods li img{display:block;width:150px;height:150px;margin:10px auto;}
.new_goods li h4{width:160px;margin:0 auto;}
.new_goods li h4 a{font-weight:normal;color:#666;display:block;width:160px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.new_goods li .price{font-size:14px;color:#da260e;margin:10px auto;}.center_con2{width:1200px;overflow:hidden;margin:15px auto 0}.time_buy{width:948px;height:248px;border:1px solid #ededed;border-top:1px solid #e83632;overflow: hidden;
}
.time_buy_title{height:39px;border-bottom:1px solid #ededed;
}
.time_buy_title h3{line-height:39px;font-size:18px;color:#e83632;text-indent:40px;background:url(../images/clock.jpg) left center no-repeat;
}
.time_count{height:39px;margin-right:15px;
}
.time_count span{float: left;line-height:39px;color:#e83632;margin-right:10px;
}
.time_count b{float:left;width:28px;height:28px;background:#e83632;font-size:18px;text-align:center;line-height:28px;font-weight:normal;font-family: Arial;color:#fff;border-radius:4px;margin-top:5px;
}.time_count i{float:left;line-height:39px;font-size:18px;font-style:normal;color:#e83632;margin:0px 5px;
}.time_goods_list_con{width:952px;height:208px;
}.time_goods_list{float: left;width:237px;height:208px;border-right:1px solid #ededed;
}.time_goods_list p{text-align:center;font-size:20px;color:#ff0027;margin-top:10px;
}.time_goods_list .pic_link{display:block;width:120px;height:120px;margin:20px auto 0;
}.time_goods_list .pic_link img{width: 120px;height: 120px;
}.time_goods_list .prize{display:block;width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:5px auto;color:#666;
}/* 商品列表样式 */.sort_bar{height:30px;background-color:#fbf3f3}
.sort_bar a{display:block;height:30px;line-height:30px;padding:0 20px;float:left;color:#000}
.sort_bar .active{background-color:#f80000;color:#fff;}.goods_type_list{margin:10px auto 0;
}.goods_type_list li{width:196px;float:left;margin-bottom:10px
}.goods_type_list li img{width:160px;height:160px;display:block;margin:10px auto;}
.goods_type_list li h4{width:160px;margin:0 auto;}
.goods_type_list li h4 a{font-weight:normal;color:#666;display:block;width:160px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.operate{width:160px;margin:10px auto;position:relative;}
.goods_type_list .operate .price{color:#da260e; font-size:14px;}
.goods_type_list .operate .unit{color:#999;padding-left:5px;}
.goods_type_list .operate .add_goods{display:inline-block;width:15px;height:15px;background:url(../images/shop_cart.png);position:absolute;right:0;top:3px;}/* 分页样式 */.pagenation{height:32px;text-align:center;font-size:0;margin:30px auto;}
.pagenation a{display:inline-block;border:1px solid #d2d2d2;background-color:#f8f6f7;font-size:12px;padding:5px 10px;color:#666;margin:5px}.pagenation .active{background-color:#fff;color:#43a200}/* 商品详情样式 */
.goods_detail_con{width:1198px;border:1px solid #ededed;margin:0 auto 20px;
}.goods_detail_pic{width:350px;height:350px;margin:24px 0 0 24px;border:1px solid #ededed}
.goods_detail_pic img{width:350px;height:350px;}
.goods_detail_list{width:730px;margin:24px 24px 0 0;
}
.goods_detail_list h3{font-size:24px;line-height:24px;color:#666;font-weight:normal;}
.goods_detail_list p{color:#666;line-height:40px;}
.price_bar{height:72px;background-color:#fff5f5;line-height:72px;}
.price_bar .show_pirce{font-size:20px;color:#ff3e3e;padding-left:20px}
.price_bar .show_pirce em{font-style:normal;font-size:36px;padding-left:10px}
.price_bar .show_unit{padding-left:150px}
.price_bar .goods_judge{float:right;border-left:1px solid #999;height:20px;line-height:20px;margin-right:20px;padding-left:20px;margin-top:40px;}
.price_bar .goods_judge:hover{text-decoration:underline}
.goods_num{height:52px;margin-top:19px;}
.goods_num .num_name{width:70px;height:52px;line-height:52px;}
.goods_num .num_add{width:75px;height:50px;border:1px solid #dddddd}
.goods_num .num_add input{width:49px;height:50px;text-align:center;line-height:50px;border:0px;outline:none;font-size:14px;color:#666}
.goods_num .num_add .add,.goods_num .num_add .minus{width:25px;line-height:25px;text-align:center;border-left:1px solid #ddd;border-bottom:1px solid #ddd;color:#666;font-size:14px}
.goods_num .num_add .minus{border-bottom:0px}.total{height:35px;line-height:35px;margin-top:25px;}
.total em{font-style:normal;color:#ff3e3e;font-size:18px}.operate_btn{height:40px;margin-top:25px;margin-bottom:20px;font-size:0;position:relative;}
.operate_btn .buy_btn,.operate_btn .add_cart{display:inline-block;width:178px;height:38px;border:1px solid #c40000;font-size:14px;color:#c40000;line-height:38px;text-align:center;background-color:#ffeded;}
.operate_btn .add_cart{background-color:#c40000;color:#fff;margin-left:10px;position:relative;z-index:10;}.type_select{overflow:hidden;margin-top:10px;}
.type_select label{float:left;width:70px;line-height:42px;}
.type_select a{float:left;line-height:40px;border:1px solid #ccc;padding:0px 10px;color:#5e5e5e;margin-right:10px;}
.type_select a:hover{border:1px solid #e3101e;color:#e3101e}
.type_select .select{border:1px solid #e3101e;background:url(../images/selected.png) right bottom no-repeat;}.add_jump{width:20px;height:20px;background-color:#c40000;position:absolute;left:268px;top:10px;border-radius:50%;z-index:9;display:none;}.detail_tab{height:35px;border-bottom:1px solid #e3101e;
}.detail_tab li{height:34px;line-height:34px;padding:0 30px;font-size:14px;color:#333333;float:left;border:1px solid #e8e8e8;border-bottom:0px;cursor:pointer;background-color:#faf8f8}
.detail_tab li.active{border-top:2px solid #e3101e;position:relative;background-color:#fff;border-left:1px solid #e3101e;border-right:1px solid #e3101e;top:-1px;height:35px;}.tab_content{display:none;}
.current{display:block;}
.tab_content dt{margin-top:10px;font-size:16px;color:#c40000}
.tab_content dd{line-height:24px;margin-top:5px;}/* 登录页 */
.login_top{width:960px;height:130px;margin:0 auto;}
.login_logo{display:block;width:193px;height:76px;margin-top:30px;}
.login_form_bg{height:480px;background-color:#810101}
.no-mp{margin-top:0px;}
.login_form_wrap{width:1000px;height:480px;margin:0 auto;}
.login_banner{width:500px;height:386px;background:url(../images/login_banner.png) no-repeat;margin-top:40px;}
.slogan{width:30px;height:300px;font-size:24px;color:#f9dddd;text-align:center;line-height:30px;margin:65px 0 0 30px}
.login_form{width:368px;height:378px;border:1px solid #c6c6c5;background-color:#fff; margin-top:50px;}.login_title{height:60px;width:308px;margin:10px auto;border-bottom:1px solid #e0e0e0;}/*.login_title a{width:153px;line-height:20px;font-size:18px;color:#5e5e5e;text-align:center;float:left;margin-top:20px;}*/
.login_title a{width:308px;line-height:20px;font-size:18px;color:#5e5e5e;text-align:center;float:left;margin-top:20px;}/*.login_title a:first-child{border-right:1px solid #e0e0e0}*/
/*.login_title a.cur{color:#e3101e}*/
.form_input{width:308px;height:210px;margin:20px auto;position:relative;display:none;}
.form_con .cur{display:block;}
.bar_code_con{width:167px;height:172px;margin:0px auto;}
.bar_code_tip{text-align:center;margin-top:10px;font-size:12px;}
.third_party{border-top:1px solid #e0e0e0;margin-top:30px}
.gitee_login, .register_btn {float: left;line-height: 30px;margin-left: 15px;margin-top: 7px;color: #666;font-size: 18px;text-indent: 22px;background: url(../images/gitee.jpg) left 7px no-repeat;
}
.gitee_login:hover, .register_btn:hover {color: #e3101e;text-decoration: underline;
}.register_btn{background:url(../images/icons02.png) left 9px no-repeat;float:right;margin-right:15px}.name_input,.pass_input{width:306px;height:36px;border:1px solid #e0e0e0;background:url(../images/icons02.png) 280px -41px no-repeat #f8f8f8;outline:none;font-size:14px;text-indent:10px;position: absolute;left:0;top:0}
.pass_input{top:65px;background-position:280px -95px;}.user_error,.pwd_error{color:#f00;position:absolute;left:0;top:43px;}.pwd_error{top:110px;}.more_input{position:absolute;left:0;top:130px;width:100%}.more_input input{float:left;margin-top:2px;}
.more_input label{float:left;margin-left:10px;}
.more_input a{float:right;color:#666}
.more_input a:hover{color:#ff8800}.input_submit{width:100%;height:40px;position:absolute;left:0;top:180px;background-color:#ff5757;color:#fff;font-size:22px;border:0px;font-family:'Microsoft Yahei';cursor:pointer;}/* 注册页面 */
.register_con{width:720px;overflow: hidden;margin:50px auto 0;background:url(../images/interval_line.png) 300px center no-repeat;
}.l_con{width:300px;}
.reg_logo{width:200px;height:76px;float:right;margin-right:30px;}
.reg_slogan{width:300px;height:30px;float:right;text-align:right;font-size:22px;color:#fe0000;margin:20px 30px 0 0;}
.reg_banner{width:251px;height:329px;background:url(../images/register_banner.png) no-repeat;float:right; margin:20px 10px 0 0;opacity:0.5}.r_con{width:420px;overflow:hidden;}
.reg_title{width:380px;height:50px;float:left;margin-left:30px;border-bottom:1px solid #e0e0e0}
.reg_title h1{height:50px;line-height:50px;float:left;font-size:24px;color:#a8a8a8;font-weight:bold;}
.reg_title a{float:right;height:20px;line-height:20px;font-size:16px;color:#c40000;padding-right:20px;background:url(../images/icons02.png) 35px 3px no-repeat;margin-top:15px}.reg_form{width:380px;margin:30px 0 0 30px;float:left;position:relative;}
.reg_form li{height:70px;}
.reg_form li label{width:75px;height:40px;line-height:40px;float:left;font-size:14px;color:#a8a8a8;text-align:right;padding-right:10px;}
.reg_form li input{width:288px;height:38px;border:1px solid #e0e0e0;float:left;outline:none;text-indent:10px;background-color:#f8f8f8}
.reg_form li .msg_input,.reg_form li .msg_input{width:170px;
}
.reg_form .get_msg_code{float: left;width:108px;height:38px;text-align:center;line-height:38px;border:1px solid #e0e0e0;margin-left:10px;color:#333;
}
.reg_form .get_msg_code:hover{color:#f80000;
}
.reg_form .pic_code{float: left;width:110px;height:40px;margin-left:10px;
}.reg_form li.agreement input{width:15px;height:15px;float:left;margin-top:13px;margin-left:87px;}
.reg_form li.agreement label{width:250px;float:left;margin-left:10px;text-align:left;}
.reg_form li.reg_sub input{width:380px;height:40px;background-color:#ff5757;font-size:18px;color:#fff;font-family:'Microsoft Yahei';cursor:pointer;}
.reg_form li .error_tip{float:left;height:30px;line-height:30px;margin-left:87px;color:#e62e2e;}
.reg_form li .error_tip2{float:left;height:20px;line-height:20px;margin-left:87px;color:#e62e2e;}.sub_page_name{font-size:20px;color:#666;margin:60px 0 0 43px}.total_count{width:1200px;margin:0 auto;height:40px;line-height:40px;font-size:14px;
}
.total_count em{font-size:16px;color:#ff4200;margin:0 5px;
}.cart_list_th{width:1198px;border:1px solid #ddd;background-color:#f7f7f7;margin:0 auto;}
.cart_list_th li{height:40px;line-height:40px;float:left;text-align:center;}
.cart_list_th .col01{width:36%;}
.cart_list_th .col02{width:6%;}
.cart_list_th .col03{width:13%;}
.cart_list_th .col04{width:12%;}
.cart_list_th .col05{width:15%;}
.cart_list_th .col06{width:18%;}.cart_list_td{width:1198px;border:1px solid #ddd;background-color:#fff9f9;margin:0 auto;margin-top:-1px;}
.cart_list_td li{height:120px;line-height:120px;float:left;text-align:center;}.cart_list_td .col01{width:4%;}
.cart_list_td .col02{width:12%;}
.cart_list_td .col03{width:20%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.cart_list_td .col04{width:6%;}
.cart_list_td .col05{width:13%;}
.cart_list_td .col06{width:12%;}
.cart_list_td .col07{width:15%;}
.cart_list_td .col08{width:18%;}.cart_list_td .col02 img{width:100px;height:100px;border:1px solid #ddd;display:block;margin:10px auto 0;}
.cart_list_td .col03{height:48px;text-align:left;line-height:24px;margin-top:38px;}
.cart_list_td .col03 em{color:#999}
.cart_list_td .col08 a{color:#666}.cart_list_td .col06 .num_add{width:98px;height:28px;border:1px solid #ddd;margin:40px auto 0;}
.cart_list_td .col06 .num_add a{width:29px;height:28px;line-height:28px;background-color:#f3f3f3;font-size:14px;color:#666}
.cart_list_td .col06 .num_add input{width:38px;height:28px;text-align:center;line-height:30px;border:0px;display:block;float:left;outline:none;border-left:1px solid #ddd;border-right:1px solid #ddd;}.settlements{width:1198px;height:78px;border:1px solid #ddd;background-color:#fff4e8;margin:-1px auto 0;}
.settlements li{line-height:78px;float:left;}
.settlements .col01{width:4%;text-align:center}
.settlements .col02{width:12%;}
.settlements .col03{width:69%; height:48px; line-height:28px;text-align:right;margin-top:10px;}
.settlements .col03 span{color:#ff0000;padding-right:5px}
.settlements .col03 em{color:#ff3d3d;font-size:22px;font-weight:bold;}
.settlements .col03 span{color:#ff0000;}
.settlements .col03 b{color:#ff0000;font-size:14px;padding:0 5px;}.settlements .col04{width:14%;text-align:center;float:right;}
.settlements .col04 a{display:block;height:78px;background-color:#ff3d3d;text-align:center;line-height:78px;color:#fff;font-size:24px}.common_title{width:1200px;margin:20px auto 0;font-size:14px;}.common_list_con{width:1200px;border:1px solid #dddddd;border-top:2px solid #e3101e;margin:10px auto 0;background-color:#f7f7f7;position:relative;}.common_list_con dl{margin:20px;}
.common_list_con dt{font-size:14px;font-weight:bold;margin-bottom:10px}
.common_list_con dd{margin-bottom:10px;}
.common_list_con dd.current{font-size:14px;font-weight:bold;}
.common_list_con dd input{vertical-align:bottom;margin-right:10px}.edit_site{position:absolute; right:20px;top:30px;width:100px;height:30px;background-color:#fe0000;text-align:center;line-height:30px;color:#fff}.pay_style_con{margin:20px;}
.pay_style_con input{float:left;margin:14px 7px 0 0;}
.pay_style_con label{float:left;border:1px solid #ccc;background-color:#fff;padding:10px 10px 10px 40px;margin-right:25px}.pay_style_con .cash{background:url(../images/pay_icons.png) 8px top no-repeat #fff;}
.pay_style_con .weixin{background:url(../images/pay_icons.png) 6px -36px no-repeat #fff;}.pay_style_con .zhifubao{background:url(../images/pay_icons.png) 12px -72px no-repeat #fff;width:50px;height:16px}.pay_style_con .bank{background:url(../images/pay_icons.png) 6px -108px no-repeat #fff;}.goods_list_th{height:40px;border-bottom:1px solid #ccc}
.goods_list_th li{float:left;line-height:40px;text-align:center;}
.goods_list_th .col01{width:35%}
.goods_list_th .col02{width:10%}
.goods_list_th .col03{width:25%}
.goods_list_th .col04{width:15%}
.goods_list_th .col05{width:15%}.goods_list_td{height:80px;border-bottom:1px solid #eeeded}
.goods_list_td li{float:left;line-height:80px;text-align:center;}
.goods_list_td .col01{width:4%}
.goods_list_td .col02{width:6%}
.goods_list_td .col03{width:25%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.goods_list_td .col04{width:10%}
.goods_list_td .col05{width:25%}
.goods_list_td .col06{width:15%}
.goods_list_td .col07{width:15%}.goods_list_td .col02{text-align:right}
.goods_list_td .col02 img{width:63px;height:63px;border:1px solid #ddd;display:block;margin:7px 0;float:right;}
.goods_list_td .col03{text-align:left;text-indent:20px}.settle_con{margin:10px}
.total_goods_count,.transit,.total_pay{line-height:24px;text-align:right}
.total_goods_count em,.total_goods_count b,.transit b,.total_pay b{font-size:14px;color:#ff4200;padding:0 5px;}.order_submit{width:1200px;margin:20px auto;}
.order_submit a{width:160px;height:40px;line-height:40px;text-align:center;background-color:#fe0000;color:#fff;font-size:16px;display:block;float:right}.order_list_th{width:1198px;border:1px solid #ddd;background-color:#f7f7f7;margin:20px auto 0;}
.order_list_th li{float:left;height:30px;line-height:30px}
.order_list_th .col01{width:20%;margin-left:20px}
.order_list_th .col02{width:28%}.order_list_table{width:1200px;border-collapse:collapse;border-spacing:0px;border:1px solid #ddd;margin:-1px auto 0;
}.order_list_table td{border:1px solid #ddd;text-align:center;
}.order_goods_list{border-bottom:1px solid #ddd;margin-bottom:-2px;}
.order_goods_list li{float:left; height:80px;line-height:80px;}
.order_goods_list .col01{width:20%}
.order_goods_list .col01 img{width:60px;height:60px;border:1px solid #ddd;margin:10px auto;}
.order_goods_list .col02{width:50%;text-align:left;}
.order_goods_list .col02 span{float: left;width: 197px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
}
.order_goods_list .col02 em{color:#999;margin-left:10px;float: left;}
.order_goods_list .col03{width:10%}
.order_goods_list .col04{width:20%}.oper_btn{display:inline-block;border:1px solid #ddd;color:#666;padding:5px 10px}.popup_con{display:none;}
.popup{width:300px;height:150px;border:1px solid #dddddd;border-top:2px solid #00bc6f;background-color:#f7f7f7;position:fixed;left:50%;margin-left:-150px;top:50%;margin-top:-75px;z-index:1000;
}.popup p{height:150px;line-height:150px;text-align:center;font-size:18px;}.mask{width:100%;height:100%;position:fixed;left:0;top:0;background-color:#000;opacity:0.3;z-index:999;}.main_con{width:1200px;margin:0 auto;background:url(../images/left_bg.jpg) repeat-y;
}.left_menu_con{width:200px;float:left;
}.left_menu_con h3{font-size:16px;line-height:40px;border-bottom:1px solid #ddd;text-align:center;margin-bottom:10px;
}.left_menu_con ul li{line-height:40px;text-align:center;font-size:14px;
}.left_menu_con ul li a{color:#666;
}.left_menu_con ul li .active{color:#ff8800;font-weight:bold;
}.right_content{width:980px;float:right;min-height:500px;
}.w980{width:980px;
}.w978{width:978px;
}.common_title2{height:20px;line-height:20px;font-size:16px;margin:10px 0;}
.user_info_list{background-color:#f9f9f9;margin:10px 0 15px;padding:10px 0;height: 110px;
}.user_info_list li{line-height:30px;text-indent:30px;font-size:14px;
}.user_info_list li span{width:100px;float:left;text-align:right;
}.info_con{width:980px;
}.info_l{width:600px;float:left;
}.info_r{width:360px;float:right;
}.email{width: 200px;
}.error_email_tip{color: #da2828;text-indent: 130px;font-size: 12px;
}.site_top_con{overflow: hidden;margin-bottom:10px;
}.site_top_con a{float:left;width:100px;line-height:28px;border:1px solid #da2828;text-align:center;color:#c81919;font-weight:bold;background:#f7d5d5;
}
.site_top_con span{float: left;line-height:30px;margin-left:10px;
}
.site_top_con b{color:#f80;
}.site_con{border:1px solid #ddd;padding:15px;margin-bottom:20px;position:relative;
}.site_title{overflow: hidden;
}.site_title h3{float: left;font-size:16px;line-height:22px;
}.site_title em{float: left;font-size:12px;line-height:16px;color:#fff;background:#f80;padding:2px;margin-left:20px;
}
.site_title span{float:right;font-size:20px;line-height:22px;cursor:pointer;
}.site_title a{float: left;width:22px;height:22px;background:url(../images/edit.png) no-repeat;margin-left:10px;
}.site_list{margin-top:10px;
}
.site_list li{line-height:28px;overflow: hidden;
}
.site_list li span{float: left;width:100px;text-align:right;font-size:12px;color:#999;
}
.site_list li b{font-weight:normal;color:#333;font-size:12px;
}
.down_btn{position: absolute;bottom:15px;right:15px;font-size:0px;
}.down_btn a{color:#3eb8e9;font-size:12px;margin:0px 10px;
}/*.pop_con{*//*display:none;*/
/*}*/.site_pop{width:500px;height:310px;background:#fff;border:1px solid #dddddd;background-color:#f7f7f7;position:fixed;left:50%;margin-left:-251px;top:50%;margin-top:-156px;z-index:1000;
}.site_pop_title{background:#810101;margin-left:-14px;margin-right:-14px;margin-top:-14px;margin-bottom:10px;overflow:hidden;
}.site_pop_title h3{color:#fff;float: left;line-height:30px;text-indent:20px;font-size:16px;
}.site_pop_title a{color:#fff;float:right;font-size:26px;margin-right:10px;line-height:30px;
}.pass_change_con{background:#f9f9f9;
}.site_con dt{font-size:14px;line-height:30px;text-indent:30px;font-weight:bold;
}.site_con dd{font-size:14px;line-height:30px;text-indent:30px;
}.site_con .form_group{height:40px;line-height:40px;
}.site_con .form_group label{width:100px;float:left;text-align:right;font-size:14px;height:40px;line-height:40px;
}.site_con .form_group input{width:300px;height:25px;border:1px solid #ddd;float:left;outline:none;margin-top:7px;text-indent:10px;
}
.site_con .form_group2{height:90px;
}
.site_con .form_group select{width:120px;height:27px;border:1px solid #ddd;float:left;outline:none;margin-top:7px;margin-right:10px;
}.site_con .form_group .phone_code_input{width:200px;
}.site_con .form_group .phone_code{float:left;width:90px;line-height:25px;text-align:center;border:1px solid #ddd;margin-top:7px;margin-left:8px;background:#fff;color:#333;
}
.site_con .form_group .phone_code:hover{color:#f00;
}.site_area{width:280px;height:60px;border:1px solid #ddd;outline:none;padding:10px;
}
.info_submit{width:80px;height:30px;background-color:#fe0000;border:0px;color:#fff;margin:10px 0 10px 100px;cursor:pointer;font-family:'Microsoft Yahei'
}
.info_reset{margin:10px 0 10px 10px;background-color:#bd0c0c;
}
.stress{color:#ff8800;
}.judge_con{width:1200px;margin:0px auto;overflow:hidden;
}.judge_con .judge_goods{width:248px;height:300px;border:1px solid #ededed;background:#fff;
}.judge_goods ul{width:160px;margin:50px auto 0;overflow:hidden;}
.judge_goods li{overflow: hidden;margin-bottom:10px}
.judge_goods li img{display:block;width:130px;height:130px;margin:10px auto;}
.judge_goods li h4{width:160px;margin:0 auto;}
.judge_goods li h4 a{font-weight:normal;color:#666;display:block;width:160px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.judge_goods li .price{font-size:14px;color:#da260e;text-align:center}
.judge_goods li input{display:block;margin:10px auto 0;}.judge_con .judge_goods_input{width:898px;padding:20px;height:260px;border:1px solid #ededed;background:#fff;
}.judge_tip{font-size:12px;color:#f80;margin-bottom:10px}
.judge_item{overflow:hidden;margin-bottom:10px}
.judge_item label{float:left;width:120px;line-height:42px;color:#999}
.stars{width:85px;height:16px;float:left;margin-top:11px}
.stars .star_off{float:left;width:17px;height:16px;background:url(../images/stars.png) no-repeat;}
.stars .light{background-position:left -16px;}.judge_item .score{float:left;line-height:42px;font-size:12px;margin-left:10px;color:#666;}.feelings a{float:left;line-height:40px;border:1px solid #ccc;padding:0px 10px;color:#5e5e5e;margin-right:10px;}
.feelings a:hover{border:1px solid #e3101e;color:#e3101e}
.feelings .select{border:1px solid #e3101e;background:url(../images/selected.png) right bottom no-repeat;}
.judge_area{float:left;width:735px;height:70px;margin-top:10px;border:1px solid #ccc;outline:none;padding:15px;
}
.judge_sub{width:100px;height:32px;background-color:#fe0000;border:0px;font-size:14px;color:#fff;font-family:'Microsoft Yahei';outline:none;cursor:pointer;text-align:center;margin-top:10px;margin-left:120px;
}
.no_name{margin-left:15px;}.judge_list_con{margin-top:10px;overflow: hidden;width:100%;
}.judge_list_con li{overflow:hidden;border-bottom:1px solid #ededed;padding:20px 0;
}.user_info{width:200px;
}.user_info img{width:40px;height:40px;border-radius:20px;float:left;
}
.user_info b{line-height:40px;float: left;font-weight:normal;margin-left:20px;font-size:12px;
}.judge_info{width:780px;
}.stars_1,.stars_2,.stars_3,.stars_4,.stars_5{width:85px;height:17px;background:url(../images/stars.png) left -80px no-repeat;margin-bottom:10px;
}.stars_1{background-position:left -16px;
}
.stars_2{background-position:left -32px;
}
.stars_3{background-position:left -48px;
}
.stars_4{background-position:left -64px;
}.judge_detail{font-size:12px;line-height:20px;
}.find_header{width: 990px;height: 120px;margin:0px auto;
}.find_header img{float:left;margin-top:30px;
}.find_form{width: 990px;height: 450px;border:1px solid #e6e6e6;margin:0px auto 30px;
}.step{width:988px;height:50px;margin:0px auto;background:url(../images/find-password.png) no-repeat;margin-top:75px;
}.step-1{background-position:0px -150px;
}.step-2{background-position:0px -100px;
}.step-3{background-position:0px -50px;
}.step-4{background-position:0px 0px;
}.form_step{width:430px;height:200px;margin:70px auto 0;
}.form_step .form_group{height:45px;margin-bottom:10px;position:relative;
}.form_step .form_group label{width:100px;float:left;text-align:right;font-size:14px;height:40px;line-height:40px;
}.form_step .form_group .input_txt{width:300px;height:25px;border:1px solid #ddd;float:left;outline:none;margin-top:7px;text-indent:10px;
}.form_step .form_group .input_txt2{width:180px;
}.form_step .form_group .pic_code{width:110px;height:27px;margin-left:10px;margin-top:7px;
}.form_step .form_group .input_sub{width:100px;height:26px;background:#c00;color:#fff;border:0px;margin:10px 0px 0px 100px;cursor:pointer;
}.form_step .form_group .error{position:absolute;left:100px;top:40px;color:red;font-size:12px;
}.form_step .form_group .phone_code{float:left;width:110px;line-height:25px;text-align:center;border:1px solid #ddd;margin-top:7px;margin-left:8px;background:#fff;color:#333;
}.pass_change_finish{text-align:center;margin-top:100px;color:red;font-size:20px;
}.order_success{margin:30px auto;background:url(../images/success.png) 50px center no-repeat;
}.order_success p{text-indent:140px;margin-bottom:10px;
}.order_success p em{font-size:20px;color:#fe0000;
}
.order_success p a{color:#f80;
}
.order_success p a:hover{text-decoration:underline;
}.time_count_bar{width:730px;height:39px;background:url(../images/time_count_bg.png);margin-bottom:10px;
}.count_icon{float:left;height:39px;background:url(../images/shine.png) 10px center no-repeat;line-height:39px;color:#fff;text-indent:30px;font-size:14px;
}.time_count_bar .time_count span{color:#fff;
}
.time_count_bar .time_count b{background:#333;
}
.time_count_bar .time_count i{color:#fff;
}/*  确认弹框 */
.pop_con2{display:none;
}.confirm_pop{width:350px;height:160px;background:#fff;border:1px solid #dddddd;background-color:#f7f7f7;position:fixed;left:50%;margin-left:-176px;top:50%;margin-top:-81px;z-index:1000;
}.confirm_pop p{margin:30px 0 0 40px;font-size:16px;font-family:'Microsoft Yahei'
}.confirm_pop_title{background:#810101;height:30px;
}.confirm_pop_title h3{color:#fff;float: left;line-height:30px;text-indent:20px;font-size:16px;
}.confirm_pop_title a{color:#fff;float:right;font-size:26px;margin-right:10px;line-height:30px;
}.confirm_submit{width:80px;height:30px;background-color:#fe0000;border:0px;color:#fff;margin:30px 0px 10px 80px;cursor:pointer;font-family:'Microsoft Yahei'
}.confirm_cancel {background-color:#bd0c0c;margin-left:30px;
}/*收货地址错误提示*/
.receiver_error,.mobile_error,.place_error,.tel_error,.email_error {color:#f00;margin-left:5px;
}/*修改密码错误提示*/
.old_pwd_error,.new_pwd_error,.new_cpwd_error {color:#f00;margin-left:5px;
}/*修改分页插件样式*/
.ui-pagination-container {line-height: 20px;
}.ui-pagination-container .ui-pagination-page-item.active {background: #f80000;border-color: #f80000;
}/*详情页添加数量提示样式*/
.overtip{width:92px;height:25px;border:1px solid #ddd;position:absolute;left:725px;top:396px;z-index:999;text-align:center;line-height:25px;font-size:12px;color:#666;background:#fff;border-left:1px solid #e62834;display:none;
}.overtip i{position:absolute;left:-5px;top:10px;width:5px;height:7px;background: url(../images/arrow.png);
}

相关文章:

gitee第三方登录获取openid | python+Django |已跑通

注&#xff1a;此项目根据美多改编&#xff0c;qq第三方需要备案gitee不用 一、获取appid和appsecret 点击右侧账号设置 左侧菜单栏数据管理里有第三方应用 点击创建应用&#xff0c;根据你的具体情况设置 二、以下是事例代码&#xff0c;根据需要修改即可 setting.py #QQ登…...

Enovia许可分析的自动化解决方案

随着企业产品生命周期管理&#xff08;PLM&#xff09;需求的不断演变&#xff0c;Enovia许可分析已成为确保资源优化和合规性的关键环节。然而&#xff0c;传统的手动许可分析方法往往效率低下、易出错&#xff0c;并且难以应对大规模数据。为了解决这一挑战&#xff0c;Enovi…...

【模拟面试】计算机考研复试集训(第十四天)

文章目录 前言一、专业面试1、进程调度中的轮转调度&#xff08;Round Robin&#xff09;如何实现&#xff1f;时间片大小对系统性能有何影响&#xff1f;2、动态规划的核心思想是什么&#xff1f;举一例说明其与分治法的区别。3、事务的ACID特性中&#xff0c;“隔离性” 如何…...

ambiq apollo3 ADC实例程序注释

#include "am_mcu_apollo.h" // Apollo MCU 外设寄存器定义和HAL库 #include "am_bsp.h" // 板级支持包&#xff08;引脚定义、LED函数等&#xff09; #include "am_util.h" // 通用工具函数&#xff08;如printf重…...

ECharts实现数据可视化

ECharts实现数据可视化 一、Echarts的简介二、Echarts使用教程1.下载echarts.min.js文件2.编写echarts代码&#xff08;1&#xff09;创建渲染实列&#xff08;2&#xff09;修改option达到预期的效果&#xff08;3&#xff09;创建配置项到实例中 三、Echarts的基础配置四、前…...

Json冲突崩溃问题

在一个项目中同时使用RapidJSON库后崩溃了。。。。 --- ### **一、潜在问题分析** 1. **符号重复定义&#xff08;ODR冲突&#xff09;** - **原因**&#xff1a;若您的库和上位机主程序均静态链接了RapidJSON&#xff08;如编译为.a或.lib&#xff09;&#xff0c;或通…...

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代&#xff0c;数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首个全离线数字人生成引擎的颠覆性技术&#xff0c;重新定义人工智能生成内容&#xff08;AIGC&#xff09;的…...

Go常见问题与答案笔记

这是一篇值的收藏的go常见问题与答案的笔记&#xff0c;内容包括了go的高级&#xff0c;如&#xff1a;悲观锁与乐观锁区别&#xff0c;for range赋值、waitgroup底层原理、go同步原语、defer关键字讲解。 文章目录 1.悲观锁VS乐观锁的区别2.for range中赋值的变量&#xff0c…...

Redis 服务搭建

&#x1f4a2;欢迎来到张翊尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Redis 服务搭建源代码编译安装获取源码安装依赖Ub…...

React-Router路由跳转、传参、抽象封装以及嵌套路由

React-Router 示例React-Router抽象路由模块步骤&#xff1a; 路由导航声明式导航编程式导航 路由导航传参searchParams传参params传参 嵌套路由配置默认二级路由404路由配置两种路由模式如何选择 示例 这里我创建两个页面&#xff0c;分别是主页和登录页分别使用编程式导航和…...

PhotoShop学习02

1.添加文本 这个工具栏是文字工具栏&#xff0c;快捷键是T。选择之后鼠标会变成一个竖杠外貌&#xff0c;我们可以借此在图片中写入文字。 选择后&#xff0c;上方的工具栏会变为专门调整文字工具 这个框点击旁边的小箭头可以选择我们我们电脑系统自带的字体&#xff0c;同时可…...

Isaac Sim与Isaac Lab初使用

目录 基于Omiverse下载Isaacsim安装Isaac Lab配置isaacsim环境测试克隆仓库配置python环境强化学习训练的测试 IsaacLab模板配置vscode环境ros接口安装 作为nvidia出品的仿真软件&#xff0c;很多机器人、机器狗【具身智能】都可以有很不错的效果&#xff0c;所以会使用isaac s…...

用户模块——自定义业务异常

用户信息查询接口 在开发用户系统时&#xff0c;一个最基本的需求就是获取用户的个人信息&#xff0c;比如昵称、头像、改名卡次数等。本部分将介绍如何实现一个用户信息查询接口&#xff0c;并结合项目中的用户背包表&#xff0c;查询用户是否有可用的改名卡。 1. 用户信息查…...

基于数据挖掘从经验方和医案探析岭南名医治疗妇科疾病的诊疗和用药规律

标题:基于数据挖掘从经验方和医案探析岭南名医治疗妇科疾病的诊疗和用药规律 内容:1.摘要 背景&#xff1a;岭南地区独特的地理环境、气候条件及人文风俗使该地区妇科疾病具有一定特点&#xff0c;岭南名医在长期临床实践中积累了丰富的治疗经验。目的&#xff1a;基于数据挖掘…...

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人&#xff0c;旨在为用户提供自然、流畅的对话体验。通过…...

开源CDN产品-GoEdge

一、背景 上篇文章分析了一下CDN的基本原理以及使用代码实现了一个乞丐版的智能DNS调度器。从整个例子我们可以清晰了解到CDN原理&#xff0c;也就那么回事。 但是&#xff0c;之前也讲过了&#xff0c;CDN产品融合的技术比较杂、也比较多。所以我就想着&#xff0c;万物皆有开…...

Resume全栈项目(一)(.NET)

文章目录 项目地址一、数据库创建/日志安装1.1 创建实体层1. Entities2. Enums 存放枚举 1.2 创建数据库层1. 安装Persistance层需要的库2. 创建ResumeDbContext3. 添加数据库配置/注册DBContext4. 执行Add-Migration5. 修改字段类型6. Enum支持Json 1.3 安装Serilog1. Api层安…...

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作&#xff0c;帮助初学者快速上手。 Postman 下载及安装教程(2025最新)...

【PICO】开发环境配置准备

Unity编辑器配置 安装Unity编辑器 安装UnityHub 安装Unity2021.3.34f1c1 添加安卓平台模块 Pico软件资源准备 资源准备地址&#xff1a;Pico Developer PICO SDK PICO Unity Integration SDK PICO Unity Integration SDK 为 PICO 基于 Unity 引擎研发的软件开发工具…...

Unity图形学Shader快速回顾

参考知识点来源于: 人间自有韬哥在&#xff0c; 唐老狮&#xff0c;窗外听轩雨 , 呆呆敲代码的小Y little_fat_sheep, AitTech, DeepSeek, 百度&#xff0c; 豆包 目录 一、渲染管线1.应用阶段2.几何阶段3.光栅化阶段 二、矩阵的几何意义1. 平移2. 旋转3. 缩放4.复合运算 三、…...

十六进制(Hexadecimal)简介

十六进制&#xff08;Hexadecimal&#xff09;简介 1.1 什么是十六进制&#xff1f; 十六进制是一种使用16个符号表示数值的系统&#xff1a;数字0-9&#xff08;表示0-9&#xff09;&#xff0c;字母A-F&#xff08;表示10-15&#xff09;。 1.2 十六进制表示法 在编程中&a…...

1、pytest基本用法

目录 先给大家分享下学习资源 1. 安装pytest 2. 编写用例规则 3. 执行用例 最近在学习pytest的用法 并且用这套框架替换了原来的unittest&#xff0c; 同是测试框架 确实感觉到pytest更加便捷 这边分享给大家我得学习心得 先给大家分享下学习资源 1 官方文档 pytest 官方…...

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…...

GitHub高级筛选小白使用手册

GitHub高级筛选小白使用手册 GitHub 提供了强大的搜索功能&#xff0c;允许用户通过高级筛选器来精确查找仓库、Issues、Pull Requests、代码等。下面是一些常用的高级筛选用法&#xff0c;帮助你更高效地使用 GitHub 搜索功能。 目录 搜索仓库搜索Issues搜索Pull Requests搜…...

如何用腾讯云建站做好一个多语言的建筑工程网站?海外用户访问量提升3倍!分享我的经验

作为新疆地区领先的工程建筑企业&#xff0c;我们深知在数字化浪潮中&#xff0c;一个专业、高效且具备国际视野的官方网站是企业形象与业务拓展的“门面担当”。然而&#xff0c;传统的建站流程复杂、技术门槛高、多语言适配难等问题&#xff0c;曾让我们在数字化转型中举步维…...

SpringBoot-配置文件中敏感信息的加密保姆级教程

前言 公司安全部门检查&#xff0c;要求系统配置文件中的敏感信息如数据库密码等&#xff0c;进行加密处理&#xff0c;否则将受到公司的安全处罚&#xff0c;无奈只要按照公司要求&#xff0c;对springboot项目配置文件的敏感信息进行加密和解密处理。详细教程如下。 快速上…...

数据结构——串

串是一种数据元素为字符的特殊的线性表。 1. 串的定义 零个或多个字符&#xff08;字母、数字或其他字符&#xff09;组成的有限序列。记为 S"a1a2...an"S"a1​a2​...an​"&#xff0c;长度为 nn&#xff0c;空串长度为0。 2.串的术语 串长度&#xf…...

使用python爬取网络资源

整体思路 网络资源爬取通常分为以下几个步骤&#xff1a; 发送 HTTP 请求&#xff1a;使用requests库向目标网站发送请求&#xff0c;获取网页的 HTML 内容。解析 HTML 内容&#xff1a;使用BeautifulSoup库解析 HTML 内容&#xff0c;从中提取所需的数据。处理数据&#xff…...

【MySQL | 七、存储引擎是什么?】

存储引擎是什么&#xff1f;作用于哪里&#xff1f; 1. 存储引擎的定义 存储引擎&#xff08;Storage Engine&#xff09;是数据库管理系统中负责 数据的存储、检索和管理 的核心组件。它决定了数据如何存储在磁盘上&#xff0c;以及如何从磁盘中读取数据。存储引擎是数据库与…...

Linux -- 进程间通信(IPC)-- 进程间通信、管道、system V 共享内存、system V 消息队列、责任链模式 、system V 信号量

一、什么是进程间通信 1.进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程。资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发…...

远程登录服务(ssh)

一、远程登录服务概述 1. 概念 远程登录服务就像是一个神奇的桥梁&#xff0c;它让你能够跨越物理距离&#xff0c;通过网络连接到另一台计算机上进行操作。无论你身在何处&#xff0c;只要有网络连接&#xff0c;你就可以像坐在目标计算机前一样进行各种操作。 2. 功能 分享…...

【从零实现Json-Rpc框架】- 项目设计篇

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

EtherCAT转CANopen配置CANopen侧的PDO映射

EtherCAT转CANopen配置CANopen侧的PDO映射 在工业自动化领域&#xff0c;EtherCAT和CANopen是两种广泛应用的通信协议。它们各自具有独特的优势&#xff0c;但在某些应用场景下&#xff0c;需要将这两种协议进行转换以实现设备间的高效数据交换。本文将详细介绍如何在使用Ethe…...

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…...

完整的类在JVM中的生命周期详解

首先给出一个示例代码&#xff1a; 示例的目标是展示一个多功能的类结构&#xff0c;包含继承、接口实现、静态成员、本地方法、线程安全等特性&#xff0c;同时模拟一个简单的“计算器”场景&#xff0c;计算并管理数字。&#xff08;尽量将所有的 Java 组件和关键字都给出&am…...

大数据学习栈记——HBase操作(shell java)

本文介绍HBase在shell终端的常见操作以及如何利用java api操作HBase&#xff0c;操作系统&#xff1a;Ubuntu24.04 参考&#xff1a; https://blog.51cto.com/u_16099228/8016429 https://blog.csdn.net/m0_37739193/article/details/73618899 https://cloud.tencent.com/d…...

【商城实战(65)】退换货流程全解析:从前端到后端的技术实现

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想…...

改进BM25稀疏检索和BGE稠密检索

改进BM25稀疏检索和BGE稠密检索 检索算法层面 混合检索策略优化 自适应加权融合:在BM25和BGE等混合检索时,根据查询文本的特征(如长度、专业术语占比等)动态调整两者的权重。例如,对于包含大量专业术语的查询,增加BGE的权重;对于关键词明确的简单查询,增加BM25的权重。…...

WPS二次开发系列:以自动播放模式打开PPT文档

在前面文章中 android 调用wps打开文档并感知保存事件 介绍了如何使用WPS SDK打开文档&#xff0c;那么我们是否能够实现在打开WPS 文档的时候能够传递一些参数来控制打开文档的行为呢&#xff0c;经过研究WPS SDK相关文档和API&#xff0c;最终实现了 以自动播放方式打开PPT文…...

当AI重构编程范式:Java 24的进化逻辑与技术深水区的战略突围

一、语言进化的底层密码&#xff1a;从“工具适配”到“定义规则” 在2025年3月19日发布的Java 24中&#xff0c;Oracle以"30周年技术宣言"的姿态展示了编程语言进化的新范式。该版本不仅包含模式匹配、结构化并发等21项JEP特性&#xff0c;更通过后量子加密、AI原生…...

air780eq 阿里云

硬件&#xff1a;APM32F030C8 Air 780eq 参考文档&#xff1a; 合宙780E-4G模块通过AT指令连接到阿里云平台&#xff0c;实现信息的收发_air780e上传阿里云属性值at命令-CSDN博客 阿里云 - atair780eq - 合宙文档中心 4G模块接入阿里云-实现数据上传和命令下发_4g模块上传…...

网络安全之vlan实验

在对vlan进行一定的学习之后我们来练习一个小实验来加深理解记忆 首先是对实验进行一个搭建 第一部分&#xff1a;给交换机配置vlan 首先是sw1 [Huawei]vlan batch 2 to 5 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]port hybrid tagged vlan 2 [Huawei-GigabitEthe…...

mac命令行快捷键

光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...

计算机网络 - OSI 七层模型

OSI 七层模型 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互联&#xff09;模型由 ISO&#xff08;国际标准化组织&#xff09; 制定&#xff0c;目的是为不同计算机网络系统之间的通信提供一个标准化的框架。它将网络通信划分为 七个层次&#xff0c;每…...

TCP/IP 协议族详细知识点清单

&#x1f4da; TCP/IP 协议族详细知识点清单 一、概述与体系结构 &#x1f310; TCP/IP 协议模型&#xff08;四层模型&#xff09; 层次协议功能应用层HTTP、FTP、DNS、SMTP提供应用服务传输层TCP、UDP端到端传输&#xff0c;可靠或不可靠网络层IP、ICMP、ARP、RARP寻址、路…...

Vue3(自定义指令directive详解)

文章目录 前言一、自定义指令的生命周期钩子二、自定义指令的创建与注册使用三、扩展 简化形式​总结 前言 在Vue3中&#xff0c;自定义指令是一种强大的工具&#xff0c;允许开发者扩展和增强HTML元素的功能。以下是对Vue3中自定义指令的详细解析&#xff1a; 一、自定义指令…...

Redis--redis客户端

目录 一、引言 二、数据库管理命令 三、redis客户端 四、Java客户端使用Redis 五、相关命令使用 1.get&#xff0c;set 2.exists&#xff0c;del 3.keys 4.expire&#xff0c;ttl 六、总结 一、引言 在之前学了redis相关类型命令之后&#xff0c;本篇文章&#xff0c;…...

【高项】信息系统项目管理师(十)项目风险管理【5分】

项目风险是一种不确定的事件或条件,一旦发生,会对项目目标产生某种正面或负面的影响。项目风险既包括对项目目标的威胁,也包括促进项目目标的机会。已知风险是那些已经经过识别和分析的风险,对于已知风险,对其进行规划,寻找应对方案是可行的;虽然项目经理们可以依据以往…...

jenkins批量复制视图项目到新的视图

1、当前视图为 测试2分支&#xff0c;创建了新的视图为国际化预生产 2、进入系统设置的脚本管理 import hudson.model.* //源view def str_view "测试2分支" //目标view def str_new_view "国际化预生产" //源job名称(模糊匹配) def str_search &qu…...

uv:Rust 驱动的 Python 包管理新时代

在 Python 包管理工具层出不穷的今天&#xff0c;pip、pip-tools、poetry、conda 等各有千秋。而今天要介绍的 uv&#xff0c;则是一款由 Astral 团队推出、采用 Rust 编写的全新工具&#xff0c;目标直指成为 “Python 的 Cargo”。它不仅在性能上表现优异&#xff0c;而且在功…...