WeMall微信商城签到插件Sign的主要源码
WeMall微信商城源码签到插件Sign,用于商城的签到系统,分享了部分比较重要的代码,供技术员学习参考
AdminController.class.php
<?php
namespace Addons\Sign\Controller;
class AdminController extends InitController
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$config = M("AddonSignConfig")->find();
$this->assign("config", $config);
$record = D('Addons://Sign/AddonSignRecord'); // 实例化User对象
$count = $record->count();// 查询满足要求的总记录数
$Page = new \Think\Page($count, 12);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$Page->setConfig('theme', "<div class='widget-content padded text-center'><ul class='pagination'></li><li>%FIRST%</li><li>%UP_PAGE%</li><li>%LINK_PAGE%</li><li>%DOWN_PAGE%</li><li>%END%</li><li><a> %HEADER% %NOW_PAGE%/%TOTAL_PAGE% 页</a></ul></div>");
$show = $Page->show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$record = $record->limit($Page->firstRow . ',' . $Page->listRows)->order("id desc")->relation(true)->select();
$this->assign("record", $record);// 赋值数据集
$this->assign('page', $show);// 赋值分页输出
$this->display();
}
public function addConfig()
{
M("AddonSignConfig")->where(array("id" => "1"))->save($_POST);
$this->success('修改成功', 'Admin/Admin/index/addon/Sign');
}
}
IndexController.class.php
<?php
namespace Addons\Sign\Controller;
class IndexController extends InitController
{
public $appUrl = "";
public function __construct()
{
parent::__construct();
$this->appUrl = "http://" . I("server.HTTP_HOST");
}
public function init()
{
return R("App/Common/init");
}
public function oauthRegister($wxuser)
{
return R("App/Common/oauthRegister", array($wxuser));
}
public function index()
{
$user = R("App/Public/oauthLogin");
// $user = M("User")->where(array("uid" => session("userUid")))->find();
$contact = M("Contact")->where(array("user_id" => $user["id"]))->find();
if ($contact) {
$this->assign("contact", $contact);
}
$config = M("Config")->find();
$this->assign("config", $config);
$this->assign("user", $user);
$product = M("addonScore")->select();
$this->assign("product", $product);
$this->display();
}
public function addOrder()
{
// $user = M("User")->where(array("uid" => session("userUid")))->find();
$user = M("User")->where(array("id" => session("userId")))->find();
$score = floatval($user["score"]) - floatval($_POST["score"]);
if ($score >= 0) {
M("User")->where(array("id" => $user["id"]))->save(array("score" => $score));
} else {
return;
}
$userHas = M("Contact")->where(array("user_id" => session("userId")))->find();
if ($userHas) {
$contact ["id"] = $userHas ["id"];
$contact ["user_id"] = session("userId");
$contact ["name"] = $_POST ["name"];
$contact ["phone"] = $_POST ["phone"];
$contact ["address"] = $_POST ["address"];
M("Contact")->save($contact);
} else {
$contact ["user_id"] = session("userId");
$contact ["name"] = $_POST ["name"];
$contact ["city"] = "";
$contact ["area"] = "";
$contact ["phone"] = $_POST ["phone"];
$contact ["address"] = $_POST ["address"];
M("Contact")->add($contact);
}
$userHas = M("Contact")->where(array("user_id" => session("userId")))->find();
$contact_id = $userHas["id"];
$data ["user_id"] = session("userId");
$data ["contact_id"] = $contact_id;
$data ["orderid"] = date("ymdhis") . mt_rand(1, 9);
$data ["totalscore"] = $_POST["score"];
$data ["status"] = 0;
$data ["note"] = $_POST ["note"];
$data ["time"] = date("Y-m-d H:i:s");
$data ["score_id"] = $_POST ["id"];
$result = M("AddonScoreOrder")->add($data);
if ($result) {
$this->ajaxReturn($result);
}
}
public function sign(){
$today = date("Y-m-d");
$where["time"] = array("like", $today . "%");
$where["user_id"] = session("userId");
$record = D("Addons://Sign/AddonSignRecord")->where($where)->find();
if ($record) {
$this->ajaxReturn(array("status" => 0));
return;
}
$user = M("User")->where(array("id" => session("userId")))->find();
$count = 0;
do{
$count++;
$yesterday = date("Y-m-d", strtotime("-$count day"));
$where["time"] = array("like", $yesterday . "%");
$record = D("AddonSignRecord")->where($where)->find();
} while ($record);
$continue_sign = $count-1;
$config = M("AddonSignConfig")->find();
if ($config) {
$addScore = floatval($continue_sign) * floatval($config["continue_sign"]) + floatval($config["first_sign"]);
M("AddonSignRecord")->add(array("user_id" => session("userId"), "score" => $addScore));
$score = floatval($user["score"]) + $addScore;
M("User")->where(array("id" => $user["id"]))->save(array("score" => $score));
$this->ajaxReturn(array("status" => 1, "score" => $addScore));
}
}
}
Index_index.html
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>签到系统</title>
<meta name="format-detection" content="telephone=no, address=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<!-- apple devices fullscreen -->
<meta name="apple-touch-fullscreen" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link href="__CSS__/bootstrap.min.css" rel="stylesheet">
<link href="__CSS__/font-awesome.min.css" rel="stylesheet">
<link href="__CSS__/animate.css" rel="stylesheet">
<link href="__CSS__/common.css" rel="stylesheet">
<link href="__CSS__/sign.css" rel="stylesheet">
</head>
<body>
<div class="container container-fill">
<div class="pcenter-main">
<div class="head">
<div class="pdetail">
<div class="img-circle"><img src="{$user.avater}"></div>
<div class="pull-left">
<span class="name">{$user.username}</span>
<span class="type">会员ID: {$user.id}</span>
</div>
</div>
<div class="head-nav">
<a class="head-nav-list">积分<span id="myscore">{$user.score}</span></a>
<a class="head-nav-list"><span class="pull-center"><span class="btn btn-default" onclick="signIn(this)"
style="color: #fff;border-color: #fff;">今日签到</span></span></a>
</div>
</div>
</div>
<div class="scroll-container">
<div class="wrapper">
<ul class="list-group">
<volist name="product" id="product">
<li class="list-group-item">
<div class="con">
<div class="list-hd">
<h5>{$product.name}</h5>
</div>
<div class="list-con">
<img src="__PUBLIC__/Uploads/{$product.image}">
</div>
<div class="list-ft">
<div class="pull-left" style="margin-left: 12px;">积分:<b>{$product.score}</b></div>
<div class="pull-right btn btn-default" style="margin-right: 12px;"><a
onclick="doCart(this , '{$product.score}' , '{$product.id}')" style="color: black;">立即兑换</a>
</div>
</div>
</div>
</li>
</volist>
</ul>
</div>
</div>
<div id="cover2" style="display: none; position: fixed; width: 100%; height: 100%;"></div>
<div class="tc_c2" id="join_box"
style="left: 0px; bottom: 0px; z-index: 3000; position: fixed; display: none;width: 100%;">
<div class="join_box_Xq_out" style="max-height: 641px;">
<div class="tc_c_close">
<div><img title="关闭" onclick="hidePop(this);" ontouchstart="" src="__IMG__/share_qr_close3.png"></div>
</div>
<div class="join_box_Xq">
<ul id="ul_join_property" class="pop_massage">
<li>
<div class="optionsName">姓名</div>
<div class="inpoutK">
<input value="{$contact.name}" type="text" class="font0" name="name" id="name">
</div>
</li>
<li>
<div class="optionsName">手机</div>
<div class="inpoutK">
<input value="{$contact.phone}" type="text" class="font0" name="phone" id="phone">
</div>
</li>
<li>
<div class="optionsName">地址</div>
<div class="inpoutK">
<input value="{$contact.address}" type="text" class="font0" name="address" id="address">
</div>
</li>
<li>
<div class="optionsName">备注</div>
<div class="inpoutK">
<input value="" type="text" class="font0" name="note" id="note">
</div>
</li>
</ul>
</div>
<div class="tc_c_btn2" ontouchstart="" id="xdBtn">
<a title="返回" class="fanHui" href="javascript:void(0);" ontouchstart="" onclick="_joinBox._prev()"
style="display: none;"></a>
<div class="join_Btn">
<input id="input_submit" class="blueBtn" type="submit" value="我要报名"
style="display: none; width: 100%;">
<a style="width: 100%;" id="a_submit" class="blueBtn font02" href="javascript:void(0);"
onclick="submitOrder()">提交</a>
</div>
</div>
</div>
</div>
<div id="alert" class="alert" style="display: none; top: 165px; left: 42.5px;text-align: center;">
<div id="alert_title">温馨提示</div>
<div id="alert_text"></div>
<div id="alert_button"><button id="alert_button_ok" class="button_3" ontouchstart="" onclick="hideAlert()">知道了</button></div>
<div id="alert_cancel" class="alert_cancel" ontouchstart="" onclick=""></div>
</div>
</div>
<script type="text/javascript" src="__JS__/jquery.min.js"></script>
<script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
<script>
var id = 0;
var score = 0;
function hidePop(){
$("#join_box").hide();
$("#cover2").hide();
}
function showPop(){
$("#join_box").show();
$("#cover2").show();
}
function doCart(obj , scoreIn ,idIn){
if(parseFloat(scoreIn) > parseFloat($('#myscore').html())){
alert("积分不足!");
return;
}
id = idIn;
score = scoreIn;
showPop();
}
var signFlag = true;
function signIn(obj){
$.ajax({
type: "post",
url: "{:u_addons('Sign://Index/sign')}",
data: {
},
success: function (data) {
if(data){
var json = eval(data)
$("#alert").show();
if (typeof json.score != "undefined") {
$("#alert_text").html("恭喜您获得"+json.score+"积分");
}else{
$("#alert_text").html("对不起,您已签到!");
}
}
},
beforeSend: function () {
},
complete: function () {
}
});
// $("#alert").show();
}
function hideAlert(){
$("#alert").hide();
location.reload();
}
var submitFlag = true;
function submitOrder(){
if (submitFlag == false) {
alert("请不要重复操作!");
return;
};
var name = $('#name').val();
var phone = $('#phone').val();
var address = $('#address').val();
var note = $('#note').val();
if (name.length == 0 || phone.length == 0 || address.length == 0) {
alert("请核对输入的信息!");
return;
};
submitFlag = false;
$.ajax({
type: "post",
url: "{:u_addons('Sign://Index/addOrder')}",
data: {
name: name,
phone: phone,
id: id,
score: score,
address: address,
note: note
},
success: function (data) {
if(data){
hidePop();
alert("商品兑换成功!");
location.reload();
}
},
beforeSend: function () {
},
complete: function () {
}
});
}
</script>
</body>
</html>
Admin_index.html
<section class="content-header">
<h1>
签到管理
<small></small>
</h1>
</section>
<!-- Main content -->
<section class="content">
<div class="row">
<!-- /.col -->
<div class="col-md-12">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">签到管理</h3>
<!-- /.box-tools -->
</div>
<!-- /.box-header -->
<div class="box-body no-padding">
<div class="heading tabs" style="background: transparent;">
<ul class="nav nav-tabs pull-left" data-tabs="tabs" id="tabs">
<li class="active">
<a data-toggle="tab" href="#tab1"><i class="icon-comments"></i><span>签到设置</span></a>
</li>
<li class="">
<a data-toggle="tab" href="#tab2"><i class="icon-user"></i><span>签到记录</span></a>
</li>
</ul>
</div>
<div class="tab-content padded" id="my-tab-content"style="margin-top: 60px;">
<div class="tab-pane active" id="tab1">
<!-- <h3>签到设置</h3> -->
<p>
<form action="{:u_addons('Sign://Admin/Admin/addConfig')}" id="myForm" method="post"
onsubmit="return false;" class="form-horizontal">
<div class="form-group">
<label class="control-label col-md-2">签到名称</label>
<div class="col-md-7">
<input class="form-control" placeholder="" value="{$config.name}"
name="name" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">首次签到赠送积分</label>
<div class="col-md-7">
<input class="form-control" placeholder="" value="{$config.first_sign}"
name="first_sign" type="text">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">连续签到增长积分</label>
<div class="col-md-7">
<input class="form-control" placeholder=""
value="{$config.continue_sign}" name="continue_sign" type="text">
</div>
</div>
<!-- <div class="form-group">
<label class="control-label col-md-2">最大连续签到天数</label>
<div class="col-md-7">
<input class="form-control" placeholder="" value="{$config.max_sign}"
name="max_sign" type="text">
</div>
</div> -->
<div class="form-group">
<label class="control-label col-md-2"></label>
<div class="col-md-7">
<button class="btn btn-primary"
onclick="myFormSubmit('{:u_addons(\'Sign://Admin/Admin/index\')}')"
type="submit">提交
</button>
<button class="btn btn-default-outline">取消</button>
</div>
</div>
</form>
</p>
</div>
<div class="tab-pane" id="tab2">
<!-- <h3>签到记录</h3> -->
<p>
<div class="widget-content padded clearfix">
<table class="table table-hover">
<thead>
<th class="check-header hidden-xs">
<label><input id="checkAll" name="checkAll"
type="checkbox"><span></span></label>
</th>
<th>
ID
</th>
<th>
用户名
</th>
<th class="hidden-xs">
积分
</th>
<th class="hidden-xs">
时间
</th>
</thead>
<tbody>
<volist name="record" id="record">
<tr>
<td class="check hidden-xs">
<label><input name="optionsRadios1" type="checkbox"
value="option1"><span></span></label>
</td>
<td>
{$record.id}
</td>
<td>
{$record.username}
</td>
<td class="hidden-xs">
{$record.score}
</td>
<td class="hidden-xs">
{$record.time}
</td>
</tr>
</volist>
</tbody>
</table>
{$page}
</div>
</p>
</div>
</div>
</div>
</div>
<!-- /. box -->
</div>
<!-- /.col -->
</div>
</section>
wemall官网网址: www.wemallshop.com

WeMall微信商城签到插件Sign的主要源码的更多相关文章
- 微信商城小程序 带java后台源码
微信小程序商城(Java版) 技术选型 1 后端使用技术 1.1 spring-web-4.0.2.RELEASE 1.2 mybatis3.2.8 1.3 shiro1.2.3 1.4 servle ...
- WeMall微信商城源码活动报名插件代码详情
WeMall微信商城源码插件活动报名代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考,商家可自由设置报名项目,活动时间,报名内容 代码详情地址:http://addon. ...
- WeMall微信商城源码插件代金券部分代码
WeMall微信商城源码插件Coupon代金券代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 AdminController.class.php <?php na ...
- WeMall微信商城源码插件会员卡代码详情
WeMall微信商城源码插件会员卡代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 Index_index.html <html> <head> ...
- WeMall微信商城源码插件大转盘代码详情
WeMall微信商城源码插件大转盘代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 代码详情地址:http://addon.wemallshop.com/Product/ ...
- WeMall微商城源码投票插件Vote的主要源码
WeMall微信商城源码投票插件Vote,用于商城的签到系统,分享了部分比较重要的代码,供技术员学习参考 AdminController.class.php <?php namespace Ad ...
- WeMall微商城源码报名插件Apply的主要源码
WeMall微信商城源码报名插件Apply,用于商城的签到系统,分享了部分比较重要的代码,供技术员学习参考 AdminController.class.php <?php namespace A ...
- 从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)
前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一 ...
- 【krpano】浏览点赞插件1.1(源码+介绍+预览)
插件使用说明详见:http://www.cnblogs.com/reachteam/p/5479068.html 插件更新 1.新增测试模式 用户可以使用uid="test"进行本 ...
随机推荐
- Oracle优化:千万级大表逻辑判断的累赘
insert into pntmall_point_detail(PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT ...
- Postgresql standby(备机只读)环境搭建
下载PostgreSQL源码包,放在任意目录 设置/etc/sysctl.conf,增加以下内容 kernel.shmmni= 4096 kernel.sem =501000 6412800000 5 ...
- FLV格式详解
Overview Flash Video(简称FLV),是一种流行的网络格式.目前国内外大部分视频分享网站都是采用的这种格式. File Structure 从整个文件上开看,FLV是由The FLV ...
- MVC伪一个12306图片验证码
本文的来由主要是满足自己的好奇心,而不是证明什么东西,如果涉及到什么官方性的事情,麻烦通知我谢谢:本篇将要和大家分享的是一个看起来通12306图片验证码相似的效果,这篇应该是今年农历最后一篇分享文章了 ...
- MVC下form表单一次上传多种类型的图片(每种类型的图片可以上传多张)
form表单一次上传多种类型的图片(每种类型的图片可以上传多张) controller中的action方法 public ActionResult UploadImage( ) { in ...
- HNOI2002(伸展树)
营业额统计 Time Limit:5000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu Submit Status ...
- 源码(06) -- java.util.AbstractList<E>
java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- JAVA中的char类型
1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a'; //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=1 ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- 使用HeartBeat实现高可用HA的配置过程详解
一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 ...