提交 a1a33940 authored 作者: 刘旭's avatar 刘旭

完成打印功能测试

上级 470cc522
......@@ -16,11 +16,10 @@
)
</script>
</head>
<body>
<page>
<div id="app"><!--app-html--></div>
<script type="module" src="/src/main.ts"></script>
<script src="./src/static/iconfont/iconfont.js"></script>
</body>
</page>
</html>
<style></style>
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -11,7 +11,6 @@
"build:mp-weixin": "uni build -p mp-weixin"
},
"dependencies": {
"@daadad":"sadsadasdasdasdasdasds",
"@dcloudio/uni-app": "3.0.0-alpha-3061620221230002",
"@dcloudio/uni-app-plus": "3.0.0-alpha-3061620221230002",
"@dcloudio/uni-components": "3.0.0-alpha-3061620221230002",
......@@ -27,6 +26,7 @@
"node-sass": "^7.0.1",
"pinia": "^2.0.21",
"pinia-plugin-persistedstate": "^3.1.0",
"text-encoding": "^0.7.0",
"vk-uview-ui": "^1.4.4",
"vue": "^3.2.45",
"vue-i18n": "^9.1.9"
......
<script setup lang="ts">
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
</script>
<style lang="scss" scoped>
@import './static/iconfont/iconfont.css';
@import 'vk-uview-ui/index.scss';
// @import '@/static/iconfont/iconfont.css';
page {
background-color: #f6f6f6;
......
......@@ -7,4 +7,7 @@ export const getMenuList = () => request('/LowCodePlatform/user/getMenuList', 'P
export const getBusinessList = (data: any) => request('/LowCodePlatform/center/business/list', 'GET', data)
export const getMetadataList = () => request('/LowCodePlatform/center/metadata/list', 'GET')
\ No newline at end of file
export const getMetadataList = () => request('/LowCodePlatform/center/metadata/list', 'GET')
// 获取元数据
export const getMetadata = (formId: string) => request('/LowCodePlatform/center/metadata/detail', 'GET', { formId })
\ No newline at end of file
<template>
<u-navbar back-text="" :title="title" :back-icon-name="backIconName" title-color="#000000"
:background="{ background: '#f8f8f8' }">
:background="{ background: '#f8f8f8' }" title-width="400">
<template #right>
<u-icon :name="iconName" :size="44" style="padding: 14rpx 14rpx 14rpx 24rpx;" />
</template>
......@@ -26,10 +26,14 @@ const props = defineProps({
</script>
<style lang = "scss" scoped>
// :deep(.u-line-1) {
// font-weight: normal;
// font-size: 14px;
// }
:deep(.u-line-1) {
font-weight: bold;
font-weight: bold !important;
font-size: 16px !important;
}
// #ifdef APP-PLUS
:deep(.uicon-nav-back:before) {
font-size: 44rpx;
......
import { createSSRApp } from 'vue'
import { broadcastScan } from './utils/scanCode'
import App from './App.vue'
import Model from '@/utils/util'
import uView from 'vk-uview-ui'
import config from '@/utils/config'
import pinia from './store/useStore'
......@@ -10,7 +9,6 @@ import 'virtual:svg-icons-register'
export function createApp() {
const app = createSSRApp(App)
app.config.globalProperties.$baseUrl = config.baseUrl
app.config.globalProperties.$model = Model
app.config.globalProperties.$broadcastScan = broadcastScan
app.use(uView)
app.use(pinia)
......
......@@ -2,7 +2,7 @@
"name" : "pda测试",
"appid" : "__UNI__6D85B85",
"description" : "",
"versionName" : "1.0.0",
"versionName" : "1.0.1",
"versionCode" : "100",
"transformPx" : false,
/* 5+App特有相关 */
......@@ -23,7 +23,8 @@
"modules" : {
"Bluetooth" : {},
"Barcode" : {},
"Geolocation" : {}
"Geolocation" : {},
"Webview-x5" : {}
},
/* 应用发布信息 */
"distribute" : {
......
......@@ -45,6 +45,20 @@
"navigationBarBackgroundColor": "#f6f6f6",
"navigationStyle": "custom"
}
},
{
"path": "pages/blueTooth/index",
"style": {
"navigationBarTitleText": "连接蓝牙",
"navigationBarBackgroundColor": "#f6f6f6"
}
},
{
"path": "pages/blueTooth/printTest",
"style": {
"navigationBarTitleText": "测试标签打印",
"navigationBarBackgroundColor": "#f6f6f6"
}
}
],
"tabBar": {
......
<template>
<view class="card">
<u-row :gutter="12" class="box-list">
<view class="card" v-for="(res, r) in businessList" :key="r">
<block v-for="(item, index) of res" :key="index">
<view style="padding: 10rpx 0; display: flex; flex-direction: row;">
<text style="margin-right: 5rpx; width: 100rpx;">{{ item.label }}</text>
<textl>{{ item.value }}</textl>
</view>
</block>
<!-- <u-row :gutter="12" class="box-list">
<u-col :span="10">
<u-row>
<block v-for="(item, index) in list" :key="index">
<u-col :span="6" class="text-box">
<text class="label">{{ item.label }}</text>
<text class="value">{{ item.value }}</text>
<block v-for="(item, index) of res" :key="index">
<u-col :span="12" class="text-box">
<u-row>
<u-col :span="3" class="label">{{ item.label }}</u-col>
<u-col :span="8" class="value">{{ item.value }}</u-col>
</u-row>
</u-col>
</block>
</u-row>
</u-col>
<u-col :span="1" style="text-align: center;">
<!-- #ifdef APP-PLUS -->
<u-checkbox @change="checkboxChange" v-model="checked" size="17" />
<!-- #endif -->
<!-- #ifdef H5 -->
<u-checkbox @change="checkboxChange" v-model="checked" />
<!-- #endif -->
</u-col>
</u-row>
<u-col :span="1" style="text-align: center;"> -->
<!-- #ifdef APP-PLUS -->
<!-- <u-checkbox @change="checkboxChange" v-model="checked" size="17" /> -->
<!-- #endif -->
<!-- #ifdef H5 -->
<!-- <u-checkbox @change="checkboxChange" v-model="checked" /> -->
<!-- #endif -->
<!-- </u-col>
</u-row> -->
</view>
</template>
<script setup lang='ts'>
import { ref } from 'vue'
let list = [
{ label: '领料单号', value: 'SCLL2023031184' },
{ label: '来源单号', value: '暂无' },
{ label: '备注', value: '林继锋 (样品组)' },
{ label: '创建时间', value: '2023-03-14 13:56:42.797' },
{ label: '创建人', value: '刘国辉' },
{ label: '源单类型', value: '暂无' },
]
const props = defineProps({
businessList: {
type: Array
} as any
})
const checked = ref(false)
......@@ -60,20 +65,20 @@ const checkboxChange = (val: boolean) => {
display: flex;
flex-direction: row;
.text-box {
box-sizing: border-box;
display: flex;
flex-direction: column;
font-size: 14px;
margin-bottom: 10rpx;
// .text-box {
// box-sizing: border-box;
// display: flex;
// flex-direction: row;
// font-size: 14px;
// margin-bottom: 10rpx;
// width: 50%;
.label,
.value {
display: inline-block;
width: 100%;
}
}
// // width: 50%;
// .label,
// .value {
// display: inline-block;
// width: 100%;
// }
// }
}
}
......
<template>
// #ifdef APP-PLUS
<u-form :model="formData" label-width="75" :border-bottom="true">
<!-- <u-form :model="formData" label-width="75" :border-bottom="true">
<u-form-item label="领料单号" prop="oddNumbers">
<u-input v-model="formData.oddNumbers" />
</u-form-item>
......@@ -8,27 +7,24 @@
<u-form-item label="备注" prop="remarks">
<u-input v-model="formData.remarks" />
</u-form-item>
</u-form>
// #endif
// #ifdef H5
<u-form :model="formData" label-width="155" :border-bottom="true">
<u-form-item label="领料单号" prop="oddNumbers">
<u-input v-model="formData.oddNumbers" />
</u-form-item>
<u-line />
<u-form-item label="备注" prop="remarks">
<u-input v-model="formData.remarks" />
</u-form-item>
</u-form>
// #endif
</u-form> -->
<view class="form">
<view v-for="item in metadataList" :key="item.key" class="form-item">
<view class="label">{{ item.label }}</view>
<view class="value">
<input :value="item.options.defaultValue" type="text" :border="false" :placeholder="item.label" />
</view>
</view>
</view>
</template>
<script setup lang='ts'>
import { reactive } from 'vue'
import { ref } from 'vue'
const formData = reactive({
oddNumbers: 'SCLL2023031156',
remarks: ''
const props = defineProps({
metadataList: {
type: Array,
} as any
})
</script>
......@@ -42,4 +38,34 @@ const formData = reactive({
:deep(.u-form-item) {
padding: 0;
}
.form {
width: 100%;
.form-item {
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
border-top: 1rpx solid #cccccc61;
padding: 20rpx 0;
margin-left: 16rpx;
font-size: 14px;
white-space: nowrap;
.label {
// margin-left: 30rpx;
width: 25%;
text-align: end;
}
.value {
flex: 1;
.input-placeholder {
font-size: 14px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<input class="inputSty" v-model="wuValue" :focus="focusType" @blur="setfocus" @confirm="searchWu" placeholder="请扫码"
placeholder-style="font-size:12px" />
<!-- :focus="focusType"
@blur="setfocus"
@confirm="searchWu" -->
<input class="inputSty" v-model="props.inputValue" placeholder="请扫码" placeholder-style="font-size:12px" />
</template>
<script setup lang="ts">
import { ref, nextTick } from "vue";
import { onLoad, onUnload, onHide, onBackPress } from "@dcloudio/uni-app";
// import { ref, nextTick } from 'vue';
// import { onLoad, onUnload, onHide, onBackPress } from '@dcloudio/uni-app';
const focusType = ref(true)
// const focusType = ref(false);
const wuValue = ref()
// const wuValue = ref();
//只要操作代码在这里
const keypress = (e: any) => {
console.log(e, "按键码");
// 102 左侧 103 右侧 104 中间按键
if (e.keyCode === 102 || e.keyCode === 103 || e.keyCode === 104) {
//这里按键成功
const props = defineProps({
inputValue: {
type: String,
default: ''
}
})
if (e.keyCode == 66) { //enter按键
//这里input已经拿到数据了,在这里把拿到的数据,通过接口数据联调起来
// const emits = defineEmits(['input-change']);
}
}
// //只要操作代码在这里
// const keypress = async (e: any) => {
// console.log(e, '按键码');
// // focusType.value = true
// nextTick(() => (focusType.value = true));
// // 102 左侧 103 右侧 104 中间按键
// if (e.keyCode === 102 || e.keyCode === 103 || e.keyCode === 104) {
// //这里按键成功
// focusType.value = false;
// }
onLoad((val) => {
// #ifdef APP-PLUS
plus.key.addEventListener("keyup", keypress);
// #endif
// #ifdef H5
document.addEventListener("keyup", keypress);
// #endif
})
// if (e.keyCode == 66) {
// //enter按键
// //这里input已经拿到数据了,在这里把拿到的数据,通过接口数据联调起来
onUnload(() => {
// #ifdef APP-PLUS
plus.key.removeEventListener("keyup", keypress);
// #endif
// #ifdef H5
document.removeEventListener("keyup", keypress);
// #endif
})
// // console.log(wuValue.value, '66');
// nextTick(() => (focusType.value = false));
// }
onHide(() => {
// #ifdef APP-PLUS
plus.key.removeEventListener("keyup", keypress);
// #endif
// #ifdef H5
document.removeEventListener("keyup", keypress);
// #endif
})
onBackPress(() => {
// #ifdef APP-PLUS
plus.key.removeEventListener("keyup", keypress);
// #endif
// #ifdef H5
document.removeEventListener("keyup", keypress);
// #endif
})
// if (e.keyCode == 13) {
// //enter按键
// //这里input已经拿到数据了,在这里把拿到的数据,通过接口数据联调起来
// // emits('input-change', wuValue.value)
// focusType.value = false;
// }
// };
// onLoad(() => {
// // #ifdef APP-PLUS
// plus.key.addEventListener('keyup', keypress);
// // #endif
// // #ifdef H5
// document.addEventListener('keyup', keypress);
// // #endif
// focusType.value = true;
// });
// onUnload(() => {
// // #ifdef APP-PLUS
// plus.key.removeEventListener('keyup', keypress);
// // #endif
// // #ifdef H5
// document.removeEventListener('keyup', keypress);
// // #endif
// });
//解决焦点自动丢失,无法再次自动聚焦
const setfocus = () => {
focusType.value = false
nextTick(() => {
focusType.value = true
})
}
const searchWu = () => {
//这里是调接口,传递数据,等一些列操作
}
// onHide(() => {
// // #ifdef APP-PLUS
// plus.key.removeEventListener('keyup', keypress);
// // #endif
// // #ifdef H5
// document.removeEventListener('keyup', keypress);
// // #endif
// });
// onBackPress(() => {
// // #ifdef APP-PLUS
// plus.key.removeEventListener('keyup', keypress);
// // #endif
// // #ifdef H5
// document.removeEventListener('keyup', keypress);
// // #endif
// });
// //解决焦点自动丢失,无法再次自动聚焦
// const setfocus = () => {
// focusType.value = false;
// nextTick(() => {
// focusType.value = true;
// });
// };
// const searchWu = () => {
// //这里是调接口,传递数据,等一些列操作
// console.log(wuValue.value, 'confirm');
// };
</script>
<style lang = "scss" scoped>
</style>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<vk-header :title="title" back-icon-name="nav-back" />
<form-list-item @tap="toDetail" />
<form-list-item :business-list="businessList" />
</template>
<script setup lang='ts'>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app';
import { onLoad, onShow } from '@dcloudio/uni-app';
import { getBusinessList } from '@/api/apply'
import { useFormData } from '@/store/modules/formData';
import { sLoading, hLoading } from '@/utils/util'
import vkHeader from '@/components/header/index.vue'
import FormListItem from './component/FormListItem.vue';
const title = ref('')
const store = useFormData()
const pageData = ref()
const businessList = ref([] as any[])
onLoad(async (options: any) => {
const option = JSON.parse(options.data)
// console.log(option);
const { permTag: formId, subSystem, title: t } = option
title.value = t
onLoad(async () => {
const { subSystem, permTag: formId } = JSON.parse(uni.getStorageSync('pageData'))
const { data: res } = await getBusinessList({ formId, subSystem })
sLoading()
if (res.code === 200) handleLoadData(res.data)
})
const handleLoadData = (data: any) => {
console.log(data);
let list: any[] = []
data.dataList.map((item: any) => {
let arr = [] as any
data.fieldList.map((field: any) => {
let obj = {} as any
for (const d in item) {
if (field.key === d) {
list.push({
})
obj.label = field.fieldName
obj.value = item[d]
arr.push(obj)
}
}
})
businessList.value.push(arr)
})
hLoading()
}
const toDetail = () => {
uni.navigateTo({ url: '/pages/apply/formDetail' })
}
onShow(() => {
pageData.value = JSON.parse(uni.getStorageSync('pageData') as any)
title.value = pageData.value.title
})
</script>
<style lang = "scss" scoped>
......
......@@ -2,7 +2,7 @@
<vk-header :title="title" back-icon-name="nav-back" />
<view class="header">
<view class="scan-input">
<scanInput />
<scanInput :inputValue="inputValue" />
<!-- #ifdef APP-PLUS -->
<u-icon name="scan" size="22" style="padding: 14rpx" />
<!-- #endif -->
......@@ -12,46 +12,35 @@
</view>
<view style="text-align: right;">
<!-- #ifdef APP-PLUS -->
<u-icon name="list" size="22" style="padding: 14rpx" />
<u-icon name="list" size="22" style="padding: 14rpx" @tap="sheetShow = true" />
<!-- #endif -->
<!-- #ifdef H5 -->
<u-icon name="list" size="44" style="padding: 14rpx" />
<u-icon name="list" size="44" style="padding: 14rpx" @tap="sheetShow = true" />
<!-- #endif -->
</view>
</view>
<!-- rgb(218,222,224) -->
<view class="line" />
<view class="detail-content">
<view v-show="show">
<block v-for="item in list">
<view class="detail-content" v-for="(item, i) in list" :key="i">
<view v-show="item.show">
<block v-for="res in item.dataList" :key="res.label">
<view class="list">
<view class="label">{{ item.label }}</view>
<view class="value">{{ item.value }}</view>
<view class="label">{{ res.label }}</view>
<view class="value">{{ res.value }}</view>
</view>
</block>
<view class="label1">规格:</view>
<view class="specifications">
<u-row :gutter="12">
<u-col v-for="item in specList" :span="5.5" style="white-space: nowrap;">
<view class="list">
<view class="label">{{ item.label }}</view>
<view class="value">{{ item.value }}</view>
</view>
</u-col>
</u-row>
</view>
</view>
<view class="footer">
<view>
<view @tap="
() => {
show = !show;
if (show) scanIcon = 'arrow-up-fill';
else scanIcon = 'arrow-down-fill';
item.show = !item.show;
if (item.show) item.scanIcon = 'arrow-up-fill';
else item.scanIcon = 'arrow-down-fill';
}
">
<u-icon :name="scanIcon"></u-icon>
<u-icon :name="item.scanIcon"></u-icon>
关闭扫描详情
</view>
</view>
......@@ -60,37 +49,155 @@
</view>
<view class="footer-form">
<detail-form />
<detail-form :metadataList="metadataList" />
</view>
<!-- 保存 -->
<view class="aside-save">
<!-- #ifdef APP-PLUS -->
<u-icon name="checkmark-circle" size="22" style="padding: 14rpx" @tap="sheetShow = true" />
<!-- #endif -->
<!-- #ifdef H5 -->
<u-icon name="checkmark-circle" size="44" style="padding: 14rpx" color="#2979ff" @tap="modelData.show = true" />
<!-- #endif -->
</view>
<!-- #ifdef APP-PLUS -->
<qs-scanlistener v-if="scanFlag" ref="scanRef" @scan="handleInput"></qs-scanlistener>
<!-- #endif -->
<u-action-sheet :list="sheetList" v-model="sheetShow" @click="sheetClick" />
<u-modal v-model="modelData.show" :content="modelData.content" show-cancel-button @confirm="modelConfirm" />
</template>
<script setup lang="ts">
import { ref, nextTick } from 'vue';
import { nextTick, ref } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import { getMetadata } from '@/api/apply';
import { getBusinessList } from '@/api/apply'
import vkHeader from '@/components/header/index.vue';
import detailForm from './component/detailForm.vue';
import scanInput from './component/scanInput.vue'
const title = ref('业务组');
const show = ref(true);
const scanIcon = ref('arrow-up-fill');
const list = ref([
{ label: '备料单号:', value: 'RQ202303140551' },
{ label: '来源单号:', value: ' Z23027438-1' },
{ label: '物料编码:', value: '21.32092' },
{ label: '助记码:', value: 'RD020V3-201' },
{ label: '物料名称:', value: '镜座' },
{ label: '助记码:', value: 'RQ202303140551' },
]);
const specList = ref([
{ label: '仓库:', value: '装配仓' },
{ label: '储位:', value: '5F-A06-21-1' },
{ label: '需求:', value: '2304' },
{ label: '应发:', value: '2350.08' },
{ label: '数量:', value: '0.000' },
]);
const pageData = ref()
const title = ref();
const scanRef = ref();
const scanFlag = ref(true);
// const show = ref(true);
// const scanIcon = ref('arrow-up-fill');
const inputValue = ref('');
const sheetList = ref([
{ text: '查询' },
{ text: '撤销' },
])
const modelData = ref({
content: '确认提交?',
show: false
})
const sheetShow = ref(false)
const list = ref([] as any);
const handleInput = async (e: any) => {
console.log(e, 'e');
nextTick(() => {
inputValue.value = e
scanFlag.value = false
})
const { subSystem, permTag: formId } = JSON.parse(uni.getStorageSync('pageData'))
const { data: res } = await getBusinessList({ formId, subSystem })
if (res.code === 200) {
const { dataList, fieldList } = res.data
let obj = {
dataList: [],
show: true,
scanIcon: 'arrow-up-fill'
} as any
for (const key in dataList[0]) {
fieldList.map((item: any) => {
if (item.key === key) {
obj.dataList.push({
label: item.fieldName,
value: dataList[0][key],
})
}
})
}
list.value.push(obj)
nextTick(() => {
inputValue.value = ''
scanFlag.value = true
})
}
}
const sheetClick = (index: number) => {
switch (index) {
case 0:
console.log('查询');
uni.navigateTo({ url: '/pages/apply/formDataPage' })
break;
case 1:
console.log('撤销');
break;
}
}
const modelConfirm = () => {
alert('提交成功')
}
onShow(() => {
pageData.value = JSON.parse(uni.getStorageSync('pageData') as any)
title.value = pageData.value.title
init()
})
const metadata = ref()
const metadataList = ref([] as any)
// visibility mobile_list_visible
const init = async () => {
const { data: res } = await getMetadata(pageData.value.permTag)
if (res.code === 200) {
metadata.value = JSON.parse(res.data.formJson)
const list = JSON.parse(JSON.stringify(metadata.value.list))
await filterList(list).forEach((item: any) => {
if (item.columns) metadataList.value = [...metadataList.value, ...item.columns[0].list]
if (item.detailColumns)
item.detailColumns[0].list.forEach((res: any) => {
if (res.columns) metadataList.value = [...metadataList.value, ...res.columns[0].list]
if (res.detailColumns)
item.columns[0].list.forEach((res1: any) => {
if (res1.columns) metadataList.value = [...metadataList.value, ...res1.columns[0].list]
})
})
if (!item.columns && !item.detailColumns) metadataList.value = [...metadataList.value, item]
})
// console.log(metadataList.value);
}
}
const filterList = (list: any[]) => {
let mobileList = [] as any[];
const recursiveFilter = (item: any) => {
if (item.columns)
item.columns[0].list.map((res: any) => {
if (res.options.visibility && res.options.visibility.indexOf("mobile_form_visible") !== -1)
mobileList = [...mobileList, res];
});
if (item.detailColumns)
item.detailColumns[0].list.forEach((res: any) => {
recursiveFilter(res);
});
if (item.options.visibility && item.options.visibility.indexOf("mobile_form_visible") !== -1)
mobileList = [...mobileList, item];
};
list.forEach((item) => recursiveFilter(item))
return mobileList;
};
</script>
<style lang="scss" scoped>
......@@ -101,7 +208,7 @@ const specList = ref([
align-items: center;
.scan-input {
width: 80%;
width: 88%;
box-sizing: border-box;
display: flex;
justify-content: space-between;
......@@ -111,7 +218,7 @@ const specList = ref([
padding: 0 20rpx;
input {
width: 80%;
width: 88%;
}
}
}
......@@ -136,6 +243,7 @@ const specList = ref([
.label {
width: 200rpx;
text-align: right;
margin-right: 20rpx;
}
.value {}
......@@ -179,11 +287,34 @@ const specList = ref([
.footer-form {
box-sizing: border-box;
// position: fixed;
// bottom: 0;
position: fixed;
bottom: 0;
z-index: 999;
width: 100%;
padding: 0 20rpx;
border-top: 1rpx solid #ccc;
border-bottom: 1rpx solid #ccc;
background-color: #ffffff;
}
.aside-save {
position: fixed;
right: 0;
top: 76%;
/* #ifdef APP-PLUS */
width: 100rpx;
height: 120rpx;
line-height: 80rpx;
padding: 6rpx 0 6rpx 6rpx;
border-bottom-left-radius: 30%;
border-top-left-radius: 30%;
/* #endif */
/* #ifdef H5 */
width: 80rpx;
height: 84rpx;
line-height: 80rpx;
padding: 6rpx 0 6rpx 6rpx;
border-bottom-left-radius: 30%;
border-top-left-radius: 30%;
/* #endif */
background-color: #dbf1e1;
box-sizing: border-box;
}
</style>
<template>
<block v-for="res in menuList" :key="res.path">
<view class="card" v-show="res.children?.length">
<h3 class="card-text">{{ res.title }}</h3>
<u-grid :col="4" :border="false">
<u-grid-item v-for="item in res.children" :custom-style="{ 'text-align': 'center' }"
@tap="tapGridItem(item)">
<!-- <svg-icon name="dayin" /> -->
<i class="iconfont icon-dayin" style="color: pink;"></i>
<!-- <svg-icon name="dayin" /> -->
<!-- <i class="iconfont">&#xe609;</i> -->
<view class="grid-text">{{ item.title }}</view>
</u-grid-item>
</u-grid>
</view>
</block>
<block v-for="res in menuList" :key="res.path">
<view class="card" v-show="res.children?.length">
<h3 class="card-text">{{ res.title }}</h3>
<u-grid :col="4" :border="false">
<u-grid-item
v-for="item in res.children"
:custom-style="{ 'text-align': 'center' }"
@tap="tapGridItem(item)"
>
<u-icon
:name="item.icon"
custom-prefix="custom-icon"
size="44"
:color="item.iconStyle"
/>
<view class="grid-text">{{ item.title }}</view>
</u-grid-item>
</u-grid>
</view>
</block>
</template>
<script setup lang='ts'>
import { ref } from 'vue'
import svgIcon from '@/components/svgIcon/index.vue'
<script setup lang="ts">
import { ref } from 'vue';
import { getMenuTree } from '@/api/apply';
const menuList = ref()
const menuList = ref();
const tapGridItem = (row: any) => {
uni.navigateTo({ url: '/pages/apply/formDataPage?data=' + encodeURIComponent(JSON.stringify(row)), })
}
uni.navigateTo({
url: '/pages/apply/formDetail',
success() {
uni.setStorageSync('pageData', JSON.stringify(row));
},
});
};
// 过滤未发布的菜单
const handleMenuTree = (list: any[]) => {
let newList: any[] = []
list.map((item: any) => {
if (item.publish) {
let childCpoy = JSON.parse(JSON.stringify(item.children))
let arr = handleMenuTree(childCpoy)
item.children = [...arr]
newList.push(item)
}
})
return newList
}
let newList: any[] = [];
list.map((item: any) => {
if (item.publish) {
let childCpoy = JSON.parse(JSON.stringify(item.children));
let arr = handleMenuTree(childCpoy);
item.children = [...arr];
newList.push(item);
}
});
return newList;
};
const init = async () => {
const { data: res } = await getMenuTree()
if (res.code === 200) {
menuList.value = handleMenuTree(res.data)
}
}
init()
const { data: res } = await getMenuTree();
if (res.code === 200) {
menuList.value = handleMenuTree(res.data);
}
};
init();
</script>
<style lang = "scss" scoped>
<style lang="scss" scoped>
.card {
box-sizing: border-box;
margin: 16rpx;
border-radius: 8rpx;
border: 1px solid #e4e7ed;
background-color: #ffffff;
overflow: hidden;
color: #303133;
transition: .3s;
box-shadow: 0px 0px 12px rgba(0, 0, 0, .05);
box-sizing: border-box;
margin: 16rpx;
border-radius: 8rpx;
border: 1px solid #e4e7ed;
background-color: #ffffff;
overflow: hidden;
color: #303133;
transition: 0.3s;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.05);
.card-text {
padding: 20rpx;
}
.card-text {
padding: 20rpx;
}
.grid-text {
font-size: 28rpx;
margin-top: 4rpx;
color: #303133;
padding: 0 10rpx;
white-space: 'nowrap';
text-overflow: 'ellipsis';
overflow: 'hidden';
}
.grid-text {
font-size: 28rpx;
margin-top: 4rpx;
color: #303133;
padding: 0 10rpx;
white-space: 'nowrap';
text-overflow: 'ellipsis';
overflow: 'hidden';
}
}
</style>
\ No newline at end of file
</style>
<template>
<u-button type="primary" :loading="isSearch" @tap="startSearch">开始搜索</u-button>
<view style="margin: 40rpx 0;"></view>
<u-button type="error" @tap="stopSearch">停止搜索</u-button>
<u-button type="warning">跳转页面</u-button>
<view style="margin: 40rpx 0;"></view>
<u-button type="warning" @tap="openControl">跳转页面</u-button>
<u-cell-group>
<!-- <u-cell-item icon="" v-for="item in list" :data-title="item.deviceId" :title="item.deviceId"
:data-name="item.name" :data-advertisData="item.advertisServiceUUIDs" :key="item.deviceId"
:value="item.name" :arrow="false" @tap="bindViewTap"></u-cell-item> -->
<u-cell-item icon="" data-title="item.deviceId" title="item.deviceId" data-name="name"
data-advertisData="item.advertisServiceUUIDs" value="item.name" :arrow="false" @tap="bindViewTap">
</u-cell-item>
</u-cell-group>
<view v-for="item in list" :data-title="item.deviceId" :data-name="item.name"
:data-advertisData="item.advertisServiceUUIDs" :key="item.deviceId" @tap="bindViewTap">
<view class="item">
......@@ -114,7 +108,6 @@ const getBluetoothDevices = async () => {
// 监听蓝牙设备
plus.bluetooth.onBluetoothDeviceFound((result: any) => {
console.log('onBluetoothDeviceFound:', result);
const arr = list.value
const devices = []
const listArr = result.devices
......@@ -139,7 +132,6 @@ const getBluetoothDevices = async () => {
devices.push(listArr[i]);
}
}
list.value = devices;
console.log('getBluetoothDevices:', res);
resolve();
......@@ -165,15 +157,22 @@ const bindViewTap = (e: any) => {
uni.showLoading({ title: '正在连接' })
console.log('deviceId:', title);
plus.bluetooth.createBLEConnection({
deviceId: title,
success(res: any) {
console.log('createBLEConnection success:', res);
console.log('before', BLEInformation.deviceId);
BLEInformation.deviceId = title;
blueTooth.BLEInformationSet(BLEInformation)
uni.hideLoading();
getSeviceId();
console.log('before', BLEInformation.deviceId);
blueTooth.$patch({
BLEInformation
})
uni.hideLoading()
console.log('纳尼');
('纳尼')
setTimeout(() => {
getSeviceId();
});
},
fail(e) {
errorCodeTip(e.errCode);
......@@ -183,93 +182,95 @@ const bindViewTap = (e: any) => {
}
const getSeviceId = async () => {
try {
const { deviceId } = blueTooth.BLEInformation;
console.log('BLEInformation.deviceId:', deviceId);
const { deviceId } = blueTooth.BLEInformation;
console.log('BLEInformation.deviceId:', deviceId);
// 等待1.5秒后获取蓝牙设备服务信息
await new Promise(resolve => setTimeout(resolve, 1500));
// 等待1.5秒后获取蓝牙设备服务信息
await new Promise(resolve => setTimeout(resolve, 1500));
// 获取蓝牙设备服务信息并更新服务列表
const { services: s } = await new Promise((resolve, reject) => {
plus.bluetooth.getBLEDeviceServices({
deviceId,
success: resolve,
fail: reject,
});
// 获取蓝牙设备服务信息并更新服务列表
const { services: s } = await new Promise((resolve, reject) => {
plus.bluetooth.getBLEDeviceServices({
deviceId,
success: resolve,
fail: reject,
});
console.log('getBLEDeviceServices success:', s);
services.value = s;
getCharacteristics();
} catch (e: any) {
errorCodeTip(e.code);
console.log('getBLEDeviceServices fail:', e);
}
});
services.value = s;
getCharacteristics();
}
const getCharacteristics = async () => {
try {
const num = serviceId.value
const { deviceId } = blueTooth.BLEInformation;
const num = serviceId.value
const { deviceId } = blueTooth.BLEInformation;
// 获取蓝牙设备特征值信息
const { characteristics } = await new Promise((resolve, reject) => {
plus.bluetooth.getBLEDeviceCharacteristics({
deviceId,
serviceId: services.value[num].uuid,
success: resolve,
fail: reject,
});
// 获取蓝牙设备特征值信息
const { characteristics } = await new Promise((resolve, reject) => {
plus.bluetooth.getBLEDeviceCharacteristics({
deviceId,
serviceId: services.value[num].uuid,
success: resolve,
fail: reject,
});
});
console.log('getBLEDeviceCharacteristics success:', characteristics);
console.log('getBLEDeviceCharacteristics success:', JSON.stringify(characteristics));
// 遍历特征值列表,获取写、读、通知特征值ID和服务ID
for (let i = 0; i < characteristics.length; i++) {
const { uuid, properties } = characteristics[i];
if (!notifyCharacter.value && properties.notify) {
blueTooth.BLEInformation.notifyCharaterId = uuid;
blueTooth.BLEInformation.notifyServiceId = services.value[num].uuid;
blueTooth.BLEInformationSet(blueTooth.BLEInformation)
notifyCharacter.value = true;
}
if (!writeCharacter.value && properties.write) {
blueTooth.BLEInformation.writeCharaterId = uuid;
blueTooth.BLEInformation.writeServiceId = services.value[num].uuid;
blueTooth.BLEInformationSet(blueTooth.BLEInformation)
writeCharacter.value = true;
}
if (!readCharacter.value && properties.read) {
blueTooth.BLEInformation.readCharaterId = uuid;
blueTooth.BLEInformation.readServiceId = services.value[num].uuid;
blueTooth.BLEInformationSet(blueTooth.BLEInformation)
readCharacter.value = true;
}
// 遍历特征值列表,获取写、读、通知特征值ID和服务ID
for (let i = 0; i < characteristics.length; i++) {
const { uuid, properties } = characteristics[i];
console.log(uuid, properties, 'characteristics[i]');
if (!notifyCharacter.value && properties.notify) {
blueTooth.BLEInformation.notifyCharaterId = uuid;
blueTooth.BLEInformation.notifyServiceId = services.value[num].uuid;
blueTooth.$patch({
BLEInformation: blueTooth.BLEInformation
})
notifyCharacter.value = true;
console.log('notify');
}
if (!writeCharacter.value && properties.write) {
blueTooth.BLEInformation.writeCharaterId = uuid;
blueTooth.BLEInformation.writeServiceId = services.value[num].uuid;
blueTooth.$patch({
BLEInformation: blueTooth.BLEInformation
})
writeCharacter.value = true;
console.log('write');
}
if (!readCharacter.value && properties.read) {
blueTooth.BLEInformation.readCharaterId = uuid;
blueTooth.BLEInformation.readServiceId = services.value[num].uuid;
blueTooth.$patch({
BLEInformation: blueTooth.BLEInformation
})
readCharacter.value = true;
console.log('read');
}
}
// 如果找不到对应的写、读、通知特征值,则继续查找下一个服务的特征值
if (!writeCharacter.value || !notifyCharacter.value || !readCharacter.value) {
serviceId.value = num + 1;
if (num === services.length - 1) {
uni.showModal({
title: '提示',
content: '找不到该读写的特征值',
});
} else {
await getCharacteristics();
}
// 如果找不到对应的写、读、通知特征值,则继续查找下一个服务的特征值
if (!writeCharacter.value || !notifyCharacter.value || !readCharacter.value) {
serviceId.value = num + 1;
if (num === services.length - 1) {
console.log('找不到该读写的特征值');
uni.showModal({
title: '提示',
content: '找不到该读写的特征值',
});
} else {
openControl();
await getCharacteristics();
}
} catch (e: any) {
console.log('getBLEDeviceCharacteristics fail:', e);
errorCodeTip(e.errCode);
} else {
openControl();
}
}
const openControl = () => {
alert('成功跳转')
console.log('成功跳转');
uni.navigateTo({
url: '/pages/blueTooth/printTest'
})
}
</script>
......
<template>
<view class="content">
<view class="body">
<view>
<textarea class="result" v-model="state.returnResult"></textarea>
</view>
<textarea class="input" @input="inputEvent" />
<view style='margin-top:4%'>
<u-button type='primary' @tap='labelTest' :loading='state.isLabelSend' :disabled='state.isLabelSend'>
标签测试
</u-button>
</view>
<picker style='margin:20px' mode='selector' :range='state.buffSize' :value='state.buffIndex'
@change='buffBindChange'>
当前每次发送字节数为(点击可更换):{{ state.buffSize[state.buffIndex] }}
</picker>
<picker style='margin:20px' mode='selector' :range='state.printNum' :value='state.printNumIndex'
@change='printNumBindChange'>
当前打印份数(点击可更换):{{ state.printNum[state.printNumIndex] }}
</picker>
<view style='margin-top:4%; display: flex; flex-direction: row;'>
<canvas canvas-id='edit_area_canvas'
:style="{ width: state.canvasWidth + 'px', height: state.canvasHeight + 'px' }"></canvas>
</view>
</view>
</view>
</template>
<script setup lang='ts'>
import { reactive, toRefs } from 'vue'
import { useBlueTooth } from '@/store/modules/bluetooth';
import { onLoad, onShow, onReady, onUnload } from '@dcloudio/uni-app';
import { createNew } from '../../utils/ble/tsc'
onLoad(() => {
let { BLEInformation } = blueTooth;
})
onReady(() => {
let list = [] as any[]
let numList = []
let j = 0
for (let i = 20; i < 200; i += 10) {
list[j] = i;
j++
}
for (let i = 1; i < 10; i++) {
numList[i - 1] = i
}
state.buffSize = list;
state.oneTimeData = list[0];
state.printNum = numList;
state.printerNum = numList[0];
})
onShow(() => {
// const ctx = uni.createCanvasContext("edit_area_canvas", state);
// if (app.globalData.platform == "android") {
// ctx.translate(width, height)
// ctx.rotate(180 * Math.PI / 180)
// }
})
onUnload(() => {
// let that = state;
// let {
// BLEInformation
// } = that.Bluetooth;
// uni.closeBLEConnection({
// deviceId: BLEInformation.deviceId,
// success: function(res) {
// console.log("关闭蓝牙成功")
// },
// })
})
const state: any = reactive({
sendContent: "",
looptime: 0,
currentTime: 1,
lastData: 0,
oneTimeData: 0,
returnResult: "",
canvasWidth: 1050,
canvasHeight: 750,
buffSize: [],
buffIndex: 0,
printNum: [],
printNumIndex: 0,
printerNum: 1,
currentPrint: 1,
isReceiptSend: false,
isLabelSend: false
})
const blueTooth = useBlueTooth()
const inputEvent = (e: any) => state.sendContent = e.detail.value;
const labelTest = () => {
let canvasWidth = state.canvasWidth
let canvasHeight = state.canvasHeight
// x 和 y: 文字的起始位置坐标,以毫米为单位。
// font: 字体类型,可以是预装载的或者外部下载的字体。
// x_ 和 y_: 水平和垂直缩放比例,范围为 0 - 10,可调整字体大小。
// str: 要打印的文字内容。
// codetype: 条形码类型,支持 CODE128、CODE39、CODE93 等多种类型。
// height: 条码的高度,以毫米为单位。
// readable: 是否在条形码下方打印可读的文字标签。0 表示不打印,1 表示打印。
// narrow 和 wide: 条形码线条的宽度比例,范围为 1 - 10。
// content: 条形码所表示的内容。
let command = createNew()
command.setSize(70, 52); // 设置页面大小
command.setGap(0); //传感器
command.setCls(); //清除打印机缓存
command.setText(40, 50, 'TSS24.BF2', 1, 1, 'WMS编码号');
command.setBarCode(200, 40, 'EAN8', 64, 1, 3, 3, '1234567');
command.setText(40, 100, 'TSS24.BF2', 1, 1, '佳博智汇');
command.setText(40, 140, 'TSS24.BF2', 1, 1, 'h测试数字12345678');
command.setText(40, 180, 'TSS24.BF2', 1, 1, 'g测试数字12345678');
command.setText(40, 220, 'TSS24.BF2', 1, 1, 'f测试数字12345678');
command.setText(40, 260, 'TSS24.BF2', 1, 1, 'e测试数字12345678');
command.setText(40, 300, 'TSS24.BF2', 1, 1, 'd测试数字12345678');
command.setText(40, 340, 'TSS24.BF2', 1, 1, 'c测试数字12345678');
command.setText(40, 380, 'TSS24.BF2', 1, 1, 'b测试数字12345678');
command.setQR(300, 180, 'L', 8, 'A', 'www.smarnet.cc佳博智汇');
uni.canvasGetImageData({
canvasId: 'edit_area_canvas',
x: 0,
y: 0,
width: canvasWidth,
height: canvasHeight,
success: function (res) {
command.setBitmap(60, 0, 1, res)
},
complete: function () {
command.setPagePrint()
state.isLabelSend = true;
prepareSend(command.getData())
}
})
}
const printNumBindChange = (res: any) => {
let index = res.detail.value
let num = state.printNum[index]
state.printNumIndex = index;
state.printerNum = num;
}
const buffBindChange = (res: any) => {
let index = res.detail.value
let time = state.buffSize[index]
state.buffIndex = index;
state.oneTimeData = time;
}
//准备发送,根据每次发送字节数来处理分包数量
const prepareSend = (buff: any[]) => {
console.log(buff.length, 'buff.length');
let time = state.oneTimeData
let looptime = (Number(buff.length) / Number(time));
let lastData = (Number(buff.length) % Number(time));
console.log(looptime + "---" + lastData)
state.looptime = looptime + 1;
state.lastData = lastData;
state.currentTime = 1;
Send(buff)
}
//分包发送
const Send = (buff: any) => {
let {
currentTime,
looptime: loopTime,
lastData,
oneTimeData: onTimeData,
printerNum: printNum,
currentPrint } = state;
let buf;
let dataView;
if (currentTime < loopTime) {
buf = new ArrayBuffer(onTimeData)
dataView = new DataView(buf)
for (var i = 0; i < onTimeData; ++i) {
dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i])
}
} else {
buf = new ArrayBuffer(lastData)
dataView = new DataView(buf)
for (var i = 0; i < lastData; ++i) {
dataView.setUint8(i, buff[(currentTime - 1) * onTimeData + i])
}
}
console.log("第" + currentTime + "次发送数据大小为:" + buf.byteLength)
let BLEInformation = blueTooth.BLEInformation
plus.bluetooth.writeBLECharacteristicValue({
deviceId: BLEInformation.deviceId,
serviceId: BLEInformation.writeServiceId,
characteristicId: BLEInformation.writeCharaterId,
value: buf,
success: function (res) {
console.log(res)
},
fail: function (e) {
console.log(e)
},
complete: function () {
currentTime++
if (currentTime <= loopTime) {
state.currentTime = currentTime;
Send(buff)
} else {
uni.showToast({
title: '已打印第' + currentPrint + '张',
})
if (currentPrint == printNum) {
state.looptime = 0;
state.lastData = 0;
state.currentTime = 1;
state.isReceiptSend = false;
state.isLabelSend = false;
state.currentPrint = 1;
} else {
currentPrint++;
state.currentPrint = currentPrint;
state.currentTime = 1;
Send(buff)
}
}
}
})
}
defineExpose({
...toRefs(state)
})
</script>
<style lang = "scss" scoped>
.input {
text-align: top;
width: 90%;
height: 150px;
margin-left: 4%;
margin-right: 4%;
margin-top: 10px;
margin-bottom: 12px;
border: 1px solid slategray;
}
.receiver_info_scroll_view {
width: 90%;
height: 200px;
margin-left: 4%;
margin-right: 4%;
margin-top: 10px;
margin-bottom: 25px;
border: 1px solid black;
}
.result {
width: 90%;
height: 150px;
border: 1px solid black;
margin-left: 4%;
margin-bottom: 4%;
margin-top: 5%;
}
button {
width: 90%;
margin-left: 5%;
margin-right: 5%;
}
.switch {
float: right;
margin-right: 20px;
margin-bottom: 16px;
}
text {
color: #fff;
display: block;
}
input {
color: gainsboro;
float: left;
}
.v_net_ssid {
width: 100%;
background: #fff;
}
.v_net_passw {
width: 100%;
background: antiquewhite;
}
.swiper {
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
......@@ -2,13 +2,11 @@
<view class="wrap">
<u-swiper :list="list" :height="swiperHeight"></u-swiper>
</view>
<blueTooth />
<u-button type="primary" @tap="toBlueTooth">连接蓝牙</u-button>
</template>
<script setup lang='ts'>
import { ref, onMounted } from 'vue'
import config from '@/utils/config'
import blueTooth from '@/components/blueTooth/index.vue'
const list = [{
image: 'https://cdn.uviewui.com/uview/swiper/1.jpg',
......@@ -23,6 +21,8 @@ const list = [{
title: '谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
}]
const toBlueTooth = () => uni.navigateTo({ url: '/pages/blueTooth/index' })
let swiperHeight = ref('250')
onMounted(() => {
......
@font-face {
font-family: 'iconfont';
src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTZY5S8sAACcgAAAAHEdERUYAKQAkAAAnAAAAAB5PUy8yPDZPdQAAAVgAAABgY21hcD+9M0YAAAIkAAABumdhc3D//wADAAAm+AAAAAhnbHlmKc0zZAAABCAAAB6MaGVhZCO3aL8AAADcAAAANmhoZWEH4QOfAAABFAAAACRobXR4WVsI5QAAAbgAAABsbG9jYWyqZJgAAAPgAAAAPm1heHABTQEaAAABOAAAACBuYW1lXoIBAgAAIqwAAAKCcG9zdELC+asAACUwAAABxQABAAAAAQAAEAT8718PPPUACwQAAAAAAOBKkmEAAAAA4EqSYQAA/4AEAwOAAAAACAACAAAAAAAAAAEAAAOA/4AAXAQGAAAAAAQDAAEAAAAAAAAAAAAAAAAAAAAYAAEAAAAeAQ4AJQAAAAAAAgAAAAoACgAAAP8AAAAAAAAABAQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZADA5gDspgOA/4AAAAPcAIEAAAABAAAAAAAAAAAAAAAgAAEEAAAAAAAAAAFVAAAEAABZBAAAYgQAAKsEAABzBAAAYgQAAGUEAAAsBAAA0AQAAEAEAABABAAAqwQAAKoEAAA6BAAAPwQAAEAEAABABAAAAAQAALgEAACkBAYAEgQAANoAAAAAAAAAMwAAAAAAAAADAAAAAwAAABwAAQAAAAAAtAADAAEAAAAcAAQAmAAAACIAIAAEAALmAeYH5grmFOYY5jbmSeZR5lfmX+Zh5ovm+ucY54Lspv//AADmAOYE5gnmE+YX5jbmRuZR5lfmX+Zh5ovm+ecY54Lspv//GgMaARoAGfgZ9hnZGcoZwxm+GbcZthmNGSAZAxiaE3cAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcASgBnAJeAqoDhAQQBJQE9AVSBi4GfAdYCBgIbgjECUQJfgnQCnwK5AtMDLwONA6WDtYPRgAAAAUAWQBZA7MC9AA9AE0AYwB7AJIAAAE0LgEjIgcGBw4BBwYHBg8BJzYnJicmJyYnJiMiBgcGFxYXFhcWFxYfAQcOARYyPwEXMjc2Nz4BNzY3Njc2ASYnJicmJxYXFhcWFxYXJgEGBw4BBwYHBiMxNjc2NzY3Njc2MwYDMSIGFxUjNTQmIgYdARQWOwEyNjUnNCYHMjY9ARcWPgEmLwIHDgEeAT8BFRQWA7MRGhYqKjsyP1kdFw0LARwKAgoQLCU7KjEaEwwSAQIBAgwSJStKLzMLWAkBExoJoxUqKTsyQFkdFwwJAwH9jUsnHQ0JARMTSycdDQkBEwIUChIZSTYpMSUnBBIaNCU2KTElJwMfBgkBiQkMCQkGpwYJAQlZBwgiBgsFBQY2BjsGBQULBiEJAtQMEgIGCBQYVD4wOjU0GgwyME0xKBcRBgMRDBIaMiw8KDAXDwMNUwoaFAmaAQYJExlTPjA7KSoW/p4RKx8zIykCBRArIDIjKQIBCTEoNEUUEAcGPzhTMSIVEAcFJv4aCAciIwYICAYyBgkJBjIGCCoIB1MQAwYNDQMZARoDDQ0GAxBTBgkAAAAABABi/9EDnQMvACMAKQAtADEAAAEjFTMyFhURFAYjISImNRE0NjsBNSMiBhURFBYzITI2NRE0JgUXBycHJwMhFSETMxEjA0pSUhAWFhD9axAWFhBSUiMwMCMClSMwMP6SniB+fSBdAfX+C+QtLQMvLBcP/UcQFhYQArkPFywwIv1HIzAwIwK5IjB9nSB9fSD+eC0COf47AAAFAKsAJwNVAt8ADgAqADYAQABKAAABBi4BNj8BNh8BFg4BLwEFERQGIyEiJjURNCYGFREUHgEzITI+ATURNCYGJQMUBiImNRM0NjIWEyEiJjYzITIWBichIiY2MyEyFgYBcggSCgQImgwMmgsBFwuOASghF/4gFyEXFhsuHAHgHC4bFhf+8gMOEw0DDhIOlv6gDQ4ODQFgDQ4ODf6gDQ4ODQFgDQ4OAlIFBRASBV8HB18HGgwGWPX+4xwoKBwBHQ0NDQ3+4x41Hh41HgEdDQ0N5P8ACg0OCQEACg0O/gAXFxcXbBcXFxcACABzABMDjQLtAA8AHwBJAFMAbQB7AIcAkwAAJSEiJjURNDYzITIWFREUBgEiBhURFBYzITI2NRE0JiM3IzU0JiMhIgYdASMiBh0BFBY7ATI2PQE0NjMhMhYdARQWOwEyNj0BNCYlNDYzITIWHQEhARQGKwE1NCYjISIGHQEjIiY9ATQ2MyEyFhUBJyYiDwEGJj0BMxUUBhcjIj0BNDsBMh0BFAcjIj0BNDsBMh0BFAKY/tAUHBwUATAUHBz+vAcJCQcBMAcJCQelbyUa/uIaJW8hLy8hTwcJEg4BfA4SCQdPIS8v/fMTDQEeDRP+ogIcHBQ/JRv+hBslPxQcHBQCehQc/rkjAQMBJAIEWARD1gQE1gQE1gQE1gQTHBQBDRQcHBT+8xQcAU0JB/7zBwkJBwENBwn+TxslJRtPLiG/IC8JB28NExMNbwcJLyC/IS5PDhISDk/+8hMcXxolJRpfHBO/ExwcE/7pIwEBIwICA2VlAwJhBBIEBBIELwQRBAQRBAAAAAQAYv/RA54DMAAjACkALQAxAAABIxUzMhYVERQGIyEiJjURNDY7ATUjIgYVERQWMyEyNjURNCYBJzcXNxcFIRUhEzMRIwNLUlIQFhYQ/WoQFhYQUlIiMTEiApYiMTH+k50ffn4f/mkB9P4M5CwsAzAtFw/9RxAWFhACuQ8XLTEi/UcjMDAjArkiMf2knSB+fiDkLAJR/jsABwBl/8ADnANAABoAKAA0AEAAiACSAJ4AAAEhIg4BHQEUHgEXFRQWMyEyNj0BPgE9ATQuAQE0NjsBMhYUBisBIiYnFyMiDgEWOwEyNjQmByMiBh4BOwEyNjQmARUUDgEHERQGIyEiJjURLgI9ATQ+ARczNhYUBisBIgYdARQeARc1IyImNDYzITYWFAYrARUyPgE9ATQmIyEiJjQ2MyEyHgEDESERFBYzITI2ATMyNjQmKwEiBhQWAon+gi1MLS1LLSkeARwdKjVGLU3+6goHaAgKCwdoBwoB49EHCgELB9EHCgoH0QcLAQoH0QcKCgEUK0ssLR/+1SAtLEkqJkEmJgkODgkmJzceMx8jBwoKBwIKBwsLByMgNh82Jv7OCg0NCgEyJT8lxP6BGREBKxEZ/rIWCg0NChYKDQ0DQC1MLb4sTC0Bzx0qKh3VD1k4vi1MLf5FBwoKDwoKCHoKDwoKDwqLCw4KCg4LAgmbKkkqAf67HywsHwFFAytHKZskPSQBAQ4TDTMkmx0yHwKSCg4KAQsOCpIfMx6bJDMNEw4kPf1eAgX9+xAYGALlDRMODhMNAAAAAAkALP+AA9QDgAANAB0AIQAlADUAOQBFAFAAXAAAATUhFTM1NCYjISIGHQEBISImNRE0NjMhMhYVERQGJSERIRchESEFISImNRE0NjMhMhYVERQGJSERIQUhIiY0NjMhMhYUBgchIiY0NjMhMhYGByEiJjQ2MyEyFhQGAQsB6i0XEP4KEBcCz/ymEBcXEANaEBcX/JwDTvyynAIW/eoCBv4KEBcXEAH2EBcX/gAB6v4WAaf+nAkNDQkBZAkNDQn+nAkNDQkBZA0NDQ3+nAkNDQkBZAkNDQK3nJyiEBcXEKL+LRcQAZwQFxcQ/mQQFywBkfX96hYXEAH0EBcXEP4MEBctAelZDRINDRINsg0SDRYWsg0SDQ0SDQAHANAARAM+AsEAEQAVACcAKwA+AEIATwAAJSInJS4BNRE0NhcFFhURFAcGJRcRJwEiJyY1ETQ2NyU2FhcRFAcFBhMRNxEFIiclJjY3JTYXBRYXFAYHBQYHJxc3JwMiJj0BNDYyFh0BFAYCBAQF/uEGBhQLAR8LCQb+8PX1AQ8GBQoHBQEgChMBDP7hBRD2/vUFBP7gDAEMAR8JCQEfDAEGBv7hBQXv7/DwnAkMDBIMDEQCiQMKBgE/DAwGkwYN/swLBwOsdQEFfv5GAwYMAT8GCgOJBQ0L/swNBpMDAUb+8n4BBoICjgYaBokEBIQFDQYLApQCAaN2e27+xwwJcQkMDAlxCQwAAAAEAEAACQPAAvgAKwAvADMAQwAAASMiBhQWOwEyFhURFAYjISImNRE0NjsBMjY0JisBIgYVERQWMyEyNjURNCYBIxUzBzM1IzUVMzUzNjQvASYiDwEGFBcDZHwMEREMfA8UFA/9OA4UFA55DBAQDHkmNjYmAsgmNjb+sXZ2dnZ2dmoNDYQOJg6DDg0C+BEYERQO/ckOFBQOAjcOFBEYETYm/ckmNjYmAjcmNv6TPHc97D09DysPlBAQlA8rDwAAAAAEAEAACQPAAvcAKwAvADMAQwAAASMiBhQWOwEyFhURFAYjISImNRE0NjsBMjY0JisBIgYVERQWMyEyNjURNCYFMxUjNTMVIxMWMj8BNjQnIzUjFSMGFBcDZHwMEREMfA8UFA/9OA4UFA55DBAQDHkmNjYmAsgmNjb+O3Z2dnYaDiYOhA0NanZqDQ4C9xAYERQO/ckOFBQOAjcOFBEYEDUm/ckmNjYmAjcmNYA8sjz+NxAQlA8rDz09DysPAA4AqwASA1UC6wAPABMAIwAzAEMAUwBXAGcAawB1AIEAjQCZAKMAABM1NDY7ATIWHQEUBisBIiY3MzUjFzU0NjsBMhYdARQGKwEiJhE1NDY7ATIWHQEUBisBIiYBNTQ2OwEyFh0BFAYrASImBzU0NjsBMhYdARQGKwEiJjczNSMBNTQ2OwEyFh0BFAYrASImNzM1IwURNDYWFREUBiY3NTQ2MhYdARQGIiY9ATQ2MhYdARQGIiYXETQ2MhYVERQGIiY3ETQ2FhURFAYmqxkR1hEZGRHWERkq1tYrDAlWCQwMCVYJDAwJVgkMDAlWCQwBgAwJVgkMDAlWCQxVGRHWERkZEdYRGSrW1v5WGRHWERkZEdYRGSrW1gFWFRUVFVUMEg0NEgwMEg0NEgxVDRIMDBINVhUVFRUB69USGRkS1RIZGRLVlVUJDAwJVQkNDf5eVQkNDQlVCQwMAbRVCQwMCVUJDQ031RIZGRLVEhkZEtX9gNUSGRkS1RIZGRLV6gEADAwMDP8ADQwMDYAJDAwJgAkNDd4rCQwMCSsJDAzMAQAJDAwJ/wAJDQ0JAQAMDAwM/wANDAwAAAAACgCqAB4DVgLjAAMABwALAA8AEwAXABsAHwAjACcAAAEhESETIRUhAyEVIQEVITUlIRUhFxEhESUhESEnFSE1JSERIQEzFSMBAAJM/bRtAWD+oB8BYP6gAWT+nQGT/j0Bw0T9tAJ8/VQCrKX+ngGS/j4Bwv4+goIB9v7OAdFm/pFyAmVlZTDFAf7PATEw/m9p19cw/skBvjAAAAAACAA6//IDvAMqABEAIAAsADQARwB1AIIAjwAAASYPAQ4BDwEUHwEWMj8BNjQnDwEGLwEmNTc0MzcyHwEWJw4BHgEyPgEmJyYiFwYiJyY2MhYlHgEzNzI+ASYvASYOAR8BByIGASEiJjURJiclNjIXBQYdARQWNj0BFxY+AScBJiIHAQ4BHgE/AREUFjMhMjY0JhMiDgEUHgEyPgE0LgEDIi4BND4BMh4BFA4BAuQIDDgKDgEDCGsIFQg7CAgOPAMEbAEDBTgCAmwDfwkECRMXEwkECAshHQUPBQgJFwn95wEMCNoGCwUDBGEIGAcJQKoIDQFc/pIWHwEBAUARKxABQAEVFQ4JFwMJ/okcRx3+igcBChEHDjgnAW4JDAymOmI5OWJ0Yjo6YjotTS0tTVpNLS1NAR8IAQMBDQo5CwhsCAg8BxUIFjsEBGsCAjkEAwFsAz0IFxYNDRYXCAszBQUJFRVhCAwBBwsNBGYJBRgIRAEM/vMgFgGdAwP+Dg7+AwNSDQwMDTgLBwgZBwEpFhb+1wURDgIFC/59KDcMEQwBgTpidGI5OWJ0Yjr+gy1NWk0tLU1aTS0AAAAPAD//wAPBA0AAJAAlADEAMgA+AD8ASwBMAFgAWQBlAGYAcgCBAIoAAAkBJiIHAQ4BHgI2PwERFBYyNjURCQEVFBYyNj0BFx4BPgImATsBMh0BFCsBIj0BNDsCMh0BFCsBIj0BNCc7ATIdARQrASI9ATQ1OwEyHQEUKwEiPQE0FzsBMh0BFCsBIj0BNBc7ATIdARQrASI9ATQlNi4BDgIeATcXFj4BLwEiJjQ2MhYUBgO1/mAJGAn+YAYGAwsQEQcLExoTAUABQBMaEwsHERALAwb9RQxIDAxIDJAMSAwMSAyPDEgMDEgMDEgMDEgMjwxIDAxIDJAMSAwMSAwBKBQPPE02BC9LITEKHAgLiBUeHioeHgHXAWEICP6fBRARDgUDBgn+MA0TEw0CBgEQ/vDGDRMTDZAJBgMFDhEQ/k8MSAwMSAwMSAwMSAx/DEgMDEgMfwxIDAxIDH8MSAwMSAx/DEgMDEgMKiFMLgU2TD0OFDEKBxwKMh4qHh4qHgAAAAADAEAAAAPAA0AAAwAKADwAABMzFSM3FzUhNSE1JSM0LgEjISYOAR0BMzU0NjMhMhYdATMyFhURFAYjISImPQEjFRQeATMhMj4BNRE0LgFBPz9/wAEA/wABwIAjOiP+gCI7I0AmGgGAGibAGiYmGv2AGiY/IjsiAoAiOyMjOwHAQCCggECAgCI7IgEjOyKAgBolJRpAJhr+QBomJhqAgCI7IyM7IgHAIjsjAAAAAwBAAAEDwANAAAMACgA8AAABMxUjBTcnFSMVIQEjNC4BIyEiDgEdATM1NDYzITIWHQEzMhYVERQGIyEiJj0BIxUUHgEzITI+ATURNC4BAkBAQP8AwMD/AP8CAIAjOiP+gCI7I0AmGgGAGibAGiYmGv2AGiY/IjsiAoAiOyMjOwHAQH+foIBAAUAjOiMjOiOAgBomJhpAJRv+QRslJRuAgCM7IiI7IwG/IzsiAAQAAP+sBAADVAAWABoAJABSAAABNC8BAy4BIyEiBgcDDwERFBYzITI2NQEhFyEBDgEjISImNREhARYzMjYmLwEhMhcWFxYVFAcGBwYrASIGFBY7ATI+ATQuASMhNz4BLgEPAQYUFwQAAQGABhUN/VQNFQaAAQEnHAN6HCf8qgKscPx0A5oBDQn8hgkOA6j9sgYICwwBB2oBGBsZJhceFhMhICWtCQ0NCa42VS8uVDn+6GoHAgwSCIMPDwIzAgEEAQELDg4L/wAEBf29GygoGwM43/2nCQ0NCQIt/pkFDxIGVwYJFRwvJxwaDQ0NEg0pSl9GJlcGEg8CBmwPKQ8AAAADALj/5gNIAxkADQAeACEAAAEhIgYVERQWMyEyNjURARUnNxUyFxYXFhUmJyYnJgcTNRcCUv64IjAwIgHsIjD+oJeXMycyGyAPLiEwGhw+4QMZMCH9cCIwMCIB7P6cWJuaVxMWMjpeNBwUBwMBATvh4QAAAAUApAAPA1wC8QAPACAAKgA0ADUAACUhIiY1ETQ2MyEyFhURFAYlMjY9ATQmKwEiBh0BFBY7ARMVISImPwE+ATMFFgYjITUzMhYfAQMW/dAcJg4KAogKDij+VwgJCQhwCAoKCHBX/tsLDAU/BRcOAjoDCgr+3csOFwY+DygbAW0LDg4L/pMdJmYKB40ICgoIjAgKAnzhEgqoDRDFCxHhDw2pAAAACAAS/5MDtAN2AAsAFwAyADsARABRAF0AeAAAASEiJjQ2MyEyFhQGByEiJjQ2MyEyFhQGEyMiJjURNDYzITIWHQEUBiImPQEhETMyFhQGNyImNDYyFhQGJyIGFBYyNjQmFyIvASY+ARYfARYOAScjIiY0NjsBMhYUBgEhIiY1ETQ2MyEyFhURFAYiJj0BIREzMhYUBgJi/n8LDw8LAYELDg4L/n8LDw8LAYELDg5ftgsPDwsBbAoPDxUP/sicCw4OXyU2Nks1NSYQGBghFxdTCwg1BwEQFQc1BwEPlooLDw8LigsODv4q/ukLDw8LAt0LDw8WDv1V/goPDwJ6DxYPDxYPsQ8VDw8VD/4GDwoBXgoPDwp5Cw8PC1/+1g8VDys1TDU1TDWDFyIXFyIXqwk7CBUOAQg7CBUO8A8VDw8VD/7RDwsDrwsPDwv+6wsODgv8/IMPFQ8AAAACANoASwMpAskAGQBIAAABNjIWFA8BMzIeARQOASsBFxYUBiIvAS4BNwM2FwUeAR0BFAYiJj0BJwcRMxEjIiY0NjsBMhYUBisBETMyFhQGKwEiJjURNDY3AnkJGREJJo4IDggIDgiOJgkRGQlYCQEJKwsLAQsHCRAXEO/vdBULEBAL9QsREQupGwsQEAviCxAJBwE7CBEZCSUIDhAOCCYJGREJWAkZCQHjBAR1Aw4IiQwQEAx2aWn+XgENERcQEBcR/vMQFxAQCwHRCA4DAAAABwAA/4AEAAOAAAMABwALABwAHwAzAEAAABMzFSMRMxUjESEVIQMhFRchFTM1ASEiBhURITUhARcjASc+AS4CDgIeAjY3FxY+AicOAS4CPgIeAgam4ODg4AE2/spmAicCARdA/tX9kQ8XAgP+PQJnqqoBUHcgDSVRaGVLHhZFY2gsdgoaEgHCHEpKNxQUN0pKOBMTAqFA/oFAASJAAbznIpPDARkWEPwmQANYof1AdixoY0UWHktlaFElDSB3CQESGpUcExM4Sko3FBQ3SkoAACIAAP+ABAMDgAAbADoARgBKAE4ATwBWAFcAXgBfAGsAbAB4AHkAhQCGAJIAkwCaAJsAogCjAKoAqwCyAMIA0gDTAN8A4ADsAO0A+QEKAAAFIiY1ESMiJj0BNjcBNhcWFwEWBw4BKwERFAYjASMiJj0BNjcBNjMyFxYXARYHDgErATUzNTMJATMVMwEhIiY9ATMVFBYzISUjNTMFIzUzJSMUFjY0JgYFIxQWNjQmBgUzMTIdARQjMSI9ATQXOwEyHQEUKwEiPQE0OwIyHQEUKwEiPQE0JzsBMh0BFCsBIj0BNCcjFBY2NCYGASMUFjY0JgYBIxQWNjQmBgUjFBY2NCYGBSMiJj0BNDY7ATIWHQEUBgMiBh0BFBY7ATI2PQE0JiMHOwEyFTEUKwEiNTE0FTsBMhUxFCsBIjUxNAE7ATIVMRQrASI1MTQ3BxcWFA4BLwEmND8BNjIWFAGhHSlHBggBAwFrCAsGBQFpBwMCBwVHKR39KHsICgEEAccHCwMCCAYBxQgFAQoGexFD/l3+XUERAbr+ah4pIxUPAZb+RiMjAsMjI/0sEhIRERIC1BEREhIR/T0SERESfBEkEREkEWoRJBERJBFqESQRESQRahISERESAd0SEhISEgEJERESEhH9TxISERESAy3UDxUVD9QOFRXRBwoKB7EHCwsHnxJqERFqEhI1ERE1Ev57EvcSEvcSSD8/BQoPBUsFBUsFDwqAKR4BAAgGAwUDAW4IAwEF/pQHCAUG/wAeKQISCggDBgUBxggBAQb+OwgLBggSEQGj/l0R/iIpHkdHDxX4wmpqAQsKChUKCgoLCgoVCgrxESQRESQRahEkEREkEREkEREkEWoRJBERJBEkCgsLFAoK/u0KCwsUCgoBVwoKChQKCvAKCgoVCgqYFQ74DhUVDvgOFQEbCwfUBwsLB9QHC0cSERESRxESEhEBgBISEhIsPj8FDgoBBUsGDgVLBQoOAAAlAAD/gAQDA4AAGwA6AEYASgBOAE8AVgBXAF4AXwBrAGwAeAB5AIUAhgCSAJMAnwCgAKcAqACvALAAtwC4AL8AwADHAMgAzwDQANcA8wEAAQEBDQAABSImNREjIiY9ATY3ATYXFhcBFgcOASsBERQGIwEjIiY9ATY3ATYzMhcWFwEWBw4BKwE1MzUzCQEzFTMBISImPQEzFRQWMyElIzUzBSM1MyUjFBY2NCYGBSMUFjY0JgYFMzEyHQEUIzEiPQE0FzsBMh0BFCsBIj0BNDU7ATIdARQrASI9ATQ7AjIdARQrASI9ATQVOwEyHQEUKwEiPQE0JyMUFjY0JgYBIxQWNjQmBhcjFBY2NCYGFyMUFjY0JgYnIxQWNjQmBjcjFBY2NCYGBSMUFjY0JgYFIyImPQEzFRQWOwEyNj0BNCYrATUzMhYdARQGJzIWBxcUBiImNyc0Nic7ATIVMRQrASI1MTQBoR0pRwYIAQMBawgLBgUBaQcDAgcFRykd/Sh7CAoBBAHHBwsDAggGAcUIBQEKBnsRQ/5d/l1BEQG6/moeKSMVDwGW/kYjIwLDIyP9LBISERESAtQRERISEf09EhEREo0SIxISIxISIxISIxJqEiMSEiMSEiMSEiMS5RISERESAd0SEhISEsMSEhEREp8SEhISEkYSEhEREiMRERISEf1PEhIRERIDLbEPFCMKCI0HCwsHWGoOFRXiBwsBEgoPCwESCkMSNRISNRKAKR4BAAgGAwUDAW4IAwEF/pQHCAUG/wAeKQISCggDBgUBxggBAQb+OwgLBggSEQGj/l0R/iIpHkdHDxX4wmpqAQsKChUKCgoLCgoVCgrxESQRESQRahEkEREkEWoRJBERJBERJBERJBFqESQRESQRjgoLCxQKCv7tCgsLFAoKCgoLCxQKCgoKCwsUCgrKCgsLFAoKgwoKChQKCvAKCgoVCgp1FQ8jEgcKCgdqCAojFA+NDxX6DAecCAsLCJwHDAEREhIRAAcAMwAaA80C5gADAAcAKwAvADMAOwA/AAABIRUhESERIQEjNTQmIyEiBh0BIyIGFREUFjsBFRQWMyEyNj0BMzI2NRE0JiUhFSEBIREhFyMRIREjESEFIxUzAQACAP4AAgD+AAKreAkI/bwICXgOFBQOeAkIAkQICXgOFBT9RwIA/gACAP4AAgCaZ/2aZwM0/cyZmQKzM/8A/s0CM1UICQkIVRQO/kQOFFUICQkIVRQOAbwOFDMz/c0BM80BAP8AAZozNAACAAD/gAQAA4AADwAkAAABISIGFREUFjMhMjY1ETQmAwEGBwYmLwEuAT4BHwEBPgEeARUUA7f8kh4rKx4Dbh4rK3T+bggKDRsK6w4BGyYOygF1ChwaEAOAKx78kh4rKx4Dbh4r/q/+YggDBgUK3w4mGwENwAF/CgYLFw4TAAAAAAYAAP+ABAADgAADABkAIwAzAEAATQAAESERIRM0PgEzITIeAR0BFA4CIyEiLgI1EyIGHQEhNTQmIwEiBh0BFBYzITI2PQE0JiMnNDY7ATIWFAYrASImATQ2OwEyFhQGKwEiJgQA/ABEJT8lAmYlPyUVJjMb/ZobMyYV7xwoAiIoHP5mHCgoHAGaHCgoHDMeFSIVHh4VIhUe/sweFswWHh4WzBYeA4D8AAJEJT8lJT8lzRsyJhUVJjIbAkUoHaqqHSj+ACgd7h0oKB3uHSiIFR4eKh4e/uIVHh4qHh4AAAAAAAASAN4AAQAAAAAAAAATACgAAQAAAAAAAQAIAE4AAQAAAAAAAgAHAGcAAQAAAAAAAwAIAIEAAQAAAAAABAAIAJwAAQAAAAAABQALAL0AAQAAAAAABgAIANsAAQAAAAAACgArATwAAQAAAAAACwATAZAAAwABBAkAAAAmAAAAAwABBAkAAQAQADwAAwABBAkAAgAOAFcAAwABBAkAAwAQAG8AAwABBAkABAAQAIoAAwABBAkABQAWAKUAAwABBAkABgAQAMkAAwABBAkACgBWAOQAAwABBAkACwAmAWgAQwByAGUAYQB0AGUAZAAgAGIAeQAgAGkAYwBvAG4AZgBvAG4AdAAAQ3JlYXRlZCBieSBpY29uZm9udAAAaQBjAG8AbgBmAG8AbgB0AABpY29uZm9udAAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAAaQBjAG8AbgBmAG8AbgB0AABpY29uZm9udAAAaQBjAG8AbgBmAG8AbgB0AABpY29uZm9udAAAVgBlAHIAcwBpAG8AbgAgADEALgAwAABWZXJzaW9uIDEuMAAAaQBjAG8AbgBmAG8AbgB0AABpY29uZm9udAAARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgAAR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0LgAAaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAaHR0cDovL2ZvbnRlbGxvLmNvbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAABAAIBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwaeXVhbmNhaWxpYW90dWlsaWFvc2hhbmdqaWEFY2h1a3UYc2hlbmdjaGFudHVpbGlhb2JlaWZlbjJ4FHhpbmd0dXh1ZXRhbmctZGF5aW4tBHJ1a3UPeml6aHVkYXlpbmRheWluBWRheWluBmNodWt1MQlxaXRhY2h1a3UIcWl0YXJ1a3UMdGlhb21hY2hheHVuB2RheWluamkUdHViaWFvemhpenVvbW9iYW4tMDENa3VjdW5wYW5kaWFuLQ95aWNodXdlbmppYW5qaWEOeWlydXdlbmppYW5qaWEGdHVpaHVvC3R1aWxpYW9qaWx1EXNoZW5nY2hhbmxpbmdsaWFvDW5hdmljb24ta2NwZGQhY2FpZGFubGFuLXNoZW5nY2hhbi1zaGVuZ2NoYW5ydWt1CmppYW55YW5kYW4MZGluZ2xpYW9ydWt1CmNhaWdvdXJ1a3UGZGF5aW4xBWRhZ291BmRheWluMgAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAB0AAQAEAAAAAgAAAAAAAAABAAAAANWkJwgAAAAA4EqSYQAAAADgSpJh') format('truetype');
font-weight: normal;
font-family: "iconfont";
/* Project id 3968711 */
src: url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.eot?t=1681376908623');
/* IE9 */
src: url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.eot?t=1681376908623#iefix') format('embedded-opentype'),
/* IE6-IE8 */
url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.woff2?t=1681376908623') format('woff2'),
url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.woff?t=1681376908623') format('woff'),
url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.ttf?t=1681376908623') format('truetype'),
url('https://at.alicdn.com/t/c/font_3968711_3t9kuqee2v2.svg?t=1681376908623#iconfont') format('svg');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
font-display: swap;
}
[class^="icon-"],
[class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'iconfont' !important;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-yiruwenjianjia:before {
content: "\e648";
}
......
{
"id": "3968711",
"name": "wms",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "2325947",
"name": "移入文件夹",
"font_class": "yiruwenjianjia",
"unicode": "e648",
"unicode_decimal": 58952
},
{
"icon_id": "2325948",
"name": "移出文件夹",
"font_class": "yichuwenjianjia",
"unicode": "e647",
"unicode_decimal": 58951
},
{
"icon_id": "3247660",
"name": "其他出库",
"font_class": "qitachuku",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "3247663",
"name": "其他入库",
"font_class": "qitaruku",
"unicode": "e614",
"unicode_decimal": 58900
},
{
"icon_id": "3703010",
"name": "库存盘点单",
"font_class": "navicon-kcpdd",
"unicode": "e65f",
"unicode_decimal": 58975
},
{
"icon_id": "4178310",
"name": "打印",
"font_class": "dayin",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "4464995",
"name": "出库",
"font_class": "chuku",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "4465007",
"name": "入库",
"font_class": "ruku",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "5044396",
"name": "打印机",
"font_class": "dayinji",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "6941969",
"name": "库存盘点",
"font_class": "kucunpandian-",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "7404458",
"name": "打勾",
"font_class": "dagou",
"unicode": "e782",
"unicode_decimal": 59266
},
{
"icon_id": "11019850",
"name": "出库",
"font_class": "chuku1",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "11239051",
"name": "退货",
"font_class": "tuihuo",
"unicode": "e649",
"unicode_decimal": 58953
},
{
"icon_id": "11957186",
"name": "星途学堂-打印/打印机",
"font_class": "xingtuxuetang-dayin-",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "12538472",
"name": "打印",
"font_class": "dayin1",
"unicode": "e718",
"unicode_decimal": 59160
},
{
"icon_id": "17121524",
"name": "原材料退料上架",
"font_class": "yuancailiaotuiliaoshangjia",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "17620090",
"name": "销售出库",
"font_class": "tubiaozhizuomoban-01",
"unicode": "e636",
"unicode_decimal": 58934
},
{
"icon_id": "20154005",
"name": "自助打印",
"font_class": "zizhudayindayin",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "20389229",
"name": "生产退料",
"font_class": "shengchantuiliaobeifen2x",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "20671376",
"name": "菜单栏-生产-生产入库",
"font_class": "caidanlan-shengchan-shengchanruku",
"unicode": "e661",
"unicode_decimal": 58977
},
{
"icon_id": "23291105",
"name": "退料记录",
"font_class": "tuiliaojilu",
"unicode": "e651",
"unicode_decimal": 58961
},
{
"icon_id": "23291883",
"name": "生产领料",
"font_class": "shengchanlingliao",
"unicode": "e657",
"unicode_decimal": 58967
},
{
"icon_id": "24272078",
"name": "检验单",
"font_class": "jianyandan",
"unicode": "e68b",
"unicode_decimal": 59019
},
{
"icon_id": "24732473",
"name": "打印",
"font_class": "dayin2",
"unicode": "eca6",
"unicode_decimal": 60582
},
{
"icon_id": "33177972",
"name": "订料入库",
"font_class": "dingliaoruku",
"unicode": "e6f9",
"unicode_decimal": 59129
},
{
"icon_id": "33178017",
"name": "采购入库",
"font_class": "caigouruku",
"unicode": "e6fa",
"unicode_decimal": 59130
},
{
"icon_id": "34263593",
"name": "条码查询",
"font_class": "tiaomachaxun",
"unicode": "e617",
"unicode_decimal": 58903
}
]
}
declare module 'vk-uview-ui'
\ No newline at end of file
declare module 'vk-uview-ui'
declare module 'text-encoding'
\ No newline at end of file
<template>
<view></view>
</template>
<script>
import scaninput from './scanInput.js';
scaninput.initScan();
scaninput.startScan();
export default {
name: 'scan-listener',
created() {
scaninput.install(this.scanHandle);
// uni.$on('scan_handle', this.scanHandle)
},
beforeDestroy() {
scaninput.uninstall(this.scanHandle);
},
methods: {
onEvent(event) {
// console.log(event.key)
if (event.key != 'Enter' && event.key != 'PrintScreen') {
// 拼接输入的值,Enter与PrintScreen是物理按钮要排除
this.inputVal = this.inputVal + event.key;
}
if (event.key == 'Enter') {
let reg = new RegExp('Shift', 'g'); //g代表全部
let reg2 = new RegExp('Unidentified', 'g'); //排除‘Unidentified’字符
let inputVal = this.inputVal;
inputVal = inputVal.replace(reg, '');
inputVal = inputVal.replace(reg2, '');
inputVal = inputVal.replace(/\s/g, '');
inputVal = inputVal.replace(/\r\n/g, '');
inputVal = inputVal.replace(/\n/g, '');
if (this.inputVal) {
// console.log('键盘监听模式')
this.$emit('scan', this.inputVal);
}
this.inputVal = '';
}
},
scanHandle(code) {
// console.log('广播模式')
this.$emit('scan', code);
},
},
data() {
return {
inputVal: '',
};
},
};
</script>
<script module="keyboard" lang="renderjs">
export default {
mounted () {
const onKey = (event) => {
const keys1 = ['type', 'timeStamp']
const keys2 = ['altKey', 'code', 'ctrlKey', 'isComposing', 'key', 'location', 'metaKey', 'repeat', 'shiftKey']
const keys3 = ['char', 'charCode', 'keyCode', 'keyIdentifier', 'keyLocation', 'which']
const data = {}
keys1.concat(keys2, keys3).forEach(key => data[key] = event[key])
this.$ownerInstance.callMethod('onEvent', data)
}
const names = ['keyup'] //'keydown',
names.forEach(name => {
document.addEventListener(name, onKey, false)
})
this.$on('hook:beforeDestroy', () => {
names.forEach(name => {
document.removeEventListener(name, onKey, false)
})
})
}
}
</script>
<style></style>
let main, receiver, filter, _codeQueryTag = false,
temp = [],
init = false,
start = false;
export default {
initScan() {
if (init) return
let _this = this;
main = plus.android.runtimeMainActivity(); //获取activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
//android.intent.ACTION_DECODE_DATA
filter.addAction(uni._qs_scanlistener_action || "android.intent.ACTION_DECODE_DATA"); // 换你的广播动作,你的pda设备里面看
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
//barcode_string
plus.android.importClass(intent);
let code = intent.getStringExtra(uni._qs_scanlistener_label ||
"barcode_string"); // 换你的广播标签,你的pda设备里面看
_this.queryCode(code);
}
});
init = true
},
startScan() {
if (!start) {
start = true
main.registerReceiver(receiver, filter);
}
},
stopScan() {
if (start) {
start = false
main.unregisterReceiver(receiver);
}
},
install(fn) {
if (typeof fn == 'function' && !~temp.indexOf(fn)) temp.push(fn)
},
uninstall(fn) {
if (typeof fn == 'function') {
const index = temp.find(i => i == fn)
if (~index) temp.splice(index, 1)
}
},
queryCode: function(code) {
//防重复
// if (_codeQueryTag) return false;
// _codeQueryTag = true;
// setTimeout(function() {
// _codeQueryTag = false;
// }, 150);
if (temp && temp.length) {
temp[temp.length - 1](code)
}
uni.vibrateShort()
uni.$emit("qs_scanlistener_handle", code);
}
}
\ No newline at end of file
{
"id": "qs-scanlistener",
"displayName": "qs-scanlistener PDA扫码",
"version": "1.0.0",
"description": "PDA扫码 兼容广播和键盘",
"keywords": [
"pda",
"扫码"
],
"repository": "",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"type": "component-vue",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "y"
},
"App": {
"app-vue": "y",
"app-nvue": "n"
},
"H5-mobile": {
"Safari": "n",
"Android Browser": "n",
"微信浏览器(Android)": "n",
"QQ浏览器(Android)": "n"
},
"H5-pc": {
"Chrome": "n",
"IE": "n",
"Edge": "n",
"Firefox": "n",
"Safari": "n"
},
"小程序": {
"微信": "n",
"阿里": "n",
"百度": "n",
"字节跳动": "n",
"QQ": "n",
"钉钉": "n",
"快手": "n",
"飞书": "n",
"京东": "n"
},
"快应用": {
"华为": "n",
"联盟": "n"
}
}
}
}
}
\ No newline at end of file
## qs-scanlistener PDA扫码
## 支持广播和键盘
---
### 广播动作可在main.js设置uni._qs_scanlistener_action = 你的广播动作名称, 默认android.intent.ACTION_DECODE_DATA
### 广播标签可在main.js设置uni._qs_scanlistener_label = 你的广播标签名称, 默认barcode_string
---
### 扫码结果也可以uni.$on('qs_scanlistener_handle', code=>{}) 中获取
---
Template
```html
<qs-scanlistener @scan="scan"></qs-scanlistener>
```
js
```javascript
methods: {
scan(code) {
console.log(code)
}
}
```
\ No newline at end of file
// @use "sass:math";
@import '../tools/functions.scss';
@import '../tools/functions.scss';
// 间距基础倍数
$uni-space-root: 2 !default;
// 边框半径默认值
$uni-radius-root:5px !default;
$uni-radius-root: 5px !default;
$uni-radius: () !default;
// 边框半径断点
$uni-radius: map-deep-merge(
(
0: 0,
// TODO 当前版本暂时不支持 sm 属性
// 'sm': math.div($uni-radius-root, 2),
null: $uni-radius-root,
'lg': $uni-radius-root * 2,
'xl': $uni-radius-root * 6,
'pill': 9999px,
'circle': 50%
),
$uni-radius
(
0: 0,
// TODO 当前版本暂时不支持 sm 属性
// 'sm': math.div($uni-radius-root, 2),
null: $uni-radius-root,
'lg': $uni-radius-root * 2,
'xl': $uni-radius-root * 6,
'pill': 9999px,
'circle': 50%,
),
$uni-radius
);
// 字体家族
$body-font-family: 'Roboto', sans-serif !default;
......@@ -26,108 +26,109 @@ $heading-font-family: $body-font-family !default;
$uni-headings: () !default;
$letterSpacing: -0.01562em;
$uni-headings: map-deep-merge(
(
'h1': (
size: 32px,
weight: 300,
line-height: 50px,
// letter-spacing:-0.01562em
),
'h2': (
size: 28px,
weight: 300,
line-height: 40px,
// letter-spacing: -0.00833em
),
'h3': (
size: 24px,
weight: 400,
line-height: 32px,
// letter-spacing: normal
),
'h4': (
size: 20px,
weight: 400,
line-height: 30px,
// letter-spacing: 0.00735em
),
'h5': (
size: 16px,
weight: 400,
line-height: 24px,
// letter-spacing: normal
),
'h6': (
size: 14px,
weight: 500,
line-height: 18px,
// letter-spacing: 0.0125em
),
'subtitle': (
size: 12px,
weight: 400,
line-height: 20px,
// letter-spacing: 0.00937em
),
'body': (
font-size: 14px,
font-weight: 400,
line-height: 22px,
// letter-spacing: 0.03125em
),
'caption': (
'size': 12px,
'weight': 400,
'line-height': 20px,
// 'letter-spacing': 0.03333em,
// 'text-transform': false
)
(
'h1': (
size: 32px,
weight: 300,
line-height: 50px,
// letter-spacing:-0.01562em
),
'h2': (
size: 28px,
weight: 300,
line-height: 40px,
// letter-spacing: -0.00833em
),
'h3': (
size: 24px,
weight: 400,
line-height: 32px,
// letter-spacing: normal
),
'h4': (
size: 20px,
weight: 400,
line-height: 30px,
// letter-spacing: 0.00735em
),
'h5': (
size: 16px,
weight: 400,
line-height: 24px,
// letter-spacing: normal
),
'h6': (
size: 14px,
weight: 500,
line-height: 18px,
// letter-spacing: 0.0125em
),
$uni-headings
'subtitle': (
size: 12px,
weight: 400,
line-height: 20px,
// letter-spacing: 0.00937em
),
'page': (
font-size: 14px,
font-weight: 400,
line-height: 22px,
// letter-spacing: 0.03125em
),
'caption': (
'size': 12px,
'weight': 400,
'line-height': 20px,
// 'letter-spacing': 0.03333em,
// 'text-transform': false,,
),
),
$uni-headings
);
// 主色
$uni-primary: #2979ff !default;
$uni-primary-disable:lighten($uni-primary,20%) !default;
$uni-primary-light: lighten($uni-primary,25%) !default;
$uni-primary-disable: lighten($uni-primary, 20%) !default;
$uni-primary-light: lighten($uni-primary, 25%) !default;
// 辅助色
// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
$uni-success: #18bc37 !default;
$uni-success-disable:lighten($uni-success,20%) !default;
$uni-success-light: lighten($uni-success,25%) !default;
$uni-success-disable: lighten($uni-success, 20%) !default;
$uni-success-light: lighten($uni-success, 25%) !default;
$uni-warning: #f3a73f !default;
$uni-warning-disable:lighten($uni-warning,20%) !default;
$uni-warning-light: lighten($uni-warning,25%) !default;
$uni-warning-disable: lighten($uni-warning, 20%) !default;
$uni-warning-light: lighten($uni-warning, 25%) !default;
$uni-error: #e43d33 !default;
$uni-error-disable:lighten($uni-error,20%) !default;
$uni-error-light: lighten($uni-error,25%) !default;
$uni-error-disable: lighten($uni-error, 20%) !default;
$uni-error-light: lighten($uni-error, 25%) !default;
$uni-info: #8f939c !default;
$uni-info-disable:lighten($uni-info,20%) !default;
$uni-info-light: lighten($uni-info,25%) !default;
$uni-info-disable: lighten($uni-info, 20%) !default;
$uni-info-light: lighten($uni-info, 25%) !default;
// 中性色
// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
$uni-main-color: #3a3a3a !default; // 主要文字
$uni-base-color: #6a6a6a !default; // 常规文字
$uni-secondary-color: #909399 !default; // 次要文字
$uni-extra-color: #c7c7c7 !default; // 辅助说明
$uni-main-color: #3a3a3a !default; // 主要文字
$uni-base-color: #6a6a6a !default; // 常规文字
$uni-secondary-color: #909399 !default; // 次要文字
$uni-extra-color: #c7c7c7 !default; // 辅助说明
// 边框颜色
$uni-border-1: #F0F0F0 !default;
$uni-border-2: #EDEDED !default;
$uni-border-3: #DCDCDC !default;
$uni-border-4: #B9B9B9 !default;
$uni-border-1: #f0f0f0 !default;
$uni-border-2: #ededed !default;
$uni-border-3: #dcdcdc !default;
$uni-border-4: #b9b9b9 !default;
// 常规色
$uni-black: #000000 !default;
$uni-white: #ffffff !default;
$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
$uni-transparent: rgba(
$color: #000000,
$alpha: 0,
) !default;
// 背景色
$uni-bg-color: #f7f7f7 !default;
......@@ -138,9 +139,24 @@ $uni-spacing-base: 15px !default;
$uni-spacing-lg: 30px !default;
// 阴影
$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
$uni-shadow-sm: 0 0 5px
rgba(
$color: #d8d8d8,
$alpha: 0.5,
) !default;
$uni-shadow-base: 0 1px 8px 1px
rgba(
$color: #a5a5a5,
$alpha: 0.2,
) !default;
$uni-shadow-lg: 0px 1px 10px 2px
rgba(
$color: #a5a4a4,
$alpha: 0.5,
) !default;
// 蒙版
$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;
$uni-mask: rgba(
$color: #000000,
$alpha: 0.4,
) !default;
import { TextEncoder } from 'text-encoding'
export const createNew = () => {
var jpPrinter = {} as any
var data = ''
var command = [] as any
jpPrinter.name = '蓝牙打印机'
jpPrinter.init = function () { }
jpPrinter.addCommand = function (content: any) {
//将指令转成数组装起
var code = new TextEncoder('gb18030', {
NONSTANDARD_allowLegacyEncoding: true,
}).encode(content)
for (var i = 0; i < code.length; ++i) {
command.push(code[i])
}
}
jpPrinter.setSize = function (pageWidght: any, pageHeight: any) {
//设置页面大小
data =
'SIZE ' +
pageWidght.toString() +
' mm' +
',' +
pageHeight.toString() +
' mm' +
'\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setSpeed = function (printSpeed: any) {
//设置打印机速度
data = 'SPEED ' + printSpeed.toString() + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setDensity = function (printDensity: any) {
//设置打印机浓度
data = 'DENSITY ' + printDensity.toString() + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setGap = function (printGap: any) {
//传感器
data = 'GAP ' + printGap.toString() + ' mm,0 mm\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBline = function (printBline: any) {
//黑标纸
data = 'BLINE ' + printBline.toString() + ' mm,0 mm\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setCountry = function (country: any) {
//选择国际字符集
/*
001:USA
002:French
003:Latin America
034:Spanish
039:Italian
044:United Kingdom
046:Swedish
047:Norwegian
049:German
*/
data = 'COUNTRY ' + country + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setCodepage = function (codepage: any) {
//选择国际代码页
/*
8-bit codepage 字符集代表
437:United States
850:Multilingual
852:Slavic
860:Portuguese
863:Canadian/French
865:Nordic
Windows code page
1250:Central Europe
1252:Latin I
1253:Greek
1254:Turkish
以下代码页仅限于 12×24 dot 英数字体
WestEurope:WestEurope
Greek:Greek
Hebrew:Hebrew
EastEurope:EastEurope
Iran:Iran
IranII:IranII
Latvian:Latvian
Arabic:Arabic
Vietnam:Vietnam
Uygur:Uygur
Thai:Thai
1252:Latin I
1257:WPC1257
1251:WPC1251
866:Cyrillic
858:PC858
747:PC747
864:PC864
1001:PC100
*/
data = 'CODEPAGE ' + codepage + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setCls = function () {
//清除打印机缓存
data = 'CLS\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setFeed = function (feed: any) {
//将纸向前推出n
data = 'FEED ' + feed + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBackFeed = function (backup: any) {
//将纸向后回拉n
data = 'BACKFEED ' + backup + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setDirection = function (direction: any) {
//设置打印方向,参考编程手册
data = 'DIRECTION ' + direction + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setReference = function (x: any, y: any) {
//设置坐标原点,与打印方向有关
data = 'REFERENCE ' + x + ',' + y + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setFromfeed = function () {
//根据Size进一张标签纸
data = 'FORMFEED\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setHome = function () {
//根据Size找到下一张标签纸的位置
data = 'HOME\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setSound = function (level: any, interval: any) {
//控制蜂鸣器
data = 'SOUND ' + level + ',' + interval + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setLimitfeed = function (limit: any) {
// 检测垂直间距
data = 'LIMITFEED ' + limit + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBar = function (x: any, y: any, width: any, height: any) {
//绘制线条
data = 'BAR ' + x + ',' + y + ',' + width + ',' + height + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBox = function (x_start: any, y_start: any, x_end: any, y_end: any, thickness: any) {
//绘制方框
data =
'BOX ' +
x_start +
',' +
y_start +
',' +
x_end +
',' +
y_end +
',' +
thickness +
'\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setErase = function (x_start: any, y_start: any, x_width: any, y_height: any) {
//清除指定区域的数据
data =
'ERASE ' + x_start + ',' + y_start + ',' + x_width + ',' + y_height + '\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setReverse = function (x_start: any, y_start: any, x_width: any, y_height: any) {
//将指定的区域反相打印
data =
'REVERSE ' +
x_start +
',' +
y_start +
',' +
x_width +
',' +
y_height +
'\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setText = function (x: any, y: any, font: any, x_: any, y_: any, str: any) {
//打印文字
data =
'TEXT ' +
x +
',' +
y +
',"' +
font +
'",' +
0 +
',' +
x_ +
',' +
y_ +
',' +
'"' +
str +
'"\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setQR = function (x: any, y: any, level: any, width: any, mode: any, content: any) {
//打印二维码
data =
'QRCODE ' +
x +
',' +
y +
',' +
level +
',' +
width +
',' +
mode +
',' +
0 +
',"' +
content +
'"\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBarCode = function (
x: any,
y: any,
codetype: any,
height: any,
readable: any,
narrow: any,
wide: any,
content: any
) {
//打印条形码
data =
'BARCODE ' +
x +
',' +
y +
',"' +
codetype +
'",' +
height +
',' +
readable +
',' +
0 +
',' +
narrow +
',' +
wide +
',"' +
content +
'"\r\n'
jpPrinter.addCommand(data)
}
jpPrinter.setBitmap = function (x: any, y: any, mode: any, res: any) {
//添加图片,res为画布参数
// console.log(res)
var width: any = (((Number(res.width) + 7) / 8) * 8) / 8
var height = res.height
var time = 1
var temp = res.data.length - width * 32
var pointList = []
var inverted_Data = []
var correct_Data = []
// console.log(width + '--' + height)
data = 'BITMAP ' + x + ',' + y + ',' + width + ',' + height + ',' + mode + ','
jpPrinter.addCommand(data)
for (var i = 0; i < height; ++i) {
// console.log(temp)
for (var j = 0; j < width; ++j) {
for (var k = 0; k < 32; k += 4) {
if (
res.data[temp] == 0 &&
res.data[temp + 1] == 0 &&
res.data[temp + 2] == 0 &&
res.data[temp + 3] == 0
) {
pointList.push(1)
} else {
pointList.push(0)
}
temp += 4
}
}
time++
temp = res.data.length - width * 32 * time
}
for (let i = 0; i < pointList.length; i += 8) {
var p =
pointList[i] * 128 +
pointList[i + 1] * 64 +
pointList[i + 2] * 32 +
pointList[i + 3] * 16 +
pointList[i + 4] * 8 +
pointList[i + 5] * 4 +
pointList[i + 6] * 2 +
pointList[i + 7]
inverted_Data.push(p)
correct_Data.push(p)
}
for (let i = height; i > 0; i--) {
for (var j = 0; j < width; ++j) {
correct_Data[(height - i - 1) * width + j] = inverted_Data[i * width + j]
}
}
for (let i = 0; i < correct_Data.length; ++i) {
command.push(correct_Data[i])
}
}
jpPrinter.setPagePrint = function () {
//打印页面
data = 'PRINT 1,1\r\n'
jpPrinter.addCommand(data)
}
//获取打印数据
jpPrinter.getData = function () {
return command
}
return jpPrinter
}
//判断两个对象是否相同(包含绝对相等和他们是否有相同的形状)
function looseEqual(a: any, b: any): any {
if (a === b) {
//如果是绝对相等就直接返回true
return true
}
//如果不是绝对相等就哦按的他们是否有相同的形状
var isObjectA = isObject(a)
var isObjectB = isObject(b)
if (isObjectA && isObjectB) {
//两个均是对象
try {
var isArrayA = Array.isArray(a)
var isArrayB = Array.isArray(b)
if (isArrayA && isArrayB) {
//如果都是数组
if (a.length === b.length) {
//如果长度相等
return a.every(function (e: any, i: any) {
//用every和递归来比对a数组和b数组的每个元素,并返回
return looseEqual(e, b[i])
})
}
//长度都不等直接返回false
return false
} else if (a instanceof Date && b instanceof Date) {
//如果是Date 则直接getTime 比较
return a.getTime() === b.getTime()
} else if (!isArrayA && !isArrayB) {
//对象的比较
//拿到两个对象的key
var keysA = Object.keys(a)
var keysB = Object.keys(b)
if (keysA.length === keysB.length) {
//如果keys相等
return keysA.every(function (key: any) {
//用every和递归来比对a对象和b对象的每个元素值,并返回
return looseEqual(a[key], b[key])
})
}
//长度都不等直接返回false
return false
} else {
return false
}
} catch (e) {
return false
}
} else if (!isObjectA && !isObjectB) {
//如果都不是对象则按String来处理
return String(a) === String(b)
} else {
return false
}
}
function isObject(obj: any) {
return obj !== null && typeof obj === 'object'
}
export { looseEqual }
function zconfirm(msg: string, callBackFun?: any) {
export const zconfirm = (msg: string, callBackFun?: any) => {
uni.showModal({
content: msg,
success: function (res) {
success(res) {
if (res.confirm) {
callBackFun(true)
} else if (res.cancel) {
......@@ -10,19 +10,19 @@ function zconfirm(msg: string, callBackFun?: any) {
},
})
}
function zalert(msg: string, callBackFun?: any) {
export const zalert = (msg: string, callBackFun?: any) => {
uni.showModal({
title: '提示',
content: msg,
showCancel: false,
success: function () {
success() {
if (callBackFun) {
callBackFun()
}
},
})
}
function toast(msg: string) {
export const toast = (msg: string) => {
uni.showToast({
title: msg,
duration: 2000,
......@@ -31,22 +31,13 @@ function toast(msg: string) {
})
}
const deepClone = function (origin: any, target: object = {}) {
for (const prop in target) {
if (target[prop] !== null && typeof target[prop] === 'object') {
origin[prop] = Object.prototype.toString.call(target[prop]) === '[object Array]' ? [] : {}
deepClone(origin[prop], target[prop])
} else {
origin[prop] = target[prop]
}
}
}
export default {
zconfirm,
zalert,
toast,
deepClone
export const sLoading = (msg: string = '加载中...') => {
uni.showLoading({
title: msg,
mask: true
})
}
export const hLoading = () => {
uni.hideLoading()
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -3,52 +3,52 @@
"@ampproject/remapping@^2.1.2", "@ampproject/remapping@^2.2.0":
version "2.2.0"
resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
version "2.2.1"
resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
dependencies:
"@jridgewell/gen-mapping" "^0.1.0"
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6":
version "7.18.6"
resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
dependencies:
"@babel/highlight" "^7.18.6"
"@babel/compat-data@^7.20.5":
version "7.21.0"
resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298"
integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==
"@babel/compat-data@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f"
integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==
"@babel/core@^7.20.5", "@babel/core@^7.20.7":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/core/-/core-7.21.3.tgz#cf1c877284a469da5d1ce1d1e53665253fae712e"
integrity sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659"
integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.21.3"
"@babel/helper-compilation-targets" "^7.20.7"
"@babel/code-frame" "^7.21.4"
"@babel/generator" "^7.21.4"
"@babel/helper-compilation-targets" "^7.21.4"
"@babel/helper-module-transforms" "^7.21.2"
"@babel/helpers" "^7.21.0"
"@babel/parser" "^7.21.3"
"@babel/parser" "^7.21.4"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.3"
"@babel/types" "^7.21.3"
"@babel/traverse" "^7.21.4"
"@babel/types" "^7.21.4"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.2"
semver "^6.3.0"
"@babel/generator@^7.20.5", "@babel/generator@^7.21.3":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.3.tgz#232359d0874b392df04045d72ce2fd9bb5045fce"
integrity sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==
"@babel/generator@^7.20.5", "@babel/generator@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc"
integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==
dependencies:
"@babel/types" "^7.21.3"
"@babel/types" "^7.21.4"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
......@@ -60,21 +60,21 @@
dependencies:
"@babel/types" "^7.18.6"
"@babel/helper-compilation-targets@^7.20.7":
version "7.20.7"
resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb"
integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==
"@babel/helper-compilation-targets@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656"
integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==
dependencies:
"@babel/compat-data" "^7.20.5"
"@babel/helper-validator-option" "^7.18.6"
"@babel/compat-data" "^7.21.4"
"@babel/helper-validator-option" "^7.21.0"
browserslist "^4.21.3"
lru-cache "^5.1.1"
semver "^6.3.0"
"@babel/helper-create-class-features-plugin@^7.21.0":
version "7.21.0"
resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz#64f49ecb0020532f19b1d014b03bccaa1ab85fb9"
integrity sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18"
integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==
dependencies:
"@babel/helper-annotate-as-pure" "^7.18.6"
"@babel/helper-environment-visitor" "^7.18.9"
......@@ -113,11 +113,11 @@
"@babel/types" "^7.21.0"
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6":
version "7.18.6"
resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af"
integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==
dependencies:
"@babel/types" "^7.18.6"
"@babel/types" "^7.21.4"
"@babel/helper-module-transforms@^7.21.2":
version "7.21.2"
......@@ -140,7 +140,7 @@
dependencies:
"@babel/types" "^7.18.6"
"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2":
"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.20.2":
version "7.20.2"
resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
......@@ -188,7 +188,7 @@
resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
"@babel/helper-validator-option@^7.18.6":
"@babel/helper-validator-option@^7.21.0":
version "7.21.0"
resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180"
integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
......@@ -211,10 +211,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.16.4", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3"
integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==
"@babel/parser@^7.16.4", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
"@babel/plugin-syntax-import-meta@^7.10.4":
version "7.10.4"
......@@ -224,18 +224,18 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-jsx@^7.0.0":
version "7.18.6"
resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2"
integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==
dependencies:
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-syntax-typescript@^7.20.0":
version "7.20.0"
resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7"
integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8"
integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==
dependencies:
"@babel/helper-plugin-utils" "^7.19.0"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-transform-typescript@^7.20.2", "@babel/plugin-transform-typescript@^7.20.7":
version "7.21.3"
......@@ -248,9 +248,9 @@
"@babel/plugin-syntax-typescript" "^7.20.0"
"@babel/standalone@^7.20.13":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.21.3.tgz#c723905005ebdb5a13230636675f26262c97255a"
integrity sha512-c8feJERTAHlBEvihQUWrnUMLg2GzrwSnE76WDyN3fRJWju10pHeRy8r3wniIq0q7zPLhHd71PQtFVsn1H+Qscw==
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.21.4.tgz#f1a7131775df87c526cc393c36d013acd2b3c609"
integrity sha512-Rw4nGqH/iyVeYxARKcz7iGP+njkPsVqJ45TmXMONoGoxooWjXCAs+CUcLeAZdBGCLqgaPvHKCYvIaDT2Iq+KfA==
"@babel/template@^7.0.0", "@babel/template@^7.20.7":
version "7.20.7"
......@@ -261,26 +261,26 @@
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/traverse@^7.0.0", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.3":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.3.tgz#4747c5e7903d224be71f90788b06798331896f67"
integrity sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==
"@babel/traverse@^7.0.0", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36"
integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.21.3"
"@babel/code-frame" "^7.21.4"
"@babel/generator" "^7.21.4"
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.21.3"
"@babel/types" "^7.21.3"
"@babel/parser" "^7.21.4"
"@babel/types" "^7.21.4"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3":
version "7.21.3"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.21.3.tgz#4865a5357ce40f64e3400b0f3b737dc6d4f64d05"
integrity sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==
"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4":
version "7.21.4"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
dependencies:
"@babel/helper-string-parser" "^7.19.4"
"@babel/helper-validator-identifier" "^7.19.1"
......@@ -876,18 +876,10 @@
"@intlify/core-base" "9.2.2"
"@intlify/shared" "9.2.2"
"@jridgewell/gen-mapping@^0.1.0":
version "0.1.1"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
dependencies:
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
version "0.3.2"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
version "0.3.3"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
dependencies:
"@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
......@@ -898,28 +890,33 @@
resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
"@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/source-map@^0.3.2":
version "0.3.2"
resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
version "0.3.3"
resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
dependencies:
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
"@jridgewell/sourcemap-codec@1.4.14":
version "1.4.14"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
version "1.4.15"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.17"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
version "0.3.18"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
dependencies:
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
......@@ -985,9 +982,9 @@
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
"@types/node@*", "@types/node@^18.7.14":
version "18.15.3"
resolved "https://registry.npmmirror.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014"
integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==
version "18.15.11"
resolved "https://registry.npmmirror.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f"
integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==
"@types/normalize-package-data@^2.4.0":
version "2.4.1"
......@@ -1602,9 +1599,9 @@ camelcase@^6.0.0:
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464:
version "1.0.30001467"
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001467.tgz#1afc9c16ed61f50dd87139da87ca43a3e0051c77"
integrity sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q==
version "1.0.30001478"
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a"
integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==
caseless@~0.12.0:
version "0.12.0"
......@@ -1795,9 +1792,9 @@ copy-descriptor@^0.1.0:
integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
core-js@^3.27.2:
version "3.29.1"
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.29.1.tgz#40ff3b41588b091aaed19ca1aa5cb111803fa9a6"
integrity sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==
version "3.30.1"
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba"
integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==
core-util-is@1.0.2:
version "1.0.2"
......@@ -2064,9 +2061,9 @@ ee-first@1.1.1:
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.4.284:
version "1.4.332"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.332.tgz#b981fcf61587abe03c24b301b2cfbdcc2b70e8a5"
integrity sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw==
version "1.4.363"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.363.tgz#a3d51d16169d8f212f00bafb78cf0667e24c3647"
integrity sha512-ReX5qgmSU7ybhzMuMdlJAdYnRhT90UB3k9M05O5nF5WH3wR5wgdJjXw0uDeFyKNhmglmQiOxkAbzrP0hMKM59g==
emoji-regex@^8.0.0:
version "8.0.0"
......@@ -2667,9 +2664,9 @@ hosted-git-info@^4.0.1:
lru-cache "^6.0.0"
html-tags@^3.1.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
version "3.3.1"
resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
htmlparser2@^3.8.3:
version "3.10.1"
......@@ -2845,10 +2842,10 @@ is-buffer@^1.1.5:
resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-core-module@^2.5.0, is-core-module@^2.9.0:
version "2.11.0"
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
is-core-module@^2.11.0, is-core-module@^2.5.0:
version "2.12.0"
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4"
integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
dependencies:
has "^1.0.3"
......@@ -3084,7 +3081,7 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klona@^2.0.4:
klona@^2.0.6:
version "2.0.6"
resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22"
integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
......@@ -3413,9 +3410,9 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
yallist "^4.0.0"
minipass@^4.0.0:
version "4.2.5"
resolved "https://registry.npmmirror.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb"
integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==
version "4.2.8"
resolved "https://registry.npmmirror.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a"
integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==
minizlib@^2.0.0, minizlib@^2.1.1:
version "2.1.2"
......@@ -3464,9 +3461,9 @@ nan@^2.13.2:
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
version "3.3.6"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
nanomatch@^1.2.1:
version "1.2.13"
......@@ -3789,9 +3786,9 @@ pinia-plugin-persistedstate@^3.1.0:
integrity sha512-8UN+vYMEPBdgNLwceY08mi5olI0wkYaEb8b6hD6xW7SnBRuPydWHlEhZvUWgNb/ibuf4PvufpvtS+dmhYjJQOw==
pinia@^2.0.21:
version "2.0.33"
resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.33.tgz#b70065be697874d5824e9792f59bd5d87ddb5e7d"
integrity sha512-HOj1yVV2itw6rNIrR2f7+MirGNxhORjrULL8GWgRwXsGSvEqIQ+SE0MYt6cwtpegzCda3i+rVTZM+AM7CG+kRg==
version "2.0.34"
resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.34.tgz#6c0c84f06b631c30c030633fa64e525c609105a9"
integrity sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue-demi "*"
......@@ -4149,11 +4146,11 @@ resolve-url@^0.2.1:
integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.1:
version "1.22.1"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
version "1.22.2"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
dependencies:
is-core-module "^2.9.0"
is-core-module "^2.11.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
......@@ -4180,9 +4177,9 @@ rimraf@^3.0.2:
glob "^7.1.3"
rollup@^3.7.0:
version "3.19.1"
resolved "https://registry.npmmirror.com/rollup/-/rollup-3.19.1.tgz#2b3a31ac1ff9f3afab2e523fa687fef5b0ee20fc"
integrity sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==
version "3.20.2"
resolved "https://registry.npmmirror.com/rollup/-/rollup-3.20.2.tgz#f798c600317f216de2e4ad9f4d9ab30a89b690ff"
integrity sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==
optionalDependencies:
fsevents "~2.3.2"
......@@ -4231,17 +4228,17 @@ sass-graph@^4.0.1:
yargs "^17.2.1"
sass-loader@^13.0.2:
version "13.2.0"
resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3"
integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==
version "13.2.2"
resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.2.tgz#f97e803993b24012c10d7ba9676548bf7a6b18b9"
integrity sha512-nrIdVAAte3B9icfBiGWvmMhT/D+eCDwnk+yA7VE/76dp/WkHX+i44Q/pfo71NYbwj0Ap+PGsn0ekOuU1WFJ2AA==
dependencies:
klona "^2.0.4"
klona "^2.0.6"
neo-async "^2.6.2"
sass@^1.54.8:
version "1.59.3"
resolved "https://registry.npmmirror.com/sass/-/sass-1.59.3.tgz#a1ddf855d75c70c26b4555df4403e1bbf8e4403f"
integrity sha512-QCq98N3hX1jfTCoUAsF3eyGuXLsY7BCnCEg9qAact94Yc21npG2/mVOqoDvE0fCbWDqiM4WlcJQla0gWG2YlxQ==
version "1.62.0"
resolved "https://registry.npmmirror.com/sass/-/sass-1.62.0.tgz#3686b2195b93295d20765135e562366b33ece37d"
integrity sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
......@@ -4266,9 +4263,9 @@ semver@^6.3.0:
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.4, semver@^7.3.5:
version "7.3.8"
resolved "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
version "7.4.0"
resolved "https://registry.npmmirror.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318"
integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==
dependencies:
lru-cache "^6.0.0"
......@@ -4656,9 +4653,9 @@ svgo@^2.8.0:
stable "^0.1.8"
systemjs@^6.13.0:
version "6.14.0"
resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.0.tgz#0b6665de005b49624e94a2a5b5b936231e3cf97e"
integrity sha512-OMf+kFCYG9fLQerUyw/QVIPfZ+lo579R+usrDzSrZAkvMl6B0tHtc4rUP7DFaPCr7Sy6p5DYD4V9OCF1Sp6+vA==
version "6.14.1"
resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.1.tgz#95a580b91b50d0d69ff178ed4816f0ddbcea23c1"
integrity sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ==
tapable@^2.2.0:
version "2.2.1"
......@@ -4678,15 +4675,20 @@ tar@^6.0.2, tar@^6.1.2:
yallist "^4.0.0"
terser@^5.4.0:
version "5.16.6"
resolved "https://registry.npmmirror.com/terser/-/terser-5.16.6.tgz#f6c7a14a378ee0630fbe3ac8d1f41b4681109533"
integrity sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==
version "5.16.9"
resolved "https://registry.npmmirror.com/terser/-/terser-5.16.9.tgz#7a28cb178e330c484369886f2afd623d9847495f"
integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==
dependencies:
"@jridgewell/source-map" "^0.3.2"
acorn "^8.5.0"
commander "^2.20.0"
source-map-support "~0.5.20"
text-encoding@^0.7.0:
version "0.7.0"
resolved "https://registry.npmmirror.com/text-encoding/-/text-encoding-0.7.0.tgz#f895e836e45990624086601798ea98e8f36ee643"
integrity sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
......@@ -4935,9 +4937,9 @@ vk-uview-ui@^1.4.4:
integrity sha512-6IkQqDPEakzj095IoEpuhgQ6FiR/htft0Lg//xt4aN+/UDdAQsGg9Zn2v4mmhTl5Xk75jg8dRjFle0n2dtoIlA==
vue-demi@*:
version "0.13.11"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99"
integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==
version "0.14.0"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz#dcfd9a9cf9bb62ada1582ec9042372cf67ca6190"
integrity sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==
vue-i18n@^9.1.9:
version "9.2.2"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论