diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a46e5b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea/ +run/ +*.pyc diff --git a/handlers/__init__.py b/handlers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/handlers/index.py b/handlers/index.py new file mode 100644 index 0000000..99e3b1d --- /dev/null +++ b/handlers/index.py @@ -0,0 +1,24 @@ +# coding: utf-8 + +import tornado.web + +class BaseHandler(tornado.web.RequestHandler): + + def __init__(self, *args, **kwargs): + super(BaseHandler, self).__init__(*args, **kwargs) + x_real_ip = self.request.headers.get("X-Real-IP") + self.remote_ip = self.request.remote_ip if not x_real_ip else x_real_ip + + def render(self, template_name, **kwargs): + super(BaseHandler, self).render(template_name, **kwargs) + +class IndexHandler(BaseHandler): + + def get(self): + return self.render('index.html') + + +class WebAppHandler(BaseHandler): + + def get(self): + return self.render('webapp.html') diff --git a/log.py b/log.py new file mode 100644 index 0000000..11aa4cd --- /dev/null +++ b/log.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +from os import path +import logging.config + +def init_log(log_dir, debug=False): + if not path.exists(log_dir): + print 'log path is not exist:%s' % log_dir + exit(-1) + + config = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'default': { + 'format': '%(levelname)s %(asctime)s %(module)s:%(funcName)s:%(lineno)d %(message)s' + }, + 'simple': { + 'format': '%(level)s %(message)s' + } + }, + 'handlers': { + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'default', + }, + 'file': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': path.join(log_dir, 'webapp.log'), + 'maxBytes': 1024 * 1024 * 50, + 'backupCount': 5, + 'formatter': 'default', + }, + }, + 'loggers': { + 'starmachine': { + 'handlers': ['console', 'file'], + 'level': 'DEBUG', + 'propagate': False, + }, + } + } + + logging.config.dictConfig(config) diff --git a/server.py b/server.py new file mode 100644 index 0000000..8012e14 --- /dev/null +++ b/server.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +import os +import tornado.ioloop +import tornado.autoreload +import tornado.web +from tornado.options import define, options, parse_command_line +import settings +from log import init_log + + +def init_settings(): + # 加载环境配置项 + define('port', default=8080, type=int, help=u'监听端口') + define("log_dir", default='run', type=str, help=u'日志目录') + define('profile', default='local', type=str, help=u'运行配置') + + parse_command_line() + init_log(options.log_dir) + return options + +def start_application(): + from url import urls + log_dir = os.path.join(os.path.dirname(__file__), 'run') + application_settings = { + 'handlers': urls, + 'debug': settings.DEBUG, + 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), + 'static_path': os.path.join(os.path.dirname(__file__), 'static'), + } + application = tornado.web.Application(**application_settings) + + print 'server on port %s' % settings.PORT + print 'server log on %s' % log_dir + + application.listen(settings.PORT) + io_loop = tornado.ioloop.IOLoop.instance() + + io_loop.start() + +def run(): + init_settings() + start_application() + +if __name__ == '__main__': + run() \ No newline at end of file diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..b02cf8c --- /dev/null +++ b/settings.py @@ -0,0 +1,4 @@ +# coding: utf-8 + +DEBUG = True +PORT = 8080 \ No newline at end of file diff --git a/static/img/banner.png b/static/img/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..5afdd0dd1a6f4080a8a41bde454f8f461344d265 GIT binary patch literal 20656 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 V46b$JM??K6Jy(BL^~56d{{YfD6KDVc literal 0 HcmV?d00001 diff --git a/static/js/tpl.js b/static/js/tpl.js new file mode 100644 index 0000000..17b87fd --- /dev/null +++ b/static/js/tpl.js @@ -0,0 +1,486 @@ +$(function(){ + // 轮播图 +var mySwiper = new Swiper ('.swiper-container', { + direction: 'horizontal', + loop: true, + // 如果需要分页器 + pagination: '.swiper-pagination', + // 如果需要前进后退按钮 + nextButton: '.swiper-button-next', + prevButton: '.swiper-button-prev' +}); +$(".banner-wrap").height(window.innerWidth * 430 / 2732); + var pages = [1], + col = parseInt((+$('body').width() * 0.8 < 750 ? 750 : +$('body').width() * 0.8) / 227), + _template = '
  • ${app_name}' + + '

    ' + + '预览${copy}
  • ', + _cataData = {}, + _appData = {}, + cdnUrl="http://1251027630.cdn.myqcloud.com/1251027630/zhichi_frontend"; + getCategory(); + $('body').on('click', '#first-navs span', function(event) { + if($(this).hasClass('active')){ + return; + } + var cate = $(this).attr("data-cate"), + index = $(this).index(); + + $(this).addClass('active').siblings('.active').removeClass('active'); + $(".tpl-content").eq(index).addClass('active').siblings('.active').removeClass('active'); + if($(this).hasClass('js-uninitial')){ + $(this).removeClass('js-uninitial'); + if ($('.tpl-content.active .tpl-container').hasClass('js-requesting')) { + return; + }; + $('.tpl-content.active .tpl-container').addClass('js-requesting'); + getTpls(cate, index); + } + }).on('click','.tpl-sec-navs span' ,function(event) { + if($(this).hasClass('active')){ + return; + } + var cate = $(this).attr("data-cate"), + index = $("#first-navs .active").index(); + + $(this).addClass('active').siblings('.active').removeClass('active'); + pages[index] = 1; + $(".tpl-container").removeClass('js-no-more').eq(index).find('.js-tpl').remove(); + getTpls(cate, index); + }).on('click', '.choose-btn', function(event) { + // var appId = $(this).parent().parent().attr('data-id'); + // if($(this).hasClass('js-preview-btn')){ + // initialPreview(appId); + // $('#preview-tpl-dialog').show('slow'); + // $('#add-app-dialog').attr('data-id', appId).attr('data-color', ''); + // }else{ + // $('#add-app-dialog').attr('data-id', appId).attr('data-color', '').show('slow'); + // } + + var $li = $(this).closest('li'), + param = { + app_name : $li.children('.name').text(), + description: '' , + logo : cdnUrl + '/static/invitation/images/logo.png', + cover: cdnUrl + '/static/webapp/images/share_feng.jpg' , + f_app_id : $li.attr("data-id") + }; + addApp($(this) , param); + event.stopPropagation(); + }).on('click', '.code-mask', function(event) { + var appId = $(this).closest('li').attr('data-id'); + window.open('/webapp/?r=pc/Webapp/preview&id=' + appId +'&f_tpl=1'); + }).on('click', '.empty-tpl', function(event) { + // var appId = $(this).attr('data-id'); + // $('#add-app-dialog').attr('data-id', appId).attr('data-color', '').show('slow'); + var $li = $(this).closest('li'), + param = { + app_name : '我的应用', + description: '', + logo : cdnUrl + '/static/invitation/images/logo.png', + cover: cdnUrl + '/static/webapp/images/share_feng.jpg' + }; + addApp($(this) , param); + }) + + + function getCategory(){ + $ajax('/index.php?r=pc/AppData/AppCategoryList','get',{type : 0},'json', + function(data){ + if (data.status === 0) { + var categorys = data.data, + contentsStr = '', + firstCateStr = ''; + if(categorys.length){ + $(categorys).each(function(index, item) { + var secCates = item.cate, + contentStr = '
    ', + secCatesStr = ''; + + if(secCates.length > 0){ + secCatesStr += '全部'; + $(secCates).each(function(index, el) { + secCatesStr += ''+el.name+''; + }); + } + + firstCateStr += ''+item.name+'' + contentStr += secCatesStr + '
    • 空白模板

    '; + contentsStr += contentStr; + pages.push(1); + }); + + $('#first-navs').append(firstCateStr); + $('body').append(contentsStr); + if (window.location.hash == '#single') { + // 线上data-cate = 12 + $('#first-navs span[data-cate="12"]').trigger('click'); + }; + getTpls(categorys[0].id , 0); + }else{ + // 没有分类时 + $('#first-navs span').eq(0).trigger('click'); + } + }else{ + alertTip(data.data); + } + },function(data){ + alertTip(data.data); + }); + } + + function getTpls(cate, index){ + var $container = $('.tpl-container').eq(index), + param = {type: 0, page: pages[index], page_size: 20}; + + if(cate == -1){ + param.user = 1; + }else{ + param.cate_id = cate; + } + $ajax('/index.php?r=pc/AppData/AppTplList','get',param,'json', + function(data){ + if (data.status === 0) { + var tpls = data.data; + tpls.length && dealData(tpls, $container, index); + + pages[index]++; + if(data.is_more == 0){ + $container.addClass('js-no-more'); + } + }else{ + alertTip(data.data); + } + $container.removeClass('js-requesting'); + }, + function(data){ + alertTip(data.tpls); + $container.removeClass('js-requesting') + }); + } + + function dealData(tpls, $container, index){ + $container.find('.filler').remove(); + + var content = '', + addAmount = tpls.length, + curAmount = $container.find('.js-tpl').length, + temp = (addAmount+curAmount)%col, + fillerAmount = ( temp ? col : 0 ), // 需要增加的filler个数 + shadowLis = ''; + + $.each(tpls, function(i, item){ + content += ' ' + parseTemplate(item, index); + }); + for(var i=0; i复制'; + // }else{ + return '选择'; + // } + + default : + return data[$1]; + } + }); + return html; + } + + + // .on('click', '#group-page-container .group-nav', function(event) { + // // 组折叠 + // event.preventDefault(); + // var target = $(this).parent(); + // target.toggleClass('active'); + // }).on('click', '#group-page-container .page-nav', function(event) { + // if($(this).hasClass('active')){ + // return; + // } + // $('.page-nav.active').removeClass('active'); + // $(this).addClass('active'); + + // var router = $(this).attr('data-router'), + // $preview = $('#preview-iframe'), + // url = '/app?_app_id='+$('#add-app-dialog').attr('data-id')+'&router='+router, + // customFeature = _appData[router].customFeature; + + // if(customFeature.form){ + // url += '&detail=-1'; + // } + // $preview.attr('src',url); + // }).on('click', '.style-color-wrap li', function(event) { + // $(this).addClass('selected').siblings('.selected').removeClass('selected'); + // setColor($(this).attr('data-color')); + // }).on('click', '.zhichi-dialog .js-btn', function(event) { + // var type = $(this).attr('data-type'); + // switch (type){ + // case 'next': + // // $('#preview-tpl-dialog').hide(); + // $('#add-app-dialog').show(); + // break; + // case 'add': + // addApp($(this)); + // break; + // case 'cancel': + // $('#add-app-dialog').hide('slow'); + // break; + // } + // }).on('click', '.change-img-wrap', function(event) { + // // 初始化 打开我的图片 + // showImgResourceBox($(this).find('img')); + // }).on('click', '.style-palette li', function(event) { + // if(confirm('您确定要更换应用的风格颜色吗?此操作会影响该应用所有的顶部导航/底部导航/按钮/分类/标题/分割线。')){ + // color = $(this).attr('data-color'); + // me.savePage(); + // me.setStyleColor(); + // me.parsePage($('#group-page-container .page-nav.active').attr('data-router')); + // me.sthChange(); + // }else{ + // return false; + // } + // }); + // + $(window).scroll(function(event) { + var $content = $('.tpl-content.active'), + $container = $content.find('.tpl-container'); + if ($container.hasClass('js-requesting') || $container.hasClass('js-no-more')) { + return; + } + var scTop = $(this).scrollTop() + 50, + scheight = $(document).height() - $(this).height(); + if(scTop >= scheight){ + var index = $('#first-navs > .active').index(), + cate = $content.find('.tpl-sec-navs .active').attr('data-cate') || $('#first-navs > .active').attr('data-cate'); + $container.addClass('js-requesting'); + getTpls(cate, index); + } + }); + + // $('#preview-tpl-dialog').zDialog({ + // width: 720, + // height: 620, + // title: 'APP模板预览' + // }); + + // $('#add-app-dialog').zDialog({ + // width: 400, + // height: 403, + // title: '创建APP' + // }); + + $('#select-color-control').spectrum({ + chooseText: '确定', + cancelText: '取消', + showInput: true, + allowEmpty:false, + containerClassName: 'full-spectrum', + showInitial: true, + showPalette: false, + showSelectionPalette: false, + showAlpha: true, + maxPaletteSize: 10, + preferredFormat: 'hex', + localStorageKey: 'spectrum.demo', + change: function(color){ + setColor(color); + } + }); + + function setColor(color){ + var _color = new String(color), + appId = $('#add-app-dialog').attr('data-id'); + $('#add-app-dialog').attr('data-color', _color); + $('#preview-iframe').attr('src', '/app?_app_id='+appId+'&style_color='+encodeURIComponent(_color)); + } + + function initialPreview(appId){ + // 预览时 + var $preview = $('#preview-iframe'); + $preview.attr('src', '/app?_app_id='+appId); + + $ajax('/index.php?r=pc/AppData/detail','get',{app_id: appId},'json',function(data){ + if (data.status === 0) { + var info = data.data; + + _cataData = typeof info.cata_data === 'string' ? JSON.parse(info.cata_data) : info.cata_data; + _appData = typeof info.app_data === 'string' ? JSON.parse(info.app_data) : info.app_data; + + parseCata(); + }else{ + alertTip(data.data); + } + + }); + } + function parseCata(router){ + var cataStr = '', + targetRouter = router || 'page00', + cataDataContent = _cataData.data; + for(var cata in cataDataContent) { + if(cataDataContent[cata]){ + var pages = cataDataContent[cata].pages, + i = 0; + cataStr += '
  • '+cataDataContent[cata].group+'

  • '; + } + }; + $('#group-page-container').empty().append(cataStr); + $('#group-page-container .page-nav[data-router="'+targetRouter+'"]').addClass('active'); + } + function parsePageNavStr (router, title, name){ + var str = ''; + return str; + } + + function addApp($btn , param){ + if($btn.hasClass('requesting')){ + return; + } + // var name = $('#app-name').val(), + // description = $('#app-description').val(), + // logo = $('#app-logo').attr('src'), + // cover = $('#app-cover').attr('src'); + + // if(name.length<=0){ + // alertTip('请输入应用名'); + // $('#app-name').focus(); + // return; + // } + + // if(description.length<=0){ + // alertTip('请输入应用描述'); + // $('#app-description').focus(); + // return; + // } + // if(logo===cdnUrl+'/static/invitation/images/logo.png'){ + // alertTip('请上传logo'); + // return; + // } + // if(cover===cdnUrl+'/static/webapp/images/share_feng.jpg'){ + // alertTip('请上传封面'); + // return; + // } + + // var appId = $('#add-app-dialog').attr('data-id'), + // color = $('#add-app-dialog').attr('data-color'), + // param = { + // app_name : name, + // description: description, + // logo : logo, + // cover: cover, + // style_color: color + // }; + + // if(appId!='-1'){ + // // appId=='-1'的话 表示没有选择模版 + // param.f_app_id = appId; + // } + // if(color){ + // // 预览模版,有选择风格颜色并确定使用该模版时,需要把app里相关的组件变化做处理,并把修改后的app_data发给后台保存 + // setAppData(color); + // param.app_data = JSON.stringify(_appData); + // } + + $btn.addClass('requesting'); + $ajax('/index.php?r=pc/AppData/add','post', param,'json',function(data){ + $btn.removeClass('requesting'); + if (data.status === 0) { + window.location.href = '/index.php?r=pc/Webapp/edit&id='+data.data; + }else if (data.status === 2) { + loginFunc(); + $('.lr-mask').show('slow'); + } else if (data.status === 3){ + confirmTip({ + text : data.data, + ConfirmText:'立即升级', + CancelText: '暂不升级', + ConfirmFunction : function(){ + window.open('/index.php?r=pc/Index/appVipPacket'); + }, + CancelFunction : function(){ + + }, + CloseFunction : function(){ + + } + }) + } else { + alertTip(data.data); + } + }, + function(data){ + $btn.removeClass('requesting'); + alertTip(data.data); + }); + } + + function setAppData(color){ + for(var router in _appData){ + var eles = _appData[router].eles; + setAppEles(eles, color); + } + } + function setAppEles(eles, color){ + $(eles).each(function(index, ele) { + switch(ele.type){ + case 'top-nav': + case 'bottom-nav': + case 'button': + ele.style = ele.style || {}; + ele.style['background-color'] = color; + break; + case 'classify': + ele.customFeature = ele.customFeature || {}; + ele.customFeature['selectedColor'] = color; + break; + case 'breakline': + ele.style = ele.style || {}; + ele.style['border-color'] = color; + break; + case 'title-ele': + ele.customFeature = ele.customFeature || {}; + ele.customFeature['markColor'] = color; + break; + case 'static-vessel': + case 'free-vessel': + case 'list-vessel': + case 'dynamic-vessel': + case 'form-vessel': + setAppEles(ele.content, color); + break; + case 'layout-vessel': + setAppEles(ele.content.leftEles, color); + setAppEles(ele.content.rightEles, color); + break; + } + }); + } + + $("#add-label-span").on('click', function(event) { + $("#add-label").show(); + }); + $("#add-label").on('click', '.labelClose', function(event) { + $("#add-label").hide(); + }); + +}); \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..cc427eb --- /dev/null +++ b/templates/index.html @@ -0,0 +1,551 @@ + + + + + 小程序开发联盟 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
      +
    • + +

      影视小程序(微信标准)

      +
      + + 预览 + 选择 +
      +
    • +
    • + +

      商品售卖(可支付)

      +
      + + 预览 + 选择 +
      +
    • +
    • + +

      好新闻

      +
      + + 预览 + 选择 +
      +
    • +
    • + +

      旅游

      +
      + + 预览 + 选择 +
      +
    • +
    • + +

      双十一模板

      +
      + + 预览 + 选择 +
      +
    • +
    +
    + + \ No newline at end of file diff --git a/templates/webapp.html b/templates/webapp.html new file mode 100644 index 0000000..4d688b7 --- /dev/null +++ b/templates/webapp.html @@ -0,0 +1,788 @@ + + + + + 即速应用-预览 + + + + + + + + + + + + + + +
    + +
    +
    返回
    +
    + +
    +
    +
    +
    目录
    +
    机型
    +
    + 定制 + 客服 +
    +
    + + +
    + + + + + + +
    +
    +
    +
    + +
    注册
    +
    + +
    + + +
    +
    个人注册企业注册
    +
    + +

    微信扫码注册

    + +
    + + + + 获取验证码 + + +
    +
    +
    + + + + + 获取验证码 + +
    +
    注册
    +
    +
    +
    +
    手机找回通过邮箱找回
    +
    + + 获取验证码 + + + + +
    +
    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/url.py b/url.py new file mode 100644 index 0000000..bb2d12b --- /dev/null +++ b/url.py @@ -0,0 +1,10 @@ +# coding: utf-8 + +from handlers.index import IndexHandler, WebAppHandler + + +urls = [ + # 首页链接 + (r'/', IndexHandler), + (r'/webapp/$', WebAppHandler), +] \ No newline at end of file