生成随机编号文件
注意,该功能已经下架。
下架原因:没有适用场景,使用量少。
实现原理:调用接口,在后台生成批量随机号码,保存到 Excel 文件中,然后下载 Excel 文件保存到手机。
技术要点:打开 Excel,保存 Excel。
wxml 文件
<!--pages/rand1/index.wxml-->
<view class="page">
<view class="weui-form">
<form catchsubmit="formSubmit" catchreset="formReset">
<view class="weui-form__text-area">
<h2 class="weui-form__title">生成编号列表</h2>
<view class="weui-form__desc">根据用户选择的生成规则,按照规则生成编号列表并可导出为Excel文件,可以预览生成的数据,也可以将文件分享给用户进行保存。因服务资源有限,目前生成的条目最大数量为1000。可用于自定义编号,自定义随机密码等场景。</view>
</view>
<view class="weui-form__control-area">
<view class="weui-cells__group weui-cells__group_form">
<view class="weui-cells__title">表单</view>
<view class="weui-cells">
<view class="weui-cell weui-cell_active weui-cell_select weui-cell_select-after">
<view class="weui-cell__hd">
<label class="weui-label">生成规则</label>
</view>
<view class="weui-cell__bd">
<picker aria-role="combobox" bindchange="bindPicker2Change" range="{{ruleArr}}">
<view class="weui-select">{{ruleArr[ruleValue]}}</view>
</picker>
</view>
</view>
<view class="weui-cell">{{ruleDescArr[ruleValue]}}</view>
<block wx:if="{{ruleValue == 0 || ruleValue == 1 || ruleValue == 2}}">
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd"><label class="weui-label">长度</label></view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="字符长度" placeholder-class="weui-input__placeholder" type= "number" name="numLength" />
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label">数量</label>
</view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="生成数量" placeholder-class="weui-input__placeholder" type= "number" name="numSize" />
</view>
</view>
</block>
<block wx:elif="{{ruleValue == 3}}">
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd"><label class="weui-label">前缀</label></view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="前缀内容,汉字不超5个" placeholder-class="weui-input__placeholder" name="prev"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label">起始序号</label>
</view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="起始序号" placeholder-class="weui-input__placeholder" type= "number" name="startSeq"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label">截止序号</label>
</view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="截止序号" placeholder-class="weui-input__placeholder" type= "number" name="endSeq" />
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd"><label class="weui-label">后缀</label></view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="后缀内容,汉字不超5个" placeholder-class="weui-input__placeholder" name="suff" />
</view>
</view>
</block>
<block wx:else>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd"><label class="weui-label">前缀</label></view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="前缀内容,汉字不超5个" placeholder-class="weui-input__placeholder" name="prev"/>
</view>
</view>
<view class="weui-cell weui-cell_active weui-cell_select weui-cell_select-after">
<view class="weui-cell__hd">
<label class="weui-label">日期类型</label>
</view>
<view class="weui-cell__bd">
<picker aria-role="combobox" bindchange="bindPicker3Change" range="{{dateArr}}">
<view class="weui-select">{{dateArr[dateValue]}}</view>
</picker>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label">起始序号</label>
</view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="起始序号" placeholder-class="weui-input__placeholder" type= "number" name="startSeq"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd">
<label class="weui-label">截止序号</label>
</view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="截止序号" placeholder-class="weui-input__placeholder" type= "number" name="endSeq"/>
</view>
</view>
<view class="weui-cell weui-cell_active">
<view class="weui-cell__hd"><label class="weui-label">后缀</label></view>
<view class="weui-cell__bd">
<input class="weui-input" placeholder="后缀内容,汉字不超5个" placeholder-class="weui-input__placeholder" name="suff"/>
</view>
</view>
</block>
</view>
</view>
</view>
<view class="weui-form__tips-area">
<view class="weui-form__tips">
{{tips}}
</view>
</view>
<view class="weui-form__opr-area">
<button class="weui-btn weui-btn_default" aria-role="button" formType="reset">重置</button>
<button class="weui-btn weui-btn_primary" aria-role="button" formType="submit">提交生成数据</button>
<button class="weui-btn weui-btn_primary" aria-role="button" bindtap="previewData">预览数据</button>
<button class="weui-btn weui-btn_primary" aria-role="button" bindtap="shareData">分享保存</button>
</view>
</form>
</view>
</view>
wxss 文件
无
js 文件
const utils = require("../../utils/utils.js");
const ohttp = require("../../utils/ostrichHttp")
let serverFileName = ''; // 服务器上的文件路径
let localFileName = ''; // 本地临时文件路径
Page({
/**
* 页面的初始数据
* 规则说明:1,随机纯字符 2,随机纯数字 3,字符加数字
* 4,前缀+起始序号+截止序号+后缀 5,前缀+日期类型+起始序号+截止序号+后缀
*
* 日期类型说明:1 日期 (20130117) 2 日期时间 (20130117154433) 3 时间 (154401)
*/
data: {
tips: '',
numLength: 0,
numSize: 0,
prev: '',
suff: '',
startSeq: 0,
endSeq: 0,
ruleDescArr: ['生成随机纯字符', '生成随机纯数字', '生成随机字符和数字', '生成格式为(前缀+起始序号+截止序号+后缀)', '生成格式为(前缀+日期+起始序号+截止序号+后缀)'],
ruleArr: ['规则1', '规则2', '规则3', '规则4', '规则5'],
ruleValue: 0,
dateArr: ['日期 (20130117)', '日期时间 (20130117154433)', '时间 (154401)'],
dateValue: 0,
ruleType: 1,
dateType: 1,
},
bindPicker2Change(e) {
this.setData({
ruleValue: e.detail.value,
});
},
bindPicker3Change(e) {
this.setData({
dateValue: e.detail.value,
});
},
formSubmit(e) {
const that = this;
let obj = e.detail.value
let rt = Number(that.data.ruleValue) + 1;
if (that.data.ruleValue == 0 || that.data.ruleValue == 1 || that.data.ruleValue == 2) {
if (utils.isEmpty(obj.numLength) || utils.isEmpty(obj.numSize)) {
that.setData({
tips: '请填写长度或数量',
})
// 弹窗错误
wx.showToast({
title: '内容不能为空',
})
return
}
that.setData({
numLength: obj.numLength,
numSize: obj.numSize,
ruleType: rt,
})
} else if (that.data.ruleValue == 3) {
that.setData({
prev: obj.prev,
suff: obj.suff,
startSeq: obj.startSeq,
endSeq: obj.endSeq,
ruleType: rt,
})
} else if (that.data.ruleValue == 4) {
let dt = Number(that.data.dateValue) + 1;
that.setData({
prev: obj.prev,
suff: obj.suff,
startSeq: obj.startSeq,
endSeq: obj.endSeq,
dateType: dt,
ruleType: rt,
})
}
that.genData();
},
formReset(e) {
this.setData({
tips: '',
})
},
sendReq: function (obj) {
const that = this;
ohttp
.httpPost("/genRandomData", obj)
.then((res) => {
if (res.data.code === 1) {
// 设置fileName
that.serverFileName = res.data.data;
ohttp.httpDownloadFile('/files', that.serverFileName).then((res) => {
that.localFileName = res.tempFilePath;
that.setData({
tips: '生成成功',
})
wx.showToast({
title: '生成成功',
})
});
// 广告分数扣分
// that.adFen = that.adFen - 2; // 扣分
// wx.setStorageSync('ad', that.adFen);
} else {
// 生成失败
wx.showToast({
title: '请稍后再试',
})
}
});
},
genData: function () {
const that = this;
switch (that.data.ruleType) {
case 1: case 2: case 3:
if (that.data.numLength > 20) {
that.setData({
tips: '长度最大为20',
})
// 弹窗错误
wx.showToast({
title: '长度最大为20',
})
return
}
if (that.data.numSize > 1000) {
that.setData({
tips: '数量最大为1000',
})
// 弹窗错误
wx.showToast({
title: '数量最大为1000',
})
return
}
let content1 = {
length: that.data.numLength,
size: that.data.numSize,
}
let data1 = JSON.stringify(content1)
let obj1 = {
vtype: that.data.ruleType,
data: data1,
}
that.sendReq(obj1)
break;
case 4:
if (that.data.prev.length > 12 || that.data.suff.length > 12) {
that.setData({
tips: '前后缀长度超过12',
})
// 弹窗错误
wx.showToast({
title: '前后缀长度超过12',
})
return
}
if (that.data.startSeq < 0 || that.data.startSeq > 1000) {
that.setData({
tips: '起始序号超过1000',
})
// 弹窗错误
wx.showToast({
title: '起始序号超过1000',
})
return
}
if (that.data.endSeq < 0 || that.data.endSeq > 1000) {
this.setData({
tips: '截止序号超过1000',
})
// 弹窗错误
wx.showToast({
title: '截止序号超过1000',
})
return
}
if (that.data.startSeq >= that.data.endSeq) {
that.setData({
tips: '起始序号大于截止序号',
})
// 弹窗错误
wx.showToast({
title: '起始序号大于截止序号',
})
return
}
let content4 = {
prev: that.data.prev,
suff: that.data.suff,
startSeq: that.data.startSeq,
endSeq: that.data.endSeq,
}
let data4 = JSON.stringify(content4)
let obj4 = {
vtype: 4,
data: data4,
}
that.sendReq(obj4)
break;
case 5:
if (that.data.prev.length > 12 || that.data.suff.length > 12) {
that.setData({
tips: '前后缀长度超过12',
})
// 弹窗错误
wx.showToast({
title: '前后缀长度超过12',
})
return
}
if (that.data.startSeq < 0 || that.data.startSeq > 1000) {
that.setData({
tips: '起始序号超过1000',
})
// 弹窗错误
wx.showToast({
title: '起始序号超过1000',
})
return
}
if (that.data.endSeq < 0 || that.data.endSeq > 1000) {
that.setData({
tips: '截止序号超过1000',
})
// 弹窗错误
wx.showToast({
title: '截止序号超过1000',
})
return
}
if (that.data.startSeq >= that.data.endSeq) {
that.setData({
tips: '起始序号大于截止序号',
})
// 弹窗错误
wx.showToast({
title: '起始序号大于截止序号',
})
return
}
let content5 = {
prev: that.data.prev,
suff: that.data.suff,
startSeq: that.data.startSeq,
endSeq: that.data.endSeq,
dateType: that.data.dateType,
}
let data5 = JSON.stringify(content5)
let obj5 = {
vtype: 5,
data: data5,
}
that.sendReq(obj5)
break;
}
},
// 下载数据
downloadData: function () {
const that = this;
if (utils.isEmpty(this.serverFileName)) {
this.setData({
tips: '请先生成数据',
})
// 弹窗错误
wx.showToast({
title: '请先生成数据',
})
return
}
if (utils.isEmpty(that.serverFileName)) {
that.setData({
tips: '请先生成数据',
})
// 弹窗错误
wx.showToast({
title: '请先生成数据',
})
return
}
ohttp.httpDownloadFile('/files', that.serverFileName).then((res) => {
// 广告分数扣分
// that.adFen = that.adFen - 2; // 扣分
// wx.setStorageSync('ad', that.adFen);
that.localFileName = res.tempFilePath;
that.setData({
tips: '下载成功',
})
wx.showToast({
title: '下载成功',
})
});
},
// 预览数据
previewData: function () {
const that = this;
if (utils.isEmpty(that.localFileName)){
that.setData({
tips: '请先生成数据',
})
// 弹窗错误
wx.showToast({
title: '请先生成数据',
})
return
}
wx.openDocument({
filePath: that.localFileName,
fileType: 'xlsx',
showMenu: true,
success: function (res) {
console.log('打开文档成功')
}
})
},
// 分享数据
shareData: function () {
const that = this;
if (utils.isEmpty(that.localFileName)) {
that.setData({
tips: '请先生成数据',
})
// 弹窗错误
wx.showToast({
title: '请先生成数据',
})
return
}
// 分享文件
wx.shareFileMessage({
filePath: that.localFileName,
fileName: that.serverFileName,
success() {
console.log('转发成功')
},
fail: console.error,
})
},
})