@@ -0,0 +1,2 @@ | |||||
import pymysql | |||||
pymysql.install_as_MySQLdb() |
@@ -0,0 +1,5 @@ | |||||
from django.apps import AppConfig | |||||
class BackendConfig(AppConfig): | |||||
name = 'backend' |
@@ -0,0 +1,21 @@ | |||||
from django.http import HttpResponse | |||||
from django.http import HttpResponseRedirect | |||||
from backend.model import product | |||||
from django.conf import settings | |||||
import json | |||||
def home(request): | |||||
home_url = settings.STATIC_URL | |||||
return HttpResponseRedirect(home_url + 'home/index.html') | |||||
def get_product(request): | |||||
result = product.get() | |||||
returns_list = {'cnt': product.get_cnt(), 'page_arr': {'current_page': 1, 'page_size': 10}, 'list': result} | |||||
return HttpResponse(json.dumps(returns_list)) | |||||
def curl_test(request): | |||||
result = product.curl_test() | |||||
return HttpResponse(json.dumps(result)) |
@@ -0,0 +1,32 @@ | |||||
from backend.models import FxUser | |||||
from django.core import serializers | |||||
from common import util | |||||
from common import curl_interface | |||||
def get(): | |||||
""" | |||||
获取列表 | |||||
:return: list | |||||
""" | |||||
opera_product = FxUser.objects.all().filter(phone='13795379620') | |||||
opera_product = util.sql_array(opera_product, ['uid', 'nickname','phone']) | |||||
return opera_product | |||||
def get_cnt(): | |||||
""" | |||||
获取去记录总数 | |||||
:rtype: int | |||||
""" | |||||
get_cnt = FxUser.objects.count() | |||||
return get_cnt | |||||
def curl_test(): | |||||
body = { | |||||
'cms_category_id': '114' | |||||
} | |||||
curl = curl_interface.CurlInterface(body, 4) | |||||
result = curl.exec('http://wxtest/zzcx/home/destination/init','POST') | |||||
return result |
@@ -0,0 +1,578 @@ | |||||
# This is an auto-generated Django model module. | |||||
# You'll have to do the following manually to clean this up: | |||||
# * Rearrange models' order | |||||
# * Make sure each model has one field with primary_key=True | |||||
# * Make sure each ForeignKey has `on_delete` set to the desired behavior. | |||||
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table | |||||
# Feel free to rename the models, but don't rename db_table values or field names. | |||||
from __future__ import unicode_literals | |||||
from django.db import models | |||||
class AdmUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
u_name = models.CharField(unique=True, max_length=100) | |||||
pwd = models.CharField(max_length=255) | |||||
phone = models.CharField(max_length=22, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
status = models.IntegerField() | |||||
last_login = models.CharField(max_length=20, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'adm_user' | |||||
class BaseArea(models.Model): | |||||
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase. | |||||
parent_id = models.IntegerField(db_column='PARENT_ID') # Field name made lowercase. | |||||
cancel_flag = models.IntegerField(db_column='CANCEL_FLAG') # Field name made lowercase. | |||||
create_user_id = models.IntegerField(db_column='CREATE_USER_ID') # Field name made lowercase. | |||||
create_time = models.CharField(db_column='CREATE_TIME', max_length=20) # Field name made lowercase. | |||||
update_user_id = models.IntegerField(db_column='UPDATE_USER_ID') # Field name made lowercase. | |||||
update_time = models.CharField(db_column='UPDATE_TIME', max_length=20) # Field name made lowercase. | |||||
area_name = models.CharField(db_column='AREA_NAME', max_length=100) # Field name made lowercase. | |||||
postcode = models.CharField(db_column='POSTCODE', max_length=20) # Field name made lowercase. | |||||
poi_type = models.CharField(db_column='POI_TYPE', max_length=20) # Field name made lowercase. | |||||
poi_type1 = models.IntegerField(db_column='POI_TYPE1') # Field name made lowercase. | |||||
poi_type2 = models.CharField(db_column='POI_TYPE2', max_length=255) # Field name made lowercase. | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'base_area' | |||||
class BaseCategory(models.Model): | |||||
category_id = models.AutoField(primary_key=True) | |||||
category_name = models.CharField(max_length=255) | |||||
parent_id = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'base_category' | |||||
class BusTicket(models.Model): | |||||
ticket_id = models.IntegerField(unique=True) | |||||
start_area_id = models.IntegerField() | |||||
start_area_name = models.CharField(max_length=50) | |||||
end_area_id = models.IntegerField() | |||||
end_area_name = models.CharField(max_length=50) | |||||
start_res_id = models.IntegerField() | |||||
start_res_name = models.CharField(max_length=50) | |||||
end_res_id = models.IntegerField() | |||||
end_res_name = models.CharField(max_length=50) | |||||
line_id = models.IntegerField() | |||||
line_type = models.IntegerField() | |||||
prod_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
line_name = models.CharField(max_length=255) | |||||
start_res_longitude = models.FloatField(blank=True, null=True) | |||||
start_res_latitude = models.FloatField(blank=True, null=True) | |||||
end_res_longitude = models.FloatField(blank=True, null=True) | |||||
end_res_latitude = models.FloatField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'bus_ticket' | |||||
class ClientOpinion(models.Model): | |||||
name = models.CharField(max_length=255) | |||||
e_mail = models.CharField(db_column='e-mail', max_length=255) # Field renamed to remove unsuitable characters. | |||||
opinion = models.CharField(max_length=1000) | |||||
client_ip = models.CharField(db_column='client _ip', max_length=255) # Field renamed to remove unsuitable characters. | |||||
create_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'client_opinion' | |||||
class CmsCategory(models.Model): | |||||
cms_category_id = models.AutoField(primary_key=True) | |||||
category_name = models.CharField(max_length=50) | |||||
show_sort = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
category_code = models.CharField(max_length=255) | |||||
system = models.IntegerField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category' | |||||
class CmsCategoryExtra(models.Model): | |||||
category_id = models.IntegerField(unique=True) | |||||
category_name = models.CharField(max_length=50) | |||||
category_describe = models.CharField(max_length=255) | |||||
img_url = models.CharField(max_length=255) | |||||
area_id = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category_extra' | |||||
class CmsCategoryProd(models.Model): | |||||
prod_cate_id = models.IntegerField() | |||||
cms_cate_id = models.IntegerField() | |||||
show_sort = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
system = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category_prod' | |||||
class DjangoMigrations(models.Model): | |||||
app = models.CharField(max_length=255) | |||||
name = models.CharField(max_length=255) | |||||
applied = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'django_migrations' | |||||
class FxCommissionApply(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
apply_money = models.DecimalField(max_digits=10, decimal_places=0) | |||||
status = models.IntegerField() | |||||
remit_time = models.CharField(max_length=50) | |||||
auth_time = models.CharField(max_length=50) | |||||
auth_memo = models.CharField(max_length=255) | |||||
auth_uid = models.IntegerField() | |||||
remit_uid = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_commission_apply' | |||||
class FxCommissionInfo(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
total_money = models.DecimalField(max_digits=10, decimal_places=0) | |||||
order_id = models.IntegerField() | |||||
status = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_commission_info' | |||||
class FxUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
user_name = models.CharField(max_length=100, blank=True, null=True) | |||||
openid = models.CharField(unique=True, max_length=120) | |||||
phone = models.CharField(max_length=11) | |||||
nickname = models.CharField(max_length=21, blank=True, null=True) | |||||
headimgurl = models.CharField(max_length=255, blank=True, null=True) | |||||
sex = models.IntegerField(blank=True, null=True) | |||||
country = models.CharField(max_length=255, blank=True, null=True) | |||||
province = models.CharField(max_length=255, blank=True, null=True) | |||||
city = models.CharField(max_length=255, blank=True, null=True) | |||||
status = models.IntegerField() | |||||
reg_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
wx_openid = models.CharField(max_length=120, blank=True, null=True) | |||||
main_user_id = models.IntegerField() | |||||
change_price_power = models.IntegerField() | |||||
user_area = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user' | |||||
class FxUserAccount(models.Model): | |||||
fx_uid = models.IntegerField(unique=True) | |||||
available_commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
closed_commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
total_commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
apply_commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
remaining_sum = models.DecimalField(max_digits=10, decimal_places=0) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
status = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_account' | |||||
class FxUserAmountLog(models.Model): | |||||
log_id = models.AutoField(primary_key=True) | |||||
fx_uid = models.IntegerField() | |||||
trade_type = models.IntegerField() | |||||
amount = models.DecimalField(max_digits=10, decimal_places=0) | |||||
remaining_sum = models.DecimalField(max_digits=10, decimal_places=0) | |||||
msg = models.CharField(max_length=255, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_amount_log' | |||||
class FxUserAmountOrder(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
amount = models.DecimalField(max_digits=10, decimal_places=0) | |||||
status = models.IntegerField() | |||||
recharge_order = models.CharField(max_length=100) | |||||
pay_type = models.IntegerField() | |||||
create_time = models.DateTimeField(blank=True, null=True) | |||||
update_time = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_amount_order' | |||||
class FxUserArea(models.Model): | |||||
area_id = models.AutoField(primary_key=True) | |||||
area_name = models.CharField(max_length=100) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_area' | |||||
class FxUserOpenid(models.Model): | |||||
open_id = models.CharField(unique=True, max_length=255) | |||||
fx_uid = models.IntegerField() | |||||
reg_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_openid' | |||||
class FxUserQrcode(models.Model): | |||||
fx_uid = models.IntegerField(blank=True, null=True) | |||||
qr_id = models.IntegerField(unique=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_qrcode' | |||||
class LogOrder(models.Model): | |||||
name = models.CharField(max_length=20) | |||||
order_id = models.IntegerField() | |||||
time = models.DateTimeField() | |||||
uid = models.IntegerField() | |||||
u_type = models.IntegerField() | |||||
log_type = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'log_order' | |||||
class LogUserOperation(models.Model): | |||||
title = models.CharField(max_length=120) | |||||
memo = models.TextField() | |||||
uid = models.IntegerField() | |||||
user_type = models.IntegerField() | |||||
user_name = models.CharField(max_length=255) | |||||
resources_id = models.IntegerField(blank=True, null=True) | |||||
resources_type = models.IntegerField(blank=True, null=True) | |||||
resources_name = models.CharField(max_length=255, blank=True, null=True) | |||||
phpsessid = models.CharField(max_length=255, blank=True, null=True) | |||||
user_agent = models.CharField(max_length=255, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
last_login = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'log_user_operation' | |||||
class MainCorpUser(models.Model): | |||||
user_name = models.CharField(max_length=255) | |||||
main_corp_id = models.IntegerField() | |||||
main_corp_name = models.CharField(max_length=255) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'main_corp_user' | |||||
class OrderContacts(models.Model): | |||||
order_id = models.IntegerField() | |||||
contacts_name = models.CharField(max_length=120) | |||||
contacts_phone = models.CharField(max_length=20) | |||||
contacts_id = models.CharField(db_column='contacts_ID', max_length=20, blank=True, null=True) # Field name made lowercase. | |||||
contacts_type = models.IntegerField() | |||||
update_time = models.DateTimeField() | |||||
create_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
bus_run_id = models.IntegerField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_contacts' | |||||
class OrderInfo(models.Model): | |||||
order_id = models.IntegerField() | |||||
prod_id = models.IntegerField() | |||||
count = models.IntegerField() | |||||
unit_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
total_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
delete_flag = models.IntegerField() | |||||
commission = models.IntegerField() | |||||
prod_name = models.CharField(max_length=255) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_info' | |||||
class OrderMain(models.Model): | |||||
order_id = models.AutoField(primary_key=True) | |||||
order_name = models.CharField(max_length=255) | |||||
spider_order_id = models.CharField(max_length=255) | |||||
total_money = models.DecimalField(max_digits=10, decimal_places=0) | |||||
category_id = models.IntegerField() | |||||
prod_cate_id = models.IntegerField() | |||||
prod_source = models.IntegerField() | |||||
prod_cnt = models.IntegerField() | |||||
sh_uid = models.IntegerField() | |||||
fx_uid = models.IntegerField() | |||||
start_time = models.TimeField(blank=True, null=True) | |||||
end_time = models.TimeField(blank=True, null=True) | |||||
start_date = models.DateField() | |||||
end_date = models.DateField() | |||||
order_status = models.IntegerField() | |||||
update_time = models.DateTimeField() | |||||
create_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
system = models.IntegerField() | |||||
start_area = models.CharField(max_length=255, blank=True, null=True) | |||||
end_area = models.CharField(max_length=255, blank=True, null=True) | |||||
main_user_id = models.IntegerField() | |||||
original_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_main' | |||||
class OrderTravel(models.Model): | |||||
travel_id = models.AutoField(primary_key=True) | |||||
start_time = models.DateTimeField() | |||||
end_time = models.DateTimeField() | |||||
u_id = models.IntegerField() | |||||
cs_order_id = models.IntegerField() | |||||
prod_id = models.CharField(max_length=255, blank=True, null=True) | |||||
start_res_id = models.IntegerField(blank=True, null=True) | |||||
start_res = models.CharField(max_length=255, blank=True, null=True) | |||||
end_res_id = models.IntegerField(blank=True, null=True) | |||||
end_res = models.CharField(max_length=255, blank=True, null=True) | |||||
start_area_name = models.CharField(max_length=255, blank=True, null=True) | |||||
end_area_name = models.CharField(max_length=255, blank=True, null=True) | |||||
start_longitude = models.FloatField(blank=True, null=True) | |||||
start_latitude = models.FloatField(blank=True, null=True) | |||||
contacts_name = models.CharField(max_length=120, blank=True, null=True) | |||||
contacts_phone = models.CharField(max_length=120, blank=True, null=True) | |||||
contacts_id = models.CharField(db_column='contacts_ID', max_length=120, blank=True, null=True) # Field name made lowercase. | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_travel' | |||||
class PayMain(models.Model): | |||||
pay_type = models.IntegerField() | |||||
order_money = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True) | |||||
amount_money = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True) | |||||
pay_time = models.DateTimeField() | |||||
pay_user = models.IntegerField() | |||||
order_id = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
pay_order_id = models.CharField(max_length=255) | |||||
app_id = models.CharField(max_length=255, blank=True, null=True) | |||||
open_id = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'pay_main' | |||||
class PayRefush(models.Model): | |||||
order_id = models.IntegerField() | |||||
pay_order_id = models.CharField(max_length=255) | |||||
pay_type = models.IntegerField() | |||||
refush_money = models.DecimalField(max_digits=10, decimal_places=0) | |||||
amount_money = models.DecimalField(max_digits=10, decimal_places=0) | |||||
fx_uid = models.IntegerField() | |||||
sh_uid = models.IntegerField() | |||||
status = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
refund_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
category_id = models.IntegerField() | |||||
app_id = models.CharField(max_length=255, blank=True, null=True) | |||||
open_id = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'pay_refush' | |||||
class ProdCategory(models.Model): | |||||
pro_cate_id = models.AutoField(primary_key=True) | |||||
sign = models.CharField(max_length=255, blank=True, null=True) | |||||
pro_cate_name = models.CharField(max_length=100) | |||||
prod_des = models.TextField(blank=True, null=True) | |||||
category_id = models.IntegerField() | |||||
show_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
original_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
show_img = models.CharField(max_length=255) | |||||
sales_count = models.IntegerField() | |||||
memo = models.TextField(blank=True, null=True) | |||||
trip_desc = models.TextField(blank=True, null=True) | |||||
feature = models.TextField(blank=True, null=True) | |||||
commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
create_user_id = models.IntegerField() | |||||
is_recom = models.IntegerField() | |||||
start_area = models.CharField(max_length=255, blank=True, null=True) | |||||
address = models.CharField(max_length=255, blank=True, null=True) | |||||
close_sale_time = models.CharField(max_length=50) | |||||
star = models.CharField(max_length=4) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
update_user = models.CharField(max_length=50) | |||||
bus_ticket_id = models.IntegerField() | |||||
bus_line_type = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_category' | |||||
class ProdCategoryInfo(models.Model): | |||||
pro_cate_id = models.IntegerField(primary_key=True) | |||||
comment_cnt = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_category_info' | |||||
class ProdComment(models.Model): | |||||
travel_id = models.IntegerField(blank=True, null=True) | |||||
prod_id = models.CharField(max_length=255, blank=True, null=True) | |||||
star = models.IntegerField() | |||||
title = models.CharField(max_length=30) | |||||
content = models.TextField() | |||||
u_name = models.CharField(max_length=100) | |||||
u_id = models.IntegerField(blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
look_over = models.IntegerField() | |||||
type = models.IntegerField() | |||||
comment_id = models.IntegerField() | |||||
parent_id = models.IntegerField() | |||||
cancel_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_comment' | |||||
class ProdImg(models.Model): | |||||
pro_cate_id = models.IntegerField() | |||||
img_url = models.CharField(max_length=255) | |||||
redirect_url = models.CharField(max_length=255, blank=True, null=True) | |||||
memo = models.CharField(max_length=255, blank=True, null=True) | |||||
img_type = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_img' | |||||
class ProdMain(models.Model): | |||||
prod_id = models.AutoField(primary_key=True) | |||||
prod_cate_id = models.IntegerField() | |||||
prod_name = models.CharField(max_length=100) | |||||
prod_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
create_user = models.CharField(max_length=50) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
update_user = models.CharField(max_length=50) | |||||
bus_id = models.CharField(max_length=255) | |||||
commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_main' | |||||
class ShUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
user_name = models.CharField(max_length=100, blank=True, null=True) | |||||
phone = models.CharField(unique=True, max_length=20, blank=True, null=True) | |||||
head_img = models.CharField(max_length=255, blank=True, null=True) | |||||
status = models.IntegerField(blank=True, null=True) | |||||
reg_time = models.DateTimeField(blank=True, null=True) | |||||
last_login = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'sh_user' | |||||
class SysItinerary(models.Model): | |||||
category_id = models.IntegerField() | |||||
category_name = models.CharField(max_length=50) | |||||
scenc_introduce = models.TextField(blank=True, null=True) | |||||
scenc_play = models.TextField(blank=True, null=True) | |||||
folk_customs = models.TextField(blank=True, null=True) | |||||
local_specialities = models.TextField(blank=True, null=True) | |||||
travel_tips = models.TextField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'sys_itinerary' | |||||
class ZzNews(models.Model): | |||||
class_id = models.IntegerField() | |||||
news_title = models.CharField(max_length=100) | |||||
navi_content = models.CharField(max_length=255) | |||||
content = models.TextField() | |||||
create_user = models.CharField(max_length=50) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'zz_news' |
@@ -0,0 +1,10 @@ | |||||
from django.conf.urls import url | |||||
from backend import views | |||||
from backend.controller import home | |||||
urlpatterns = [ | |||||
url(r'^index/', views.index), | |||||
url(r'^home/product', home.get_product), | |||||
url(r'^home/curl_test', home.curl_test) | |||||
] |
@@ -0,0 +1,6 @@ | |||||
# Create your views here. | |||||
from django.shortcuts import render | |||||
def index(request): | |||||
return render(request, 'index.html') |
@@ -0,0 +1,10 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<title>Title</title> | |||||
</head> | |||||
<body> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,135 @@ | |||||
#!/usr/bin/env python | |||||
# encoding: utf-8 | |||||
""" | |||||
* | |||||
* ============================================================================ | |||||
* * 版权所有 蜘蛛出行 * * | |||||
* 网站地址: http://www.zhizhuchuxing.com | |||||
* ---------------------------------------------------------------------------- | |||||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 | |||||
* 使用;不允许对程序代码以任何形式任何目的的再发布。 | |||||
* ============================================================================ | |||||
* Author By: 倪宗锋 | |||||
* FileName curl_interface.py | |||||
* Create By 2017/12/12 13:53 $ | |||||
""" | |||||
import json | |||||
import pycurl | |||||
from io import * | |||||
from urllib.parse import urlencode | |||||
import time | |||||
import logging | |||||
from django.conf import settings | |||||
import os | |||||
class CurlInterface: | |||||
__body = '' # 报文体 | |||||
__type = 1 # 报文数据类型 1:json 2:xml 3 发送原数据接收xml 4 发送原数据 接收json 5:都是原数据 | |||||
__response = '' # 返回值 | |||||
__time_out = 200 # 超时时间 | |||||
__url = '' # 接口地址 | |||||
__verb = 'get' # 传值方式 | |||||
__curl_get_info = '' # 校验概要 | |||||
__log_msg = '' # 日志 | |||||
__curl = '' # curl对象 | |||||
__total_time = 0 # 总耗时 | |||||
def __init__(self, body, type): | |||||
""" | |||||
初始化curl类 | |||||
:param body: 报文体 | |||||
:param type: 报文数据类型 1:json 2:xml 3 发送原数据接收xml 4 发送原数据 接收json 5:都是原数据 | |||||
""" | |||||
self.__type = type | |||||
self.__set_body(body) | |||||
def __set_body(self, body): | |||||
""" | |||||
设置报文体 | |||||
:param body: | |||||
:return: array|string | |||||
""" | |||||
if self.__type == 1: | |||||
self.__body = json.dumps(body) | |||||
elif self.__type == 2: | |||||
self.__body = body | |||||
elif self.__type == 3: | |||||
self.__body = urlencode(body) | |||||
elif self.__type == 4: | |||||
self.__body = urlencode(body) | |||||
else: | |||||
self.__body = urlencode(body) | |||||
def exec(self, url, verb): | |||||
""" | |||||
curl执行 | |||||
:param url: 接口地址 | |||||
:param verb: post|get 传值方式 | |||||
:return: | |||||
""" | |||||
try: | |||||
self.__verb = verb | |||||
self.__url = url | |||||
self.__curl = pycurl.Curl() | |||||
b = BytesIO() | |||||
self.__curl.setopt(pycurl.WRITEFUNCTION, b.write) | |||||
self.__curl.setopt(pycurl.URL, url) # 路径 | |||||
self.__curl.setopt(pycurl.ENCODING, 'gzip,deflate') # 编码格式 | |||||
self.__curl.setopt(pycurl.FOLLOWLOCATION, 1) | |||||
# self.__curl.setopt(pycurl.VERBOSE, 1) # 打印调试信息 | |||||
# self.__curl.setopt(pycurl.HEADER, 1)#输出头部信息 | |||||
self.__curl.setopt(pycurl.FOLLOWLOCATION, 1) | |||||
self.__curl.setopt(pycurl.MAXREDIRS, 5) # 指定HTTP重定向的最大数 | |||||
self.__curl.setopt(pycurl.DNS_CACHE_TIMEOUT, 60 * 60 * 24) # DNS解析缓存时间 不要调低 第一次可能时间很长 故需要长时间缓存dns解析 | |||||
if self.__verb == 'POST': | |||||
self.__curl.setopt(pycurl.POST, 1) | |||||
self.__curl.setopt(pycurl.POSTFIELDS, self.__body) | |||||
else: | |||||
self.__curl.setopt(pycurl.HTTPGET, 1) | |||||
self.__curl.perform() | |||||
self.__response = b.getvalue().decode("utf-8") | |||||
self.__total_time = self.__curl.getinfo(pycurl.TOTAL_TIME) | |||||
b.close() | |||||
self.__curl.close() | |||||
return self.__set_return() | |||||
except BaseException as e: | |||||
return {'code': 1, 'msg': '接口返回异常', 'data': ''} | |||||
def __set_return(self): | |||||
""" | |||||
设置返回值 | |||||
:return: | |||||
""" | |||||
if self.__type == 1: # 返回json | |||||
result = json.loads(self.__response) | |||||
elif self.__type == 2: # 返回xml | |||||
result = self.__response | |||||
elif self.__type == 3: # 返回xml | |||||
result = self.__response | |||||
elif self.__type == 4: # 返回json数据 | |||||
result = json.loads(self.__response) | |||||
else: # 返回原数据 | |||||
result = self.__response | |||||
res = result | |||||
return res | |||||
def __del__(self): | |||||
""" | |||||
记录访问日志 | |||||
:return: | |||||
""" | |||||
self.__log_msg = '' | |||||
self.__log_msg += time.strftime('%Y-%m-%d %H:%I:%S', time.localtime(time.time())) + '\n' | |||||
self.__log_msg += 'curl:' + self.__url + ' method:' + self.__verb + '\n' | |||||
self.__log_msg += 'body:' + self.__body + '\n' | |||||
self.__log_msg += 'response:' + self.__response + '\n\n' | |||||
date = time.strftime('%Y-%m-%d', time.localtime(time.time())) | |||||
log_file = settings.BASE_DIR + '/log/curl/' + date + '.log' # 日志路径 | |||||
if os.path.exists(log_file) is False: # 日志文件不存在则创建 | |||||
fobj = open(log_file, 'w') | |||||
fobj.close() | |||||
logging.basicConfig(filename=log_file, filemode='w', level=logging.INFO) | |||||
logging.info(self.__log_msg) |
@@ -0,0 +1,213 @@ | |||||
""" | |||||
通用方法类 | |||||
""" | |||||
from django.http import HttpResponse | |||||
import json | |||||
from datetime import date, datetime | |||||
from django.db import connection | |||||
from django.conf import settings | |||||
import hashlib | |||||
import decimal | |||||
class CJsonEncoder(json.JSONEncoder): | |||||
def default(self, obj): | |||||
if isinstance(obj, datetime): | |||||
return obj.strftime('%Y-%m-%d %H:%M:%S') | |||||
elif isinstance(obj, date): | |||||
return obj.strftime('%Y-%m-%d') | |||||
elif isinstance(obj, decimal.Decimal): # python无法json_dumps decimal类型,转成float型 | |||||
return float(obj) | |||||
else: | |||||
return json.JSONEncoder.default(self, obj) | |||||
def sql_array(result, select): | |||||
""" | |||||
sql数据查询转换为数组 | |||||
:param result:查询结果 | |||||
:param select:查询的字段 | |||||
:return: | |||||
""" | |||||
return_list = [] | |||||
for i in result: | |||||
val_list = {} | |||||
for j in select: | |||||
val_list[j] = i.__getattribute__(j) # 获取字段的值 | |||||
return_list.append(val_list) | |||||
return return_list | |||||
def re_su(msg='', data='', url='', code=0): | |||||
""" | |||||
返回成功信息 | |||||
:param msg: | |||||
:param data: | |||||
:param url: | |||||
:param code: | |||||
:return: | |||||
""" | |||||
if data == '': | |||||
data = {} | |||||
result = { | |||||
'flag': True, | |||||
'msg': msg, | |||||
'data': data, | |||||
'url': url, | |||||
'code': code | |||||
} | |||||
return result | |||||
def re_err(msg, data='', url='', code=1): | |||||
""" | |||||
返回报错信息到上一层 | |||||
:param msg: | |||||
:param data: | |||||
:param url: | |||||
:param code: | |||||
:return: | |||||
""" | |||||
if data == '': | |||||
data = {} | |||||
result = { | |||||
'flag': False, | |||||
'msg': msg, | |||||
'data': data, | |||||
'url': url, | |||||
'code': code | |||||
} | |||||
return result | |||||
def re_json_su(msg='', data='', url='', code=0): | |||||
""" | |||||
返回 失败错误信息 | |||||
:param msg: | |||||
:param data: | |||||
:param url: | |||||
:param code: | |||||
:return: | |||||
""" | |||||
if data == '': | |||||
data = {} | |||||
result = { | |||||
'flag': True, | |||||
'msg': msg, | |||||
'data': data, | |||||
'url': url, | |||||
'code': code | |||||
} | |||||
return HttpResponse(json.dumps(result, cls=CJsonEncoder)) | |||||
def re_json_err(msg, data='', url='', code=1): | |||||
""" | |||||
返回json报错信息到前端 | |||||
:param msg: | |||||
:param data: | |||||
:param url: | |||||
:param code: | |||||
:return: | |||||
""" | |||||
if data == '': | |||||
data = {} | |||||
result = { | |||||
'flag': False, | |||||
'msg': msg, | |||||
'data': data, | |||||
'url': url, | |||||
'code': code | |||||
} | |||||
return HttpResponse(json.dumps(result, cls=CJsonEncoder)) | |||||
def re_json(data): | |||||
""" | |||||
返回字符串 | |||||
:param data: | |||||
:return: | |||||
""" | |||||
return HttpResponse(json.dumps(data, cls=CJsonEncoder)) | |||||
def select_all(sql, param): | |||||
""" | |||||
select查询 | |||||
:param sql: | |||||
:return: | |||||
""" | |||||
cursor = connection.cursor() | |||||
cursor.execute(sql, param) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
li = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = str(item[i]) | |||||
i = i + 1 | |||||
li.append(d) | |||||
return li | |||||
else: | |||||
return li | |||||
def select_row(sql, param): | |||||
""" | |||||
select查询 | |||||
:param sql: | |||||
:return: | |||||
""" | |||||
cursor = connection.cursor() | |||||
cursor.execute(sql, param) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
li = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = item[i] | |||||
i = i + 1 | |||||
li.append(d) | |||||
return li[0] | |||||
else: | |||||
return li | |||||
def auth_code_for_cs(request_time): | |||||
""" | |||||
cs接口调用加密函数 | |||||
:param request_time: | |||||
:return: | |||||
""" | |||||
request_time = str(request_time) | |||||
user = settings.ADM_USER | |||||
user_key = settings.ADM_USER_KEY | |||||
# 加密规则为 request_time(linux时间戳)前三位作为种子+ user + user_key+后三位,进行MD5加密后,换成大写字母 | |||||
auth_code = ( | |||||
request_time[0:3] + "|" + user + "|" + user_key + "|" + request_time[(len(request_time) - 3):len(request_time)]) | |||||
m2 = hashlib.md5() # 进行md5加密 | |||||
m2.update(auth_code.encode("utf-8")) | |||||
return m2.hexdigest().upper() | |||||
def get_client_ip(request): | |||||
""" | |||||
获取用户ip | |||||
:param request: | |||||
:return: | |||||
""" | |||||
try: | |||||
real_ip = request.META['HTTP_X_FORWARDED_FOR'] | |||||
regip = real_ip.split(",")[0] | |||||
except: | |||||
try: | |||||
regip = request.META['REMOTE_ADDR'] | |||||
except: | |||||
regip = "" | |||||
return regip |
@@ -0,0 +1,10 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<title>Title</title> | |||||
</head> | |||||
<body> | |||||
手机官网 | |||||
</body> | |||||
</html> |
@@ -0,0 +1,22 @@ | |||||
#!/usr/bin/env python | |||||
import os | |||||
import sys | |||||
if __name__ == "__main__": | |||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ulb_manage.settings") | |||||
try: | |||||
from django.core.management import execute_from_command_line | |||||
except ImportError: | |||||
# The above import may fail for some other reason. Ensure that the | |||||
# issue is really that Django is missing to avoid masking other | |||||
# exceptions on Python 2. | |||||
try: | |||||
import django | |||||
except ImportError: | |||||
raise ImportError( | |||||
"Couldn't import Django. Are you sure it's installed and " | |||||
"available on your PYTHONPATH environment variable? Did you " | |||||
"forget to activate a virtual environment?" | |||||
) | |||||
raise | |||||
execute_from_command_line(sys.argv) |
@@ -0,0 +1,2 @@ | |||||
import pymysql | |||||
pymysql.install_as_MySQLdb() |
@@ -0,0 +1,5 @@ | |||||
from django.apps import AppConfig | |||||
class OfficialConfig(AppConfig): | |||||
name = 'official' |
@@ -0,0 +1,46 @@ | |||||
from official.model import FxUser | |||||
from common import util | |||||
from official.model import ZzNews | |||||
from django.conf import settings | |||||
from django.http import HttpResponseRedirect | |||||
from official.logic import client_opinion | |||||
def index(request): | |||||
home_url = settings.STATIC_URL | |||||
return HttpResponseRedirect(home_url + 'official/index.html') | |||||
def get_list(request): | |||||
returns_list = FxUser.get_list() # 获取用户列表 | |||||
return util.re_json_su('', returns_list) # 返回json数组 | |||||
def get_news(request): | |||||
page = request.POST.get('page', 1) | |||||
page_size = request.POST.get('page_size', 8) # 每页条数 | |||||
news_list = ZzNews.get_news(page, page_size) | |||||
return util.re_json_su('', {'news_list': news_list}) | |||||
def get_news_by_class(request): | |||||
class_id = request.POST.get('class_id', 1) | |||||
page = request.POST.get('page', 1) | |||||
page_size = request.POST.get('page_size', 8) # 每页条数 | |||||
news_list = ZzNews.get_news_by_class(class_id, page, page_size) | |||||
return util.re_json_su('', news_list) | |||||
def get_news_content(request): | |||||
news_id = request.POST.get('id', 1) | |||||
data = ZzNews.get_news_content(news_id) | |||||
return util.re_json_su('', data) | |||||
def addOpinion(request): | |||||
name = request.POST.get('userName', '') | |||||
mail = request.POST.get('userEmail', '') | |||||
opinion = request.POST.get('userText', '') | |||||
ip = util.get_client_ip(request) | |||||
rst = client_opinion.addOpinion(name, mail, opinion, ip) | |||||
return util.re_json(rst) |
@@ -0,0 +1,24 @@ | |||||
from official.logic import order_logic as logic | |||||
from common import util | |||||
def make_order(request): | |||||
""" | |||||
下单接口 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
params = logic.get_make_order_params(request) | |||||
result = logic.make_order(params) | |||||
return util.re_json(result) | |||||
def check_order(request): | |||||
""" | |||||
校验订单状态 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
order_id = request.POST.get('order_id', '11493') # order_id | |||||
result = logic.check_order(order_id) | |||||
return util.re_json(result) |
@@ -0,0 +1,24 @@ | |||||
from official.logic import cms_category_prod_logic as cmslogic | |||||
from common import util | |||||
def get_cms_list(request): | |||||
res = cmslogic.getCmsProdcateList() | |||||
return util.re_json(res) | |||||
def get_prod_list(request): | |||||
""" | |||||
获取产品列表 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
cms_cate_id = request.POST.get('cms_cate_id', 0) | |||||
content = request.POST.get('content', '') | |||||
page = request.POST.get('page', 1) | |||||
page_size = request.POST.get('page_size', 6) | |||||
if cms_cate_id == '167': | |||||
res = cmslogic.get_www_hotel_list(content, page, page_size) | |||||
else: | |||||
res = cmslogic.getProdList(cms_cate_id, content, page, page_size) | |||||
return util.re_json(res) |
@@ -0,0 +1,37 @@ | |||||
from official.logic import reserve_bus_logic as logic | |||||
from common import util | |||||
def get_prod_info(request): | |||||
""" | |||||
巴士产品获取 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
# 获取参数 | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
get_info = logic.get_prod_info(prod_id) # 获取产品信息 | |||||
return util.re_json(get_info) | |||||
def get_line_stock(request): | |||||
""" | |||||
获取主线路库存信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
date = request.POST.get('date', '') # 日期 | |||||
get_stock = logic.get_line_stock(prod_id, date) | |||||
return util.re_json(get_stock) | |||||
def get_prod_array(request): | |||||
""" | |||||
获取产品数组 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 子线路产品ID | |||||
get_prod = logic.get_prod_array(prod_id) | |||||
return util.re_json(get_prod) |
@@ -0,0 +1,76 @@ | |||||
from official.logic import reserve_hotel_logic as logic | |||||
from common import util | |||||
def get_info(request): | |||||
""" | |||||
获取酒店产品信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
data = { | |||||
'hotel_id': request.POST.get('hotel_id', ''), # 酒店ID | |||||
'start_date': request.POST.get('start_date', ''), # 入住日期 | |||||
'end_date': request.POST.get('end_date', '') # 离店日期 | |||||
} | |||||
res = logic.get_info(data) # 获取产品信息 | |||||
return util.re_json(res) | |||||
def get_room_list(request): | |||||
""" | |||||
获取酒店房型列表 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
data = { | |||||
'hotel_id': request.POST.get('hotel_id', ''), # 酒店ID | |||||
'start_date': request.POST.get('start_date', ''), # 入住日期 | |||||
'end_date': request.POST.get('end_date', ''), # 离店日期 | |||||
'room_id': request.POST.get('room_id', '') # 指定房型ID (非必传) | |||||
} | |||||
res = logic.get_room_list(data) # 获取产品信息 | |||||
return util.re_json(res) | |||||
def check_hotel(request): | |||||
""" | |||||
校验酒店数据 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
data = { | |||||
'total_details': request.POST.get('total_details', ''), # 单价列表 | |||||
'hotel_id': request.POST.get('hotel_id', ''), # 酒店ID | |||||
'start_date': request.POST.get('start_date', ''), # 入住日期 | |||||
'end_date': request.POST.get('end_date', ''), # 离店日期 | |||||
'room_id': request.POST.get('room_id', ''), # 指定房型ID | |||||
'prod_cnt': request.POST.get('prod_cnt', ''), # 产品数量 | |||||
} | |||||
res = logic.check_hotel(data) # 获取产品信息 | |||||
return util.re_json(res) | |||||
def make_order(request): | |||||
""" | |||||
酒店下单 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
data = { | |||||
'hotel_id': request.POST.get('hotel_id', ''), # 酒店ID | |||||
'start_date': request.POST.get('start_date', ''), # 入住日期 | |||||
'end_date': request.POST.get('end_date', ''), # 离店日期 | |||||
'room_id': request.POST.get('room_id', ''), # 指定房型ID | |||||
'prod_cnt': request.POST.get('prod_cnt', ''), # 产品数量 | |||||
'contacts_name': request.POST.get('contacts_name', ''), # 联系人名称 | |||||
'contacts_phone': request.POST.get('contacts_phone', ''), # 手机 | |||||
'in_time': request.POST.get('in_time', ''), # 入住时间 | |||||
'hotel_name': request.POST.get('hotel_name', ''), # 酒店名称 | |||||
'remarks': request.POST.get('remarks', ''), # 备注 | |||||
'passanger_arr': request.POST.get('passanger_arr', ''), # 入住人 | |||||
'system': request.POST.get('system', '3') #系统编号 | |||||
} | |||||
res = logic.make_order(data) # 获取产品信息 | |||||
return util.re_json(res) |
@@ -0,0 +1,25 @@ | |||||
from official.logic import reserve_ticket_logic as logic | |||||
from common import util | |||||
def get_prod_info(request): | |||||
""" | |||||
获取门票产品信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
get_info = logic.get_prod_info(prod_id) # 获取产品信息 | |||||
return util.re_json(get_info) | |||||
def get_stock(request): | |||||
""" | |||||
获取票种信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
date = request.POST.get('date', '') # 产品ID | |||||
get_info = logic.get_stock(prod_id, date) # 获取票种信息 | |||||
return util.re_json(get_info) |
@@ -0,0 +1,38 @@ | |||||
from official.logic import reserve_tourist_logic as logic | |||||
from common import util | |||||
def get_prod_info(request): | |||||
""" | |||||
获取门票产品信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
get_info = logic.get_prod_info(prod_id) # 获取产品信息 | |||||
return util.re_json(get_info) | |||||
def get_stock(request): | |||||
""" | |||||
获取票种信息 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
date = request.POST.get('date', '') # 日期 | |||||
get_info = logic.get_stock(prod_id, date) # 获取票种信息 | |||||
return util.re_json(get_info) | |||||
def get_price(request): | |||||
""" | |||||
获取订单价格 | |||||
:param request: | |||||
:return: | |||||
""" | |||||
prod_id = request.POST.get('prod_id', '') # 产品ID | |||||
prod_array = request.POST.get('prod_array', []) # //产品数组 | |||||
date = request.POST.get('date', '') # 日期 | |||||
get_info = logic.get_price(prod_id, date, prod_array) # 获取订单价格 | |||||
return util.re_json(get_info) |
@@ -0,0 +1,12 @@ | |||||
from official.model import ClientOpinion | |||||
from common import util | |||||
def addOpinion(name, mail, opinion, ip): | |||||
if name == '' and mail == '' and opinion == '': | |||||
return util.re_err('缺少参数') | |||||
result = ClientOpinion.addOpinion(name, mail, opinion, ip) | |||||
if result: | |||||
return util.re_su('增加成功') | |||||
else: | |||||
return util.re_err('添加失败') |
@@ -0,0 +1,76 @@ | |||||
from common import util | |||||
from official.model import CmsCategory | |||||
from official.model import CmsCategoryProd | |||||
import math | |||||
from common import curl_interface | |||||
from django.conf import settings | |||||
def getCmsProdcateList(): | |||||
""" | |||||
获取官网的产品分类 | |||||
:return: | |||||
""" | |||||
result = CmsCategory.getCmsCategory() | |||||
res = { | |||||
'cms_category_list': result, | |||||
} | |||||
return util.re_su('', res) | |||||
def getProdList(cms_cate_id, content, page, page_size): | |||||
""" | |||||
根据产品分类id获取产品列表 | |||||
:param cms_cate_id: 分类id | |||||
:param content: 搜索关键字 | |||||
:param page: 当前页 | |||||
:param page_size: 每页的条数 | |||||
:return: | |||||
""" | |||||
prod_list = CmsCategoryProd.getProdByCms(cms_cate_id, content, page, page_size) | |||||
num = CmsCategoryProd.getProdNumByCms(cms_cate_id, content) | |||||
for item in prod_list: | |||||
item['show_img'] = item['show_img'] + '.370x326.jpg' | |||||
if num['num'] is None: | |||||
number = 0 | |||||
else: | |||||
number = int(num['num']) | |||||
paper = { | |||||
'total': number, | |||||
'current': int(page), | |||||
'page_size': int(page_size), | |||||
'total_pages': math.ceil(number / int(page_size)) | |||||
} | |||||
res = { | |||||
'prod_list': prod_list, | |||||
'page': paper | |||||
} | |||||
return util.re_su('', res) | |||||
def get_www_hotel_list(content, page, page_size): | |||||
""" | |||||
获取官网酒店数据 | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface('', 4) | |||||
lists = curl.exec(settings.WX_HOST + '/zzcx/home/hotel/get-www-hotel-list', 'get') | |||||
result = [] | |||||
for hotel in lists: | |||||
if content in hotel['pro_cate_name']: | |||||
result.append(hotel) | |||||
number = len(result) | |||||
start = (int(page) - 1) * int(page_size) | |||||
end = int(page) * int(page_size) | |||||
prod_list = result[start:end] | |||||
paper = { | |||||
'total': number, | |||||
'current': int(page), | |||||
'page_size': int(page_size), | |||||
'total_pages': math.ceil(number / int(page_size)) | |||||
} | |||||
res = { | |||||
'prod_list': prod_list, | |||||
'page': paper | |||||
} | |||||
return util.re_su('', res) |
@@ -0,0 +1,53 @@ | |||||
from common import curl_interface | |||||
from django.conf import settings | |||||
from urllib import parse | |||||
def get_make_order_params(request): | |||||
params = { | |||||
'days': request.POST.get('days', '1'), # 经历的天数 | |||||
'pro_cate_id': request.POST.get('pro_cate_id', ''), # 去的产品品类ID | |||||
'start_date': request.POST.get('start_date', ''), # 出发日期 | |||||
'start_time': request.POST.get('start_time', '00:00:00'), # 去程出发时间 | |||||
'run_id': request.POST.get('run_id', ''), # 去除班次ID | |||||
# 巴士才有的参数 | |||||
'prod_arr': request.POST.get('prod_arr', ''), # 去的产品列表 | |||||
'contacts_name': request.POST.get('contacts_name', ''), # 联系人名称 | |||||
'contacts_phone': request.POST.get('contacts_phone', ''), # 联系人手机 | |||||
'contacts_ID': request.POST.get('contacts_ID', ''), # 联系人身份证 | |||||
'is_buy_insurance': request.POST.get('is_buy_insurance', '0'), # 是否购买保险,0:不购买,1:购买 | |||||
'insurance_list': request.POST.get('insurance_list', '[]'), # 保险受保人数组 | |||||
'insurance_price': request.POST.get('insurance_price', 2), # 保险价格 | |||||
'passanger_arr': request.POST.get('passanger_arr', '[]'), # 出行人数组 | |||||
'system': request.POST.get('system', 2), # 系统ID | |||||
} | |||||
return params | |||||
def make_order(params): | |||||
""" | |||||
调用下单接口 | |||||
:param params: | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface(params, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/order/order/make-order', 'POST') | |||||
if result['flag'] is True: | |||||
result['data']['pay_url'] = settings.FX_HOST + '/fx/?r=weChat/we-chat/q-code&qCode=' + parse.quote_plus( | |||||
result['data']['pay_url']) | |||||
return result | |||||
def check_order(order_id): | |||||
""" | |||||
校验订单状态 | |||||
:param order_id: | |||||
:return: | |||||
""" | |||||
params = { | |||||
'order_id': order_id, | |||||
'money': 1 | |||||
} | |||||
curl = curl_interface.CurlInterface(params, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/order/order/check-order-status', 'POST') | |||||
return result |
@@ -0,0 +1,72 @@ | |||||
import re | |||||
from common import util | |||||
from official.model import ProdCategory | |||||
from django.conf import settings | |||||
from common import curl_interface | |||||
import time | |||||
def get_prod_info(prod_id): | |||||
""" | |||||
获取巴士产品信息 | |||||
:param prod_id: | |||||
:return: | |||||
""" | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
# 数据获取 | |||||
get_info = ProdCategory.get_bus_line_prod(prod_id) | |||||
if get_info['category_id'] != 1: | |||||
return util.re_err('该产品不是巴士产品') | |||||
# 获取价格日历 | |||||
date_price = get_date_price(prod_id) | |||||
if date_price['flag'] is False: | |||||
return date_price | |||||
res = { | |||||
'prod_info': get_info, | |||||
'date_list': date_price['data']['list'] | |||||
} | |||||
return util.re_su('', res) | |||||
def get_line_stock(prod_id, date): | |||||
""" | |||||
获取产品库存 | |||||
:param prod_id: | |||||
:param date: | |||||
:return: | |||||
""" | |||||
send_data = { | |||||
'pro_cate_id': prod_id, | |||||
'date': date | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
get_stock = curl.exec(settings.WX_HOST + '/zzcx/home/bus/get-line-bus-stock', 'POST') | |||||
return get_stock | |||||
def get_date_price(prod_id): | |||||
""" | |||||
获取价格日历 | |||||
:param line_id: | |||||
:return: | |||||
""" | |||||
send_data = { | |||||
'pro_cate_id': prod_id, | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
ticket_arr_cs = curl.exec(settings.WX_HOST + '/zzcx/home/bus/get-line-sale-date', 'POST') | |||||
return ticket_arr_cs | |||||
def get_prod_array(prod_id): | |||||
""" | |||||
获取票种数组 | |||||
:param prod_id: | |||||
:return: | |||||
""" | |||||
get_arr = ProdCategory.get_prod_array(prod_id) | |||||
return util.re_su('', {'list': get_arr}) |
@@ -0,0 +1,50 @@ | |||||
from common import curl_interface | |||||
from django.conf import settings | |||||
from urllib import parse | |||||
def get_info(send_data): | |||||
""" | |||||
获取酒店详情 | |||||
:param send_data: | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/hotel/get-info', 'POST') | |||||
return result | |||||
def get_room_list(send_data): | |||||
""" | |||||
获取房型列表 | |||||
:param send_data: | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/hotel/get-room-list', 'POST') | |||||
return result | |||||
def check_hotel(send_data): | |||||
""" | |||||
校验酒店 | |||||
:param send_data: | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/hotel/check-hotel', 'POST') | |||||
return result | |||||
def make_order(send_data): | |||||
""" | |||||
酒店下单 | |||||
:param send_data: | |||||
:return: | |||||
""" | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/hotel/make-order', 'POST') | |||||
if result['flag'] is True: | |||||
result['data']['pay_url'] = settings.FX_HOST + '/fx/?r=weChat/we-chat/q-code&qCode=' + parse.quote_plus( | |||||
result['data']['pay_url']) | |||||
return result |
@@ -0,0 +1,35 @@ | |||||
import re | |||||
from common import util | |||||
from common import curl_interface | |||||
from django.conf import settings | |||||
def get_prod_info(prod_id): | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
send_data = { | |||||
'pro_cate_id': prod_id | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
get_info = curl.exec(settings.WX_HOST + '/zzcx/home/men-p/initialize', 'POST') | |||||
return get_info | |||||
def get_stock(prod_id, date): | |||||
""" | |||||
获取门票票种信息 | |||||
:param prod_id: | |||||
:param date: | |||||
:return: | |||||
""" | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
send_data = { | |||||
'prod_cate_id': prod_id, | |||||
'date': date | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/men-p/get-prod-arr', 'POST') | |||||
return result |
@@ -0,0 +1,56 @@ | |||||
import re | |||||
from common import util | |||||
from common import curl_interface | |||||
from django.conf import settings | |||||
def get_prod_info(prod_id): | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
send_data = { | |||||
'pro_cate_id': prod_id | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
get_info = curl.exec(settings.WX_HOST + '/zzcx/home/free-walker/initialize', 'POST') | |||||
return get_info | |||||
def get_stock(prod_id, date): | |||||
""" | |||||
获取门票票种信息 | |||||
:param prod_id: | |||||
:param date: | |||||
:return: | |||||
""" | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
send_data = { | |||||
'prod_cate_id': prod_id, | |||||
'date': date | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/free-walker/get-prod-arr', 'POST') | |||||
return result | |||||
def get_price(prod_id, date, prod_array): | |||||
""" | |||||
获取自由行订单价格 | |||||
:param prod_id: | |||||
:param date: | |||||
:param prod_array: | |||||
:return: | |||||
""" | |||||
# 参数校验 | |||||
if re.match('^[1-9][0-9]{0,10}', prod_id) is None: | |||||
return util.re_err('参数错误') | |||||
send_data = { | |||||
'pro_cate_id': prod_id, | |||||
'start_date': date, | |||||
'prod_arr': prod_array | |||||
} | |||||
curl = curl_interface.CurlInterface(send_data, 4) | |||||
result = curl.exec(settings.WX_HOST + '/zzcx/home/free-walker/get-price', 'POST') | |||||
return result |
@@ -0,0 +1,19 @@ | |||||
from official.models import ClientOpinion | |||||
import datetime | |||||
def addOpinion(name, mail, opinion, ip): | |||||
""" | |||||
:param name:名字 | |||||
:param mail:邮箱 | |||||
:param opinion:建议 | |||||
:param ip:客户端ip | |||||
:return: | |||||
""" | |||||
now_time = datetime.datetime.now() | |||||
try: | |||||
obj = ClientOpinion(name=name, e_mail=mail, opinion=opinion, client_ip=ip, create_time=now_time) | |||||
obj.save() | |||||
return True | |||||
except: | |||||
return False |
@@ -0,0 +1,12 @@ | |||||
from official.models import CmsCategory | |||||
from common import util | |||||
def getCmsCategory(): | |||||
""" | |||||
获取产品的分类 | |||||
:return: list | |||||
""" | |||||
cms_list = CmsCategory.objects.filter(delete_flag=0, system=3).order_by("-show_sort") | |||||
cms_list = util.sql_array(cms_list, ['cms_category_id', 'category_name']) | |||||
return cms_list |
@@ -0,0 +1,54 @@ | |||||
from official.models import CmsCategoryProd | |||||
from common import util | |||||
def getProdByCms(cms_cate_id, content, page, page_size): | |||||
""" | |||||
根据cms_category_id查找对应的产品列表 | |||||
:param cms_cate_id: 品类id | |||||
:param content: 搜索关键字 | |||||
:param page: 当前页 | |||||
:param page_size: 一页的数量 | |||||
:return:list | |||||
""" | |||||
condition_list = [] | |||||
page_size = int(page_size) | |||||
start_point = (int(page) - 1) * page_size | |||||
sql = """SELECT c.pro_cate_id, c.sign, c.pro_cate_name, c.prod_des, c.show_price,c.show_img, c.category_id, | |||||
(SELECT d.end_area_id from bus_ticket d where d.line_id = c.sign order by d.ticket_id desc limit 1) 'poi_id' | |||||
FROM cms_category_prod AS b JOIN prod_category AS c ON c.pro_cate_id = b.prod_cate_id AND c.delete_flag = 0 WHERE b.system = 3 AND b.delete_flag = 0 """ | |||||
if cms_cate_id != 0 and content == '': | |||||
sql += ' AND b.cms_cate_id = %s ' | |||||
condition_list.append(cms_cate_id) | |||||
if content != '': | |||||
sql += ' and c.pro_cate_name LIKE %s' | |||||
content = '%' + content + '%' | |||||
condition_list.append(content) | |||||
sql += 'limit %s,%s' | |||||
condition_list.append(start_point) | |||||
condition_list.append(page_size) | |||||
prod_list = util.select_all(sql, condition_list) | |||||
return prod_list | |||||
def getProdNumByCms(cms_cate_id, content): | |||||
""" | |||||
获取对应的分类下的产品的数量 | |||||
:param cms_cate_id: 品类id | |||||
:return: | |||||
""" | |||||
condition_list = [] | |||||
sql = """SELECT sum(if(c.pro_cate_id,1,0)) as num FROM cms_category_prod AS b JOIN prod_category AS c ON c.pro_cate_id = b.prod_cate_id AND c.delete_flag = 0 WHERE b.system = 3 AND b.delete_flag = 0""" | |||||
if cms_cate_id != 0 and content == '': | |||||
sql += ' AND b.cms_cate_id = %s' | |||||
condition_list.append(cms_cate_id) | |||||
if content != '': | |||||
sql += ' and c.pro_cate_name LIKE %s' | |||||
content = '%' + content + '%' | |||||
condition_list.append(content) | |||||
num = util.select_row(sql, condition_list) | |||||
return num |
@@ -0,0 +1,9 @@ | |||||
from official.models import FxUser | |||||
from common import util | |||||
def get_list(): | |||||
select = ['uid', 'nickname', 'phone'] # 查询的字段 | |||||
opera_product = FxUser.objects.all().filter(phone='13795379620') # 查询的结果 | |||||
opera_product = util.sql_array(opera_product, select) | |||||
return opera_product |
@@ -0,0 +1,35 @@ | |||||
from common import util | |||||
def get_bus_line_prod(prod_id): | |||||
""" | |||||
获取主线路产品信息 | |||||
:param prod_id: | |||||
:return: | |||||
""" | |||||
sql = """SELECT | |||||
a.pro_cate_id, | |||||
a.pro_cate_name, | |||||
a.category_id, | |||||
(SELECT category_name from base_category b where a.category_id = category_id) 'category_name', | |||||
ifnull(a.sign,'') 'sign' | |||||
from prod_category a | |||||
WHERE a.pro_cate_id = %s""" | |||||
get_info = util.select_row(sql, [prod_id]) | |||||
return get_info | |||||
def get_prod_array(prod_id): | |||||
""" | |||||
获取产品票种数组 | |||||
:param prod_id: | |||||
:return: | |||||
""" | |||||
sql = """SELECT | |||||
prod_id,prod_name,prod_price,0 as 'prod_count',99 as 'prod_stock' | |||||
from prod_main | |||||
WHERE prod_cate_id = %s""" | |||||
get_info = util.select_all(sql, [prod_id]) | |||||
return get_info | |||||
@@ -0,0 +1,127 @@ | |||||
from backend.models import ZzNews | |||||
from common import util | |||||
from django.db import connection | |||||
from django.db.models import Sum, Count | |||||
import math | |||||
def get_news(page, page_size): | |||||
""" | |||||
根据页数获取新闻列表 | |||||
:param page: 当前页数,默认1 | |||||
:param page_size: 每页条数,默认8 | |||||
:return: | |||||
""" | |||||
# start_point = (int(page) - 1) * offset | |||||
# news_list = ZzNews.objects.filter(delete_flag=0).order_by("-create_time")[start_point:offset] | |||||
# news_list = util.sql_array(news_list, | |||||
# ['id', 'class_id', 'news_title', 'navi_content', 'create_user', 'create_time']) | |||||
# return news_list | |||||
start_point = (int(page) - 1) * page_size | |||||
date_format = "%Y-%m-%d" | |||||
cursor = connection.cursor() | |||||
cursor.execute( | |||||
'select id,class_id,if(class_id=1,"公司新闻",if(class_id=2,"媒体报道",if(class_id=3,"行业动态",""))) as class_name, news_title,navi_content,create_user,date_format(create_time,%s) as create_time from zz_news where delete_flag=0 ORDER BY create_time DESC limit %s,%s ', | |||||
[date_format, start_point, page_size]) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
li = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = item[i] | |||||
i = i + 1 | |||||
li.append(d) | |||||
return li | |||||
else: | |||||
return li | |||||
def get_news_by_class(class_id, page, page_size): | |||||
""" | |||||
根据分类获取新闻列表以及数量 | |||||
:param class_id: 当前分类, 默认1 | |||||
:param page: 当前页数,默认1 | |||||
:param page_size: 每页数量,默认8 | |||||
:return: | |||||
""" | |||||
page_size = int(page_size) | |||||
start_point = (int(page) - 1) * page_size | |||||
# news_list = ZzNews.objects.filter(delete_flag=0, class_id=class_id).order_by("-create_time")[start_point:offset] | |||||
# news_list = util.sql_array(news_list, | |||||
# ['id', 'class_id', 'news_title', 'navi_content', 'create_user', 'create_time']) | |||||
date_format = "%Y-%m-%d" | |||||
cursor = connection.cursor() | |||||
cursor.execute( | |||||
'select id,class_id,news_title,navi_content,content,create_user,date_format(create_time,%s) as create_time from zz_news WHERE delete_flag=0 and class_id = %s ORDER BY create_time DESC limit %s,%s ', | |||||
[date_format, class_id, start_point, page_size]) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
news_list = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = item[i] | |||||
i = i + 1 | |||||
news_list.append(d) | |||||
num = ZzNews.objects.filter(delete_flag=0, class_id=class_id).order_by("-create_time").aggregate(Count("id")) | |||||
num = dict(num) | |||||
paper = {} | |||||
num['news_list'] = news_list | |||||
paper['current'] = int(page) | |||||
paper['page_size'] = int(page_size) | |||||
paper['total'] = int(num['id__count']) | |||||
paper['total_pages'] = math.ceil(int(num['id__count']) / int(page_size)) | |||||
num['page'] = paper | |||||
return num | |||||
def get_news_content(news_id): | |||||
""" | |||||
根据id获取新闻的内容 | |||||
:param news_id: | |||||
:return: list | |||||
""" | |||||
news = {} | |||||
news_content = ZzNews.objects.filter(pk=news_id) | |||||
news_content = util.sql_array(news_content, | |||||
['id', 'class_id', 'news_title', 'navi_content', 'content', 'create_user', | |||||
'create_time']) | |||||
cursor = connection.cursor() | |||||
sql='select * from zz_news WHERE delete_flag=0 and class_id = %s and create_time < "%s" order by create_time desc limit 1' %(news_content[0]['class_id'],news_content[0]['create_time']) | |||||
cursor.execute(sql) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
prev_content = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = item[i] | |||||
i = i + 1 | |||||
prev_content.append(d) | |||||
cursor = connection.cursor() | |||||
sql='select * from zz_news WHERE delete_flag=0 and class_id = %s and create_time > "%s" order by create_time limit 1' %(news_content[0]['class_id'],news_content[0]['create_time']) | |||||
cursor.execute(sql) | |||||
items = cursor.fetchall() # 读取所有 | |||||
desc = cursor.description | |||||
next_content = [] | |||||
if items: | |||||
for item in items: | |||||
d = {} | |||||
i = 0 | |||||
for de in desc: | |||||
d[de[0]] = item[i] | |||||
i = i + 1 | |||||
next_content.append(d) | |||||
news['prev_news'] = prev_content | |||||
news['current_news'] = news_content | |||||
news['next_news'] = next_content | |||||
return news |
@@ -0,0 +1,596 @@ | |||||
# This is an auto-generated Django model module. | |||||
# You'll have to do the following manually to clean this up: | |||||
# * Rearrange models' order | |||||
# * Make sure each model has one field with primary_key=True | |||||
# * Make sure each ForeignKey has `on_delete` set to the desired behavior. | |||||
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table | |||||
# Feel free to rename the models, but don't rename db_table values or field names. | |||||
from __future__ import unicode_literals | |||||
from django.db import models | |||||
class AdmUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
u_name = models.CharField(unique=True, max_length=100) | |||||
pwd = models.CharField(max_length=255) | |||||
phone = models.CharField(max_length=22, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
status = models.IntegerField() | |||||
last_login = models.CharField(max_length=20, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'adm_user' | |||||
class BaseArea(models.Model): | |||||
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase. | |||||
parent_id = models.IntegerField(db_column='PARENT_ID') # Field name made lowercase. | |||||
cancel_flag = models.IntegerField(db_column='CANCEL_FLAG') # Field name made lowercase. | |||||
create_user_id = models.IntegerField(db_column='CREATE_USER_ID') # Field name made lowercase. | |||||
create_time = models.CharField(db_column='CREATE_TIME', max_length=20) # Field name made lowercase. | |||||
update_user_id = models.IntegerField(db_column='UPDATE_USER_ID') # Field name made lowercase. | |||||
update_time = models.CharField(db_column='UPDATE_TIME', max_length=20) # Field name made lowercase. | |||||
area_name = models.CharField(db_column='AREA_NAME', max_length=100) # Field name made lowercase. | |||||
postcode = models.CharField(db_column='POSTCODE', max_length=20) # Field name made lowercase. | |||||
poi_type = models.CharField(db_column='POI_TYPE', max_length=20) # Field name made lowercase. | |||||
poi_type1 = models.IntegerField(db_column='POI_TYPE1') # Field name made lowercase. | |||||
poi_type2 = models.CharField(db_column='POI_TYPE2', max_length=255) # Field name made lowercase. | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'base_area' | |||||
class BaseCategory(models.Model): | |||||
category_id = models.AutoField(primary_key=True) | |||||
category_name = models.CharField(max_length=255) | |||||
parent_id = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'base_category' | |||||
class BusTicket(models.Model): | |||||
ticket_id = models.IntegerField(unique=True) | |||||
start_area_id = models.IntegerField() | |||||
start_area_name = models.CharField(max_length=50) | |||||
end_area_id = models.IntegerField() | |||||
end_area_name = models.CharField(max_length=50) | |||||
start_res_id = models.IntegerField() | |||||
start_res_name = models.CharField(max_length=50) | |||||
end_res_id = models.IntegerField() | |||||
end_res_name = models.CharField(max_length=50) | |||||
line_id = models.IntegerField() | |||||
line_type = models.IntegerField() | |||||
prod_price = models.DecimalField(max_digits=10, decimal_places=0) | |||||
line_name = models.CharField(max_length=255) | |||||
start_res_longitude = models.FloatField(blank=True, null=True) | |||||
start_res_latitude = models.FloatField(blank=True, null=True) | |||||
end_res_longitude = models.FloatField(blank=True, null=True) | |||||
end_res_latitude = models.FloatField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'bus_ticket' | |||||
class ClientOpinion(models.Model): | |||||
name = models.CharField(max_length=255) | |||||
e_mail = models.CharField(db_column='e-mail', max_length=255) # Field renamed to remove unsuitable characters. | |||||
opinion = models.CharField(max_length=1000) | |||||
client_ip = models.CharField(db_column='client _ip', max_length=255) # Field renamed to remove unsuitable characters. | |||||
create_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'client_opinion' | |||||
class CmsCategory(models.Model): | |||||
cms_category_id = models.AutoField(primary_key=True) | |||||
category_name = models.CharField(max_length=50) | |||||
show_sort = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
category_code = models.CharField(max_length=255) | |||||
system = models.IntegerField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category' | |||||
class CmsCategoryExtra(models.Model): | |||||
category_id = models.IntegerField(unique=True) | |||||
category_name = models.CharField(max_length=50) | |||||
category_describe = models.CharField(max_length=255) | |||||
img_url = models.CharField(max_length=255) | |||||
area_id = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category_extra' | |||||
class CmsCategoryProd(models.Model): | |||||
prod_cate_id = models.IntegerField() | |||||
cms_cate_id = models.IntegerField() | |||||
show_sort = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
system = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'cms_category_prod' | |||||
class DjangoMigrations(models.Model): | |||||
app = models.CharField(max_length=255) | |||||
name = models.CharField(max_length=255) | |||||
applied = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'django_migrations' | |||||
class FxCommissionApply(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
apply_money = models.DecimalField(max_digits=10, decimal_places=2) | |||||
status = models.IntegerField() | |||||
remit_time = models.CharField(max_length=50) | |||||
auth_time = models.CharField(max_length=50) | |||||
auth_memo = models.CharField(max_length=255) | |||||
auth_uid = models.IntegerField() | |||||
remit_uid = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_commission_apply' | |||||
class FxCommissionInfo(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
total_money = models.DecimalField(max_digits=10, decimal_places=2) | |||||
order_id = models.IntegerField() | |||||
status = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
update_user = models.CharField(max_length=50) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_commission_info' | |||||
class FxUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
user_name = models.CharField(max_length=100, blank=True, null=True) | |||||
openid = models.CharField(unique=True, max_length=120) | |||||
phone = models.CharField(max_length=11) | |||||
nickname = models.CharField(max_length=21, blank=True, null=True) | |||||
headimgurl = models.CharField(max_length=255, blank=True, null=True) | |||||
sex = models.IntegerField(blank=True, null=True) | |||||
country = models.CharField(max_length=255, blank=True, null=True) | |||||
province = models.CharField(max_length=255, blank=True, null=True) | |||||
city = models.CharField(max_length=255, blank=True, null=True) | |||||
status = models.IntegerField() | |||||
reg_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
wx_openid = models.CharField(max_length=120, blank=True, null=True) | |||||
main_user_id = models.IntegerField() | |||||
change_price_power = models.CharField(max_length=4) | |||||
user_area = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user' | |||||
class FxUserAccount(models.Model): | |||||
fx_uid = models.IntegerField(unique=True) | |||||
available_commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
closed_commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
total_commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
apply_commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
remaining_sum = models.DecimalField(max_digits=10, decimal_places=2) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
status = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_account' | |||||
class FxUserAmountLog(models.Model): | |||||
log_id = models.AutoField(primary_key=True) | |||||
fx_uid = models.IntegerField() | |||||
trade_type = models.IntegerField() | |||||
amount = models.DecimalField(max_digits=10, decimal_places=2) | |||||
remaining_sum = models.DecimalField(max_digits=10, decimal_places=2) | |||||
msg = models.CharField(max_length=255, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_amount_log' | |||||
class FxUserAmountOrder(models.Model): | |||||
fx_uid = models.IntegerField() | |||||
amount = models.DecimalField(max_digits=10, decimal_places=2) | |||||
status = models.IntegerField() | |||||
recharge_order = models.CharField(max_length=100) | |||||
pay_type = models.IntegerField() | |||||
create_time = models.DateTimeField(blank=True, null=True) | |||||
update_time = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_amount_order' | |||||
class FxUserArea(models.Model): | |||||
area_id = models.AutoField(primary_key=True) | |||||
area_name = models.CharField(max_length=100) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_area' | |||||
class FxUserOpenid(models.Model): | |||||
open_id = models.CharField(unique=True, max_length=255) | |||||
fx_uid = models.IntegerField() | |||||
reg_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_openid' | |||||
class FxUserQrcode(models.Model): | |||||
fx_uid = models.IntegerField(blank=True, null=True) | |||||
qr_id = models.IntegerField(unique=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'fx_user_qrcode' | |||||
class LogOrder(models.Model): | |||||
name = models.CharField(max_length=20) | |||||
order_id = models.IntegerField() | |||||
time = models.DateTimeField() | |||||
uid = models.IntegerField() | |||||
u_type = models.IntegerField() | |||||
log_type = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'log_order' | |||||
class LogUserOperation(models.Model): | |||||
title = models.CharField(max_length=120) | |||||
memo = models.TextField() | |||||
uid = models.IntegerField() | |||||
user_type = models.IntegerField() | |||||
user_name = models.CharField(max_length=255) | |||||
resources_id = models.IntegerField(blank=True, null=True) | |||||
resources_type = models.IntegerField(blank=True, null=True) | |||||
resources_name = models.CharField(max_length=255, blank=True, null=True) | |||||
phpsessid = models.CharField(max_length=255, blank=True, null=True) | |||||
user_agent = models.CharField(max_length=255, blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
last_login = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'log_user_operation' | |||||
class MainCorpUser(models.Model): | |||||
user_name = models.CharField(max_length=255) | |||||
main_corp_id = models.IntegerField() | |||||
main_corp_name = models.CharField(max_length=255) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'main_corp_user' | |||||
class OrderContacts(models.Model): | |||||
order_id = models.IntegerField() | |||||
contacts_name = models.CharField(max_length=120) | |||||
contacts_phone = models.CharField(max_length=20) | |||||
contacts_id = models.CharField(db_column='contacts_ID', max_length=20, blank=True, null=True) # Field name made lowercase. | |||||
contacts_type = models.IntegerField() | |||||
update_time = models.DateTimeField() | |||||
create_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
bus_run_id = models.IntegerField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_contacts' | |||||
class OrderHotelExtra(models.Model): | |||||
main_order_id = models.IntegerField() | |||||
hotel_id = models.IntegerField() | |||||
room_id = models.IntegerField() | |||||
hotel_name = models.CharField(max_length=255) | |||||
room_name = models.CharField(max_length=255) | |||||
breakfast = models.CharField(max_length=20) | |||||
total_details = models.CharField(max_length=255) | |||||
remarks = models.CharField(max_length=255) | |||||
is_gift = models.IntegerField() | |||||
gift_describe = models.TextField() | |||||
is_confirm = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_hotel_extra' | |||||
class OrderInfo(models.Model): | |||||
order_id = models.IntegerField() | |||||
prod_id = models.IntegerField() | |||||
count = models.IntegerField() | |||||
unit_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
total_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
delete_flag = models.IntegerField() | |||||
commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
prod_name = models.CharField(max_length=255) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_info' | |||||
class OrderMain(models.Model): | |||||
order_id = models.AutoField(primary_key=True) | |||||
order_name = models.CharField(max_length=255) | |||||
spider_order_id = models.CharField(max_length=255) | |||||
total_money = models.DecimalField(max_digits=10, decimal_places=2) | |||||
category_id = models.IntegerField() | |||||
prod_cate_id = models.IntegerField() | |||||
prod_source = models.IntegerField() | |||||
prod_cnt = models.IntegerField() | |||||
sh_uid = models.IntegerField() | |||||
fx_uid = models.IntegerField() | |||||
start_time = models.TimeField(blank=True, null=True) | |||||
end_time = models.TimeField(blank=True, null=True) | |||||
start_date = models.DateField() | |||||
end_date = models.DateField() | |||||
order_status = models.IntegerField() | |||||
update_time = models.DateTimeField() | |||||
create_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
system = models.IntegerField() | |||||
start_area = models.CharField(max_length=255, blank=True, null=True) | |||||
end_area = models.CharField(max_length=255, blank=True, null=True) | |||||
main_user_id = models.IntegerField() | |||||
original_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_main' | |||||
class OrderTravel(models.Model): | |||||
travel_id = models.AutoField(primary_key=True) | |||||
start_time = models.DateTimeField() | |||||
end_time = models.DateTimeField() | |||||
u_id = models.IntegerField() | |||||
cs_order_id = models.IntegerField() | |||||
prod_id = models.CharField(max_length=255, blank=True, null=True) | |||||
start_res_id = models.IntegerField(blank=True, null=True) | |||||
start_res = models.CharField(max_length=255, blank=True, null=True) | |||||
end_res_id = models.IntegerField(blank=True, null=True) | |||||
end_res = models.CharField(max_length=255, blank=True, null=True) | |||||
start_area_name = models.CharField(max_length=255, blank=True, null=True) | |||||
end_area_name = models.CharField(max_length=255, blank=True, null=True) | |||||
start_longitude = models.FloatField(blank=True, null=True) | |||||
start_latitude = models.FloatField(blank=True, null=True) | |||||
contacts_name = models.CharField(max_length=120, blank=True, null=True) | |||||
contacts_phone = models.CharField(max_length=120, blank=True, null=True) | |||||
contacts_id = models.CharField(db_column='contacts_ID', max_length=120, blank=True, null=True) # Field name made lowercase. | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'order_travel' | |||||
class PayMain(models.Model): | |||||
pay_type = models.IntegerField() | |||||
order_money = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True) | |||||
amount_money = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True) | |||||
pay_time = models.DateTimeField() | |||||
pay_user = models.IntegerField() | |||||
order_id = models.IntegerField() | |||||
delete_flag = models.IntegerField() | |||||
pay_order_id = models.CharField(max_length=255) | |||||
app_id = models.CharField(max_length=255, blank=True, null=True) | |||||
open_id = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'pay_main' | |||||
class PayRefush(models.Model): | |||||
order_id = models.IntegerField() | |||||
pay_order_id = models.CharField(max_length=255) | |||||
pay_type = models.IntegerField() | |||||
refush_money = models.DecimalField(max_digits=10, decimal_places=2) | |||||
amount_money = models.DecimalField(max_digits=10, decimal_places=2) | |||||
fx_uid = models.IntegerField() | |||||
sh_uid = models.IntegerField() | |||||
status = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
refund_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
category_id = models.IntegerField() | |||||
app_id = models.CharField(max_length=255, blank=True, null=True) | |||||
open_id = models.CharField(max_length=255, blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'pay_refush' | |||||
class ProdCategory(models.Model): | |||||
pro_cate_id = models.AutoField(primary_key=True) | |||||
sign = models.CharField(max_length=255, blank=True, null=True) | |||||
pro_cate_name = models.CharField(max_length=100) | |||||
prod_des = models.TextField(blank=True, null=True) | |||||
category_id = models.IntegerField() | |||||
show_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
original_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
show_img = models.CharField(max_length=255) | |||||
sales_count = models.IntegerField() | |||||
memo = models.TextField(blank=True, null=True) | |||||
trip_desc = models.TextField(blank=True, null=True) | |||||
feature = models.TextField(blank=True, null=True) | |||||
commission = models.DecimalField(max_digits=10, decimal_places=0) | |||||
create_user_id = models.IntegerField() | |||||
is_recom = models.IntegerField() | |||||
start_area = models.CharField(max_length=255, blank=True, null=True) | |||||
address = models.CharField(max_length=255, blank=True, null=True) | |||||
close_sale_time = models.CharField(max_length=50) | |||||
star = models.CharField(max_length=4) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
update_user = models.CharField(max_length=50) | |||||
bus_ticket_id = models.IntegerField() | |||||
bus_line_type = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_category' | |||||
class ProdCategoryInfo(models.Model): | |||||
pro_cate_id = models.IntegerField(primary_key=True) | |||||
comment_cnt = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_category_info' | |||||
class ProdComment(models.Model): | |||||
travel_id = models.IntegerField(blank=True, null=True) | |||||
prod_id = models.CharField(max_length=255, blank=True, null=True) | |||||
star = models.IntegerField() | |||||
title = models.CharField(max_length=30) | |||||
content = models.TextField() | |||||
u_name = models.CharField(max_length=100) | |||||
u_id = models.IntegerField(blank=True, null=True) | |||||
create_time = models.DateTimeField() | |||||
look_over = models.IntegerField() | |||||
type = models.IntegerField() | |||||
comment_id = models.IntegerField() | |||||
parent_id = models.IntegerField() | |||||
cancel_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_comment' | |||||
class ProdImg(models.Model): | |||||
pro_cate_id = models.IntegerField() | |||||
img_url = models.CharField(max_length=255) | |||||
redirect_url = models.CharField(max_length=255, blank=True, null=True) | |||||
memo = models.CharField(max_length=255, blank=True, null=True) | |||||
img_type = models.IntegerField() | |||||
create_time = models.DateTimeField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_img' | |||||
class ProdMain(models.Model): | |||||
prod_id = models.AutoField(primary_key=True) | |||||
prod_cate_id = models.IntegerField() | |||||
prod_name = models.CharField(max_length=100) | |||||
prod_price = models.DecimalField(max_digits=10, decimal_places=2) | |||||
create_user = models.CharField(max_length=50) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
update_user = models.CharField(max_length=50) | |||||
bus_id = models.CharField(max_length=255) | |||||
commission = models.DecimalField(max_digits=10, decimal_places=2) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'prod_main' | |||||
class ShUser(models.Model): | |||||
uid = models.AutoField(primary_key=True) | |||||
user_name = models.CharField(max_length=100, blank=True, null=True) | |||||
phone = models.CharField(unique=True, max_length=20, blank=True, null=True) | |||||
head_img = models.CharField(max_length=255, blank=True, null=True) | |||||
status = models.IntegerField(blank=True, null=True) | |||||
reg_time = models.DateTimeField(blank=True, null=True) | |||||
last_login = models.DateTimeField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'sh_user' | |||||
class SysItinerary(models.Model): | |||||
category_id = models.IntegerField() | |||||
category_name = models.CharField(max_length=50) | |||||
scenc_introduce = models.TextField(blank=True, null=True) | |||||
scenc_play = models.TextField(blank=True, null=True) | |||||
folk_customs = models.TextField(blank=True, null=True) | |||||
local_specialities = models.TextField(blank=True, null=True) | |||||
travel_tips = models.TextField(blank=True, null=True) | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'sys_itinerary' | |||||
class ZzNews(models.Model): | |||||
class_id = models.IntegerField() | |||||
news_title = models.CharField(max_length=100) | |||||
navi_content = models.CharField(max_length=255) | |||||
content = models.TextField() | |||||
create_user = models.CharField(max_length=50) | |||||
create_time = models.DateTimeField() | |||||
update_time = models.DateTimeField() | |||||
delete_flag = models.IntegerField() | |||||
class Meta: | |||||
managed = False | |||||
db_table = 'zz_news' |
@@ -0,0 +1,34 @@ | |||||
from django.conf.urls import url | |||||
from official.controller import Home | |||||
from official.controller import reserve_bus | |||||
from official.controller import prod | |||||
from official.controller import Order | |||||
from official.controller import reserve_ticket | |||||
from official.controller import reserve_tourist | |||||
from official.controller import reserve_hotel | |||||
urlpatterns = [ | |||||
url(r'^home/get_list', Home.get_list), | |||||
url(r'^home/get_news$', Home.get_news), | |||||
url(r'^home/get_class_news', Home.get_news_by_class), # 新闻动态页面,根据分类获取新闻列表 | |||||
url(r'^home/add_opinion', Home.addOpinion), # 增加建议 | |||||
url(r'^home/get_news_content', Home.get_news_content), # 新闻详情页面根据id获取新闻详情 | |||||
url(r'^prod/get_cms_list', prod.get_cms_list), # 产品页获取产品分类 | |||||
url(r'^prod/get_prod_list', prod.get_prod_list), # 产品页获取产品列表 | |||||
# 下单流程接口 | |||||
url(r'^reserve_bus/get_prod_info', reserve_bus.get_prod_info), # 巴士获取产品信息 | |||||
url(r'^reserve_bus/get_line_stock', reserve_bus.get_line_stock), # 巴士获取价格日历 | |||||
url(r'^reserve_bus/get_prod_array', reserve_bus.get_prod_array), # 巴士获取票种数据 | |||||
url(r'^reserve_ticket/get_prod_info', reserve_ticket.get_prod_info), # 门票获取产品信息 | |||||
url(r'^reserve_ticket/get_stock', reserve_ticket.get_stock), # 门票获取票种及库存 | |||||
url(r'^reserve_tourist/get_prod_info', reserve_tourist.get_prod_info), # 自由行获取产品信息 | |||||
url(r'^reserve_tourist/get_stock', reserve_tourist.get_stock), # 自由行获取票种信息 | |||||
url(r'^reserve_tourist/get_price', reserve_tourist.get_price), # 自由行获取价格列表 | |||||
url(r'^reserve_hotel/get_info', reserve_hotel.get_info), # 获取酒店详情 | |||||
url(r'^reserve_hotel/get_room_list', reserve_hotel.get_room_list), # 获取酒店房型列表 | |||||
url(r'^reserve_hotel/check_hotel', reserve_hotel.check_hotel), # 获取酒店房型列表 | |||||
url(r'^reserve_hotel/make_order', reserve_hotel.make_order), # 获取酒店房型列表 | |||||
url(r'^order/make_order', Order.make_order), # 下单接口 | |||||
url(r'^order/check_order', Order.check_order) # 校验订单状态 | |||||
] |
@@ -0,0 +1,18 @@ | |||||
{ | |||||
"presets": [ | |||||
["env", { | |||||
"modules": false, | |||||
"targets": { | |||||
"browsers": ["> 1%", "last 4 versions", "not ie <= 8"] | |||||
} | |||||
}], | |||||
"stage-2" | |||||
], | |||||
"plugins": ["transform-runtime"], | |||||
"env": { | |||||
"test": { | |||||
"presets": ["es2015"], | |||||
"plugins": ["istanbul"] | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,9 @@ | |||||
root = true | |||||
[*] | |||||
charset = utf-8 | |||||
indent_style = space | |||||
indent_size = 4 | |||||
end_of_line = lf | |||||
insert_final_newline = true | |||||
trim_trailing_whitespace = true |
@@ -0,0 +1,13 @@ | |||||
.DS_Store | |||||
node_modules/ | |||||
npm-debug.log* | |||||
yarn-debug.log* | |||||
yarn-error.log* | |||||
# Editor directories and files | |||||
.idea | |||||
.vscode | |||||
*.suo | |||||
*.ntvs* | |||||
*.njsproj | |||||
*.sln |
@@ -0,0 +1,9 @@ | |||||
// https://github.com/michael-ciniawsky/postcss-load-config | |||||
module.exports = { | |||||
"plugins": { | |||||
// to edit target browsers: use "browserslist" field in package.json | |||||
"postcss-import": {}, | |||||
"autoprefixer": {} | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
# official | |||||
> officialWebsite | |||||
## Build Setup | |||||
``` bash | |||||
# install dependencies | |||||
npm install | |||||
# serve with hot reload at localhost:8080 | |||||
npm run dev | |||||
# build for production with minification | |||||
npm run build | |||||
# build for production and view the bundle analyzer report | |||||
npm run build --report | |||||
``` | |||||
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). |
@@ -0,0 +1,41 @@ | |||||
'use strict' | |||||
require('./check-versions')() | |||||
process.env.NODE_ENV = 'production' | |||||
const ora = require('ora') | |||||
const rm = require('rimraf') | |||||
const path = require('path') | |||||
const chalk = require('chalk') | |||||
const webpack = require('webpack') | |||||
const config = require('../config') | |||||
const webpackConfig = require('./webpack.prod.conf') | |||||
const spinner = ora('building for production...') | |||||
spinner.start() | |||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { | |||||
if (err) throw err | |||||
webpack(webpackConfig, function (err, stats) { | |||||
spinner.stop() | |||||
if (err) throw err | |||||
process.stdout.write(stats.toString({ | |||||
colors: true, | |||||
modules: false, | |||||
children: false, | |||||
chunks: false, | |||||
chunkModules: false | |||||
}) + '\n\n') | |||||
if (stats.hasErrors()) { | |||||
console.log(chalk.red(' Build failed with errors.\n')) | |||||
process.exit(1) | |||||
} | |||||
console.log(chalk.cyan(' Build complete.\n')) | |||||
console.log(chalk.yellow( | |||||
' Tip: built files are meant to be served over an HTTP server.\n' + | |||||
' Opening index.html over file:// won\'t work.\n' | |||||
)) | |||||
}) | |||||
}) |
@@ -0,0 +1,49 @@ | |||||
'use strict' | |||||
const chalk = require('chalk') | |||||
const semver = require('semver') | |||||
const packageConfig = require('../package.json') | |||||
const shell = require('shelljs') | |||||
function exec (cmd) { | |||||
return require('child_process').execSync(cmd).toString().trim() | |||||
} | |||||
const versionRequirements = [ | |||||
{ | |||||
name: 'node', | |||||
currentVersion: semver.clean(process.version), | |||||
versionRequirement: packageConfig.engines.node | |||||
} | |||||
] | |||||
if (shell.which('npm')) { | |||||
versionRequirements.push({ | |||||
name: 'npm', | |||||
currentVersion: exec('npm --version'), | |||||
versionRequirement: packageConfig.engines.npm | |||||
}) | |||||
} | |||||
module.exports = function () { | |||||
const warnings = [] | |||||
for (let i = 0; i < versionRequirements.length; i++) { | |||||
const mod = versionRequirements[i] | |||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { | |||||
warnings.push(mod.name + ': ' + | |||||
chalk.red(mod.currentVersion) + ' should be ' + | |||||
chalk.green(mod.versionRequirement) | |||||
) | |||||
} | |||||
} | |||||
if (warnings.length) { | |||||
console.log('') | |||||
console.log(chalk.yellow('To use this template, you must update following to modules:')) | |||||
console.log() | |||||
for (let i = 0; i < warnings.length; i++) { | |||||
const warning = warnings[i] | |||||
console.log(' ' + warning) | |||||
} | |||||
console.log() | |||||
process.exit(1) | |||||
} | |||||
} |
@@ -0,0 +1,10 @@ | |||||
/* eslint-disable */ | |||||
'use strict' | |||||
require('eventsource-polyfill') | |||||
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') | |||||
hotClient.subscribe(function (event) { | |||||
if (event.action === 'reload') { | |||||
window.location.reload() | |||||
} | |||||
}) |
@@ -0,0 +1,105 @@ | |||||
'use strict' | |||||
require('./check-versions')() | |||||
const config = require('../config') | |||||
if (!process.env.NODE_ENV) { | |||||
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) | |||||
} | |||||
const opn = require('opn') | |||||
const path = require('path') | |||||
const express = require('express') | |||||
const webpack = require('webpack') | |||||
const proxyMiddleware = require('http-proxy-middleware') | |||||
const webpackConfig = require('./webpack.dev.conf') | |||||
// default port where dev server listens for incoming traffic | |||||
const port = process.env.PORT || config.dev.port | |||||
// automatically open browser, if not set will be false | |||||
const autoOpenBrowser = !!config.dev.autoOpenBrowser | |||||
// Define HTTP proxies to your custom API backend | |||||
// https://github.com/chimurai/http-proxy-middleware | |||||
const proxyTable = config.dev.proxyTable | |||||
const app = express() | |||||
const compiler = webpack(webpackConfig) | |||||
const devMiddleware = require('webpack-dev-middleware')(compiler, { | |||||
publicPath: webpackConfig.output.publicPath, | |||||
quiet: true | |||||
}) | |||||
const hotMiddleware = require('webpack-hot-middleware')(compiler, { | |||||
log: false, | |||||
heartbeat: 2000 | |||||
}) | |||||
// force page reload when html-webpack-plugin template changes | |||||
// currently disabled until this is resolved: | |||||
// https://github.com/jantimon/html-webpack-plugin/issues/680 | |||||
// compiler.plugin('compilation', function (compilation) { | |||||
// compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { | |||||
// hotMiddleware.publish({ action: 'reload' }) | |||||
// cb() | |||||
// }) | |||||
// }) | |||||
// enable hot-reload and state-preserving | |||||
// compilation error display | |||||
app.use(hotMiddleware) | |||||
// proxy api requests | |||||
Object.keys(proxyTable).forEach(function (context) { | |||||
let options = proxyTable[context] | |||||
if (typeof options === 'string') { | |||||
options = { target: options } | |||||
} | |||||
app.use(proxyMiddleware(options.filter || context, options)) | |||||
}) | |||||
// handle fallback for HTML5 history API | |||||
app.use(require('connect-history-api-fallback')()) | |||||
// serve webpack bundle output | |||||
app.use(devMiddleware) | |||||
// serve pure static assets | |||||
const staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) | |||||
app.use(staticPath, express.static('./static')) | |||||
const uri = 'http://localhost:' + port | |||||
var _resolve | |||||
var _reject | |||||
var readyPromise = new Promise((resolve, reject) => { | |||||
_resolve = resolve | |||||
_reject = reject | |||||
}) | |||||
var server | |||||
var portfinder = require('portfinder') | |||||
portfinder.basePort = port | |||||
console.log('> Starting dev server...') | |||||
devMiddleware.waitUntilValid(() => { | |||||
portfinder.getPort((err, port) => { | |||||
if (err) { | |||||
_reject(err) | |||||
} | |||||
process.env.PORT = port | |||||
var uri = 'http://localhost:' + port | |||||
console.log('> Listening at ' + uri + '\n') | |||||
// when env is testing, don't need open it | |||||
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { | |||||
opn(uri) | |||||
} | |||||
server = app.listen(port) | |||||
_resolve() | |||||
}) | |||||
}) | |||||
module.exports = { | |||||
ready: readyPromise, | |||||
close: () => { | |||||
server.close() | |||||
} | |||||
} |
@@ -0,0 +1,98 @@ | |||||
'use strict' | |||||
const path = require('path') | |||||
const config = require('../config') | |||||
const ExtractTextPlugin = require('extract-text-webpack-plugin') | |||||
const pkg = require('../package.json') | |||||
exports.assetsPath = function (_path) { | |||||
const assetsSubDirectory = process.env.NODE_ENV === 'production' | |||||
? config.build.assetsSubDirectory | |||||
: config.dev.assetsSubDirectory | |||||
return path.posix.join(assetsSubDirectory, _path) | |||||
} | |||||
exports.cssLoaders = function (options) { | |||||
options = options || {} | |||||
const cssLoader = { | |||||
loader: 'css-loader', | |||||
options: { | |||||
sourceMap: options.sourceMap | |||||
} | |||||
} | |||||
var postcssLoader = { | |||||
loader: 'postcss-loader', | |||||
options: { | |||||
sourceMap: options.sourceMap | |||||
} | |||||
} | |||||
// generate loader string to be used with extract text plugin | |||||
function generateLoaders (loader, loaderOptions) { | |||||
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] | |||||
if (loader) { | |||||
loaders.push({ | |||||
loader: loader + '-loader', | |||||
options: Object.assign({}, loaderOptions, { | |||||
sourceMap: options.sourceMap | |||||
}) | |||||
}) | |||||
} | |||||
// Extract CSS when that option is specified | |||||
// (which is the case during production build) | |||||
if (options.extract) { | |||||
return ExtractTextPlugin.extract({ | |||||
use: loaders, | |||||
fallback: 'vue-style-loader' | |||||
}) | |||||
} else { | |||||
return ['vue-style-loader'].concat(loaders) | |||||
} | |||||
} | |||||
// https://vue-loader.vuejs.org/en/configurations/extract-css.html | |||||
return { | |||||
css: generateLoaders(), | |||||
postcss: generateLoaders(), | |||||
less: generateLoaders('less'), | |||||
sass: generateLoaders('sass', { indentedSyntax: true }), | |||||
scss: generateLoaders('sass'), | |||||
stylus: generateLoaders('stylus'), | |||||
styl: generateLoaders('stylus') | |||||
} | |||||
} | |||||
// Generate loaders for standalone style files (outside of .vue) | |||||
exports.styleLoaders = function (options) { | |||||
const output = [] | |||||
const loaders = exports.cssLoaders(options) | |||||
for (const extension in loaders) { | |||||
const loader = loaders[extension] | |||||
output.push({ | |||||
test: new RegExp('\\.' + extension + '$'), | |||||
use: loader | |||||
}) | |||||
} | |||||
return output | |||||
} | |||||
exports.createNotifierCallback = function () { | |||||
const notifier = require('node-notifier') | |||||
return (severity, errors) => { | |||||
if (severity !== 'error') { | |||||
return | |||||
} | |||||
const error = errors[0] | |||||
const filename = error.file && error.file.split('!').pop() | |||||
notifier.notify({ | |||||
title: pkg.name, | |||||
message: severity + ': ' + error.name, | |||||
subtitle: filename || '', | |||||
icon: path.join(__dirname, 'logo.png') | |||||
}) | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
'use strict' | |||||
const utils = require('./utils') | |||||
const config = require('../config') | |||||
const isProduction = process.env.NODE_ENV === 'production' | |||||
const sourceMapEnabled = isProduction | |||||
? config.build.productionSourceMap | |||||
: config.dev.cssSourceMap | |||||
module.exports = { | |||||
loaders: utils.cssLoaders({ | |||||
sourceMap: sourceMapEnabled, | |||||
extract: isProduction | |||||
}), | |||||
cssSourceMap: sourceMapEnabled, | |||||
cacheBusting: config.dev.cacheBusting, | |||||
transformToRequire: { | |||||
video: 'src', | |||||
source: 'src', | |||||
img: 'src', | |||||
image: 'xlink:href' | |||||
} | |||||
} |
@@ -0,0 +1,79 @@ | |||||
'use strict' | |||||
const path = require('path') | |||||
const utils = require('./utils') | |||||
const config = require('../config') | |||||
const vueLoaderConfig = require('./vue-loader.conf') | |||||
function resolve (dir) { | |||||
return path.join(__dirname, '..', dir) | |||||
} | |||||
module.exports = { | |||||
context: path.resolve(__dirname, '../'), | |||||
entry: { | |||||
app: './src/main.js' | |||||
}, | |||||
output: { | |||||
path: config.build.assetsRoot, | |||||
filename: '[name].js', | |||||
publicPath: process.env.NODE_ENV === 'production' | |||||
? config.build.assetsPublicPath | |||||
: config.dev.assetsPublicPath | |||||
}, | |||||
resolve: { | |||||
extensions: ['.js', '.vue', '.json'], | |||||
alias: { | |||||
'vue$': 'vue/dist/vue.esm.js', | |||||
'@': resolve('src'), | |||||
} | |||||
}, | |||||
module: { | |||||
rules: [ | |||||
{ | |||||
test: /\.sass$/, | |||||
loader:'style!css!sass' | |||||
}, | |||||
{ | |||||
test: /\.less$/, | |||||
loader:'style!css!less' | |||||
}, | |||||
{ | |||||
test: /\.vue$/, | |||||
loader: 'vue-loader', | |||||
options: vueLoaderConfig | |||||
}, | |||||
{ | |||||
test: /\.js$/, | |||||
loader: 'babel-loader', | |||||
include: [resolve('src'), resolve('test')] | |||||
}, | |||||
{ | |||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, | |||||
loader: 'url-loader', | |||||
options: { | |||||
limit: 10000, | |||||
name: utils.assetsPath('img/[name].[hash:7].[ext]') | |||||
} | |||||
}, | |||||
{ | |||||
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, | |||||
loader: 'url-loader', | |||||
options: { | |||||
limit: 10000, | |||||
name: utils.assetsPath('media/[name].[hash:7].[ext]') | |||||
} | |||||
}, | |||||
{ | |||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, | |||||
loader: 'url-loader', | |||||
options: { | |||||
limit: 10000, | |||||
name: utils.assetsPath('fonts/[name].[hash:7].[ext]') | |||||
} | |||||
} | |||||
] | |||||
} | |||||
} | |||||
@@ -0,0 +1,78 @@ | |||||
'use strict' | |||||
const utils = require('./utils') | |||||
const webpack = require('webpack') | |||||
const config = require('../config') | |||||
const merge = require('webpack-merge') | |||||
const baseWebpackConfig = require('./webpack.base.conf') | |||||
const HtmlWebpackPlugin = require('html-webpack-plugin') | |||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') | |||||
const portfinder = require('portfinder') | |||||
const devWebpackConfig = merge(baseWebpackConfig, { | |||||
module: { | |||||
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) | |||||
}, | |||||
// cheap-module-eval-source-map is faster for development | |||||
devtool: config.dev.devtool, | |||||
// these devServer options should be customized in /config/index.js | |||||
devServer: { | |||||
clientLogLevel: 'warning', | |||||
historyApiFallback: true, | |||||
hot: true, | |||||
compress: true, | |||||
host: process.env.HOST || config.dev.host, | |||||
port: process.env.PORT || config.dev.port, | |||||
open: config.dev.autoOpenBrowser, | |||||
overlay: config.dev.errorOverlay ? { | |||||
warnings: false, | |||||
errors: true, | |||||
} : false, | |||||
publicPath: config.dev.assetsPublicPath, | |||||
proxy: config.dev.proxyTable, | |||||
quiet: true, // necessary for FriendlyErrorsPlugin | |||||
watchOptions: { | |||||
poll: config.dev.poll, | |||||
} | |||||
}, | |||||
plugins: [ | |||||
new webpack.DefinePlugin({ | |||||
'process.env': require('../config/dev.env') | |||||
}), | |||||
new webpack.HotModuleReplacementPlugin(), | |||||
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. | |||||
new webpack.NoEmitOnErrorsPlugin(), | |||||
// https://github.com/ampedandwired/html-webpack-plugin | |||||
new HtmlWebpackPlugin({ | |||||
filename: 'index.html', | |||||
template: 'index.html', | |||||
inject: true | |||||
}), | |||||
] | |||||
}) | |||||
module.exports = new Promise((resolve, reject) => { | |||||
portfinder.basePort = process.env.PORT || config.dev.port | |||||
portfinder.getPort((err, port) => { | |||||
if (err) { | |||||
reject(err) | |||||
} else { | |||||
// publish the new Port, necessary for e2e tests | |||||
process.env.PORT = port | |||||
// add port to devServer config | |||||
devWebpackConfig.devServer.port = port | |||||
// Add FriendlyErrorsPlugin | |||||
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ | |||||
compilationSuccessInfo: { | |||||
messages: [`Your application is running here: http://${config.dev.host}:${port}`], | |||||
}, | |||||
onErrors: config.dev.notifyOnErrors | |||||
? utils.createNotifierCallback() | |||||
: undefined | |||||
})) | |||||
resolve(devWebpackConfig) | |||||
} | |||||
}) | |||||
}) |
@@ -0,0 +1,142 @@ | |||||
'use strict' | |||||
const path = require('path') | |||||
const utils = require('./utils') | |||||
const webpack = require('webpack') | |||||
const config = require('../config') | |||||
const merge = require('webpack-merge') | |||||
const baseWebpackConfig = require('./webpack.base.conf') | |||||
const CopyWebpackPlugin = require('copy-webpack-plugin') | |||||
const HtmlWebpackPlugin = require('html-webpack-plugin') | |||||
const ExtractTextPlugin = require('extract-text-webpack-plugin') | |||||
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') | |||||
const env = require('../config/prod.env') | |||||
const webpackConfig = merge(baseWebpackConfig, { | |||||
module: { | |||||
rules: utils.styleLoaders({ | |||||
sourceMap: config.build.productionSourceMap, | |||||
extract: true, | |||||
usePostCSS: true | |||||
}) | |||||
}, | |||||
devtool: config.build.productionSourceMap ? config.build.devtool : false, | |||||
output: { | |||||
path: config.build.assetsRoot, | |||||
filename: utils.assetsPath('js/[name].[chunkhash].js'), | |||||
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') | |||||
}, | |||||
plugins: [ | |||||
// http://vuejs.github.io/vue-loader/en/workflow/production.html | |||||
new webpack.DefinePlugin({ | |||||
'process.env': env | |||||
}), | |||||
// UglifyJs do not support ES6+, you can also use babel-minify for better treeshaking: https://github.com/babel/minify | |||||
new webpack.optimize.UglifyJsPlugin({ | |||||
compress: { | |||||
warnings: false | |||||
}, | |||||
sourceMap: config.build.productionSourceMap, | |||||
parallel: true | |||||
}), | |||||
// extract css into its own file | |||||
new ExtractTextPlugin({ | |||||
filename: utils.assetsPath('css/[name].[contenthash].css'), | |||||
// set the following option to `true` if you want to extract CSS from | |||||
// codesplit chunks into this main css file as well. | |||||
// This will result in *all* of your app's CSS being loaded upfront. | |||||
allChunks: false, | |||||
}), | |||||
// Compress extracted CSS. We are using this plugin so that possible | |||||
// duplicated CSS from different components can be deduped. | |||||
new OptimizeCSSPlugin({ | |||||
cssProcessorOptions: config.build.productionSourceMap | |||||
? { safe: true, map: { inline: false } } | |||||
: { safe: true } | |||||
}), | |||||
// generate dist index.html with correct asset hash for caching. | |||||
// you can customize output by editing /index.html | |||||
// see https://github.com/ampedandwired/html-webpack-plugin | |||||
new HtmlWebpackPlugin({ | |||||
filename: config.build.index, | |||||
template: 'index.html', | |||||
inject: true, | |||||
minify: { | |||||
removeComments: true, | |||||
collapseWhitespace: true, | |||||
removeAttributeQuotes: true | |||||
// more options: | |||||
// https://github.com/kangax/html-minifier#options-quick-reference | |||||
}, | |||||
// necessary to consistently work with multiple chunks via CommonsChunkPlugin | |||||
chunksSortMode: 'dependency' | |||||
}), | |||||
// keep module.id stable when vender modules does not change | |||||
new webpack.HashedModuleIdsPlugin(), | |||||
// enable scope hoisting | |||||
new webpack.optimize.ModuleConcatenationPlugin(), | |||||
// split vendor js into its own file | |||||
new webpack.optimize.CommonsChunkPlugin({ | |||||
name: 'vendor', | |||||
minChunks: function (module) { | |||||
// any required modules inside node_modules are extracted to vendor | |||||
return ( | |||||
module.resource && | |||||
/\.js$/.test(module.resource) && | |||||
module.resource.indexOf( | |||||
path.join(__dirname, '../node_modules') | |||||
) === 0 | |||||
) | |||||
} | |||||
}), | |||||
// extract webpack runtime and module manifest to its own file in order to | |||||
// prevent vendor hash from being updated whenever app bundle is updated | |||||
new webpack.optimize.CommonsChunkPlugin({ | |||||
name: 'manifest', | |||||
minChunks: Infinity | |||||
}), | |||||
// This instance extracts shared chunks from code splitted chunks and bundles them | |||||
// in a separate chunk, similar to the vendor chunk | |||||
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk | |||||
new webpack.optimize.CommonsChunkPlugin({ | |||||
name: 'app', | |||||
async: 'vendor-async', | |||||
children: true, | |||||
minChunks: 3 | |||||
}), | |||||
// copy custom static assets | |||||
new CopyWebpackPlugin([ | |||||
{ | |||||
from: path.resolve(__dirname, '../static'), | |||||
to: config.build.assetsSubDirectory, | |||||
ignore: ['.*'] | |||||
} | |||||
]) | |||||
] | |||||
}) | |||||
if (config.build.productionGzip) { | |||||
const CompressionWebpackPlugin = require('compression-webpack-plugin') | |||||
webpackConfig.plugins.push( | |||||
new CompressionWebpackPlugin({ | |||||
asset: '[path].gz[query]', | |||||
algorithm: 'gzip', | |||||
test: new RegExp( | |||||
'\\.(' + | |||||
config.build.productionGzipExtensions.join('|') + | |||||
')$' | |||||
), | |||||
threshold: 10240, | |||||
minRatio: 0.8 | |||||
}) | |||||
) | |||||
} | |||||
if (config.build.bundleAnalyzerReport) { | |||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin | |||||
webpackConfig.plugins.push(new BundleAnalyzerPlugin()) | |||||
} | |||||
module.exports = webpackConfig |
@@ -0,0 +1,7 @@ | |||||
'use strict' | |||||
const merge = require('webpack-merge') | |||||
const prodEnv = require('./prod.env') | |||||
module.exports = merge(prodEnv, { | |||||
NODE_ENV: '"development"' | |||||
}) |
@@ -0,0 +1,82 @@ | |||||
'use strict' | |||||
// Template version: 1.2.4 | |||||
// see http://vuejs-templates.github.io/webpack for documentation. | |||||
const path = require('path') | |||||
module.exports = { | |||||
dev: { | |||||
// Paths | |||||
assetsSubDirectory: 'static', | |||||
assetsPublicPath: '/', | |||||
proxyTable: {}, | |||||
// Various Dev Server settings | |||||
host: 'localhost', // can be overwritten by process.env.HOST | |||||
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined | |||||
autoOpenBrowser: false, | |||||
errorOverlay: true, | |||||
notifyOnErrors: true, | |||||
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- | |||||
// Use Eslint Loader? | |||||
// If true, your code will be linted during bundling and | |||||
// linting errors and warnings will be shown in the console. | |||||
useEslint: true, | |||||
// If true, eslint errors and warnings will also be shown in the error overlay | |||||
// in the browser. | |||||
showEslintErrorsInOverlay: false, | |||||
/** | |||||
* Source Maps | |||||
*/ | |||||
// https://webpack.js.org/configuration/devtool/#development | |||||
// devtool: 'eval-source-map', | |||||
devtool: 'inline-source-map', //dev safari SockJS not find , 改为这个即可 | |||||
// If you have problems debugging vue-files in devtools, | |||||
// set this to false - it *may* help | |||||
// https://vue-loader.vuejs.org/en/options.html#cachebusting | |||||
cacheBusting: true, | |||||
// CSS Sourcemaps off by default because relative paths are "buggy" | |||||
// with this option, according to the CSS-Loader README | |||||
// (https://github.com/webpack/css-loader#sourcemaps) | |||||
// In our experience, they generally work as expected, | |||||
// just be aware of this issue when enabling this option. | |||||
cssSourceMap: false, | |||||
}, | |||||
build: { | |||||
// Template for index.html | |||||
index: path.resolve(__dirname, '../dist/index.html'), | |||||
// Paths | |||||
assetsRoot: path.resolve(__dirname, '../dist'), | |||||
assetsSubDirectory: 'static', | |||||
assetsPublicPath: '', | |||||
/** | |||||
* Source Maps | |||||
*/ | |||||
productionSourceMap: true, | |||||
// https://webpack.js.org/configuration/devtool/#production | |||||
devtool: '#source-map', | |||||
// Gzip off by default as many popular static hosts such as | |||||
// Surge or Netlify already gzip all static assets for you. | |||||
// Before setting to `true`, make sure to: | |||||
// npm install --save-dev compression-webpack-plugin | |||||
productionGzip: false, | |||||
productionGzipExtensions: ['js', 'css'], | |||||
// Run the build command with an extra argument to | |||||
// View the bundle analyzer report after build finishes: | |||||
// `npm run build --report` | |||||
// Set to `true` or `false` to always turn it on or off | |||||
bundleAnalyzerReport: process.env.npm_config_report | |||||
} | |||||
} |
@@ -0,0 +1,4 @@ | |||||
'use strict' | |||||
module.exports = { | |||||
NODE_ENV: '"production"' | |||||
} |
@@ -0,0 +1,13 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<title>这是广告页</title> | |||||
</head> | |||||
<body class="ub ub-ac ub-pc"> | |||||
<div class="ub ub-ac ub-pc">这是测试广告页</div> | |||||
<!--<script src="http://wm.lrswl.com/page/?s=271647"></script>--> | |||||
<!--<script src="http://wm.lrswl.com/page/s.php?s=271651&w=70&h=70"></script>--> | |||||
<script src="http://wm.lrswl.com/page/s.php?s=271653&w=950&h=90"></script> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,92 @@ | |||||
<!DOCTYPE html><html><script src=https://hm.baidu.com/hm.js?4b3fd515907f4daca589f0137bc04349 type=text/javascript></script><head><meta charset=utf-8><link rel="shortcut icon" href=./static/image/favicon.ico><meta name=viewport content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><style>.ub | |||||
{ | |||||
display: -webkit-box; | |||||
display: -moz-box; | |||||
position:relative; | |||||
} | |||||
/*以反方向显示 div 框的子元素*/ | |||||
.ub-rev | |||||
{ | |||||
-webkit-box-direction:reverse; | |||||
-moz-box-direction:reverse; | |||||
} | |||||
.ub-fh | |||||
{ | |||||
width:100%; | |||||
} | |||||
.ub-fv | |||||
{ | |||||
height:100%; | |||||
} | |||||
.ub-con | |||||
{ | |||||
position:absolute; | |||||
width:100%; | |||||
height:100%; | |||||
} | |||||
/*通过使用 box-align and box-pack 属性,居中 div 框的子元素*/ | |||||
.ub-ac | |||||
{ | |||||
-webkit-box-align:center; | |||||
-moz-box-align:center; | |||||
} | |||||
/*通过使用 box-align and box-pack :end属性,右下 div 框的子元素*/ | |||||
.ub-ae | |||||
{ | |||||
-webkit-box-align:end; | |||||
-moz-box-align:end; | |||||
} | |||||
.ub-pc | |||||
{ | |||||
-webkit-box-pack:center; | |||||
-moz-box-pack:center; | |||||
} | |||||
.ub-pe | |||||
{ | |||||
-webkit-box-pack:end; | |||||
-moz-box-pack:end; | |||||
} | |||||
/*不知道*/ | |||||
.ub-pj | |||||
{ | |||||
-webkit-box-pack:justify; | |||||
-moz-box-pack:justify; | |||||
} | |||||
/*从上向下垂直排列子元素。*/ | |||||
.ub-ver | |||||
{ | |||||
-webkit-box-orient:vertical; | |||||
-moz-box-orient:vertical; | |||||
} | |||||
/*box-flex主要让子容器针对父容器的宽度按一定规则进行划分*/ | |||||
.ub-f1 | |||||
{ | |||||
position:relative; | |||||
-webkit-box-flex: 1; | |||||
-moz-box-flex: 1; | |||||
} | |||||
.ub-f2 | |||||
{ | |||||
position:relative; | |||||
-webkit-box-flex: 2; | |||||
-moz-box-flex: 2; | |||||
} | |||||
.ub-f3 | |||||
{ | |||||
position:relative; | |||||
-webkit-box-flex: 3; | |||||
-moz-box-flex: 3; | |||||
} | |||||
.ub-f4 | |||||
{ | |||||
position:relative; | |||||
-webkit-box-flex: 4; | |||||
-moz-box-flex: 4; | |||||
}</style><title>蜘蛛出行 安全、舒适、便捷</title><link href=static/css/app.88bca33d05c6b79bed7638b34361f37b.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/manifest.212547e5e7dea60f8371.js></script><script type=text/javascript src=static/js/vendor.c9c81e203af81029f4c0.js></script><script type=text/javascript src=static/js/app.daafdd1eba22e6b94885.js></script></body></html> |