微信开发记录


目录结构

样式

因为直接用html那一套写按钮分布有点问题,所以这里记录一下,针对button使用如下样式不能生效,不能让按钮根据剩余空间进行伸缩的同时两端对齐

.button-group {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  width: 100%;
}

只能在button外层加一个view块,然后让按钮均分父容器的宽度,让父容器100%宽度,这样可以自适应不同的机型

.button-group {
  display: flex;
}
.accept-view{
  width: 100%;
  margin-right: 3px;
}
.delete-view{
  width: 100%;
  margin-left: 3px;
}
.accept-btn {
  flex: 1;  /*让按钮均分父容器的宽度 */
  margin-top: 5px;
  background-color: #1b9e52;
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 2px 2px;
  font-size: 14px;
  cursor: pointer;
  font-weight: bold;
  box-sizing: border-box;
}
.delete-btn {
  flex: 1; /* 让按钮根据剩余空间进行伸缩 */
  margin-top: 5px;
  background-color: #e74c3c;
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 2px 2px;
  font-size: 14px;
  cursor: pointer;
  font-weight: bold;
  box-sizing: border-box;
}
<view class="button-group" wx:if="{{item.roomKey === null}}">
  <view class="accept-view"><button bindtap="acceptMeeting" data-index="{{index}}" class="accept-btn">通过</button></view>
  <view class="delete-view"><button bindtap="deleteMeeting" data-index="{{index}}" class="delete-btn">拒绝/删除</button></view>
</view>

订阅消息

注意使用箭头函数继承上下文,一定要先通过 requestSubscribeMessage 让用户接受对应模板ID的通知,然后才能发送通知否则会报错 43101 “user refuse to accept the msg rid: 65dfedc2-1365826f-74c2fe74”。

const tmplIds = "ulp2LOvYBDUmi8DE9emL57qxR237fb46_8_fTJBlXPs";//账户变动通知
wx.getSetting({
  withSubscriptions: true,   //  这里设置为true,下面才会返回mainSwitch
  success: (getSettingRes) => {   
    console.log(getSettingRes)
      // 调起授权界面弹窗
      if (getSettingRes.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
          // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
          if(getSettingRes.subscriptionsSetting.itemSettings && getSettingRes.subscriptionsSetting.itemSettings[tmplIds] === 'accept'){   
              console.log('已经接受了消息推送');
          }else{
        // 当用户没有点击 ’总是保持以上选择,不再询问‘  按钮。那每次执到这都会拉起授权弹窗
        wx.showModal({
          title: '提示',
          content:'请授权开通服务通知',
          showCancel: true,
          success: (showModalRes) => {
            console.log(showModalRes)
            if (showModalRes.confirm) {  
              wx.requestSubscribeMessage({   // 调起消息订阅界面
                tmplIds: [tmplIds],
                success: (requestSubscribeMessageRes) => { 
                  console.log('订阅消息 成功 ');
                  console.log(requestSubscribeMessageRes);
                },
                fail: (requestSubscribeMessageErr) => {
                  console.log("订阅消息 失败 ");
                  console.log(requestSubscribeMessageErr);
                }
              })                          
            }
          }
        })
      }
    }else {
      console.log('订阅消息未开启')
    }      
  },
  fail: (getSettingErr) => {
    console.log(getSettingErr);
  },
})

针对多个模板ID的情况,注意这里电脑上调试只显示订阅一个,手机上显示多个

const tmplIds = ["-dSnxVziE5KUX9VluIInFkbMWtbRS3XrGdKpprYo2Cs","FcPVsrCf1xUubE6lHnMu4NUJ_9NgeeMtNWId26um9mg","L4Ggja5tL6J2cVvD4C28afyRGuGzWx4p2j6r1e9mbRQ"];//普通用户接收预约通知
wx.getSetting({
  withSubscriptions: true,   //  这里设置为true,下面才会返回mainSwitch
  success: (getSettingRes) => {   
    console.log(getSettingRes)
    // 调起授权界面弹窗
    if (getSettingRes.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
      // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
        let allAccepted = true; // 假设所有的ID都被接受
        tmplIds.forEach(tmplId => {
            if(!getSettingRes.subscriptionsSetting.itemSettings || getSettingRes.subscriptionsSetting.itemSettings[tmplId] !== 'accept'){   
                allAccepted = false; // 如果有任何一个ID没有被接受,更新allAccepted的状态
            }
        });
      if(allAccepted){   
        console.log('已经接受了消息推送');
      }else{
        // 当用户没有点击 ’总是保持以上选择,不再询问‘  按钮。那每次执到这都会拉起授权弹窗
        wx.showModal({
          title: '提示',
          content:'请授权开通服务通知',
          showCancel: true,
          success: (showModalRes) => {
            console.log(showModalRes)
            if (showModalRes.confirm) {  
              wx.requestSubscribeMessage({   // 调起消息订阅界面
                tmplIds: tmplIds,
                success: (requestSubscribeMessageRes) => { 
                  console.log('订阅消息 成功 ');
                  console.log(requestSubscribeMessageRes);
                },
                fail: (requestSubscribeMessageErr) => {
                  console.log("订阅消息 失败 ");
                  console.log(requestSubscribeMessageErr);
                }
              })                  
            }
          }
        })
      }
    }else {
      console.log('订阅消息未开启')
    }      
  },
  fail: (getSettingErr) => {
    console.log(getSettingErr);
  },
})

订阅消息数据类型

参数类别	参数说明	参数值限制	说明
thing.DATA	事物	20个以内字符	可汉字、数字、字母或符号组合
number.DATA	数字	32位以内数字	只能数字,可带小数
letter.DATA	字母	32位以内字母	只能字母
symbol.DATA	符号	5位以内符号	只能符号
character_string.DATA	字符串	32位以内数字、字母或符号	可数字、字母或符号组合
time.DATA	时间	24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接	例如:15:01,或:2019年10月1日 15:01
date.DATA	日期	年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用“~”符号连接	例如:2019年10月1日,或:2019年10月1日 15:01
amount.DATA	金额	1个币种符号+10位以内纯数字,可带小数,结尾可带“元”	可带小数
phone_number.DATA	电话	17位以内,数字、符号	电话号码,例:+86-0766-66888866
car_number.DATA	车牌	8位以内,第一位与最后一位可为汉字,其余为字母或数字	车牌号码:粤A8Z888挂
name.DATA	姓名	10个以内纯汉字或20个以内纯字母或符号	中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
phrase.DATA	汉字	5个以内汉字	5个以内纯汉字,例如:配送中

发送

发送订阅消息一定不能把api.weixin.com写在前端,否则不能发送,后端接收方法可以采用@RequestBody String jsonData

JAVA将数据写入Word表格

package com.example.comweb.controller;

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class test {
    public static void main(String[] args) {
        try {
            // 加载Word文档
            FileInputStream fis = new FileInputStream("E:\\Code\\Java\\Comweb\\comweb\\src\\main\\java\\com\\example\\comweb\\controller\\5.docx");
            XWPFDocument document = new XWPFDocument(fis);

            // 假设我们要填充的是文档中的第一个表格
            List<XWPFTable> tables = document.getTables();
            if (!tables.isEmpty()) {
                XWPFTable table = tables.get(0); // 获取第一个表格

                // 填充表格的某个单元格,例如第一行第二列(注意:行和列的索引都是从0开始的)
                XWPFTableRow row = table.getRow(0); // 获取第一行
                XWPFTableCell cell = row.getCell(3); // 获取第4列的单元格
                // 清除单元格中的所有段落
                cell.removeParagraph(0);

                // 创建一个新的段落
                XWPFParagraph paragraph = cell.addParagraph();

                // 设置段落为居中对齐(水平居中)
                paragraph.setAlignment(ParagraphAlignment.LEFT);

                // 创建一个运行块
                XWPFRun run = paragraph.createRun();
                run.setText("文字");

                // 设置单元格垂直对齐为居中
                cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
            }

            // 保存修改后的文档
            FileOutputStream out = new FileOutputStream("E:\\Code\\Java\\Comweb\\comweb\\src\\main\\java\\com\\example\\comweb\\controller\\4.docx");
            document.write(out);

            // 关闭资源
            out.close();
            document.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>4.1.2</version>
</dependency>

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>4.1.2</version>
</dependency>

文章作者: Alex Lee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex Lee !
评论
  目录