更新
This commit is contained in:
262
common/js/EscPosUtil.js
Normal file
262
common/js/EscPosUtil.js
Normal file
@@ -0,0 +1,262 @@
|
||||
// 打印机纸宽58mm,页的宽度384,字符宽度为1,每行最多盛放32个字符
|
||||
// 打印机纸宽80mm,页的宽度576,字符宽度为1,每行最多盛放48个字符
|
||||
const PAGE_WIDTH = 576;
|
||||
const MAX_CHAR_COUNT_EACH_LINE = 48;
|
||||
|
||||
//字符串转字节序列
|
||||
function stringToByte(str) {
|
||||
var bytes = new Array();
|
||||
var len, c;
|
||||
len = str.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
c = str.charCodeAt(i);
|
||||
if (c >= 0x010000 && c <= 0x10FFFF) {
|
||||
bytes.push(((c >> 18) & 0x07) | 0xF0);
|
||||
bytes.push(((c >> 12) & 0x3F) | 0x80);
|
||||
bytes.push(((c >> 6) & 0x3F) | 0x80);
|
||||
bytes.push((c & 0x3F) | 0x80);
|
||||
} else if (c >= 0x000800 && c <= 0x00FFFF) {
|
||||
bytes.push(((c >> 12) & 0x0F) | 0xE0);
|
||||
bytes.push(((c >> 6) & 0x3F) | 0x80);
|
||||
bytes.push((c & 0x3F) | 0x80);
|
||||
} else if (c >= 0x000080 && c <= 0x0007FF) {
|
||||
bytes.push(((c >> 6) & 0x1F) | 0xC0);
|
||||
bytes.push((c & 0x3F) | 0x80);
|
||||
} else {
|
||||
bytes.push(c & 0xFF);
|
||||
}
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
//字节序列转ASCII码
|
||||
//[0x24, 0x26, 0x28, 0x2A] ==> "$&C*"
|
||||
function byteToString(arr) {
|
||||
if (typeof arr === 'string') {
|
||||
return arr;
|
||||
}
|
||||
var str = '',
|
||||
_arr = arr;
|
||||
for (var i = 0; i < _arr.length; i++) {
|
||||
var one = _arr[i].toString(2),
|
||||
v = one.match(/^1+?(?=0)/);
|
||||
if (v && one.length == 8) {
|
||||
var bytesLength = v[0].length;
|
||||
var store = _arr[i].toString(2).slice(7 - bytesLength);
|
||||
for (var st = 1; st < bytesLength; st++) {
|
||||
store += _arr[st + i].toString(2).slice(2);
|
||||
}
|
||||
str += String.fromCharCode(parseInt(store, 2));
|
||||
i += bytesLength - 1;
|
||||
} else {
|
||||
str += String.fromCharCode(_arr[i]);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
//居中
|
||||
function Center() {
|
||||
var Center = [];
|
||||
Center.push(27);
|
||||
Center.push(97);
|
||||
Center.push(1);
|
||||
var strCenter = byteToString(Center);
|
||||
return strCenter;
|
||||
}
|
||||
|
||||
//居左
|
||||
function Left() {
|
||||
var Left = [];
|
||||
Left.push(27);
|
||||
Left.push(97);
|
||||
Left.push(0);
|
||||
var strLeft = byteToString(Left);
|
||||
return strLeft;
|
||||
}
|
||||
//居右
|
||||
function Right() {
|
||||
var right = [];
|
||||
Left.push(27);
|
||||
Left.push(97);
|
||||
Left.push(2);
|
||||
var strRight = byteToString(right);
|
||||
return strRight;
|
||||
}
|
||||
//标准字体
|
||||
function Size1() {
|
||||
var Size1 = [];
|
||||
Size1.push(29);
|
||||
Size1.push(33);
|
||||
Size1.push(0);
|
||||
var strSize1 = byteToString(Size1);
|
||||
return strSize1;
|
||||
}
|
||||
//大号字体
|
||||
/* 放大1倍 n = 0
|
||||
* 长宽各放大2倍 n = 17 */
|
||||
function Size2(n) {
|
||||
var Size2 = [];
|
||||
Size2.push(29);
|
||||
Size2.push(33);
|
||||
Size2.push(n);
|
||||
var strSize2 = byteToString(Size2);
|
||||
return strSize2;
|
||||
}
|
||||
|
||||
// 字体加粗
|
||||
function boldFontOn() {
|
||||
var arr = []
|
||||
arr.push(27)
|
||||
arr.push(69)
|
||||
arr.push(1)
|
||||
var cmd = byteToString(arr);
|
||||
return cmd
|
||||
}
|
||||
// 取消字体加粗
|
||||
function boldFontOff() {
|
||||
var arr = []
|
||||
arr.push(27)
|
||||
arr.push(69)
|
||||
arr.push(0)
|
||||
var cmd = byteToString(arr);
|
||||
return cmd
|
||||
}
|
||||
// 打印并走纸n行
|
||||
function feedLines(n = 1) {
|
||||
var feeds = []
|
||||
feeds.push(27)
|
||||
feeds.push(100)
|
||||
feeds.push(n)
|
||||
var printFeedsLines = byteToString(feeds);
|
||||
return printFeedsLines
|
||||
}
|
||||
// 切纸
|
||||
function cutPaper() {
|
||||
var cut = []
|
||||
cut.push(29)
|
||||
cut.push(86)
|
||||
cut.push(49)
|
||||
var cutType = byteToString(cut);
|
||||
return cutType
|
||||
}
|
||||
|
||||
// 开钱箱
|
||||
function open_money_box() {
|
||||
var open = []
|
||||
open.push(27)
|
||||
open.push(112)
|
||||
open.push(0)
|
||||
open.push(60)
|
||||
open.push(255)
|
||||
var openType = byteToString(open)
|
||||
return openType
|
||||
}
|
||||
|
||||
// 初始化打印机
|
||||
function init() {
|
||||
var arr = []
|
||||
arr.push(27)
|
||||
arr.push(68)
|
||||
arr.push(0)
|
||||
var str = byteToString(arr)
|
||||
return str
|
||||
}
|
||||
/*
|
||||
设置左边距
|
||||
len:
|
||||
*/
|
||||
|
||||
function setLeftMargin(len = 1) {
|
||||
var arr = []
|
||||
arr.push(29)
|
||||
arr.push(76)
|
||||
arr.push(len)
|
||||
var str = byteToString(arr)
|
||||
return str
|
||||
}
|
||||
|
||||
// 设置打印区域宽度
|
||||
function setPrintAreaWidth(width) {
|
||||
var arr = []
|
||||
arr.push(29)
|
||||
arr.push(87)
|
||||
arr.push(width)
|
||||
var str = byteToString(arr)
|
||||
return str
|
||||
}
|
||||
|
||||
/**
|
||||
* @param str
|
||||
* @returns {boolean} str是否全是中文
|
||||
*/
|
||||
function isChinese(str) {
|
||||
return /^[\u4e00-\u9fa5]$/.test(str);
|
||||
}
|
||||
|
||||
// str是否全含中文或者中文标点
|
||||
function isHaveChina(str) {
|
||||
if (escape(str).indexOf("%u") < 0) {
|
||||
return 0
|
||||
} else {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 返回字符串宽度(1个中文=2个英文字符)
|
||||
* @param str
|
||||
* @returns {number}
|
||||
*/
|
||||
function getStringWidth(str) {
|
||||
let width = 0;
|
||||
for (let i = 0, len = str.length; i < len; i++) {
|
||||
width += isHaveChina(str.charAt(i)) ? 2 : 1;
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同一行输出str1, str2,str1居左, str2居右
|
||||
* @param {string} str1 内容1
|
||||
* @param {string} str2 内容2
|
||||
* @param {string} fillWith str1 str2之间的填充字符
|
||||
* @param {number} fontWidth 字符宽度 1/2
|
||||
*
|
||||
*/
|
||||
function inline(str1, str2, fillWith = ' ', fontWidth = 1) {
|
||||
const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth;
|
||||
// 需要填充的字符数量
|
||||
let fillCount = lineWidth - (getStringWidth(str1) + getStringWidth(str2)) % lineWidth;
|
||||
let fillStr = new Array(fillCount).fill(fillWith.charAt(0)).join('');
|
||||
return str1 + fillStr + str2;
|
||||
}
|
||||
/**
|
||||
* 用字符填充一整行
|
||||
* @param {string} fillWith 填充字符
|
||||
* @param {number} fontWidth 字符宽度 1/2
|
||||
*/
|
||||
function fillLine(fillWith = '-', fontWidth = 1) {
|
||||
const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth;
|
||||
return new Array(lineWidth).fill(fillWith.charAt(0)).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* 文字内容居中,左右用字符填充
|
||||
* @param {string} str 文字内容
|
||||
* @param {number} fontWidth 字符宽度 1/2
|
||||
* @param {string} fillWith str1 str2之间的填充字符
|
||||
*/
|
||||
function fillAround(str, fillWith = '-', fontWidth = 1) {
|
||||
const lineWidth = MAX_CHAR_COUNT_EACH_LINE / fontWidth;
|
||||
let strWidth = getStringWidth(str);
|
||||
// 内容已经超过一行了,没必要填充
|
||||
if (strWidth >= lineWidth) {
|
||||
return str;
|
||||
}
|
||||
// 需要填充的字符数量
|
||||
let fillCount = lineWidth - strWidth;
|
||||
// 左侧填充的字符数量
|
||||
let leftCount = Math.round(fillCount / 2);
|
||||
// 两侧的填充字符,需要考虑左边需要填充,右边不需要填充的情况
|
||||
let fillStr = new Array(leftCount).fill(fillWith.charAt(0)).join('');
|
||||
return fillStr + str + fillStr.substr(0, fillCount - leftCount);
|
||||
}
|
||||
@@ -14,4 +14,13 @@ export default {
|
||||
storeinvoicelist(data) { //记录
|
||||
return uni.api.post("store/invoicelist", data);
|
||||
},
|
||||
szzpyaddinvoicer(data) { //新增开票人
|
||||
return uni.api.post("szzpy/addinvoicer", data);
|
||||
},
|
||||
szzpytypeofinvoicer(data) { //开票员类型列表
|
||||
return uni.api.post("szzpy/typeofinvoicer", data);
|
||||
},
|
||||
szzpyaddinvoicersendsms(data) { //上传验证码(新增开票员)
|
||||
return uni.api.post("szzpy/addinvoicersendsms", data);
|
||||
},
|
||||
}
|
||||
12
pages.json
12
pages.json
@@ -15,12 +15,24 @@
|
||||
"navigationBarTitleText": "完善商户信息",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/index/drawer",
|
||||
"style": {
|
||||
"navigationBarTitleText": "新增开票员",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/index/notification",
|
||||
"style": {
|
||||
"navigationBarTitleText": "绑定通知",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/index/notificationdd",
|
||||
"style": {
|
||||
"navigationBarTitleText": "绑定通知",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}, {
|
||||
"path": "pages/index/merchant",
|
||||
"style": {
|
||||
|
||||
374
pages/index/drawer.vue
Normal file
374
pages/index/drawer.vue
Normal file
@@ -0,0 +1,374 @@
|
||||
<template>
|
||||
<view class="Box">
|
||||
<view class="Box_box_O">
|
||||
|
||||
<view class="Box_box flex-between">
|
||||
<view>开票员姓名</view>
|
||||
<view class="Box_box_input"><input type="text" v-model="form.taxname" placeholder="请填写开票员姓名"
|
||||
data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>开票员电话</view>
|
||||
<view class="Box_box_input"><input type="text" v-model="form.taxphone" placeholder="请填写开票员电话"
|
||||
data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between" @click="showpicker = true">
|
||||
<view>开票员身份</view>
|
||||
<view class="flex-start">
|
||||
{{form.dlsf_name || ''}}<u-icon name="arrow-right" color="#999999" size="16"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>开票员身份证号</view>
|
||||
<view class="Box_box_input"><input type="text" v-model="form.dlzh" placeholder="请填写开票员身份证号" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>开票员密码</view>
|
||||
<view class="Box_box_input"><input type="text" v-model="form.dlmm" placeholder="请填写开票员密码"
|
||||
data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>验证码</view>
|
||||
<view class="Box_box_input" style="display: flex; justify-content: flex-start;align-items: center;">
|
||||
<input class="Box_box_inpuinputt" type="text" maxlength="6" v-model="form.code" placeholder="验证码"
|
||||
data-key="mobile" />
|
||||
<view class="repeats">
|
||||
<view v-if="showText == true" style="padding: 8rpx;background: #288EFB; border-radius: 15rpx;"
|
||||
@tap="$u.debounce(CodeRegister, 500)">
|
||||
{{ Recapture }}
|
||||
</view>
|
||||
<view v-else
|
||||
style="color: #ccc; background-color: #f9f9f9; padding: 8rpx; border-radius: 15rpx;">
|
||||
{{ second }}s重新发送
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="preservation flex-colum">
|
||||
<!-- <view v-if="form.status == '2'"
|
||||
style="width: 100%; color: #FF2B2B; padding: 28rpx 0;word-wrap: break-word;">
|
||||
拒接原因:({{form.no|| '无'}})</view> -->
|
||||
<view v-if="!codefailed" class="preservation_boxs">提交</view>
|
||||
<view v-else class="preservation_box" @tap="$u.throttle(saveMerchantBaseInfoV2, 1000)">提交</view>
|
||||
|
||||
</view>
|
||||
<u-picker :show="showpicker" :columns="columns" @confirm='confirm' keyName="name"
|
||||
@cancel='showpicker = false'></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import selectaddress from '@/components/yixuan-selectAddress/yixuan-selectAddress.vue';
|
||||
export default {
|
||||
components: {
|
||||
selectaddress
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showpicker: false,
|
||||
disabled: false,
|
||||
Uploadurlnumber: '',
|
||||
namelang: '',
|
||||
merchantAuditStatus: '',
|
||||
columns: [
|
||||
|
||||
],
|
||||
codefailed: false, //验证码是否发送成功
|
||||
store_id: '',
|
||||
// 注册定时器 初始值
|
||||
second: 60,
|
||||
showText: true,
|
||||
Recapture: '发送验证码',
|
||||
form: {
|
||||
store_id: uni.getStorageSync('userId'),
|
||||
dlzh: '',
|
||||
dlmm: '',
|
||||
taxname: '',
|
||||
taxphone: '',
|
||||
code: '',
|
||||
dlsf_name: '',
|
||||
dlsf: ''
|
||||
}
|
||||
};
|
||||
},
|
||||
onLoad(e) {
|
||||
console.log(e.store)
|
||||
let data = uni.getStorageSync('form')
|
||||
},
|
||||
onShow() {
|
||||
this.onShowdata()
|
||||
},
|
||||
methods: {
|
||||
async CodeRegister() {
|
||||
if (this.form.dlzh == null || this.form.dlzh == '') {
|
||||
uni.showToast({
|
||||
title: '请填写电税账号',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.dlmm == null || this.form.dlmm == '') {
|
||||
uni.showToast({
|
||||
title: '请填写电税密码',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.taxname == null || this.form.taxname == '') {
|
||||
uni.showToast({
|
||||
title: '请填写办税员',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.taxphone == null || this.form.taxphone == '') {
|
||||
uni.showToast({
|
||||
title: '请填写办税员电话',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.dlsf == null || this.form.dlsf == '') {
|
||||
uni.showToast({
|
||||
title: '请选择办税员身份',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
let res = await this.api.szzpyaddinvoicer(this.form)
|
||||
if (res.code == 1) {
|
||||
uni.showToast({
|
||||
title: res.message || res.msg,
|
||||
icon: "none",
|
||||
})
|
||||
// 定时器
|
||||
this.showText = false;
|
||||
this.Recapture = '重新获取';
|
||||
var interval = setInterval(() => {
|
||||
let times = --this.second;
|
||||
this.second = times < 10 ? '0' + times : times; //小于10秒补 0
|
||||
}, 1000);
|
||||
setTimeout(() => {
|
||||
clearInterval(interval);
|
||||
this.second = 60;
|
||||
this.showText = true;
|
||||
}, 60000);
|
||||
this.codefailed = true
|
||||
}
|
||||
|
||||
},
|
||||
async saveMerchantBaseInfoV2() {
|
||||
if (this.form.code == null || this.form.code == '') {
|
||||
|
||||
uni.showToast({
|
||||
title: '请填写验证码',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
let res = await this.api.szzpyaddinvoicersendsms(this.form)
|
||||
if (res.code == 1) {
|
||||
uni.showToast({
|
||||
title: res.message || res.msg,
|
||||
icon: "none",
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1500);
|
||||
//请求数电授权
|
||||
// this.szzpyauthorization()
|
||||
}
|
||||
},
|
||||
async szzpyauthorization() {
|
||||
let res = await this.api.szzpyauthorization({
|
||||
store_id: this.store_id
|
||||
})
|
||||
if (res.code == 1) {
|
||||
setTimeout(() => {
|
||||
uni.cache.set('form', '');
|
||||
uni.reLaunch({
|
||||
url: '/pages/index/index'
|
||||
});
|
||||
}, 2000);
|
||||
}
|
||||
},
|
||||
async onShowdata() {
|
||||
let res = await this.api.szzpytypeofinvoicer()
|
||||
console.log(res)
|
||||
this.columns = [res.data]
|
||||
},
|
||||
confirm(e) {
|
||||
this.form.dlsf = e.value[0].id
|
||||
this.form.dlsf_name = e.value[0].name
|
||||
this.showpicker = false
|
||||
},
|
||||
Upload(i) {
|
||||
if (this.disabled) {
|
||||
return false;
|
||||
} else {
|
||||
this.Uploadurlnumber = i;
|
||||
uni.chooseImage({
|
||||
count: 1, //默认9
|
||||
sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album', 'camera'], //从相册选择,和摄像头功能,默认二者都有
|
||||
success: res => {
|
||||
uni.pro.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
var thisimgUrlcaca = res.tempFilePaths[0];
|
||||
var that = this;
|
||||
uni.uploadFile({
|
||||
url: 'https://cashieradmin.sxczgkj.cn' + '/api/qiNiuContent',
|
||||
filePath: thisimgUrlcaca,
|
||||
name: 'file', // 后端接收的文件名
|
||||
header: {
|
||||
userId: uni.cache.get('userId'),
|
||||
token: uni.cache.get('token'),
|
||||
myLoginName: uni.cache.get('myLoginName')
|
||||
},
|
||||
success: res => {
|
||||
console.log(res)
|
||||
var thisdata_ = JSON.parse(res.data);
|
||||
uni.showToast({
|
||||
title: '上传成功',
|
||||
icon: 'none',
|
||||
success: () => {
|
||||
uni.pro.hideLoading();
|
||||
console.log(thisdata_.data[0]);
|
||||
if (this.Uploadurlnumber == 0) {
|
||||
this.$set(this.form,
|
||||
'id_card_straight', thisdata_
|
||||
.data[0])
|
||||
} else if (this.Uploadurlnumber == 1) {
|
||||
this.$set(this.form, 'id_card_reverse',
|
||||
thisdata_.data[0])
|
||||
} else {
|
||||
this.$set(this.form,
|
||||
'business_license', thisdata_
|
||||
.data[0])
|
||||
}
|
||||
console.log(this.form)
|
||||
}
|
||||
});
|
||||
},
|
||||
fail: err => {
|
||||
uni.pro.hideLoading();
|
||||
uni.showToast({
|
||||
title: thisdata_.message || thisdata_.msg,
|
||||
icon: 'none',
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.Box {
|
||||
.Box_box_O {
|
||||
padding: 0 28rpx;
|
||||
|
||||
.Box_box {
|
||||
text-align: right;
|
||||
padding: 24rpx;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
font-size: 28rpx;
|
||||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
|
||||
.Box_box_input {
|
||||
position: relative;
|
||||
width: 60%;
|
||||
|
||||
.Box_box_inpuinputt {
|
||||
padding-right: 15rpx;
|
||||
}
|
||||
|
||||
.repeats {
|
||||
flex: none;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Box_box_T {
|
||||
padding: 0 28rpx;
|
||||
border-top: 16rpx solid #e5e5e5;
|
||||
|
||||
.Box_box_T_o {
|
||||
padding: 28rpx 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.flex-colum {
|
||||
image {
|
||||
width: 396rpx;
|
||||
height: 240rpx;
|
||||
}
|
||||
|
||||
padding-bottom: 16rpx;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
|
||||
.Box_box_Ts {
|
||||
width: 396rpx;
|
||||
height: 240rpx;
|
||||
background: #ffffff;
|
||||
border-radius: 8rpx;
|
||||
border: 2rpx dashed #707070;
|
||||
background: url(@/static/my2.png) no-repeat;
|
||||
background-position: 50% 50%;
|
||||
background-size: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.preservation {
|
||||
width: 100%;
|
||||
padding: 50rpx;
|
||||
|
||||
.preservation_box {
|
||||
width: 70%;
|
||||
height: 72rpx;
|
||||
background: #288efb;
|
||||
text-align: center;
|
||||
line-height: 72rpx;
|
||||
border-radius: 50rpx;
|
||||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.preservation_boxs {
|
||||
width: 70%;
|
||||
height: 72rpx;
|
||||
background: #999999;
|
||||
text-align: center;
|
||||
line-height: 72rpx;
|
||||
border-radius: 50rpx;
|
||||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -16,6 +16,10 @@
|
||||
<image src="@/static/item6.png" mode="aspectFill"></image>
|
||||
<text>绑定通知</text>
|
||||
</view>
|
||||
<view class="content flex-colum" @click="drawer" v-if="improveinformation">
|
||||
<image src="@/static/item5.png" mode="aspectFill"></image>
|
||||
<text>新增开票员</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
@@ -75,6 +79,9 @@
|
||||
},
|
||||
onShow() {},
|
||||
methods: {
|
||||
drawer(){
|
||||
uni.pro.navigateTo('index/drawer');
|
||||
},
|
||||
merchant() {
|
||||
uni.pro.navigateTo('index/merchant');
|
||||
},
|
||||
|
||||
@@ -2,29 +2,29 @@
|
||||
<view class="Box">
|
||||
<view class="Box_box_O">
|
||||
<view class="Box_box flex-between">
|
||||
<view>请填写公司名字</view>
|
||||
<view>公司名字</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled="disabled" v-model="form.title"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="请填写公司名字" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>请填写法人姓名</view>
|
||||
<view>法人姓名</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.legal_person_name"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="请填写法人姓名" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>请填写法人手机号</view>
|
||||
<view>法人手机号</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.phone"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="请填写法人手机号" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>电子税局账号</view>
|
||||
<view>开票员身份证号码</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.dlzh"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="开票员身份证号码" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>电子税局密码</view>
|
||||
<view>开票员税局密码</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.dlmm"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="开票员税局密码" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between" @click="showpicker = true">
|
||||
<view>省份</view>
|
||||
@@ -32,20 +32,26 @@
|
||||
{{form.provinceno_name || ''}}<u-icon name="arrow-right" color="#999999" size="16"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="Box_box flex-between" @click="showpickerdlsf = true">
|
||||
<view>开票员身份</view>
|
||||
<view class="flex-start">
|
||||
{{form.dlsf_name || ''}}<u-icon name="arrow-right" color="#999999" size="16"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>邀请码</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.code"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
<view class="Box_box_input"><input type="text" maxlength="6" :disabled='disabled' v-model="form.code"
|
||||
placeholder="请填写邀请码" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>办税人姓名</view>
|
||||
<view>开票员姓名</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.taxname"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="请填写开票员姓名" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>办税人手机号码</view>
|
||||
<view>开票员手机号码</view>
|
||||
<view class="Box_box_input"><input type="text" :disabled='disabled' v-model="form.taxphone"
|
||||
placeholder="请填写" data-key="mobile" /></view>
|
||||
placeholder="请填写开票员手机号码" data-key="mobile" /></view>
|
||||
</view>
|
||||
<view class="Box_box flex-between">
|
||||
<view>验证码</view>
|
||||
@@ -53,13 +59,12 @@
|
||||
<input class="Box_box_inpuinputt" type="text" v-model="form.verification" placeholder="请填写"
|
||||
data-key="mobile" />
|
||||
<view class="repeats">
|
||||
<view v-if="showText == true"
|
||||
style="padding: 8rpx 0;background: #288EFB; border-radius: 15rpx;"
|
||||
<view v-if="showText == true" style="padding: 8rpx;background: #288EFB; border-radius: 15rpx;"
|
||||
@tap="$u.debounce(CodeRegister, 500)">
|
||||
{{ Recapture }}
|
||||
</view>
|
||||
<view v-else
|
||||
style="color: #ccc; background-color: #f9f9f9; padding: 8rpx 0; border-radius: 15rpx;">
|
||||
style="color: #ccc; background-color: #f9f9f9; padding: 8rpx; border-radius: 15rpx;">
|
||||
{{ second }}s重新发送
|
||||
</view>
|
||||
</view>
|
||||
@@ -99,6 +104,8 @@
|
||||
</view>
|
||||
<u-picker :show="showpicker" :columns="columns" @confirm='confirm' keyName="name"
|
||||
@cancel='showpicker = false'></u-picker>
|
||||
<u-picker :show="showpickerdlsf" :columns="columnsdlsf" @confirm='confirmdlsf' keyName="name"
|
||||
@cancel='showpickerdlsf = false'></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
@@ -110,12 +117,16 @@
|
||||
data() {
|
||||
return {
|
||||
showpicker: false,
|
||||
showpickerdlsf: false,
|
||||
disabled: false,
|
||||
Uploadurlnumber: '',
|
||||
namelang: '',
|
||||
merchantAuditStatus: '',
|
||||
columns: [
|
||||
|
||||
],
|
||||
columnsdlsf: [
|
||||
|
||||
],
|
||||
codefailed: false, //验证码是否发送成功
|
||||
store_id: '',
|
||||
@@ -142,6 +153,7 @@
|
||||
},
|
||||
onLoad(e) {
|
||||
console.log(e.store)
|
||||
this.onShowdatadlsf()
|
||||
let data = uni.getStorageSync('form')
|
||||
console.log(data)
|
||||
// if (data.status == '0') {
|
||||
@@ -166,6 +178,8 @@
|
||||
this.form.provinceno_name = data.provinceno_name
|
||||
this.form.taxname = data.bsryxm
|
||||
this.form.taxphone = data.taxphone
|
||||
this.form.dlsf_name = data.dlsf_name
|
||||
this.form.dlsf = data.dlsf
|
||||
}
|
||||
|
||||
},
|
||||
@@ -237,6 +251,13 @@
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.dlsf == null || this.form.dlsf == '') {
|
||||
uni.showToast({
|
||||
title: '请选择开票员身份',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (this.form.dlmm == null || this.form.dlmm == '') {
|
||||
uni.showToast({
|
||||
title: '请填写电子税局账密码',
|
||||
@@ -339,6 +360,17 @@
|
||||
this.form.provinceno = e.value[0].code
|
||||
this.showpicker = false
|
||||
},
|
||||
confirmdlsf(e) {
|
||||
console.log('confirm', e)
|
||||
this.form.dlsf = e.value[0].id
|
||||
this.form.dlsf_name = e.value[0].name
|
||||
this.showpickerdlsf = false
|
||||
},
|
||||
async onShowdatadlsf() {
|
||||
let res = await this.api.szzpytypeofinvoicer()
|
||||
console.log(res)
|
||||
this.columnsdlsf = [res.data]
|
||||
},
|
||||
Upload(i) {
|
||||
if (this.disabled) {
|
||||
return false;
|
||||
@@ -434,7 +466,7 @@
|
||||
}
|
||||
|
||||
.repeats {
|
||||
width: 280rpx;
|
||||
flex: none;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||||
|
||||
282
pages/index/notificationdd.vue
Normal file
282
pages/index/notificationdd.vue
Normal file
@@ -0,0 +1,282 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- <view class="content_boxtop flex-between">
|
||||
<view class="content_boxtopone">
|
||||
{{datalsit.type}}
|
||||
</view>
|
||||
|
||||
</view> -->
|
||||
<view class="content_boxt_tow" id="printSection" ref="print">
|
||||
<view class="content_boxt_towtext">
|
||||
扫码绑定公众号,将会收到通知
|
||||
</view>
|
||||
<view class="content_boxt_towrelative" style="242px;height: 242px;">
|
||||
<canvas id="qrcode" style="242px;height: 242px;" ref="qrcode" canvas-id="qrcode"></canvas>
|
||||
<image class="content_boxt_towabsolute" src="@/static/icons.png" mode=""></image>
|
||||
</view>
|
||||
<button @click="print">打印</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import uQRCode from '@/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js'; // npm install uqrcodejs
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
text: 'uQRCode',
|
||||
size: 242,
|
||||
datalsit: {},
|
||||
ID: '',
|
||||
resurl: ''
|
||||
};
|
||||
},
|
||||
onLoad(e) {
|
||||
this.ID = e.id
|
||||
this.status = e.status
|
||||
|
||||
},
|
||||
onReady() {
|
||||
setTimeout(() => {
|
||||
uni.$u.debounce(this.storeinvoicelist(), 500)
|
||||
}, 500)
|
||||
},
|
||||
methods: {
|
||||
print() {
|
||||
// const receipt = document.getElementById('receipt');
|
||||
// const printWindow = window.open('', '_blank');
|
||||
// printWindow.document.write(receipt.innerHTML);
|
||||
// printWindow.document.close();
|
||||
// printWindow.focus();
|
||||
// printWindow.print();
|
||||
// printWindow.close();
|
||||
|
||||
window.print({
|
||||
mediaType: 'print',
|
||||
orientation: 'portrait',
|
||||
pageSize: '50mm',
|
||||
printBackground: true,
|
||||
scale: 0.5
|
||||
});
|
||||
},
|
||||
storeinvoicelist() {
|
||||
uni.request({
|
||||
url: uni.conf.baseUrl + 'store/bindinginvopush',
|
||||
data: {
|
||||
//参数
|
||||
store_id: uni.getStorageSync('userId')
|
||||
},
|
||||
method: 'POST', //请求方式,必须为大写
|
||||
success: res => {
|
||||
this.datalsit = res.data.data.qrcode;
|
||||
console.log(this.datalsit)
|
||||
// 获取uQRCode实例
|
||||
var qr = new uQRCode();
|
||||
// 设置二维码内容
|
||||
qr.data = res.data.data.qrcode;
|
||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
||||
qr.size = this.size;
|
||||
// 调用制作二维码方法
|
||||
qr.make();
|
||||
// 获取canvas上下文
|
||||
var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件,this必须传入
|
||||
// 设置uQRCode实例的canvas上下文
|
||||
qr.canvasContext = canvasContext;
|
||||
// 调用绘制方法将二维码图案绘制到canvas上
|
||||
qr.drawCanvas();
|
||||
}
|
||||
});
|
||||
},
|
||||
savealbum(e) {
|
||||
uni.pro.navigateBack();
|
||||
},
|
||||
// savealbum(e) {
|
||||
// // #ifdef APP
|
||||
// uni.showLoading({
|
||||
// //加载框
|
||||
// title: '保存中...',
|
||||
// mask: true
|
||||
// });
|
||||
// var pages = getCurrentPages();
|
||||
// var page = pages[pages.length - 1];
|
||||
// console.log('当前页' + pages.length - 1);
|
||||
// var bitmap = null;
|
||||
// var currentWebview = page.$getAppWebview();
|
||||
// bitmap = new plus.nativeObj.Bitmap('amway_img');
|
||||
// // 将webview内容绘制到Bitmap对象中
|
||||
// currentWebview.draw(
|
||||
// bitmap,
|
||||
// function() {
|
||||
// console.log('截屏绘制图片成功');
|
||||
// bitmap.save(
|
||||
// '_doc/a.jpg', {},
|
||||
// function(i) {
|
||||
// console.log('保存图片成功:' + JSON.stringify(i));
|
||||
// uni.saveImageToPhotosAlbum({
|
||||
// filePath: i.target,
|
||||
// success: function() {
|
||||
// bitmap.clear(); //销毁Bitmap图片
|
||||
// uni.showToast({
|
||||
// title: '保存图片成功',
|
||||
// mask: false,
|
||||
// duration: 1500
|
||||
// });
|
||||
// uni.hideLoading();
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
// function(e) {
|
||||
// console.log('保存图片失败:' + JSON.stringify(e));
|
||||
// }
|
||||
// );
|
||||
// },
|
||||
// function(e) {
|
||||
// console.log('截屏绘制图片失败:' + JSON.stringify(e));
|
||||
// }
|
||||
// );
|
||||
// // #endif
|
||||
// },
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style media="print">
|
||||
@page {
|
||||
size: 56mm 60mm;
|
||||
/* 宽度50mm, 高度100mm */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
body {
|
||||
width: 50px;
|
||||
/* 小票宽度 */
|
||||
height: 60mm;
|
||||
/* 小票宽度 */
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
#printSection {
|
||||
width: 60mm;
|
||||
/* 小票宽度 */
|
||||
height: 60mm;
|
||||
/* 小票高度 */
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 32rpx 28rpx;
|
||||
|
||||
.content_boxtop {
|
||||
padding: 22rpx 16rpx;
|
||||
background: #FFFFFF;
|
||||
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||
|
||||
.content_boxtopone {
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.content_boxtoptow {
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
|
||||
.content_boxt_one {
|
||||
margin-top: 32rpx;
|
||||
padding: 32rpx;
|
||||
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||
background: #FFFFFF;
|
||||
|
||||
.content_boxt_oneone {
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #FF6565;
|
||||
}
|
||||
|
||||
.classvie_item {
|
||||
margin-top: 16rpx;
|
||||
|
||||
.classvie_itemone {
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
font-size: 28rpx;
|
||||
color: #666666;
|
||||
font-style: normal;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.classvie_itemtow {
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
font-size: 28rpx;
|
||||
color: #999999;
|
||||
font-style: normal;
|
||||
text-transform: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content_boxt_tow {
|
||||
margin: 32rpx 0;
|
||||
width: 100%;
|
||||
background: #FFFFFF;
|
||||
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||
padding-bottom: 50rpx;
|
||||
|
||||
.content_boxt_towtext {
|
||||
padding-top: 32rpx;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.content_boxt_towtexts {
|
||||
margin: 50rpx auto 0 auto;
|
||||
width: 558rpx;
|
||||
height: 84rpx;
|
||||
background: #288EFB;
|
||||
border-radius: 50rpx 50rpx 50rpx 50rpx;
|
||||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
font-size: 36rpx;
|
||||
color: #FFFFFF;
|
||||
line-height: 84rpx;
|
||||
text-align: center;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
.content_boxt_towrelative {
|
||||
position: relative;
|
||||
width: 242px;
|
||||
height: 242px;
|
||||
margin: 32rpx auto;
|
||||
|
||||
.content_boxt_towabsolute {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-top: -50rpx;
|
||||
margin-left: -50rpx;
|
||||
border-radius: 16rpx;
|
||||
// transform: translate(-50% -50%);
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
BIN
static/item5.png
Normal file
BIN
static/item5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
2
unpackage/dist/build/web/index.html
vendored
2
unpackage/dist/build/web/index.html
vendored
@@ -1,2 +1,2 @@
|
||||
<!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>发票</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
|
||||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/h5/static/index.2da1efab.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/h5/static/js/chunk-vendors.517faf40.js></script><script src=/h5/static/js/index.b0f06631.js></script></body></html>
|
||||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/h5/static/index.2da1efab.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/h5/static/js/chunk-vendors.ddf13236.js></script><script src=/h5/static/js/index.b3cb82d5.js></script></body></html>
|
||||
Reference in New Issue
Block a user