v-Brocloni 3 år sedan
förälder
incheckning
a294a25fac
100 ändrade filer med 102201 tillägg och 0 borttagningar
  1. +2
    -0
      backend/__init__.py
  2. +5
    -0
      backend/apps.py
  3. +21
    -0
      backend/controller/home.py
  4. +0
    -0
      backend/migrations/__init__.py
  5. +32
    -0
      backend/model/product.py
  6. +578
    -0
      backend/models.py
  7. +10
    -0
      backend/urls.py
  8. +6
    -0
      backend/views.py
  9. +10
    -0
      backendWebsite/index.html
  10. +135
    -0
      common/curl_interface.py
  11. +213
    -0
      common/util.py
  12. Binär
      db.sqlite3
  13. +0
    -0
      log/curl/culr.test
  14. +98738
    -0
      log/uwsgi.log
  15. +10
    -0
      mWebsite/dist/index.html
  16. +22
    -0
      manage.py
  17. +2
    -0
      official/__init__.py
  18. +5
    -0
      official/apps.py
  19. +46
    -0
      official/controller/Home.py
  20. +24
    -0
      official/controller/Order.py
  21. +24
    -0
      official/controller/prod.py
  22. +37
    -0
      official/controller/reserve_bus.py
  23. +76
    -0
      official/controller/reserve_hotel.py
  24. +25
    -0
      official/controller/reserve_ticket.py
  25. +38
    -0
      official/controller/reserve_tourist.py
  26. +12
    -0
      official/logic/client_opinion.py
  27. +76
    -0
      official/logic/cms_category_prod_logic.py
  28. +53
    -0
      official/logic/order_logic.py
  29. +72
    -0
      official/logic/reserve_bus_logic.py
  30. +50
    -0
      official/logic/reserve_hotel_logic.py
  31. +35
    -0
      official/logic/reserve_ticket_logic.py
  32. +56
    -0
      official/logic/reserve_tourist_logic.py
  33. +0
    -0
      official/migrations/__init__.py
  34. +19
    -0
      official/model/ClientOpinion.py
  35. +12
    -0
      official/model/CmsCategory.py
  36. +54
    -0
      official/model/CmsCategoryProd.py
  37. +9
    -0
      official/model/FxUser.py
  38. +35
    -0
      official/model/ProdCategory.py
  39. +127
    -0
      official/model/ZzNews.py
  40. +596
    -0
      official/models.py
  41. +34
    -0
      official/urls.py
  42. +18
    -0
      officialWebsite/.babelrc
  43. +9
    -0
      officialWebsite/.editorconfig
  44. +13
    -0
      officialWebsite/.gitignore
  45. +9
    -0
      officialWebsite/.postcssrc.js
  46. +21
    -0
      officialWebsite/README.md
  47. +41
    -0
      officialWebsite/build/build.js
  48. +49
    -0
      officialWebsite/build/check-versions.js
  49. +10
    -0
      officialWebsite/build/dev-client.js
  50. +105
    -0
      officialWebsite/build/dev-server.js
  51. +98
    -0
      officialWebsite/build/utils.js
  52. +23
    -0
      officialWebsite/build/vue-loader.conf.js
  53. +79
    -0
      officialWebsite/build/webpack.base.conf.js
  54. +78
    -0
      officialWebsite/build/webpack.dev.conf.js
  55. +142
    -0
      officialWebsite/build/webpack.prod.conf.js
  56. +7
    -0
      officialWebsite/config/dev.env.js
  57. +82
    -0
      officialWebsite/config/index.js
  58. +4
    -0
      officialWebsite/config/prod.env.js
  59. +13
    -0
      officialWebsite/dist/adpage.html
  60. +92
    -0
      officialWebsite/dist/index.html
  61. +8
    -0
      officialWebsite/dist/static/css/app.88bca33d05c6b79bed7638b34361f37b.css
  62. +1
    -0
      officialWebsite/dist/static/css/app.88bca33d05c6b79bed7638b34361f37b.css.map
  63. Binär
      officialWebsite/dist/static/fonts/element-icons.6f0a763.ttf
  64. Binär
      officialWebsite/dist/static/image/aboutus/aboutus_banner.jpg
  65. Binär
      officialWebsite/dist/static/image/contactus/bmap_location.png
  66. Binär
      officialWebsite/dist/static/image/contactus/contact_us_gou.png
  67. Binär
      officialWebsite/dist/static/image/contactus/contactus_banner.jpg
  68. Binär
      officialWebsite/dist/static/image/contactus/contactus_email.png
  69. Binär
      officialWebsite/dist/static/image/contactus/contactus_fax.png
  70. Binär
      officialWebsite/dist/static/image/contactus/contactus_location.png
  71. Binär
      officialWebsite/dist/static/image/contactus/contactus_phone.png
  72. Binär
      officialWebsite/dist/static/image/favicon.ico
  73. Binär
      officialWebsite/dist/static/image/footer_friends.png
  74. Binär
      officialWebsite/dist/static/image/home/home_banner_01.jpg
  75. Binär
      officialWebsite/dist/static/image/home/home_banner_02.jpg
  76. Binär
      officialWebsite/dist/static/image/home/home_banner_03.jpg
  77. Binär
      officialWebsite/dist/static/image/home/home_banner_04.jpg
  78. Binär
      officialWebsite/dist/static/image/home/home_footer_contact.jpg
  79. Binär
      officialWebsite/dist/static/image/home/home_icon_01.png
  80. Binär
      officialWebsite/dist/static/image/home/home_icon_01_white.png
  81. Binär
      officialWebsite/dist/static/image/home/home_icon_02.png
  82. Binär
      officialWebsite/dist/static/image/home/home_icon_02_white.png
  83. Binär
      officialWebsite/dist/static/image/home/home_icon_03.png
  84. Binär
      officialWebsite/dist/static/image/home/home_icon_03_white.png
  85. Binär
      officialWebsite/dist/static/image/home/home_icon_04.png
  86. Binär
      officialWebsite/dist/static/image/home/home_icon_04_white.png
  87. Binär
      officialWebsite/dist/static/image/home/home_icon_05.png
  88. Binär
      officialWebsite/dist/static/image/home/home_icon_06.png
  89. Binär
      officialWebsite/dist/static/image/home/home_icon_07.png
  90. Binär
      officialWebsite/dist/static/image/home/home_icon_08.png
  91. Binär
      officialWebsite/dist/static/image/home/home_icon_09.png
  92. Binär
      officialWebsite/dist/static/image/home/home_icon_10.png
  93. Binär
      officialWebsite/dist/static/image/home/home_icon_location.png
  94. Binär
      officialWebsite/dist/static/image/home/home_icon_msg.png
  95. Binär
      officialWebsite/dist/static/image/home/home_icon_phone.png
  96. Binär
      officialWebsite/dist/static/image/home/home_prod_01.jpg
  97. Binär
      officialWebsite/dist/static/image/home/home_prod_02.jpg
  98. Binär
      officialWebsite/dist/static/image/home/home_prod_03.jpg
  99. Binär
      officialWebsite/dist/static/image/home/home_prod_04.jpg
  100. Binär
      officialWebsite/dist/static/image/home/home_prod_05.jpg

+ 2
- 0
backend/__init__.py Visa fil

@@ -0,0 +1,2 @@
import pymysql
pymysql.install_as_MySQLdb()

+ 5
- 0
backend/apps.py Visa fil

@@ -0,0 +1,5 @@
from django.apps import AppConfig


class BackendConfig(AppConfig):
name = 'backend'

+ 21
- 0
backend/controller/home.py Visa fil

@@ -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
backend/migrations/__init__.py Visa fil


+ 32
- 0
backend/model/product.py Visa fil

@@ -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

+ 578
- 0
backend/models.py Visa fil

@@ -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'

+ 10
- 0
backend/urls.py Visa fil

@@ -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)
]

+ 6
- 0
backend/views.py Visa fil

@@ -0,0 +1,6 @@
# Create your views here.
from django.shortcuts import render


def index(request):
return render(request, 'index.html')

+ 10
- 0
backendWebsite/index.html Visa fil

@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

</body>
</html>

+ 135
- 0
common/curl_interface.py Visa fil

@@ -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)

+ 213
- 0
common/util.py Visa fil

@@ -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

Binär
db.sqlite3 Visa fil


+ 0
- 0
log/curl/culr.test Visa fil


+ 98738
- 0
log/uwsgi.log
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 10
- 0
mWebsite/dist/index.html Visa fil

@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
手机官网
</body>
</html>

+ 22
- 0
manage.py Visa fil

@@ -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)

+ 2
- 0
official/__init__.py Visa fil

@@ -0,0 +1,2 @@
import pymysql
pymysql.install_as_MySQLdb()

+ 5
- 0
official/apps.py Visa fil

@@ -0,0 +1,5 @@
from django.apps import AppConfig


class OfficialConfig(AppConfig):
name = 'official'

+ 46
- 0
official/controller/Home.py Visa fil

@@ -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)

+ 24
- 0
official/controller/Order.py Visa fil

@@ -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)

+ 24
- 0
official/controller/prod.py Visa fil

@@ -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)

+ 37
- 0
official/controller/reserve_bus.py Visa fil

@@ -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)

+ 76
- 0
official/controller/reserve_hotel.py Visa fil

@@ -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)

+ 25
- 0
official/controller/reserve_ticket.py Visa fil

@@ -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)

+ 38
- 0
official/controller/reserve_tourist.py Visa fil

@@ -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)

+ 12
- 0
official/logic/client_opinion.py Visa fil

@@ -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('添加失败')

+ 76
- 0
official/logic/cms_category_prod_logic.py Visa fil

@@ -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)

+ 53
- 0
official/logic/order_logic.py Visa fil

@@ -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

+ 72
- 0
official/logic/reserve_bus_logic.py Visa fil

@@ -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})

+ 50
- 0
official/logic/reserve_hotel_logic.py Visa fil

@@ -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

+ 35
- 0
official/logic/reserve_ticket_logic.py Visa fil

@@ -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

+ 56
- 0
official/logic/reserve_tourist_logic.py Visa fil

@@ -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
official/migrations/__init__.py Visa fil


+ 19
- 0
official/model/ClientOpinion.py Visa fil

@@ -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

+ 12
- 0
official/model/CmsCategory.py Visa fil

@@ -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

+ 54
- 0
official/model/CmsCategoryProd.py Visa fil

@@ -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

+ 9
- 0
official/model/FxUser.py Visa fil

@@ -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

+ 35
- 0
official/model/ProdCategory.py Visa fil

@@ -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



+ 127
- 0
official/model/ZzNews.py Visa fil

@@ -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

+ 596
- 0
official/models.py Visa fil

@@ -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'

+ 34
- 0
official/urls.py Visa fil

@@ -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) # 校验订单状态

]

+ 18
- 0
officialWebsite/.babelrc Visa fil

@@ -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"]
}
}
}

+ 9
- 0
officialWebsite/.editorconfig Visa fil

@@ -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

+ 13
- 0
officialWebsite/.gitignore Visa fil

@@ -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

+ 9
- 0
officialWebsite/.postcssrc.js Visa fil

@@ -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": {}
}
}

+ 21
- 0
officialWebsite/README.md Visa fil

@@ -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).

+ 41
- 0
officialWebsite/build/build.js Visa fil

@@ -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'
))
})
})

+ 49
- 0
officialWebsite/build/check-versions.js Visa fil

@@ -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)
}
}

+ 10
- 0
officialWebsite/build/dev-client.js Visa fil

@@ -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()
}
})

+ 105
- 0
officialWebsite/build/dev-server.js Visa fil

@@ -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()
}
}

+ 98
- 0
officialWebsite/build/utils.js Visa fil

@@ -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')
})
}
}

+ 23
- 0
officialWebsite/build/vue-loader.conf.js Visa fil

@@ -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'
}
}

+ 79
- 0
officialWebsite/build/webpack.base.conf.js Visa fil

@@ -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]')
}
}
]
}
}




+ 78
- 0
officialWebsite/build/webpack.dev.conf.js Visa fil

@@ -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)
}
})
})

+ 142
- 0
officialWebsite/build/webpack.prod.conf.js Visa fil

@@ -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

+ 7
- 0
officialWebsite/config/dev.env.js Visa fil

@@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

+ 82
- 0
officialWebsite/config/index.js Visa fil

@@ -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
}
}

+ 4
- 0
officialWebsite/config/prod.env.js Visa fil

@@ -0,0 +1,4 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}

+ 13
- 0
officialWebsite/dist/adpage.html Visa fil

@@ -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>

+ 92
- 0
officialWebsite/dist/index.html Visa fil

@@ -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>

+ 8
- 0
officialWebsite/dist/static/css/app.88bca33d05c6b79bed7638b34361f37b.css
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 1
- 0
officialWebsite/dist/static/css/app.88bca33d05c6b79bed7638b34361f37b.css.map
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


Binär
officialWebsite/dist/static/fonts/element-icons.6f0a763.ttf Visa fil


Binär
officialWebsite/dist/static/image/aboutus/aboutus_banner.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 500  |  Storlek: 139 KiB

Binär
officialWebsite/dist/static/image/contactus/bmap_location.png Visa fil

Före Efter
Bredd: 25  |  Höjd: 40  |  Storlek: 839 B

Binär
officialWebsite/dist/static/image/contactus/contact_us_gou.png Visa fil

Före Efter
Bredd: 34  |  Höjd: 26  |  Storlek: 1.2 KiB

Binär
officialWebsite/dist/static/image/contactus/contactus_banner.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 500  |  Storlek: 199 KiB

Binär
officialWebsite/dist/static/image/contactus/contactus_email.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.2 KiB

Binär
officialWebsite/dist/static/image/contactus/contactus_fax.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.3 KiB

Binär
officialWebsite/dist/static/image/contactus/contactus_location.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.6 KiB

Binär
officialWebsite/dist/static/image/contactus/contactus_phone.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.9 KiB

Binär
officialWebsite/dist/static/image/favicon.ico Visa fil

Före Efter

Binär
officialWebsite/dist/static/image/footer_friends.png Visa fil

Före Efter
Bredd: 390  |  Höjd: 160  |  Storlek: 41 KiB

Binär
officialWebsite/dist/static/image/home/home_banner_01.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 900  |  Storlek: 433 KiB

Binär
officialWebsite/dist/static/image/home/home_banner_02.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 900  |  Storlek: 258 KiB

Binär
officialWebsite/dist/static/image/home/home_banner_03.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 900  |  Storlek: 110 KiB

Binär
officialWebsite/dist/static/image/home/home_banner_04.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 900  |  Storlek: 109 KiB

Binär
officialWebsite/dist/static/image/home/home_footer_contact.jpg Visa fil

Före Efter
Bredd: 1680  |  Höjd: 470  |  Storlek: 66 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_01.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.5 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_01_white.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.1 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_02.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 2.1 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_02_white.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.5 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_03.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.8 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_03_white.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.2 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_04.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 1.0 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_04_white.png Visa fil

Före Efter
Bredd: 50  |  Höjd: 50  |  Storlek: 825 B

Binär
officialWebsite/dist/static/image/home/home_icon_05.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 3.1 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_06.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.8 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_07.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.7 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_08.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.4 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_09.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.2 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_10.png Visa fil

Före Efter
Bredd: 60  |  Höjd: 60  |  Storlek: 2.6 KiB

Binär
officialWebsite/dist/static/image/home/home_icon_location.png Visa fil

Före Efter
Bredd: 30  |  Höjd: 30  |  Storlek: 782 B

Binär
officialWebsite/dist/static/image/home/home_icon_msg.png Visa fil

Före Efter
Bredd: 30  |  Höjd: 30  |  Storlek: 671 B

Binär
officialWebsite/dist/static/image/home/home_icon_phone.png Visa fil

Före Efter
Bredd: 30  |  Höjd: 30  |  Storlek: 682 B

Binär
officialWebsite/dist/static/image/home/home_prod_01.jpg Visa fil

Före Efter
Bredd: 590  |  Höjd: 500  |  Storlek: 420 KiB

Binär
officialWebsite/dist/static/image/home/home_prod_02.jpg Visa fil

Före Efter
Bredd: 1024  |  Höjd: 683  |  Storlek: 708 KiB

Binär
officialWebsite/dist/static/image/home/home_prod_03.jpg Visa fil

Före Efter
Bredd: 285  |  Höjd: 240  |  Storlek: 98 KiB

Binär
officialWebsite/dist/static/image/home/home_prod_04.jpg Visa fil

Före Efter
Bredd: 285  |  Höjd: 240  |  Storlek: 82 KiB

Binär
officialWebsite/dist/static/image/home/home_prod_05.jpg Visa fil

Före Efter
Bredd: 285  |  Höjd: 240  |  Storlek: 100 KiB

Vissa filer visades inte eftersom för många filer har ändrats

Laddar…
Avbryt
Spara