99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?
實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?
2021-11-03
收藏
實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

本章給大家演示一下在實(shí)際工作中如何結(jié)合 Pandas 庫和 openpyxl 庫來自動(dòng)化生成報(bào)表。假設(shè)我們現(xiàn)在有如圖 1 所示的數(shù)據(jù)集。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖1)

現(xiàn)在需要根據(jù)這份數(shù)據(jù)集來制作每天的日報(bào)情況,主要包含以下 3 個(gè)方面。

  • 當(dāng)日各項(xiàng)指標(biāo)的同/環(huán)比情況。
  • 當(dāng)日各省份創(chuàng)建訂單量情況。
  • 最近一段時(shí)間創(chuàng)建訂單量趨勢。

接下來分別實(shí)現(xiàn)。

01、當(dāng)日各項(xiàng)指標(biāo)的同/環(huán)比情況

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

我們先用 Pandas 庫對數(shù)據(jù)進(jìn)行計(jì)算處理,得到各指標(biāo)的同/環(huán)比情況,具體實(shí)現(xiàn)代碼如下。

#導(dǎo)入文件  import pandas as pd 
df = pd.read_excel(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化 
sale_data.xlsx') #構(gòu)造同時(shí)獲取不同指標(biāo)的函數(shù)  def get_data(date): create_cnt = df[df['創(chuàng)建日期'] == date]['order_id'].count() 
pay_cnt = df[df['付款日期'] == date]['order_id'].count() 
receive_cnt = df[df['收貨日期'] == date]['order_id'].count() 
return_cnt = df[df['退款日期'] == date]['order_id'].count() return create_cnt,pay_cnt,receive_cnt,return_cnt #假設(shè)當(dāng)日是 2021-04-11  #獲取不同時(shí)間段的各指標(biāo)值  df_view = pd.DataFrame([get_data('2021-04-11') 
,get_data('2021-04-10') 
,get_data('2021-04-04')] 
,columns = ['創(chuàng)建訂單量','付款訂單量','收貨訂單量','退款訂單量'] 
,index = ['當(dāng)日','昨日','上周同期']).T 
df_view['環(huán)比'] = df_view['當(dāng)日'] / df_view['昨日'] - 1 df_view['同比'] = df_view['當(dāng)日'] / df_view['上周同期'] - 1 df_view

運(yùn)行上面代碼會得到如圖 2 所示結(jié)果。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖2)

上面只是得到了各指標(biāo)的同/環(huán)比絕對數(shù)值,但是日報(bào)在發(fā)出去之前一般都要做一些格式調(diào)整,比如調(diào)整字體。而格式調(diào)整需要用到 openpyxl 庫,我們將 Pandas 庫中DataFrame 格式的數(shù)據(jù)轉(zhuǎn)化為適用 openpyxl 庫的數(shù)據(jù)格式,具體實(shí)現(xiàn)代碼如下。

from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows #創(chuàng)建空工作簿  wb = Workbook() 
ws = wb.active #將 DataFrame 格式數(shù)據(jù)轉(zhuǎn)化為 openpyxl 格式  for r in dataframe_to_rows(df_view,index = True,header = True): 
ws.append(r) 
wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化核心指標(biāo)_原始.xlsx')

運(yùn)行上面代碼會得到如圖 3 所示結(jié)果,可以看到原始的數(shù)據(jù)文件看起來是很混亂的。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖3)

接下來,對上面的原始數(shù)據(jù)文件進(jìn)行格式調(diào)整,具體調(diào)整代碼如下。

from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import colors from openpyxl.styles import Font from openpyxl.styles import PatternFill from openpyxl.styles import Border, Side from openpyxl.styles import Alignment 
wb = Workbook() 
ws = wb.active for r in dataframe_to_rows(df_view,index = True,header = True): 
ws.append(r) #第 2 行是空的,刪除第 2 行  ws.delete_rows(2) #給 A1 單元格進(jìn)行賦值  ws['A1'] = '指標(biāo)' #插入一行作為標(biāo)題行  ws.insert_rows(1) 
ws['A1'] = '電商業(yè)務(wù)方向 2021/4/11 日報(bào)' #將標(biāo)題行的單元格進(jìn)行合并  ws.merge_cells('A1:F1') #合并單元格 #對第 1 行至第 6 行的單元格進(jìn)行格式設(shè)置  for row in ws[1:6]: for c in row: #字體設(shè)置  c.font = Font(name = '微軟雅黑',size = 12) #對齊方式設(shè)置  c.alignment = Alignment(horizontal = "center") #邊框線設(shè)置  c.border = Border(left = Side(border_style = "thin",color = "FF000000"), 
right = Side(border_style = "thin",color = "FF000000"), 
top = Side(border_style = "thin",color = "FF000000"), 
bottom = Side(border_style = "thin",color = "FF000000")) #對標(biāo)題行和表頭行進(jìn)行特殊設(shè)置  for row in ws[1:2]: for c in row: 
c.font = Font(name = '微軟雅黑',size = 12,bold = True,color = "FFFFFFFF") 
c.fill = PatternFill(fill_type = 'solid',start_color ='FFFF6100') #將環(huán)比和同比設(shè)置成百分比格式  for col in ws["E":"F"]: for r in col: 
r.number_format = '0.00%' #調(diào)整列寬  ws.column_dimensions['A'].width = 13 ws.column_dimensions['E'].width = 10 #保存調(diào)整后的文件  wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化核心指標(biāo).xlsx')

運(yùn)行上面代碼會得到如圖 4 所示結(jié)果。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖4)

可以看到各項(xiàng)均已設(shè)置成功。

02、當(dāng)日各省份創(chuàng)建訂單量情況

我們同樣先利用 Pandas 庫處理得到當(dāng)日各省份創(chuàng)建訂單量的情況,具體實(shí)現(xiàn)代碼如下。

df_province = pd.DataFrame(df[df['創(chuàng)建日期'] == '2021-04-11'].groupby('省份 
')['order_id'].count()) 
df_province = df_province.reset_index() 
df_province = df_province.sort_values(by = 'order_id',ascending = False) 
df_province = df_province.rename(columns = {'order_id':'創(chuàng)建訂單量'}) 
df_province

運(yùn)行上面代碼會得到如圖 5 所示結(jié)果。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖5)

在得到各省份當(dāng)日創(chuàng)建訂單量的絕對數(shù)值之后,同樣對其進(jìn)行格式設(shè)置,具體設(shè)置代碼如下。

from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import colors from openpyxl.styles import Font from openpyxl.styles import PatternFill from openpyxl.styles import Border, Side from openpyxl.styles import Alignment from openpyxl.formatting.rule import DataBarRule 
wb = Workbook() 
ws = wb.active for r in dataframe_to_rows(df_province,index = False,header = True): 
ws.append(r) #對第 1 行至第 11 行的單元格進(jìn)行設(shè)置  for row in ws[1:11]: for c in row: #字體設(shè)置  c.font = Font(name = '微軟雅黑',size = 12) #對齊方式設(shè)置  c.alignment = Alignment(horizontal = "center") #邊框線設(shè)置  c.border = Border(left = Side(border_style = "thin",color = "FF000000"), 
right = Side(border_style = "thin",color = "FF000000"), 
top = Side(border_style = "thin",color = "FF000000"), 
bottom = Side(border_style = "thin",color = "FF000000")) #設(shè)置進(jìn)度條條件格式  rule = DataBarRule(start_type = 'min',end_type = 'max', 
color="FF638EC6", showValue=True, minLength=None, maxLength= None) 
ws.conditional_formatting.add('B1:B11',rule) #對第 1 行標(biāo)題行進(jìn)行設(shè)置  for c in ws[1]: 
c.font = Font(name = '微軟雅黑',size = 12,bold = True,color = "FFFFFFFF") 
c.fill = PatternFill(fill_type = 'solid',start_color='FFFF6100') #調(diào)整列寬  ws.column_dimensions['A'].width = 17 ws.column_dimensions['B'].width = 13 #保存調(diào)整后的文件  wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化各省份銷量情況.xlsx')

運(yùn)行上面代碼會得到如圖6所示結(jié)果。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖6)

03、最近一段時(shí)間創(chuàng)建訂單量趨勢

一般用折線圖反映某個(gè)指標(biāo)的趨勢情況,我們前面也講過,在實(shí)際工作中一般用matplotlib 庫或者其他可視化庫進(jìn)行圖表繪制,并將其保存,然后利用 openpyxl 庫將圖表插入 Excel 中。

先利用 matplotlib 庫進(jìn)行繪圖,具體實(shí)現(xiàn)代碼如下。

%matplotlib inline import matplotlib.pyplot as plt 
plt.rcParams["font.sans-serif"]='SimHei'#解決中文亂碼  #設(shè)置圖表大小  plt.figure(figsize = (10,6)) 
df.groupby('創(chuàng)建日期')['order_id'].count().plot() 
plt.title('4.2 - 4.11 創(chuàng)建訂單量分日趨勢') 
plt.xlabel('日期') 
plt.ylabel('訂單量') #將圖表保存到本地  plt.savefig(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量 
分日趨勢.png')

將保存到本地的圖表插入 Excel 中,具體實(shí)現(xiàn)代碼如下。

from openpyxl import Workbook from openpyxl.drawing.image import Image 
wb = Workbook() 
ws = wb.active 
img = Image(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量 
分日趨勢.png') 
ws.add_image(img, 'A1') 
wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量分日 
趨勢.xlsx')

運(yùn)行上面代碼會得到如圖 7 所示結(jié)果,可以看到圖表已經(jīng)被成功插入 Excel 中。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖7)

04、將不同的結(jié)果進(jìn)行合并

上面我們是把每一部分都單獨(dú)拆開來實(shí)現(xiàn)的,最后存儲在了不同的 Excel 文件中。

當(dāng)然,有時(shí)放在不同文件中會比較麻煩,就需要把這些結(jié)果合并在同一個(gè) Excel 的相同 Sheet 或者不同 Sheet 中。

將不同的結(jié)果合并到同一個(gè) Sheet 中

將不同的結(jié)果合并到同一個(gè) Sheet 中的難點(diǎn)在于不同表結(jié)果的結(jié)構(gòu)不一樣,而且需要在不同結(jié)果之間進(jìn)行留白。

首先,插入核心指標(biāo)表 df_review,插入方式與單獨(dú)插入是一樣的,具體代碼如下。

for r in dataframe_to_rows(df_view,index = True,header = True): ws.append(r)

然后,插入各省份情況表 df_province,因?yàn)?append()方法默認(rèn)是從第 1 行開始插入的,而我們前面幾行已經(jīng)有 df_view 表的數(shù)據(jù)了,所以就不能用 append()方法插入,而只能通過遍歷每一個(gè)單元格的方式。

那我們怎么知道要遍歷哪些單元格呢?核心是需要知道遍歷開始的行/列和遍歷結(jié)束的行/列。

遍歷開始的行 = df_view 表占據(jù)的行 + 留白的行(一般表與表之間留 2 行) + 1

遍歷結(jié)束的行 = 遍歷開始的行 + df_province 表占據(jù)的行

遍歷開始的列 = 1

遍歷結(jié)束的列 = df_province 表占據(jù)的列

又因?yàn)?DataFrame 中獲取列名的方式和獲取具體值的方式不太一樣,所以我們需要分別插入,先插入列名,具體代碼如下。

for j in range(df_province.shape[1]): 
ws.cell(row = df_view.shape[0] + 5,column = 1 + j).value = df_province.columns[r] 
df_province.shape[1]表示獲取 df_province 表有多少列,df_view.shape[0]表示獲取 
df_view 表有多少行。

前面說過,遍歷開始的行是表占據(jù)的行加上留白的行再加 1,一般留白的行是 2,

可是這里為什么是 df_view.shape[0] + 5 呢?因?yàn)?df_view.shape[0]是不包括列名行的,而且在插入 Excel 中時(shí)會默認(rèn)增加 1 行空行,所以需要在留白行的基礎(chǔ)上再增加 2 行,

即 2 + 2 + 1 = 5。

因?yàn)?range()函數(shù)默認(rèn)是從 0 開始的,而 Excel 中的列是從 1 開始的,所以 column需要加 1。

上面的代碼只是把 df_province 表的列名插入進(jìn)來,接下來插入具體的值,方式與插入列名的方式一致,只不過需要在列名的下一行開始插入,具體代碼如下。

for i in range(df_province.shape[0]): for j in range(df_province.shape[1]): 
ws.cell(row = df_view.shape[0] + 6 + i,column = 1 + j).value = 
df_province.iloc[i,j]

接下來,插入圖片,插入圖片的方式與前面的單獨(dú)插入方法是一致的,具體代碼如下。

#插入圖片  img = Image(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量 
分日趨勢.png') 
ws.add_image(img, 'G1')

將所有的數(shù)據(jù)插入以后就該對這些數(shù)據(jù)進(jìn)行格式設(shè)置了,因?yàn)椴煌淼慕Y(jié)構(gòu)不一樣,所以我們沒法直接批量對所有單元格進(jìn)行格式設(shè)置,只能按范圍分別進(jìn)行設(shè)置,而不同范圍的格式可能是一樣的,所以我們先預(yù)設(shè)一些格式變量,這樣后面用到的時(shí)候直接調(diào)取這些變量即可,減少代碼冗余,具體代碼如下。

#格式預(yù)設(shè)  #表頭字體設(shè)置  title_Font_style = Font(name = '微軟雅黑',size = 12,bold = True,color = "FFFFFFFF") #普通內(nèi)容字體設(shè)置  plain_Font_style = Font(name = '微軟雅黑',size = 12) Alignment_style = Alignment(horizontal = "center") Border_style = Border(left = Side(border_style = "thin",color = "FF000000"), right = Side(border_style = "thin",color = "FF000000"), top = Side(border_style = "thin",color = "FF000000"), bottom = Side(border_style = "thin",color = "FF000000")) PatternFill_style = PatternFill(fill_type = 'solid',start_color ='FFFF6100')

格式預(yù)設(shè)完之后就可以對各個(gè)范圍分別進(jìn)行格式設(shè)置了,具體代碼如下。

#對 A1 至 F6 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A1':'F6']: for c in row: 
c.font = plain_Font_style 
c.alignment = Alignment_style 
c.border = Border_style #對第 1 行和第 2 行的單元格進(jìn)行設(shè)置  for row in ws[1:2]: for c in row: 
c.font = title_Font_style 
c.fill = PatternFill_style #對 E 列和 F 列的單元格進(jìn)行設(shè)置  for col in ws["E":"F"]: for r in col: 
r.number_format = '0.00%' #對 A9 至 B19 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A9':'B19']: for c in row: 
c.font = plain_Font_style 
c.alignment = Alignment_style 
c.border = Border_style #對 A9 至 B9 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A9':'B9']: for c in row: 
c.font = title_Font_style 
c.fill = PatternFill_style #設(shè)置進(jìn)度條  rule = DataBarRule(start_type = 'min',end_type = 'max', 
color="FF638EC6", showValue=True, minLength=None, 
maxLength=None) 
ws.conditional_formatting.add('B10:B19',rule) #調(diào)整列寬 ws.column_dimensions['A'].width = 17 ws.column_dimensions['B'].width = 13 ws.column_dimensions['E'].width = 10 

最后,將上面所有代碼片段合并在一起,就是將不同的結(jié)果文件合并到同一個(gè)Sheet 中的完整代碼,具體如下。

Sheet 中的完整代碼,具體如下。 from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import colors from openpyxl.styles import Font from openpyxl.styles import PatternFill from openpyxl.styles import Border, Side from openpyxl.styles import Alignment from openpyxl.formatting.rule import DataBarRule 
wb = Workbook() 
ws = wb.active #先將核心指標(biāo) df_view 表插入進(jìn)去  for r in dataframe_to_rows(df_view,index = True,header = True): 
ws.append(r) #再將各省份情況 df_province 表插入進(jìn)去  #先將表頭插入  for j in range(df_province.shape[1]): 
ws.cell(row = df_view.shape[0] + 5,column = 1 + j).value = df_province.columns[r] #再把具體的值插入  #先遍歷行  for i in range(df_province.shape[0]): #再遍歷列  for j in range(df_province.shape[1]): 
ws.cell(row = df_view.shape[0] + 6 + i,column = 1 + j).value = df_province. 
iloc[i,j] #插入圖片  img = Image(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量 
分日趨勢.png') 
ws.add_image(img, 'G1') ##---格式調(diào)整---  ws.delete_rows(2) 
ws['A1'] = '指標(biāo)' ws.insert_rows(1) 
ws['A1'] = '電商業(yè)務(wù)方向 2021/4/11 日報(bào)' ws.merge_cells('A1:F1') #合并單元格  #格式預(yù)設(shè)  #表頭字體設(shè)置  title_Font_style = Font(name = '微軟雅黑',size = 12,bold = True,color = "FFFFFFFF") #普通內(nèi)容字體設(shè)置  plain_Font_style = Font(name = '微軟雅黑',size = 12) 
Alignment_style = Alignment(horizontal = "center") 
Border_style = Border(left = Side(border_style = "thin",color = "FF000000"), 
right = Side(border_style = "thin",color = "FF000000"), 
top = Side(border_style = "thin",color = "FF000000"), 
bottom = Side(border_style = "thin",color = "FF000000")) 
PatternFill_style = PatternFill(fill_type = 'solid',start_color='FFFF6100') #對 A1 至 F6 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A1':'F6']: for c in row: 
c.font = plain_Font_style 
c.alignment = Alignment_style 
c.border = Border_style #對第 1 行和第 2 行的單元格進(jìn)行設(shè)置  for row in ws[1:2]: for c in row: 
c.font = title_Font_style 
c.fill = PatternFill_style #對 E 列和 F 列的單元格進(jìn)行設(shè)置  for col in ws["E":"F"]: for r in col: 
r.number_format = '0.00%' #對 A9 至 B19 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A9':'B19']: for c in row: 
c.font = plain_Font_style 
c.alignment = Alignment_style 
c.border = Border_style #對 A9 至 B9 范圍內(nèi)的單元格進(jìn)行設(shè)置  for row in ws['A9':'B9']: for c in row: 
c.font = title_Font_style 
c.fill = PatternFill_style #設(shè)置進(jìn)度條  rule = DataBarRule(start_type = 'min',end_type = 'max', 
color="FF638EC6", showValue=True, minLength=None, maxLength= None) 
ws.conditional_formatting.add('B10:B19',rule) #調(diào)整列寬  ws.column_dimensions['A'].width = 17 ws.column_dimensions['B'].width = 13 ws.column_dimensions['E'].width = 10 #將結(jié)果文件進(jìn)行保存  wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化多結(jié)果合并.xlsx')

運(yùn)行上面代碼,會得到如圖 8 所示結(jié)果,可以看到不同結(jié)果文件合并在了一起,并且各自的格式設(shè)置完好。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖8)

將不同的結(jié)果合并到同一工作簿的不同 Sheet 中

將不同的結(jié)果合并到同一工作簿的不同 Sheet 中比較好實(shí)現(xiàn),只需要新建幾個(gè)Sheet,然后對不同的 Sheet 插入數(shù)據(jù)即可,具體實(shí)現(xiàn)代碼如下。

from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows 
wb = Workbook() 
ws = wb.active 
ws1 = wb.create_sheet() 
ws2 = wb.create_sheet() #更改 sheet 的名稱  ws.title = "核心指標(biāo)" ws1.title = "各省份銷情況" ws2.title = "分日趨勢" for r1 in dataframe_to_rows(df_view,index = True,header = True): 
ws.append(r1) for r2 in dataframe_to_rows(df_province,index = False,header = True): 
ws1.append(r2) 
img = Image(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化4.2 - 4.11 創(chuàng)建訂單量 
分日趨勢.png') 
ws2.add_image(img, 'A1') 
wb.save(r'D:Data-Scienceshareexcel-python 報(bào)表自動(dòng)化多結(jié)果合并_多 Sheet.xlsx')

運(yùn)行上面代碼,會得到如圖 9 所示結(jié)果,可以看到創(chuàng)建了 3 個(gè) Sheet,且不同的內(nèi)容被保存到了不同 Sheet 中。

實(shí)戰(zhàn) | 如何制作數(shù)據(jù)報(bào)表并實(shí)現(xiàn)自動(dòng)化?

(圖9)

本文節(jié)選自《對比Excel,輕松學(xué)習(xí)Python報(bào)表自動(dòng)化》一書,更多關(guān)于使用Python進(jìn)行報(bào)表自動(dòng)化的內(nèi)容,歡迎閱讀本書!

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }