// var baseURL = 'https://yq.vchangyi.com/party/phpapi'; //var baseURL = 'http://dsc-b.vchangyi.com/party/phpapi'; var baseURL = 'phpapi' let imgTimer = null; let nameTimer = null; let prizeNoTimer = null; let prizeList = ['五等奖', '四等奖', '三等奖', '二等奖', '一等奖'] // 抽奖页面 let action = { prizeId: '', // 奖项ID userList: [ // 用户列表 { "id": "1", "realname": "张三", "headimg": "./img/mobile/logo.png", "prize_no": "001" }, { "id": "2", "realname": "李四", "headimg": "./img/mobile/dialog_close.png", "prize_no": "002" }, { "id": "3", "realname": "王麻子", "headimg": "./img/mobile/vote_active.png", "prize_no": "003" }, { "id": "4", "realname": "路人甲", "headimg": "./img/mobile/icon_seat.png", "prize_no": "004" } ], currentUser: null, // 当前显示的用户 // 初始化数据 init: function() { let self = this; this.togglePage(true); $('.radio-group .radio-item').on('click', function() { $('.radio-group .radio-item').removeClass('active'); $(this).addClass('active'); self.prizeId = $(this).index() + 1; }); }, // 切换显示页面 togglePage(isInit = true) { let self = this; if (isInit) { $('.select-page').show(); $('.result-page').hide(); } else { $('.select-page').hide(); $('.result-page').css('display', 'flex'); $('.avatar-img, .user-info .scroll-wrap').show(); $('.winner, .winner-name, .winner-no, .result-item').hide(); this.initUserList(); $('.start-btn').show(); $('.stop-btn, .continue-btn').hide(); $('.result-title').html(prizeList[self.prizeId - 1]); } }, // 进入抽奖页面 goLottery: function() { if (!this.prizeId) { this.switchDialog(true); return; } this.togglePage(false); }, // 控制显示弹框 switchDialog: function(isShow) { if (isShow) { $('.dialog').show(); } else { $('.dialog').hide(); } }, initUserList() { let imgStr = ''; let nameStr = ''; let noStr = ''; this.userList.map((user) => { imgStr += '<img class="avatar-item" src="' + user.headimg + '">'; nameStr += '<span class="scroll-item">' + user.realname + '</span>'; noStr += '<span class="scroll-item">' + user.prize_no + '</span>'; }); $('.avatar-list').html(imgStr); $('.user-name .scroll-list').html(nameStr); $('.user-no .scroll-list').html(noStr); let imgListWidth = parseInt($('.avatar-list .avatar-item').css('width')) * this.userList.length + 'px'; $('.avatar-list').css('width', imgListWidth); let nameListWidth = parseInt($('.user-name .scroll-item').css('width')) * this.userList.length + 'px'; $('.user-name .scroll-list').css('width', nameListWidth); let noListWidth = parseInt($('.user-no .scroll-item').css('width')) * this.userList.length + 'px'; $('.user-no .scroll-list').css('width', noListWidth); }, // 开始 start: function(e) { if (this.userList.length === 0) { alert('暂无数据'); return; } $('.start-btn').hide(); $('.continue-btn').hide(); $('.stop-btn').show(); // 开始抽奖动画 imgTimer = this.lotteryAnimation($('.avatar-list'), '.avatar-item', 244); nameTimer = this.lotteryAnimation($('.user-name .scroll-list'), '.scroll-item', 146); prizeNoTimer = this.lotteryAnimation($('.user-no .scroll-list'), '.scroll-item', 146); // 请求抽奖接口 // let award = $('.user-award select').val(); // let url = "/apicp.lottery.php"; // baseRquest.post(url, {award : award}, data =>{ // console.log(data); // if (data.length == 0) { // alert('没有多余的号码可以抽出'); // location.reload(); // } // // 绑定数据到页面 // this.bindData.winner.realname = data.realname; // this.bindData.winner.number = data.user_id; // this.bindData.winner.headimg = data.headimg; // }); }, // 停止 stop: function(e){ // 按钮效果 $('.start-btn').hide(); $('.stop-btn').hide(); $('.continue-btn').show(); // 停止抽奖动画 clearInterval(imgTimer); clearInterval(nameTimer); clearInterval(prizeNoTimer); // 重置位置 $('.winner').show(); $('.avatar-list').css('left', '0'); $('.avatar-img').hide(); $('.winner-name').show(); $('.user-name .scroll-list').css('left', '0'); $('.user-name .scroll-wrap').hide(); $('.winner-no').show(); $('.user-no .scroll-list').css('left', '0'); $('.user-no .scroll-wrap').hide(); this.currentUser = { "id": "1", "realname": "张三", "headimg": "./img/mobile/logo.png", "prize_no": "001" }; // 展示中奖用户 $('.winner .avatar-item').attr('src', this.currentUser.headimg); $('.winner-name').html(this.currentUser.realname); $('.winner-no').html(this.currentUser.prize_no); $('.result-item').show(); // 中奖名单列表重置 }, // 抽奖动画,speed: 每次移动多少像素 lotteryAnimation: function(dom, child, speed) { var i = 0; var interval = 100; // 定时器的速度 dom.append(dom.find(child).eq(0).clone()); var size = dom.find(child).size(); var itemWidth = parseInt($(child).css('width')); dom.css('width', itemWidth * size + 'px'); var timer = setInterval(() => { var left = speed * i; if (left >= itemWidth * (size - 1)) { i = 0; } dom.css('left', -left + 'px'); i += 1; }, interval); return timer; }, // 继续抽奖 reset: function() { $('.radio-group .radio-item').removeClass('active'); this.prizeId = ''; this.currentUser = null; this.togglePage(true); }, winnerListData : null, // 删除中奖用户 delWinner: function(row){ console.log(action.winnerListData); let item = action.winnerListData[row]; let url = "/apicp.DelLottery.php"; baseRquest.post(url, {id : item.id}, data => { action.winnerList(); }); }, // 中奖名单,传入参数:中奖类型(一等,二等),type=2是中奖名单 winnerList:function(){ // 获取中奖者名单, let url = "/apicp.GetUserList.php"; let award = $('.user-award select').val(); baseRquest.get(url, {award : award, type : 2}, data => { this.bindData.lottery.winnerCount = data.length; this.bindData.lottery.award = $('.user-award select').val(); for (let i = 1; i <= data.length; i++) { data[i-1].no = i; } action.winnerListData = data; console.log(data); dataListBind('winner-bind', 'winner', data); }); } } // 系统设置动作 let setting = { //用户数据 userData: null, // 登录 login: function(){ let pwd = $('#pwd').val(); let url = "/apicp.AdminLogin.php"; baseRquest.get(url, {id : pwd}, data => { localStorage['token'] = data.token; alert('登录成功'); }); }, // 登录 loginOut: function(){ localStorage['token'] = ''; alert('已退出'); }, // 用户列表 userList: function(){ let url = "/apicp.GetUserList.php"; baseRquest.get(url, {}, data => { this.userData = data; dataListBind('user-bind', 'user', data); }); }, // 删除用户 delUser: function(row){ console.log(this.userData); let item = this.userData[row]; let url = "/apicp.DelUser.php"; baseRquest.post(url, {id : item.id}, data => { this.userList(); }); }, // 组织更变 editDep: function(row){ console.log(this.userData); let item = this.userData[row]; let url = "/apicp.DelUser.php"; baseRquest.post(url, {id : item.id,dep: 1}, data => { this.userList(); }); }, // 开始签到 startSign: function(row){ let url = "/apicp.Setting.php"; baseRquest.post(url, {flag : 'isStopSign',value: 2}, data => { alert('设置成功'); }); }, // 结束签到 stopSign: function(row){ let url = "/apicp.Setting.php"; baseRquest.post(url, {flag : 'isStopSign',value: 1}, data => { alert('设置成功'); }); }, // 开启投票 startVote: function(row){ let url = "/apicp.Setting.php"; baseRquest.post(url, {flag : 'isStartVote',value: 1}, data => { alert('设置成功'); }); }, // 结束投票 stopVote: function(row){ let url = "/apicp.Setting.php"; baseRquest.post(url, {flag : 'isStartVote',value: 2}, data => { alert('提交成功'); }); }, // 重置数据 resetUser: function(row){ let user = $('#user-id').val(); if (user == '') { return; } let url = "/apicp.ResetUser.php"; baseRquest.post(url, {id : user}, data => { alert('提交成功'); }); } } // 山寨dom数据列表绑定控件,没有实现事件callback // 要求设置容器名称z-for-container,设置循环列数据模板z-for-item // 参数1:容器名称,存放列表数据的容器 2:设置的数据模板 3:json数据 let dataListBind = (container, itemName, data)=>{ let trs = ''; // 获取模板 $('*[z-for-item="'+ itemName +'"]').show(); let trTemplate = $('*[z-for-item="'+ itemName +'"]').prop("outerHTML"); $('*[z-for-item="'+ itemName +'"]').hide(); let trTemplateHide = $('*[z-for-item="'+ itemName +'"]').prop("outerHTML"); for(let i = 0; data.length > i; i++) { // 创建一行dom let tr = trTemplate; // 模板需要赋值项 let forDataItem = $(tr).find("*[z-for-data]"); for(let j = 0; forDataItem.length > j; j++) { let item = $(forDataItem).eq(j).prop("outerHTML"); // 获取dom标签绑定的映射名称 let column = $(forDataItem).eq(j).attr("z-for-data"); let tagName = $(forDataItem)[j].tagName.toLowerCase(); // 列表中的img和input支持直接赋值,其他标签赋值到标签中间 if (tagName == 'img') { $(forDataItem).eq(j).attr('src', data[i][column]); } else if (tagName == 'input') { $(forDataItem).eq(j).val(data[i][column]); } else { $(forDataItem).eq(j).html(data[i][column]); } tr = tr.replace(item,$(forDataItem).eq(j).prop("outerHTML")); } // 事件回调,默认返回当前行对象 let forClickItem = $(tr).find("*[z-for-click]"); for(let x = 0; forClickItem.length > x; x++) { let clickItem = $(forClickItem).eq(x).prop("outerHTML"); let click = $(forClickItem).eq(x).attr("z-for-click"); $(forClickItem).eq(x).attr('onClick', click + "("+ i +")"); tr = tr.replace(clickItem,$(forClickItem).eq(x).prop("outerHTML")); } trs += $(tr).removeAttr('z-for-item').prop("outerHTML"); } $('*[z-for-container="'+ container +'"]').html(trTemplateHide + trs); } // 山寨版双向数据绑定 let doubleBind = ()=>{ // 页面监听,改变的数据写入对象 $(()=>{ $('*[z-for-item]').hide(); $('*[z-bind]').change(function(){ dataBind.bindToData($this); }) }) // 动态数据自动绑定,bindData中的值必须是对象 Object.keys(action.bindData).forEach((key)=>{ Object.keys(action.bindData[key]).forEach((keyKey)=>{ // bind初始值 dataBind.bindToPage(key + '.' + keyKey, action.bindData[key][keyKey]); // 监听这个对象的每个值变化,动态改变页面数据 let value = action.bindData[key][keyKey]; Object.defineProperty(action.bindData[key], keyKey ,{ enumerable: true, configurable: true, get:function (){ //当获取值的时候触发的函数 return value; }, set:function(newValue){ if(value != newValue) { value = newValue } let propertyValue = key + '.' + keyKey; dataBind.bindToPage(propertyValue, newValue); }, }); }) }) } // 双向数据绑定事件 let dataBind = { // 数据动态绑定到页面 bindToPage: (propertyValue, value)=>{ let tag = $('*[z-bind="'+ propertyValue +'"]')[0]; if ($('*[z-bind="'+ propertyValue +'"]').length == 0) { return; } let tagName = $('*[z-bind="'+ propertyValue +'"]')[0].tagName.toLowerCase(); if (tagName == 'img') { $('*[z-bind="'+ propertyValue +'"]').attr('src', value); } else if (tagName == "select" || tagName == "input") { $('*[z-bind="'+ propertyValue +'"]').val(value); } else { $('*[z-bind="'+ propertyValue +'"]').html(value); } }, // 页面数据动态绑定 bindToData: (e)=>{ let dataName = $(e).attr('z-bind'); // 数据格式 z-bind = lottery.winnerCount // lottery为对象名,区分数据组,winnerCount为对象键 let prop = dataName.split('.'); if (prop.length != 2) { console.log('z-data数据格式不正确'); return; } let tagName = $(e)[0].tagName.toLowerCase(); if (tagName == 'img') { action.bindData[prop[0]][prop[1]] = $(e).attr('src'); } else if (tagName == "select" || tagName == "input") { action.bindData[prop[0]][prop[1]] = $(e).val(); } else { action.bindData[prop[0]][prop[1]] = $(e).html(); } } } // 启动双向绑定监听 // $(()=>{doubleBind()}); // api接口数据请求,数据交互引用的axios let baseRquest = { // get请求 get: function(url, params, callback) { let token = localStorage["token"]; axios.defaults.baseURL = baseURL; axios.get(url, { params : params, headers: { 'Content-Type': 'application/x-www-form-urlencoded', token: token } }).then(function (response) { if (response.status == 200) { data = response.data; if (!!data) { // 过滤错误信息,统一抛出 if (data.errcode != 0 && data.errcode != 200) { alert(data.errmsg); } else { callback(data.result); } } }else { alert('get无法访问接口'); } }) .catch(function (error) { }); }, // post请求 post: function(url, params, callback) { let token = localStorage["token"]; axios.defaults.baseURL = baseURL; let data = new URLSearchParams(); Object.keys(params).forEach(function(key){ data.append(key, params[key]); }); axios.post(url, data,{ headers: { 'Content-Type': 'application/x-www-form-urlencoded', token: token } }).then(function (response) { if (response.status == 200) { data = response.data; if (!!data) { // 过滤错误信息,统一抛出 if (data.errcode != 0 && data.errcode != 200) { alert(data.errmsg); } else { callback(data.result); } } }else { alert('post无法访问接口'); } }) .catch(function (error) { console.log(error); }); } }