精华内容
下载资源
问答
  • 使用微信开发者工具实现投票微信小程序,可以实现发布投票功能,亲测可用,适合微信小程序开发者学习使用。
  • 微信小程序投票源码

    2021-08-17 15:57:18
    微信小程序投票系统的源码,还缺后台,可以扫小程序参观,有需要的可以联系 wxml的 <!--pages/creat_vote/creat_vote.wxml--> <!--pages/vote/vote.wxml--> <!--pages/creat_appoint/creat_...

    微信小程序投票系统的源码,还缺后台,可以扫小程序参观,有需要的可以联系

    wxml的

    <!--pages/creat_vote/creat_vote.wxml-->

    <!--pages/vote/vote.wxml-->

    <!--pages/creat_appoint/creat_appoint.wxml-->

    <import src="/pages/mytemplate1/mytemplate1.wxml"/>

    <view class="input-list">

    <view data-name="title" bindtap="changeimge">

      <view class="tem" >

         <image  style="width:100%;height:300rpx;" src="{{hosturl+vote.imgUrls}}" ></image>

      </view>

      <view class="vote-title-mana" data-id="{{idx}}" data-index="{{index}}">

                    <view class="row-box-vote">                 

                      <view class="text" data-index="{{idx}}" data-indexx="{{index}}">换图</view>

                    </view>                 

      </view> 

    </view>

       <view class="input-item">

            <view class="row-box">

              <text class="input-item-label">投票活动标题</text>

            </view>

              <view class="input-item-content">

                <input data-name="vote_name" type="text" data-index="{{idx}}" value="{{vote.Name}}" bindinput='bindinput' placeholder="输入活动名称"></input>

              </view>

        </view>

          <view class="input-item input-item-full">

              <view class="row-box">

               <view class="red-bj" wx:if="{{item.need}}">*</view>

               <view><text class="input-item-label">简介</text></view>

             </view>

              <textarea  data-name="vote_descri" bindinput="bindinput" maxlength="-1" auto-height="true" data-index="{{idx}}" placeholder="活动说话、投票规则等" value="{{vote.Descri}}"></textarea>

            </view>


     

      <!--编辑规则时间点设置--> 

    <view>

     <view class="input-item"> 

      <veiw class="page__title"><text>规则设置</text></veiw>   

       <view class="row-box">           

     <block wx:if="{{!unit_setup.ispart}}">

      <view class="tui-col-5b">

       <view>开始时间:</view>

       <picker data-name="Star_datetime" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">

        <view class="apppoint-pickbox-vote">

          {{vote.Star_datetime}}

        </view>

      </picker>

      </view>

      <view class="tui-col-5b">

       <view>结束时间:</view>

       <picker data-name="End_datetime" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">

        <view class="apppoint-pickbox-vote">

          {{vote.End_datetime}}

        </view>

      </picker>

     </view> 

    </block>   

       <view class="tui-col-5a">

          <view>一天</view>

            <label class="exam-radio">

            <radio data-name="one_date" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.Count_way==1}}"/>

           </label>

           <view>总共</view>

            <label class="exam-radio">

            <radio data-name="all_date" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.Count_way==0}}"/>

           </label>

       </view>  

       

       <view class="tui-col-5a">

         <view>可投票次数:</view>

         <input data-name="Vote_count"  data-index="{{idx}}" class="appoint-input" type="number" value="{{vote.Vote_count}}" bindinput='bindinput'></input>

       </view>      


     

     <view class="tui-col-5a">

       <view>是否显示得票数:</view>

           <label class="checkbox">

            <checkbox data-name="Ishide_Item_VoteTotal" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.Ishide_Item_VoteTotal===1}}"/>

           </label>

      </view>

      <view class="tui-col-5a">

       <view>是否有简介页:</view>

           <label class="checkbox">

            <checkbox data-name="Ishas_Descri" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.Ishas_Descri===1}}"/>

           </label>

      </view>

      

        <view class="tui-col-5a">

           <view>正在进行:</view>

           <label class="checkbox">

            <checkbox data-name="Is_service" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.Is_service===1}}"/>

           </label>

         </view>

         <view class="tui-col-5a">

          <view>单分类</view>

            <label class="exam-radio">

            <radio data-name="onecategory" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.One_or_mult_category==0}}"/>

           </label>

           <view>多分类</view>

            <label class="exam-radio">

            <radio data-name="multcategory" data-index="{{idx}}" bindtap="checkboxchang" checked="{{vote.One_or_mult_category==1}}"/>

           </label>

       </view>  

      </view> 

     </view>

    </view>

      <view>

            <block wx:for='{{vote.Vote_item}}' wx:key='form_field_id' wx:for-item="item" wx:for-index="idx" data-index='{{form_field_id}}'>        

             <template is="{{item.typename}}edit" data="{{item,idx,datetime,hosturl,vote,istemaddress}}"/>     

            </block> 

      </view>       

      <view wx:if="{{vote.One_or_mult_category==1}}"><button type="primary" bindtap="addcategory" style="width:100%;#78C652;">添加分类</button></view>

        <!--模板方式调入机构设置-->

      

    <!--mask-->

    <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if="{{showModalStatus}}"></view>

      <!--content-->

      <!--使用animation属性指定需要执行的动画-->

     <view animation="{{animationData}}" class="drawer_box" wx:if="{{showModalStatus}}">

      <view  class="showwin" data-name="child" bindtap="changeimge">

        <image  style="width:400rpx;height:400rpx;" src="{{hosturl+select_item_child.image_addree}}"></image>

      </view>

                   <view class='listItem'>

                   

                    <view class="input-item">

                       <view class="row-box">           

                       

                          <view class="vote-text"><text>名称:</text></view>

                        <input data-name="item_child.name"  class="vote-title-input" type="text" data-index="{{idx}}" value="{{select_item_child.name}}" bindinput='bindinput' placeholder="输入名称"></input>                 

                    </view>

                    <view class="row-box">

                       <view class="vote-text"><text>机构名称:</text></view>

                     <input data-name="organ_name"  class="vote-title-input" type="text" data-index="{{idx}}" value="{{select_item_child.unit}}" bindinput='bindinput' placeholder="输入名称"></input>                 

                 </view>

                   </view>

                 </view>

                

       <veiw class="row-box2">

       <view data-comname="edit_child" class="btn_ok"  bindtap="powerDrawer" data-statu="close">取消</view>

       <view data-comname="edit_child" class="btn_ok" bindtap="powerDrawer" data-statu="change">确定</view>

      </veiw>

     </view>

     <!--mask-->

    <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if="{{showModalStatus1}}"></view>

      <!--content-->

      <!--提交发布的对话框属性指定需要执行的动画-->

     <view animation="{{animationData1}}" class="drawer_box" wx:if="{{showModalStatus1}}">

      <view class="input-list"> 

                <view class="input-item">

                 <text class="input-item-label">表单标题:</text>

                 

                  

              </view>

              <view class="input-item">

              <view hidden="{{Isfromtemplate}}" class="input-item-content">

                <label class="checkbox">

                 <checkbox value="cb" data-index="{{idx}}" bindtap="istemplatecheck" checked="{{CheckStatus}}"/>作为公共模板提供他人使用

                </label>

              </view>

              <view class="input-item-content">

                <label class="checkbox">

                 <checkbox value="Canmulti" data-index="{{idx}}" bindtap="Canmulti" checked="{{Canmulti}}"/>单个用户可录入多条记录

                </label>

              </view>

              <view class="input-item-content">

                <label class="checkbox">

                 <checkbox value="Isclose" data-index="{{idx}}" bindtap="Isclose" checked="{{Isclose}}"/>停止更改、录入

                </label>

              </view>

              <view class="input-item-content">

                <label class="checkbox">

                 <checkbox value="Isclose" data-index="{{idx}}" bindtap="Canchang" checked="{{Isclose}}"/>提交后数据可修改

                </label>

              </view>

            </view>

          </view>

       <veiw class="row-box2">

       <view data-comname="build" class="btn_ok"  bindtap="powerDrawer" data-statu="close">取消</view>

       <view data-comname="build" class="btn_ok" bindtap="powerDrawer" data-statu="build">确定</view>

      </veiw>

     </view>

         <view class="height_box"></view> 

         <view class="height_box"></view> 

         <view class="height_box"></view> 

         <view class="height_box"></view> 

    </view>

    <view class="height_box"></view> 

    <view class="height_box"></view> 

     <!--底部-->

        <view hidden="{{viewShowed2}}" class="cart-tab-wrp" style='bottom:{{inputBottom}}px'>     

          <view  class="nav-tab-item3 {{selectedcom=='add'?'nav-tab-item_text':''}}" hover-class="navigator-hover" bindtap="testabc"><image  src="{{selectedcom=='add'?'../images/add_02.png':'../images/icon_23.png'}}"></image><text>预  览</text></view> 

        

         

           <view data-comname="build" class="nav-tab-item3  {{selectedcom=='ok'?'nav-tab-item_text':''}}" hover-class="navigator-hover" bindtap="powerDrawer" data-statu="open"><image  src="{{selectedcom=='ok'?'../images/ok_02.png':'../images/ok_01.png'}}"></image><text>提交发布</text></view>     

        </view>



     

    js的

    import mcommon from '../../utils/util'

    var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');

    var qqmapsdk;

    const app = getApp();

    var sysdata=app.globalData.api.sysdata();

    var arrays=[];//为多级下拉框定义

    var fielidex=0;//为多级下拉框定义

    var listseachindex=-1;//下拉搜索框下标

    var datetime=mcommon.formatTime(new Date());

    Date.prototype.format = function (fmt) {

      var o = {

          "M+": this.getMonth() + 1, //月份

          "d+": this.getDate(), //日

          "h+": this.getHours(), //小时

          "m+": this.getMinutes(), //分

          "s+": this.getSeconds(), //秒

          "q+": Math.floor((this.getMonth() + 3) / 3), //季度

          "S": this.getMilliseconds() //毫秒

      };

      if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

      for (var k in o)

          if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

      return fmt;

    }

    //用于时期时间选择控件的方法

    const date = new Date();

    const years = [];

    const months = [];

    const days = [];

    const hours = [];

    const minutes = [];

    //获取年

    for (let i = date.getFullYear(); i <= date.getFullYear() + 1; i++) {

      years.push("" + i);

    }

    //获取月份

    for (let i = 1; i <= 12; i++) {

      if (i < 10) {

        i = "0" + i;

      }

      months.push("" + i);

    }

    //获取日期

    for (let i = 1; i <= 31; i++) {

      if (i < 10) {

        i = "0" + i;

      }

      days.push("" + i);

    }

    //获取小时

    for (let i = 0; i < 24; i++) {

      if (i < 10) {

        i = "0" + i;

      }

      hours.push("" + i);

    }

    //获取分钟

    for (let i = 0; i < 60; i++) {

      if (i < 10) {

        i = "0" + i;

      }

      minutes.push("" + i);

    }


     

    Page({

      /**

       * 页面的初始数据

       */

      data: {

        time: '',

        multiArray: [years, months, days, hours, minutes],

        multiIndex: [0, 9, 16, 10, 17],

        choose_year: '',

        imgUrls_back:"/UploadFiles/2028/img/2021/8/12/d17c80cf2f87418c95fce8e5736a2958_.jpg",

        imgUrls:"/UploadFiles/2028/img/2021/8/12/d75103fb0c5b4af0825a7be73d6d0bdc_.jpg",

        big_imgUrls:"",

        istemaddress:false,

        select_category_index:0,

        select_item_index:0,

        sysuserid:sysdata.sysuserid,

        hosturl:sysdata.hosturl2,

        vote:{

          Idstr:'',

          Organ_no:'1213',

          Userid:0,

          Name:'', 

          Descri:'',

          Star_datetime:'',

          End_datetime:'',//结束时间字符串

          Vote_item:[],//提交时,要转成string

          Ishas_Descri:0,//是否有简介页

          Count_way:1,//一个用户可投票次数,1为每天N次,N为下方列,0为总共N次

          Vote_count:1,//对应上方,可投票次数

          Ishide_Item_VoteTotal:1,//是否显示得票数,默认显示

          Creat_datatime:'',

          Is_needtest:0,//是否需要验证,这个后面再搞了

          Exam_code:'2323',//验证串码,似乎没有用

          QrCodeurl:'112',//二维码地址

          Is_service:1,//1正在进行,,0,停止

          One_or_mult_category:0,//0单分类,1多分类

          Total_item:'',//参选统计

          Total_voted:0,//总投票数

          Total_visited:0,//访问量

          imgUrls_back:"/UploadFiles/2028/img/2021/8/12/d17c80cf2f87418c95fce8e5736a2958_.jpg",

          big_imgUrls_back:"",

          imgUrls:"/UploadFiles/2028/img/2021/8/12/d75103fb0c5b4af0825a7be73d6d0bdc_.jpg",

          big_imgUrls:"",

        },

        vote_item:{

             id:0,

             selected:false,//是否选择,用于上移下移

             typename:'vote',

             name:'',

             one_or_mult:0,//单选或多选,0,单选,1,多选

             maxnum:1,//多选时,最多可选多少个

             has_vote_count:0,//个人用户记录,已经给多少个投了票,这个是对于多选的,只记录当天的

             vote_item_child:[

             ]

        },//大的框架

        vote_item_child:{

          id:0,

          has_voted:false,

          name:'小奶狗',

          name:'小奶狗',

          unit:'光明',//单位

          image_addree:'/sysfile/images/ng1.jpg',//图片地址

          big_image_addree:'/sysfile/images/ng1.jpg',

          descri:'',//简介

          vote_count:0,//得票数

          rank:0,//排名

          exten_mess:'',//预留扩展信息

        },//本地使用,添加到

        select_item_child:{},

      },

      /**

       * 生命周期函数--监听页面加载

       */

      onLoad: function (options) {

        console.log(options)

        var that=this;

        let frompage="";//哪里转过来的,模板还是修改表单

        var conetcode="";

        var voteid =0

         voteid = options.formtableid || decodeURIComponent(options.scene);

        var userinfo=app.globalData.users;

        var userid=userinfo.userid;

        //console.log(userid)

      

        this.setData({

          choose_year: this.data.multiArray[0][0]

        })

        console.log(voteid)

        if(voteid!=="undefined"&&voteid!==0&&voteid!==null)

        {

         

            that.GetVote(voteid);

        }else

        {

          that.vote_sys();

          that.addcategory();

        }   

      },

    //更换页头的图片

    chang_image:function(e)

    {

    },

    async testabc(){

      var that=this;

      var userinfo=app.globalData.users;

      var userid=userinfo.userid;

     // var userid=await that.getuserinfo1();

     console.log(userid);

     if(userid==-1||userid===null||userid==="undefined")

     {

      wx.showModal({

        title: '提示',

        content: '将覆盖已有数据,请输入数据更改较验码!',

        showCancel:true,

        success (res) {

          if (res.confirm) {            

            userid=that.getuserinfo1();     

       }

      }

     })

       

     }

    },

     async getuserinfo1()

      {

        var that=this;

         var userid=-1;

        await app.AnginLogin1();

         wx.showLoading({

          title: '登录中',

         })  

         setTimeout(function () {

          var userinfo=app.globalData.users;

          userid=userinfo.userid;

         

           wx.hideLoading()   

        

         }, 2000)    

        return userid;

      },

     //表投票主表

     async GetVote(voteid)

     {

       var that=this;

       var data={

         "id":voteid

       }

       var url=sysdata.hosturl+'GetVote';

       var backdata= await app.globalData.api.getRequest(url,data);

       console.log(backdata)

       if(backdata.data)

       {   

        

      // var conetcode=backdata.data[0].Idstr;

      that.data.vote=backdata.data.votelist[0]

       

      that.data.vote.Vote_item=JSON.parse(backdata.data.votelist[0].Vote_item)

      

      

       that.setData({

           vote:that.data.vote

         

       })

      // that.getappointlist(conetcode)

     }


     

       console.log(backdata)

     },

      

      //制作serial_no

    getserial_no:function()

    {

      var datetimestr=mcommon.formatTime1(new Date())

      var rannum=mcommon.getRanNum();

      return datetimestr+rannum

    },

      //这个是更新

      add_vote:function(){

        var that = this;

        var userid=-1;

       // var idstr=that.getserial_no();

       var url=sysdata.hosturl+'Vote_change';//这个是去添加的

       // var url1= sysdata.hosturl+'Appoint_change';//这个是去添加的

         

        var userinfo=app.globalData.users;

      //  var twoarray=that.data.twoarray;

         userid=userinfo.userid;

         if(userid==-1)

         {

           userid=that.getuserinfo1();

         }else{

          var datetime=new Date();

          var datetimestr=datetime.format("yyyy-MM-dd hh:mm:ss")

          var vote_item=that.data.vote.Vote_item;

          var Total_item=0;

          for(let i=0;i<vote_item.length;i++)

          {

              Total_item=Total_item+vote_item[i].vote_item_child.length;

          }

      //  var data={}

        var data=that.data.vote;

         

       // data.Idstr=idstr;

        data.Userid=userid;

        data.Total_item=Total_item;

        data.Creat_datatime=datetimestr;

      //  data.Id=0;

        if(data.Name==="")

        {

          wx.showToast({

            title:'标题不能为空',  //标题

            icon: 'success',       //图标 none不使用图标,详情看官方文档

            duration: 2000

        })

        }

        else{

          wx.showModal({

            title: '提示',

            content: '将覆盖已有数据,请输入数据更改较验码!',

            showCancel:true,

            success (res) {

              if (res.confirm) {

                data.Vote_item=JSON.stringify(data.Vote_item) 

                that.postdata9(url,data);

              // that.clearStorage(that.data.formtableid);

           }

          }

         })

        }

        

     //}

     }

    },

    async postdata9(url,data)

    {

      var that=this;

      

      console.log(url)

      console.log(data)

     var backdata= await app.globalData.api.getRequest(url,data);

     console.log(backdata) 

     var  workscomstr="vote"

     if(backdata.data.result=="OK")

     {   

      var senddata={

         formtableid:backdata.data.Id,

         qrcodeurl:backdata.data.QrCodeurl,

         formtabletitle:that.data.vote.Name,

         workscomstr:workscomstr

      }

      

      var url1="../share/share?senddata="+JSON.stringify(senddata);

      wx.showModal({

        title: '提示',

        content: '成功创建表单',

        showCancel:true,

        success (res) {

          if (res.confirm) {

            wx.navigateTo({

              url: url1,

             })

          }

        }

        })

     }

    },

      //初始化

      vote_sys:function(){

        var that=this;

        var now=new Date();

        //parseInt(endtimeStrs [0], 10);

        var month=now.getMonth();

        var day=now.getDate()    

        var hours=now.getHours()

        var minutes=now.getMinutes()

        var seconds=now.getSeconds()

        var nowstr=now.format("yyyy-MM-dd hh:mm:ss")

        that.data.multiIndex= [0, month, day-1, hours, minutes]

        var enddatetime=now

        enddatetime.setDate(now.getDate()+3)

        var enddatetimestr=enddatetime.format("yyyy-MM-dd hh:mm:ss")

        that.data.vote.Star_datetime=nowstr;

        that.data.vote.End_datetime=enddatetimestr;

        var idstr=that.getserial_no();

        that.data.vote.Idstr=idstr;

        that.setData({

          vote:that.data.vote,

          multiIndex:that.data.multiIndex

        })

      },

      //分类上移选择的字段

      item_moveup:function(e)

      {

        var that=this;

        var index=e.currentTarget.dataset.index;

        //var indexx=e.currentTarget.dataset.indexx;

       

        if(index>0)

        {

           that.data.vote.Vote_item.splice(index-1,0,that.data.vote.Vote_item[index])

           that.data.vote.Vote_item.splice(index+1,1)

           that.setData({

            vote:that.data.vote,

            })

        }

      },

      //分类下移

      item_movedown:function(e)

      {

        var that=this;

        var index=e.currentTarget.dataset.index;

       // var indexx=e.currentTarget.dataset.indexx;

       

        if(index<that.data.vote.Vote_item.length-1)

        {

          that.data.vote.Vote_item.splice(index+2,0,that.data.vote.Vote_item[index])

          that.data.vote.Vote_item.splice(index,1)

        that.setData({

          vote:that.data.vote,

         })

       }

      },

      //上移选择的字段

      moveup:function(e)

      {

        var that=this;

        var index=e.currentTarget.dataset.index;

        var indexx=e.currentTarget.dataset.indexx;

       

        if(indexx>0)

        {

           that.data.vote.Vote_item[index].vote_item_child.splice(indexx-1,0,that.data.vote.Vote_item[index].vote_item_child[indexx])

           that.data.vote.Vote_item[index].vote_item_child.splice(indexx+1,1)

           that.setData({

            vote:that.data.vote,

            })

        }

      },

      //下移

      movedown:function(e)

      {

        var that=this;

        var index=e.currentTarget.dataset.index;

        var indexx=e.currentTarget.dataset.indexx;

       

        if(indexx<that.data.vote.Vote_item[index].vote_item_child.length-1)

        {

          that.data.vote.Vote_item[index].vote_item_child.splice(indexx+2,0,that.data.vote.Vote_item[index].vote_item_child[indexx])

          that.data.vote.Vote_item[index].vote_item_child.splice(indexx,1)

        that.setData({

          vote:that.data.vote,

         })

       }

      },

      //确定修改

      change_item:function(){

         var that=this;

         var select_category_index=that.data.select_category_index;

         var select_item_index=that.data.select_item_index;

         that.data.vote.Vote_item[select_category_index].vote_item_child[select_item_index]=JSON.parse(JSON.stringify(that.data.select_item_child))

         that.setData({

             vote:that.data.vote

         }) 

      },

      //弹窗文本框处理

      bindinput:function(e)

    {

      console.log(e)

      var that=this;

        var name=e.currentTarget.dataset.name;

        var index=e.currentTarget.dataset.index;

        switch(name)

          {

              case "vote_name":

              that.data.vote.Name=e.detail.value

              break 

              case "vote_descri":

               that.data.vote.Descri=e.detail.value

              break 

              case "item_child.name":

                that.data.select_item_child.name=e.detail.value

              break         

              case "organ_name":

                that.data.select_item_child.unit=e.detail.value

               break

               case "Vote_count":

                that.data.vote.Vote_count=e.detail.value

                break

              case "maxnum":

                that.data.vote.Vote_item[index].maxnum=e.detail.value

                break   

              case "item_name":

                that.data.vote.Vote_item[index].name=e.detail.value

                break       

          }

      that.setData({

        select_item_child: that.data.select_item_child,

        vote:that.data.vote

      });

    },  

    //接口

    comman:function(fileTemp,name)

    {

      var that=this;

      var temstr=that.data.select_item_child.image_addree;

      var temstr1=that.data.vote.imgUrls;

      switch(name)

      {

        case "child":

          var temstr=that.data.select_item_child.image_addree;

          var data= {

            "filePath":that.data.select_item_child.big_image_addree,

            "Sm_filePath":that.data.select_item_child.image_addree   

             };

          if(temstr!=="/sysfile/images/ng1.jpg")

          {

             that.del_image(fileTemp,data)

          }

          else{

           

            that.uploadImag(fileTemp,name)

          }

          break;

        case "title":

          var temstr1=that.data.vote.imgUrls;

          var data1= {

            "filePath":that.data.vote.big_imgUrls,

            "Sm_filePath":that.data.vote.imgUrls

             };

          if(temstr1!=="/UploadFiles/2028/img/2021/8/12/d75103fb0c5b4af0825a7be73d6d0bdc_.jpg")

          {

             that.del_image(fileTemp,data1,name)

          }

          else{

           

            that.uploadImag(fileTemp,name)

          }

          break;

      }

    },

    //先删除已经在图片

    async del_image(fileTemp,data,name){

      var that=this;

      var  url= sysdata.hosturl+'DeledFilecom';

      

         wx.showLoading({

          title: '上传中',

        });

        console.log(data)

      var backdata=await app.globalData.api.getRequest(url,data);

      wx.hideLoading();

      console.log(backdata); 

      that.uploadImag(fileTemp,name);

    },

    //上传图片

    async  uploadImag(fileTemp,name){

      var that=this;

      var userinfo=app.globalData.users;

      var userid=userinfo.userid;

      var url=sysdata.hosturl+'UploadImageFile?address=img';     

      var data={ 

        "NO":"1234567890",

        "filename":that.data.vote.Name,

        "Userid":userid

    };

      wx.showLoading({

        title: '上传中',

      });

    var backdata=await app.globalData.api.uploadfile(url,fileTemp,data);

    wx.hideLoading();

    console.log("wait comeback");  

    console.log(backdata); 

    var backobj=JSON.parse(backdata.data)

    switch(name)

    {

      case "child":

        that.data.select_item_child.image_addree=backobj.Sm_FilePath;

        that.data.select_item_child.big_image_addree=backobj.FilePath;                       

        that.setData({                    

               select_item_child: that.data.select_item_child,

          });

        break;

      case "title":

        that.data.vote.imgUrls=backobj.Sm_FilePath;

        that.data.vote.big_imgUrls=backobj.FilePath;                       

        that.setData({                    

               vote: that.data.vote,

          });

        break;

    }

    },      

      //更换图片

      changeimge:function(e){

        var that=this;

        console.log(e)

        var name=e.currentTarget.dataset.name;

        wx.chooseImage({  

          count: 1,          

          sizeType: ['original'],

          sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有

            success: function (res) {                // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片

              console.log(res);

              var tempFilesSize = res.tempFiles[0].size;

                 if(tempFilesSize <= 10200000){   //图片小于或者等于5M时 可以执行获取图片

                  var tempFilePaths = res.tempFilePaths;

                  

                 // that.del_image(tempFilePaths[0])

                  that.comman(tempFilePaths[0],name);

                // var temselect_item_child=JSON.parse(JSON.stringify) 

                 

                 }else{    //图片大于2M,弹出一个提示框

                     wx.showToast({

                         title:'上传图片不能大于5M!',  //标题

                         icon:'none'       //图标 none不使用图标,详情看官方文档

                     })

                 }


     

            }

        })

      },

      //编辑项目

      edit_item:function(e){

        var that=this;

        var index=e.currentTarget.dataset.index;

        var comname=e.currentTarget.dataset.comname;

        var indexx=e.currentTarget.dataset.indexx;

        var select_item_child=JSON.parse(JSON.stringify(that.data.vote.Vote_item[index].vote_item_child[indexx]))

        that.setData({

         select_category_index:index,

         select_item_index:indexx,

         select_item_child:select_item_child,

        })

        console.log(that.data.select_category_index,that.data.select_item_index)

        var currentStatu="open"

        this.util(currentStatu,comname)

      },

      //弹窗提示

    powerDrawer: function (e) {

      console.log(e)

      var currentStatu = e.currentTarget.dataset.statu;

      var comname=e.currentTarget.dataset.comname;

      var that = this;

      var userid=-1; 

      var userinfo=app.globalData.users;

       userid=userinfo.userid;

       if(userid==-1)

       {

         userid=that.getuserinfo1();

       }

      

     this.util(currentStatu,comname)

    },

    util: function (currentStatu,comname) {

      var that=this;

      var animation = wx.createAnimation({

      duration: 200,

      timingFunction: "linear",

      delay: 0

      });

      this.animation = animation;

      animation.opacity(0).rotateX(-100).step();

      if(comname==="edit_child"){

        this.setData({

          animationData: animation.export()

         })

      }

      else if(comname==="build")

      {

        this.setData({

          animationData1: animation.export()

         })

      }

    setTimeout(function () 

    {

       animation.opacity(1).rotateX(0).step();

       if(comname==="edit_child"){

        this.setData({

          animationData: animation

         })

      }

      else if(comname==="build")

      {

        this.setData({

          animationData1: animation

         })

      }

      if (currentStatu == "close") 

      {

        this.setData({

       showModalStatus: false,

       showModalStatus1: false

       });

      } 

      if (currentStatu == "build") 

      {

        that.add_vote();

        this.setData({

        showModalStatus1: false

       });

      } 

      if (currentStatu == "change") 

      {

        that.change_item();

        this.setData({

       showModalStatus: false,

      

       });

      } 

    }.bind(this), 200)

    if (currentStatu == "open") {

      if(comname==="edit_child"){

        this.setData({

          showModalStatus: true

         })

      }

      else if(comname==="build")

      {

        this.setData({

          showModalStatus1: true

         })

      }

    }

    },

      //设置的选择框方法

      checkboxchang:function(e){

        var that=this;

        var name=e.currentTarget.dataset.name;

        var index=e.currentTarget.dataset.index;

        switch(name)

          {

              case "Is_one":

              that.data.vote.Vote_item[index].one_or_mult=0

              break         

              case "Is_mult":

              that.data.vote.Vote_item[index].one_or_mult=1

               break

              case "onecategory":

               var cate_count=that.data.vote.Vote_item.length;

               if(cate_count<2)//已经有两个分类的,不可选

               {

                that.data.vote.One_or_mult_category=0

               } 

              break

              case "multcategory":

                that.data.vote.One_or_mult_category=1

              break

              case "one_date":

                that.data.vote.Count_way=1

              break

              case "all_date":

                that.data.vote.Count_way=0

             break

             case "Ishide_Item_VoteTotal":

               that.data.vote.Ishide_Item_VoteTotal=that.data.vote.Ishide_Item_VoteTotal==1?0:1

             break

             case "Ishas_Descri":

              that.data.vote.Ishas_Descri=that.data.vote.Ishas_Descri==1?0:1

            break

            case "Is_service":

              that.data.vote.Is_service=that.data.vote.Is_service==1?0:1

            break

          }

        that.setData({

          vote: that.data.vote

        })

        

      },

      //删除项目

      delitemchild:function(e){

        console.log(e)

        var that=this;

        var index=e.currentTarget.dataset.index;

        var indexx=e.currentTarget.dataset.indexx;

        that.data.vote.Vote_item[index].vote_item_child.splice(indexx,1);

        that.setData({

          vote:that.data.vote

        })

      },

      //增加项目

      additemchild:function(e){

        var that=this;

        var index=e.currentTarget.dataset.index;

        var vote_item_child=JSON.parse(JSON.stringify(that.data.vote_item_child));

        vote_item_child.id=that.getserial_no();

        that.data.vote.Vote_item[index].vote_item_child.push(vote_item_child);

        that.setData({

          vote:that.data.vote

        })

      },

      //删除分类

      delcategory:function(e){

        console.log(e)

        var that=this;

        var index=e.currentTarget.dataset.index;

        var vote_item=JSON.parse(JSON.stringify(that.data.vote_item));

        that.data.vote.Vote_item.splice(index,1);

        that.setData({

          vote:that.data.vote

        })

      },

      //添加分类,

      addcategory:function(){

        var that=this;

        var vote_item_child=that.data.vote_item_child;

        var vote_item=JSON.parse(JSON.stringify(that.data.vote_item));

        var vote=that.data.vote;

        vote_item.vote_item_child=[]

        vote_item_child.id=that.getserial_no()

        vote_item.vote_item_child.push(vote_item_child);

        var vote_item_child2=JSON.parse(JSON.stringify(that.data.vote_item_child));

        vote_item_child2.id=that.getserial_no();

        vote_item.vote_item_child.push(vote_item_child2);

       // vote.Vote_item=[];

        vote_item.id=that.getserial_no();

        vote.Vote_item.push(vote_item);

      //  vote.Vote_item.push(vote_item);

        that.setData({

          vote:vote

        })

      },

      //获取时间日期

      bindMultiPickerChange: function(e) {

        console.log(e)

        var that=this;

        var name=e.currentTarget.dataset.name

        this.setData({

          multiIndex: e.detail.value

        })

        const index = this.data.multiIndex;

        const year = this.data.multiArray[0][index[0]];

        const month = this.data.multiArray[1][index[1]];

        const day = this.data.multiArray[2][index[2]];

        const hour = this.data.multiArray[3][index[3]];

        const minute = this.data.multiArray[4][index[4]];

        // console.log(`${year}-${month}-${day}-${hour}-${minute}`);

        if(name==='Star_datetime')

        {

          that.data.vote.Star_datetime=year + '-' + month + '-' + day + ' ' + hour + ':' + minute+':00'

        

        }

        else if(name==="End_datetime")

        {

          var datestr=year + '-' + month + '-' + day + ' ' + hour + ':' + minute+':00'

          var stardatetime= mcommon.stringToDate(that.data.vote.Star_datetime);

          var enddatetime=mcommon.stringToDate(datestr); 

          if(enddatetime<stardatetime)

          {

            wx.showToast({

              title: '结束日期要大于开始日期',

              icon: 'success',

              duration: 2000

            });      

          } 

          else{

          that.data.vote.End_datetime=datestr;

          }

        }

        this.setData({

          vote: that.data.vote

         })

        // console.log(this.data.time);

      },

      //监听picker的滚动事件

      bindMultiPickerColumnChange: function(e) {

        console.log(e)

        //获取年份

        if (e.detail.column == 0) {

          let choose_year = this.data.multiArray[e.detail.column][e.detail.value];

          console.log(choose_year);

          this.setData({

            choose_year

          })

        }

        console.log('修改的列为', e.detail.column, ',值为', e.detail.value);

        if (e.detail.column == 1) {

          let num = parseInt(this.data.multiArray[e.detail.column][e.detail.value]);

          let temp = [];

          if (num == 1 || num == 3 || num == 5 || num == 7 || num == 8 || num == 10 || num == 12) { //判断31天的月份

            for (let i = 1; i <= 31; i++) {

              if (i < 10) {

                i = "0" + i;

              }

              temp.push("" + i);

            }

            this.setData({

              ['multiArray[2]']: temp

            });

          } else if (num == 4 || num == 6 || num == 9 || num == 11) { //判断30天的月份

            for (let i = 1; i <= 30; i++) {

              if (i < 10) {

                i = "0" + i;

              }

              temp.push("" + i);

            }

            this.setData({

              ['multiArray[2]']: temp

            });

          } else if (num == 2) { //判断2月份天数

            let year = parseInt(this.data.choose_year);

            console.log(year);

            if (((year % 400 == 0) || (year % 100 != 0)) && (year % 4 == 0)) {

              for (let i = 1; i <= 29; i++) {

                if (i < 10) {

                  i = "0" + i;

                }

                temp.push("" + i);

              }

              this.setData({

                ['multiArray[2]']: temp

              });

            } else {

              for (let i = 1; i <= 28; i++) {

                if (i < 10) {

                  i = "0" + i;

                }

                temp.push("" + i);

              }

              this.setData({

                ['multiArray[2]']: temp

              });

            }

          }

          console.log(this.data.multiArray[2]);

        }

        var data = {

          multiArray: this.data.multiArray,

          multiIndex: this.data.multiIndex

        };

        data.multiIndex[e.detail.column] = e.detail.value;

        this.setData(data);

      },

      /**

       * 生命周期函数--监听页面初次渲染完成

       */

      onReady: function () {

      },

      /**

       * 生命周期函数--监听页面显示

       */

      onShow: function () {

      },

      /**

       * 生命周期函数--监听页面隐藏

       */

      onHide: function () {

      },

      /**

       * 生命周期函数--监听页面卸载

       */

      onUnload: function () {

      },

      /**

       * 页面相关事件处理函数--监听用户下拉动作

       */

      onPullDownRefresh: function () {

      },

      /**

       * 页面上拉触底事件的处理函数

       */

      onReachBottom: function () {

      },

      /**

       * 用户点击右上角分享

       */

      onShareAppMessage: function () {

      }

    })

     

    展开全文
  • 公司投票小程序,报名过程中发起人可以随时查看报名数据。也可以快速创建并分享投票微信群和好友
  • 以活动组织者做照片征集、视频征集、投票评选为例,传统的依赖线下人工、邮件、网页等形式做征集、评选活动,过程烦琐且参与者的参与门槛高、互动性差,而通过小程序进行征集评选,人们只需要打开手机微信搜索或扫码...

    ​​        随着微信等新媒体工具的蓬勃兴起,为人们提供了非常丰富的线上交流渠道和网络服务功能。以活动组织者做照片征集、视频征集、投票评选为例,传统的依赖线下人工、邮件、网页等形式做征集、评选活动,过程烦琐且参与者的参与门槛高、互动性差,而通过小程序进行征集评选,人们只需要打开手机微信搜索或扫码即可进入活动界面,便捷度大大提高,评选效果也有效提升,互动性传播性更强。

          今天给大家推荐一款免费又好用的征集工具【fotoo征集一下】小程序,既可以征集照片、视频、音频、文字、文档,还可以直接在线评选,点赞投票;

    一、支持多种类型的征集、投票

           Fotoo征集一下支持:图片征集投票、视频征集投票、音频征集投票、文字征集投票、文档征集投票、照片视频混合征集投票,页面简洁、功能齐全、使用简单;

     

    二、免费无限制

          单个活动参与人数、作品数量、存储空间无限制,不会出现活动搞一半,流量不够了,存储空间不够了这种情况;

    三、参与简单、方式多样

           支持多种方式上传作品:微信扫码、直接微信分享、活动海报、嵌入公众号文章、嵌入公众号菜单栏、嵌入APP等多种方式。

     

    四、多人协作

           支持多人协作管理,组织者一个人忙不过来,可以邀请其他人一起管理活动,分担组织者的工作量,让活动管理更轻松;

     

    五、实时数据跟踪

         【fotoo征集一下】后台有着完善的数据统计功能,征集、投票过程中,可以实时查看活动参与人数,投稿情况,对作品进行审核,参与者的点赞投票数、排名情况,可以实时查看,并且支持导出为Excel文件,方便进行各种数据管理。

         大家可以在微信搜索【征集】,体验一下【fotoo征集一下】,除了视频点赞投票,还支持照片、文字、附件等多种类型的点赞投票。​​​​

    展开全文
  • 投票系统小程序,可以创建投票,发布投票投票结果回收后分析问卷数据并绘制成图形表示出来。
  • 微信小程序投票多选案例

    千次阅读 2019-07-15 09:49:43
    index.wxml <view> <view class="page__hd"> <view class="weui-cells weui-cells_after-title"> <view class="weui-cell weui-cell_input"> ...

    在这里插入图片描述

    • index.wxml
    <view>
        <view class="page__hd">
    
            <view class="weui-cells weui-cells_after-title">
                <view class="weui-cell weui-cell_input">
                    <view class="weui-cell__hd">
                        <view class="weui-label">多选项</view>
                    </view>
                    <view class="weui-cell__bd">
                        <input class="weui-input" placeholder="多选项" bindinput="countInput" value='{{ count }}'/>
                    </view>
                </view>
            </view>
            <view class='member' wx:for = "{{ members}}" wx:for-item = "member" wx:key="*this" data-id="{{ member.id }}" bindtap='click'>
                  <view>
                    <text>{{ member.name  }}</text>
                  <wxs module="tools" src="../../utils/arrayFilter.wxs"></wxs>
                  <image wx-if="{{tools.isInArray(member.id,selecteds) == true}}" class='selected' src="../../imgs/selected.png" mode="cover"></image>
                </view>
            </view>
        </view>
    </view>
    
    • index.js
    const app = getApp()
    
    Page({
      data: {
        members: [
          {
            id : 1,
            name: '雨雨'
          },
          {
            id: 2,
            name: '苏苏'
          },
          {
            id: 3,
            name: '哈哈'
          },
          {
            id: 4,
            name: '嘻嘻'
          },
          {
            id: 5,
            name: '呵呵'
          },
          {
            id: 6,
            name: '兔兔'
          }
    
        ],
        //多选数量
        count: 2,
        //选中项的数组
        selecteds: []
      },
      click: function (e) {
        let id = e.currentTarget.dataset.id;
        let array = this.data.selecteds;
        if (this.isInArray(id, array) == true) {
          console.log('id:' + id +'已经被选中')
        } else {
          //如果数组的长度大于或等于count,则删除数组第一个 并把后面的id添加到数组中
          if (array.length >= this.data.count) {
            //移除数组左边第一位
            array.shift();
          } 
          array.push(id)
        }
    
        this.setData({
          selecteds: array
        })
      },
      //判断元素是否在数组中
      isInArray: function (value, array) {
        for (var i = 0; i < array.length; i++) {
          if (value == array[i]) {
            return true;
          }
        }
        return false;
      },
      //动态设置选中项的值
      countInput: function (e) {
        this.setData({
          count: e.detail.value
        })
      }
    })
    
    
    • index.wxss
    /**index.wxss**/
    .member{
      background-color: white;
      margin-top: 5px;
      padding: 10px;
      font-size: 14px;
      
    }
    
    .selected {
      width: 48rpx;
      height: 48rpx;
      float: right;
    }
    
    • arrayFilter
    var isInArray = function (value, array) {
      for (var i = 0; i < array.length; i++) {
        if (value == array[i]) {
          return true;
        }
      }
      return false;
    }
    
    module.exports = {
      isInArray: isInArray
    }
    

    Demo地址:https://github.com/niezhiliang/selected-many-demo

    展开全文
  • (2)资讯功能:后台录入资讯,在微信小程序评选投票系统的资讯模板展示,用户可以任意 浏览资讯列表和详细信息。 (3)投票报名:用户在登录后,点击菜单“报名”进入报名资料填写,填写要报名的信息, 上传相应的图片...
  • 前言 本教程是基于 “apifm-wxapi” 模块,教你快速实现小程序开发,所以你可能需要先了解以下知识点: 《创建 HelloWorld 项目》 《使用 “apifm-wxapi” 快速开发...《微信小程序登录获取openid及三方token》 功能...

    前言

    本教程是基于 “apifm-wxapi” 模块,教你快速实现小程序开发,所以你可能需要先了解以下知识点:

    《创建 HelloWorld 项目》
    《使用 “apifm-wxapi” 快速开发小程序》
    《免费注册开通后台,获得专属域名》

    本案例中,部分功能,需要用户登录后才能操作,也就是说需要 token 授权,请先了解:

    《微信小程序登录获取openid及三方token》

    功能介绍

    为小程序增加投票功能

    后台添加投票项目、为投票项目增加投票选项,用户即可在小程序上进行投票

    启用模块

    登录 “第一步” 注册的后台,左侧菜单 --> 工厂设置 --> 模块管理

    找到并启用下述模块,然后 F5 刷新一下后台界面,你将可以看到本案例所需的所有功能菜单:

    投票模块

    13379300-c5d3a26e3f10acc0.png
    投票管理

    投票项目可以直接从“预约/报名”模块中直接导入,这样即可实现一些活动的报名-->投票

    《使用 apifm-wxapi 开发微信小程序之预约/报名解决方案》

    后台功能比较简单,操作还是比较人性化的,下面主要介绍一下小程序 apifm-wxapi 的使用:

    apifm-wxapi 方法说明

    投票项目

    WXAPI.voteItems(Object object)
    

    读取所有的投票项目,下面的方法均是针对其中某一个投票项目进行参与

    具体参数详见接口文档

    投票详情

    WXAPI.voteItemDetail(id)
    

    投票项目的详细数据

    拉取当前投票项目的所有投票选项

    同时也将返回后台设置的当前投票项目的扩展属性数据

    我的投票

    WXAPI.myVote(token, voteId)
    

    查看针对 voteId 这个投票项目,我的投票情况

    如果返回 700 ,说明你还没投票,用该方法可用来判断我有没有投票

    我要投票

    WXAPI.vote(token, voteId, items, remark)
    

    投票动作,具体参数说明:

    voteId 上述的投票项目id

    items 选择的投票选项数组,单选的话就一个选项,多选的话就是你选择几个就几个

    remark 投票备注

    查看投票明细

    WXAPI.voteLogs(Object object)
    

    查询某个投票项目所有的参与者名录、以及具体的投票选项

    具体参数详见接口文档

    关于更加详细的参数使用,以及更加高级的进阶使用方法,可以参考api接口文档说明:

    《api接口文档》

    关于 apifm-wxapi 更多的使用方法:

    《apifm-wxapi使用说明》

    本案例Demo代码下载:

    《apifm-wxapi使用Demo程序》

    期待你的进步!
    感谢!

    展开全文
  • 微信小程序-002-投票功能-投票房
  • 微信小程序-000-投票功能-目录概要-2020-8-13
  • 微信小程序-005-投票功能-设置投票

    千次阅读 2020-08-16 09:33:58
    微信小程序-005-投票功能-设置投票-2020-8-16 目录一、wxml二、js pages/tools/vote/setact/setact 一、wxml 投票ID:{{rid}} <button type="danger" bindtap="deleteact">删除</button> 二、js // ...
  • 投票微信小程序源码

    千次阅读 2020-10-11 16:08:15
    微信小程序里搜索:问卷调查统计,翻页如下图中 效果如下图: 服务端源码:http://errornoerror.com/question/1586959663051114/ 如需所有源码可以联系下面微信,免费提供 微信号:eeeeazy ...
  • 微信小程序-006-投票功能-搜索投票-2020-8-16 目录一、wxml二、js pages/tools/vote/searchact/searchact 一、wxml <!--pages/tools/vote/searchact/searchact.wxml--> <form bindsubmit="croom" bindreset...
  • 微信小程序-003-投票功能-新建投票-2020-8-14 目录一、wxml二、js 一、wxml <!--pages/tools/vote/newact/newact.wxml--> <text>\n</text> <text>\n</text> <view class="center...
  • 摘要:微信小程序教程合集、微信小程序开发资源合集、微信小程序DEMO合集、微信小程序商店合集、微信小程序经验合集、微信小程序技巧合集 微信小程序开发工具 5款微信小程序开发工具使用报告 微信小...
  • 微信小程序教程、微信小程序开发资源下载汇总

    千次阅读 多人点赞 2018-11-15 09:22:46
    摘要:微信小程序教程合集、微信小程序开发资源合集、微信小程序DEMO合集、微信小程序商店合集、微信小程序经验合集、微信小程序技巧合集 微信小程序开发工具 5款微信小程序开发工具使用报告...
  • 微信投票小程序

    2018-09-25 10:41:02
    wxapp-survey-demo微信投票小程序,实现投票及计数统计功能
  • 投票系统小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,...
  • 微信小程序-004-投票功能-我的投票-2020-8-16 目录一、wxml二、js pages/tools/vote/myact/myact 一、wxml <!--pages/tools/vote/myact/myact.wxml--> <view wx:for="{{list}}" wx:key="list" > <...
  • 微信小程序DEMO - 投票 本项目目的仅用于微信小程序开发培训,并非真实需求。 项目分为两块: 前端开发,采用微信小程序规范的wxml、wxss、javascript语言开发,源码在app目录; 后端开发采用NAMI框架...
  • 微信小程序-001-投票页面跳转-2020-8-14 目录一、wxml二、js pages.index.indx 一、wxml <text>\n</text> <view bindtap="vote_0"> <button type="default"> <image src="/images/...
  • 微信小程序源码

    2018-05-03 11:31:20
    微信小程序源码微信小程序demo:足球,赛事分析小程序简易导航小程序demo:办公审批小程序Demo:电魔方小程序demo:借阅伴侣微信小程序demo:投票微信小程序demo:健康生活小程序demo:文章列表demo微商城(含微信小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,531
精华内容 1,812
关键字:

微信小程序投票功能

微信小程序 订阅