Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wms-app
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘旭
wms-app
Commits
df3eb3b0
提交
df3eb3b0
authored
5月 06, 2023
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提交最新代码
上级
7ffeb46d
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
935 行增加
和
191 行删除
+935
-191
apply.ts
src/api/apply.ts
+18
-8
login.ts
src/api/login.ts
+1
-1
FormListItem.vue
src/pages/apply/component/FormListItem.vue
+249
-10
demo.ts
src/pages/apply/component/demo.ts
+166
-0
formDataPage.vue
src/pages/apply/formDataPage.vue
+3
-1
formDetail.vue
src/pages/apply/formDetail.vue
+220
-88
index.vue
src/pages/apply/index.vue
+5
-15
index.vue
src/pages/blueTooth/index.vue
+8
-11
printTest.vue
src/pages/blueTooth/printTest.vue
+23
-3
qs-scanlistener.vue
...anlistener/components/qs-scanlistener/qs-scanlistener.vue
+26
-25
scanInput.js
...s/qs-scanlistener/components/qs-scanlistener/scanInput.js
+12
-17
tsc.ts
src/utils/ble/tsc.ts
+1
-1
config.ts
src/utils/config.ts
+3
-3
print.ts
src/utils/print.ts
+169
-0
util.ts
src/utils/util.ts
+19
-0
vite.config.ts
vite.config.ts
+12
-8
没有找到文件。
src/api/apply.ts
浏览文件 @
df3eb3b0
import
request
from
'@/utils/request'
import
request
from
'@/utils/request'
;
// 获取发布菜单
export
const
getMenuTree
=
()
=>
request
(
'/
LowCodePlatform/center/permission/getMenuTree'
,
'GET'
)
export
const
getMenuTree
=
()
=>
request
(
'/
lowcodeplatform-system/center/permission/getMenuTree'
,
'GET'
);
export
const
getMenuList
=
()
=>
request
(
'/
LowCodePlatform/user/getMenuList'
,
'POST'
)
export
const
getMenuList
=
()
=>
request
(
'/
lowcodeplatform-system/user/getMenuList'
,
'POST'
);
export
const
getBusinessList
=
(
data
:
any
)
=>
request
(
'/LowCodePlatform/center/business/list'
,
'GET'
,
data
)
export
const
getBusinessList
=
(
data
:
any
)
=>
request
(
'/lowcodeplatform-system/center/business/list'
,
'POST'
,
data
);
export
const
getMetadataList
=
()
=>
request
(
'/
LowCodePlatform/center/metadata/list'
,
'GET'
)
export
const
getMetadataList
=
()
=>
request
(
'/
lowcodeplatform-system/center/metadata/list'
,
'GET'
);
// 获取元数据
export
const
getMetadata
=
(
formId
:
string
)
=>
request
(
'/LowCodePlatform/center/metadata/detail'
,
'GET'
,
{
formId
})
export
const
getMetadata
=
(
formId
:
string
)
=>
request
(
'/lowcodeplatform-system/center/metadata/detail'
,
'GET'
,
{
formId
});
// 获取序列号扫描数据
export
const
getDataBySerialNumber
=
(
data
:
any
)
=>
request
(
'/wms/serialNumber/getDataBySerialNumber'
,
'GET'
,
data
)
\ No newline at end of file
export
const
getDataBySerialNumber
=
(
data
:
any
)
=>
request
(
'/wms-system/serialNumber/getDataBySerialNumber'
,
'GET'
,
data
);
// 获取打印信息
export
const
getPrintData
=
(
data
:
any
)
=>
request
(
'/wms-system/labelRule/print/serial'
,
'POST'
,
data
);
// 获取打印信息
export
const
createBusiness
=
(
data
:
any
)
=>
request
(
'/lowcodeplatform-system/center/business/createBatch'
,
'POST'
,
data
);
src/api/login.ts
浏览文件 @
df3eb3b0
import
request
from
'@/utils/request'
// 登录
export
const
login
=
(
data
:
any
)
=>
request
(
'/
LowCodePlatfor
m/auth/login/app'
,
'POST'
,
data
)
export
const
login
=
(
data
:
any
)
=>
request
(
'/
lowcodeplatform-syste
m/auth/login/app'
,
'POST'
,
data
)
src/pages/apply/component/FormListItem.vue
浏览文件 @
df3eb3b0
...
...
@@ -6,6 +6,9 @@
<textl>
{{
item
.
value
}}
</textl>
</view>
</block>
<u-divider
v-show=
"is_WMS_Receive"
color=
"#fa3534"
>
<u-button
type=
"primary"
size=
"mini"
@
tap=
"handlePrint"
>
打印
</u-button>
</u-divider>
<!--
<u-row
:gutter=
"12"
class=
"box-list"
>
<u-col
:span=
"10"
>
<u-row>
...
...
@@ -29,11 +32,21 @@
<!--
</u-col>
</u-row>
-->
</view>
<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>
</
template
>
<
script
setup
lang=
'ts'
>
import
{
ref
}
from
'vue'
<
script
setup
lang=
"ts"
>
import
{
ref
,
computed
,
reactive
}
from
'vue'
import
{
useBlueTooth
}
from
'@/store/modules/bluetooth'
;
import
{
createNew
}
from
'@/utils/ble/tsc'
import
{
data
}
from
'./demo'
import
{
getPrintData
}
from
'@/api/apply'
// import { init, labelTest } from '@/utils/print'
const
blueTooth
=
useBlueTooth
()
const
props
=
defineProps
({
businessList
:
{
type
:
Array
...
...
@@ -41,13 +54,242 @@ const props = defineProps({
})
const
checked
=
ref
(
false
)
const
state
:
any
=
reactive
({
looptime
:
0
,
currentTime
:
1
,
lastData
:
0
,
oneTimeData
:
0
,
canvasWidth
:
1050
,
canvasHeight
:
750
,
buffSize
:
[],
printNum
:
[],
printerNum
:
1
,
currentPrint
:
1
,
isReceiptSend
:
false
,
isLabelSend
:
false
})
const
is_WMS_Receive
=
computed
(()
=>
{
return
JSON
.
parse
(
uni
.
getStorageSync
(
'pageData'
)).
permTag
==
'WMS_Receive'
?
true
:
false
})
// 是否收料通知单
const
labelData
=
()
=>
{
let
obj
:
any
const
config
=
data
.
config
const
list
=
data
.
list
obj
=
{
x
:
config
.
x
,
y
:
config
.
y
,
list
:
[]
}
list
.
map
((
item
:
any
)
=>
{
if
(
item
.
columns
)
{
item
.
columns
.
map
((
col
:
any
)
=>
{
col
.
list
.
map
((
list
:
any
)
=>
{
obj
.
list
?.
push
({
label
:
list
.
label
,
type
:
list
.
type
,
value
:
list
.
options
.
defaultValue
,
x
:
list
.
options
.
x
,
y
:
list
.
options
.
y
})
})
})
}
else
obj
.
list
?.
push
({
label
:
item
.
label
,
type
:
item
.
type
,
value
:
item
.
options
.
defaultValue
,
x
:
item
.
options
.
x
,
y
:
item
.
options
.
y
})
})
return
obj
}
const
checkboxChange
=
(
val
:
boolean
)
=>
{
console
.
log
(
val
);
}
const
handlePrint
=
async
()
=>
{
const
res
:
any
=
await
getPrintData
([
'A021'
])
console
.
log
(
res
);
// const deviceId = blueTooth.BLEInformation.deviceId
// labelTest(labelData())
// if (!deviceId) {
// uni.navigateTo({ url: '/pages/blueTooth/index' })
// }
// uni.createBLEConnection({
// deviceId: blueTooth.BLEInformation.deviceId,
// success: (result) => {
// console.log(result, 'result');
// },
// fail: async (error) => {
// console.log(error, 'error');
// if (error.code == -1) {
// // await init()
// // await labelTest(blueTooth, demo)
// labelTest(labelData())
// }
// }
// })
}
const
init
=
()
=>
{
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
.
oneTimeData
=
20
;
state
.
printNum
=
numList
;
state
.
printerNum
=
numList
[
0
];
}
const
labelTest
=
(
printData
:
any
)
=>
{
console
.
log
(
printData
);
const
{
x
,
y
,
list
}
=
printData
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
(
x
,
y
);
// 设置页面大小
command
.
setGap
(
0
);
//传感器 command.setCls();
command
.
setCls
();
//清除打印机缓存
list
.
map
((
item
:
any
)
=>
{
console
.
log
(
item
);
switch
(
item
.
type
)
{
case
'qrcode'
:
console
.
log
(
item
.
value
,
'value'
)
command
.
setQR
(
item
.
x
,
item
.
y
,
'L'
,
7
,
'A'
,
item
.
value
);
break
;
case
'barcode'
:
console
.
log
(
item
.
value
,
'barcode'
)
command
.
setBarCode
(
item
.
x
,
item
.
y
,
'EAN8'
,
64
,
1
,
3
,
3
,
item
.
value
);
break
;
default
:
command
.
setText
(
item
.
x
,
item
.
y
,
'TSS24.BF2'
,
1
,
1
,
`
${
item
.
label
}
:
${
item
.
value
}
`
);
break
;
}
})
console
.
log
(
command
,
'canvasGetImageData'
);
setTimeout
(()
=>
{
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
())
}
})
},
300
);
}
//准备发送,根据每次发送字节数来处理分包数量
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
({
init
})
</
script
>
<
style
lang
=
"scss"
scoped
>
<
style
lang
=
"scss"
scoped
>
.card
{
box-sizing
:
border-box
;
margin
:
16rpx
;
...
...
@@ -57,9 +299,8 @@ const checkboxChange = (val: boolean) => {
background-color
:
#ffffff
;
overflow
:
hidden
;
color
:
#303133
;
transition
:
.3s
;
box-shadow
:
0px
0px
12px
rgba
(
0
,
0
,
0
,
.05
);
transition
:
0
.3s
;
box-shadow
:
0px
0px
12px
rgba
(
0
,
0
,
0
,
0
.05
);
.box-list
{
display
:
flex
;
...
...
@@ -80,10 +321,9 @@ const checkboxChange = (val: boolean) => {
// }
// }
}
}
:deep
(
.u-checkbox__label
)
{
display
:
none
;
}
</
style
>
\ No newline at end of file
</
style
>
src/pages/apply/component/demo.ts
0 → 100644
浏览文件 @
df3eb3b0
export
const
data
=
{
"config"
:
{
"size"
:
"default"
,
"hideRequiredAsterisk"
:
false
,
"labelWidth"
:
100
,
"labelPosition"
:
"right"
,
"dbTableComment"
:
"收料标签"
,
"dbTableName"
:
"T_WMS_LableRule"
,
"formId"
:
"WMS_LableRule"
,
"formTypes"
:
"labelPrint"
,
"subSystem"
:
"wms-system"
,
"microFrontEnd"
:
false
,
"supportSync"
:
false
,
"saveVisibility"
:
""
,
"savePlugin"
:
""
,
"pushVisibility"
:
""
,
"pushPlugin"
:
""
,
"printVisibility"
:
""
,
"printPlugin"
:
""
,
"dependencyForm"
:
"WMS_Receive"
,
"x"
:
60
,
"y"
:
42
},
"list"
:
[
{
"label"
:
"条码"
,
"type"
:
"barcode"
,
"options"
:
{
"defaultValue"
:
"123456789"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"150"
,
"y"
:
"25"
},
"key"
:
"7a14224c207a47698fa0a8bd24a2a895"
,
"model"
:
"FSerialId"
,
"rules"
:
[],
"dbFieldName"
:
"FSerialId"
,
"dbFieldComment"
:
"条码"
,
"dbTableName"
:
"T_WMS_LableRule"
},
{
"label"
:
"栅格布局"
,
"type"
:
"grid"
,
"columns"
:
[
{
"span"
:
12
,
"list"
:
[
{
"label"
:
"物料编码"
,
"type"
:
"text"
,
"options"
:
{
"defaultValue"
:
"ZXCVBNM"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"20"
,
"y"
:
"160"
},
"key"
:
"ec2d553e50884d0ca10d0efb9b6c4593"
,
"model"
:
"FMaterialId"
,
"rules"
:
[],
"dbFieldName"
:
"FMaterialId"
,
"dbFieldComment"
:
"物料编码"
,
"dbTableName"
:
"T_WMS_LableRule"
},
{
"label"
:
"物料名称"
,
"type"
:
"text"
,
"options"
:
{
"defaultValue"
:
"锂电池"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"20"
,
"y"
:
"200"
},
"key"
:
"1cd2df65b64d46dcbac6ae8f4316a730"
,
"model"
:
"FMaterialName"
,
"rules"
:
[],
"dbFieldName"
:
"FMaterialName"
,
"dbFieldComment"
:
"物料名称"
,
"dbTableName"
:
"T_WMS_LableRule"
},
{
"label"
:
"批号"
,
"type"
:
"text"
,
"options"
:
{
"defaultValue"
:
"1008611"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"20"
,
"y"
:
"240"
},
"key"
:
"a0247174622b4935b36232232ef129c5"
,
"model"
:
"FLot"
,
"rules"
:
[],
"dbFieldName"
:
"FLot"
,
"dbFieldComment"
:
"批号"
,
"dbTableName"
:
"T_WMS_LableRule"
},
{
"label"
:
"数量"
,
"type"
:
"text"
,
"options"
:
{
"defaultValue"
:
"10000"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"20"
,
"y"
:
"280"
},
"key"
:
"9dd73ddb99f3449f8be4cdadddc24fad"
,
"model"
:
"FQty"
,
"rules"
:
[],
"dbFieldName"
:
"FQty"
,
"dbFieldComment"
:
"数量"
,
"dbTableName"
:
"T_WMS_LableRule"
}
]
},
{
"span"
:
12
,
"list"
:
[
{
"label"
:
"二维码"
,
"type"
:
"qrcode"
,
"options"
:
{
"defaultValue"
:
"ZXCVBNM,,,,123456"
,
"visibility"
:
[
"list_visible"
,
"form_visible"
],
"x"
:
"340"
,
"y"
:
"160"
},
"key"
:
"3d2c4d94491c4f269b93064f7362125b"
,
"model"
:
"FDimensionalCode"
,
"rules"
:
[],
"dbFieldName"
:
"FDimensionalCode"
,
"dbFieldComment"
:
"二维码"
,
"dbTableName"
:
"T_WMS_LableRule"
}
]
}
],
"options"
:
{
"gutter"
:
0
,
"justify"
:
"start"
,
"align"
:
"top"
},
"key"
:
"dae5e3e88230400d8d253b04239cb4ca"
,
"model"
:
"grid_dae5e3e88230400d8d253b04239cb4ca"
,
"rules"
:
[],
"dbTableName"
:
"T_WMS_LableRule"
}
]
}
\ No newline at end of file
src/pages/apply/formDataPage.vue
浏览文件 @
df3eb3b0
<
template
>
<vk-header
:title=
"title"
back-icon-name=
"nav-back"
/>
<form-list-item
:business-list=
"businessList"
/>
<form-list-item
ref=
"formListRef"
:business-list=
"businessList"
/>
</
template
>
<
script
setup
lang=
'ts'
>
...
...
@@ -15,12 +15,14 @@ import FormListItem from './component/FormListItem.vue';
const
title
=
ref
(
''
)
const
store
=
useFormData
()
const
pageData
=
ref
()
const
formListRef
=
ref
()
const
businessList
=
ref
([]
as
any
[])
onLoad
(
async
()
=>
{
const
{
subSystem
,
permTag
:
formId
}
=
JSON
.
parse
(
uni
.
getStorageSync
(
'pageData'
))
const
{
data
:
res
}
=
await
getBusinessList
({
formId
,
subSystem
,
mobile
:
true
})
sLoading
()
formListRef
.
value
.
init
()
if
(
res
.
code
===
200
)
handleLoadData
(
res
.
data
)
})
...
...
src/pages/apply/formDetail.vue
浏览文件 @
df3eb3b0
<
template
>
<vk-header
:title=
"title"
back-icon-name=
"nav-back"
/>
<!--
<view
style=
"display: flex;"
>
<button
@
tap=
"initSerialNumberData(
{ serialNumber: 'A031', curFormId: 'WMS_InStock' })">A3031
</button>
<button
@
tap=
"initSerialNumberData(
{ serialNumber: 'A033', curFormId: 'WMS_InStock' })">A3033
</button>
<button
@
tap=
"initSerialNumberData(
{ serialNumber: 'A035', curFormId: 'WMS_InStock' })">A3035
</button>
<button
@
tap=
"initSerialNumberData(
{ serialNumber: 'A037', curFormId: 'WMS_InStock' })">A3037
</button>
</view>
-->
<view
class=
"header"
>
<view
class=
"scan-input"
>
<scanInput
:inputValue=
"inputValue"
/>
...
...
@@ -46,6 +53,15 @@
</view>
<view>
未备够
</view>
</view>
<view
class=
"close"
@
tap=
"closeButton(i)"
>
<!-- #ifdef APP-PLUS -->
<u-icon
name=
"close"
color=
"#2979ff"
size=
"18"
/>
<!-- #endif -->
<!-- #ifdef H5 -->
<u-icon
name=
"close"
color=
"#2979ff"
size=
"30"
/>
<!-- #endif -->
</view>
</view>
<view
class=
"footer-form"
>
...
...
@@ -55,7 +71,7 @@
<!-- 保存 -->
<view
class=
"aside-save"
>
<!-- #ifdef APP-PLUS -->
<u-icon
name=
"checkmark-circle"
size=
"22"
style=
"padding: 14rpx"
@
tap=
"
sheetS
how = true"
/>
<u-icon
name=
"checkmark-circle"
size=
"22"
style=
"padding: 14rpx"
@
tap=
"
modelData.s
how = true"
/>
<!-- #endif -->
<!-- #ifdef H5 -->
<u-icon
name=
"checkmark-circle"
size=
"44"
style=
"padding: 14rpx"
color=
"#2979ff"
@
tap=
"modelData.show = true"
/>
...
...
@@ -63,144 +79,197 @@
</view>
<!-- #ifdef APP-PLUS -->
<qs-scanlistener
v-if=
"scanFlag"
ref=
"scanRef"
@
scan=
"handleInput"
></qs-scanlistener
>
<qs-scanlistener
@
scan=
"handleInput"
/
>
<!-- #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"
/>
<u-action-sheet
:list=
"sheetList"
:cancel-btn=
"false"
v-model=
"sheetShow"
@
click=
"sheetClick"
/>
<u-modal
v-model=
"modelData.show"
width=
"300"
:content=
"modelData.content"
show-cancel-button
@
confirm=
"modelConfirm"
/>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
nextTick
,
ref
}
from
'vue'
;
import
{
on
Show
}
from
'@dcloudio/uni-app'
;
import
{
getMetadata
,
get
BusinessList
,
getDataBySerialNumber
}
from
'@/api/apply'
;
import
{
on
Load
}
from
'@dcloudio/uni-app'
;
import
{
getMetadata
,
get
DataBySerialNumber
,
createBusiness
}
from
'@/api/apply'
;
import
vkHeader
from
'@/components/header/index.vue'
;
import
detailForm
from
'./component/detailForm.vue'
;
import
scanInput
from
'./component/scanInput.vue'
import
scanInput
from
'./component/scanInput.vue'
;
const
pageData
=
ref
()
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
sheetList
=
ref
([{
text
:
'查询'
},
{
text
:
'清空'
}]);
const
modelData
=
ref
({
content
:
'确认提交?'
,
show
:
false
})
show
:
false
,
})
;
const
sheetShow
=
ref
(
false
)
const
sheetShow
=
ref
(
false
)
;
const
list
=
ref
([]
as
any
);
const
saveList
=
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
})
}
}
inputValue
.
value
=
e
;
});
const
{
permTag
:
curFormId
}
=
JSON
.
parse
(
uni
.
getStorageSync
(
'pageData'
));
const
data
=
{
serialNumber
:
e
,
curFormId
}
initSerialNumberData
(
data
)
};
const
sheetClick
=
(
index
:
number
)
=>
{
switch
(
index
)
{
case
0
:
console
.
log
(
'查询'
);
uni
.
navigateTo
({
url
:
'/pages/apply/formDataPage'
})
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
)
const
modelConfirm
=
async
()
=>
{
if
(
saveList
.
value
.
length
===
0
)
return
uni
.
showToast
({
title
:
'请先完成扫描'
,
icon
:
'none'
})
let
list
=
JSON
.
parse
(
JSON
.
stringify
(
saveList
.
value
))
const
result
=
mergeList
(
list
);
const
res
:
any
=
await
createBusiness
(
result
)
if
(
res
.
data
.
code
===
200
)
{
uni
.
showToast
({
title
:
'提交成功'
,
icon
:
'none'
})
uni
.
showModal
({
title
:
'提示'
,
content
:
'是否清除数据'
,
showCancel
:
true
,
success
:
({
confirm
,
cancel
})
=>
{
if
(
confirm
)
{
reset
()
}
}
})
}
};
const
initSerialNumberData
=
async
()
=>
{
// const data = {
// serialNumber: inputValue.value,
// curFormId: pageData.value.permTag
// }
const
mergeList
=
(
list
:
any
[])
=>
{
const
{
subSystem
,
permTag
:
formId
}
=
JSON
.
parse
(
uni
.
getStorageSync
(
'pageData'
));
const
data
=
{
serialNumber
:
'333'
,
curFormId
:
'WMS_PickMtrl'
formId
,
subSystem
,
list
:
[]
as
any
}
const
{
data
:
res
}
=
await
getDataBySerialNumber
(
data
)
if
(
res
.
code
===
200
)
{
console
.
log
(
res
);
for
(
const
item
of
list
)
{
let
isAdded
=
false
;
// 如果列表为空,则添加数据
if
(
data
.
list
.
length
===
0
)
{
data
.
list
.
push
(
item
);
continue
;
}
for
(
const
res
of
data
.
list
)
{
// 查找相同供应商ID的元素
if
(
res
.
FSupplyId
===
item
.
FSupplyId
)
{
for
(
const
wms
of
res
.
WMS_InStockEntry
)
{
// 查找相同物料ID和批次号的元素
if
(
item
.
WMS_InStockEntry
[
0
].
FLot
===
wms
.
FLot
&&
item
.
WMS_InStockEntry
[
0
].
FMaterialId
===
wms
.
FMaterialId
)
{
wms
.
WMS_InStockSERIAL
.
push
(
item
.
WMS_InStockEntry
[
0
].
WMS_InStockSERIAL
[
0
]);
isAdded
=
true
;
break
;
}
}
// 如果没有找到相同物料ID和批次号的元素,则在其中新增一条数据
if
(
!
isAdded
)
{
res
.
WMS_InStockEntry
.
push
(
item
.
WMS_InStockEntry
[
0
]);
isAdded
=
true
;
}
break
;
}
}
// 如果列表中没有相同供应商ID的元素,则在其中新增一条数据
if
(
!
isAdded
)
{
data
.
list
.
push
(
item
);
}
}
return
data
;
}
initSerialNumberData
()
onLoad
(()
=>
{
pageData
.
value
=
JSON
.
parse
(
uni
.
getStorageSync
(
'pageData'
)
as
any
);
title
.
value
=
pageData
.
value
.
title
;
init
();
});
const
metadata
=
ref
();
const
metadataList
=
ref
([]
as
any
);
const
initSerialNumberData
=
async
(
data
:
any
)
=>
{
// let data = { serialNumber: 'A031', curFormId: 'WMS_InStock' }
if
(
list
.
value
.
some
((
item
:
any
)
=>
item
.
serialNumber
===
data
.
serialNumber
))
return
uni
.
showToast
({
title
:
'已存在该扫描记录'
,
icon
:
'none'
,
mask
:
true
})
const
{
data
:
res
}
=
await
getDataBySerialNumber
(
data
);
if
(
res
.
code
===
200
)
{
const
metaList
=
JSON
.
parse
(
JSON
.
stringify
(
metadata
.
value
.
list
));
let
dataList
=
baseDataFilter
(
metaList
,
res
.
data
.
baseDataMap
)
let
obj
=
{
dataList
,
show
:
true
,
scanIcon
:
'arrow-up-fill'
,
serialNumber
:
data
.
serialNumber
}
if
(
dataList
.
length
!==
0
)
{
list
.
value
.
push
(
obj
)
saveList
.
value
.
push
(
res
.
data
.
data
[
0
])
}
}
};
// visibility mobile_list_visible
const
init
=
async
()
=>
{
const
{
data
:
res
}
=
await
getMetadata
(
pageData
.
value
.
permTag
)
metadataList
.
value
=
[];
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
))
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
.
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
.
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
]
})
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
)
if
(
res
.
options
.
visibility
&&
res
.
options
.
visibility
.
indexOf
(
'mobile_form_visible'
)
!==
-
1
)
mobileList
=
[...
mobileList
,
res
];
});
...
...
@@ -209,12 +278,68 @@ const filterList = (list: any[]) => {
recursiveFilter
(
res
);
});
if
(
item
.
options
.
visibility
&&
item
.
options
.
visibility
.
indexOf
(
"mobile_form_visible"
)
!==
-
1
)
if
(
item
.
options
.
visibility
&&
item
.
options
.
visibility
.
indexOf
(
'mobile_form_visible'
)
!==
-
1
)
mobileList
=
[...
mobileList
,
item
];
};
list
.
forEach
(
(
item
)
=>
recursiveFilter
(
item
))
list
.
forEach
(
item
=>
recursiveFilter
(
item
));
return
mobileList
;
};
const
baseDataFilter
=
(
list
:
any
[],
baseList
:
any
[])
=>
{
let
mobileList
=
[]
as
any
[];
let
dataList
=
[]
as
any
[];
const
recursiveFilter
=
(
item
:
any
)
=>
{
if
(
item
.
columns
)
item
.
columns
[
0
].
list
.
map
((
res
:
any
)
=>
{
if
(
res
.
type
==
'basic_data'
||
res
.
type
==
'basic_data_edit'
&&
res
.
options
.
remoteFunc
)
mobileList
=
[...
mobileList
,
res
];
});
if
(
item
.
detailColumns
)
item
.
detailColumns
[
0
].
list
.
forEach
((
res
:
any
)
=>
{
recursiveFilter
(
res
);
});
if
(
item
.
type
==
'basic_data'
||
item
.
type
==
'basic_data_edit'
&&
item
.
options
.
remoteFunc
)
mobileList
=
[...
mobileList
,
item
];
};
list
.
forEach
(
item
=>
recursiveFilter
(
item
));
for
(
const
k
in
baseList
)
{
mobileList
.
map
((
item
:
any
)
=>
{
if
(
item
.
options
.
remoteFunc
===
k
)
{
let
obj
=
{}
as
any
const
label
=
item
.
options
.
props
.
label
const
value
=
item
.
options
.
props
.
value
if
(
baseList
[
k
][
0
][
label
])
obj
[
'label'
]
=
baseList
[
k
][
0
][
label
]
if
(
baseList
[
k
][
0
][
value
])
obj
[
'value'
]
=
baseList
[
k
][
0
][
value
]
if
(
obj
)
dataList
.
push
(
obj
)
}
})
}
return
dataList
}
const
closeButton
=
(
index
:
number
)
=>
{
list
.
value
.
splice
(
index
,
1
)
saveList
.
value
.
splice
(
index
,
1
)
}
const
reset
=
()
=>
{
saveList
.
value
=
[]
inputValue
.
value
=
''
list
.
value
=
[]
}
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -247,6 +372,7 @@ const filterList = (list: any[]) => {
}
.detail-content
{
position
:
relative
;
margin
:
20rpx
;
background-color
:
rgb
(
218
,
222
,
224
);
padding
:
30rpx
;
...
...
@@ -300,6 +426,12 @@ const filterList = (list: any[]) => {
font-weight
:
900
;
padding
:
10rpx
0
;
}
.close
{
position
:
absolute
;
top
:
4rpx
;
right
:
12rpx
;
}
}
.footer-form
{
...
...
src/pages/apply/index.vue
浏览文件 @
df3eb3b0
...
...
@@ -3,17 +3,9 @@
<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"
/>
<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>
...
...
@@ -27,11 +19,9 @@ import { getMenuTree } from '@/api/apply';
const
menuList
=
ref
();
const
tapGridItem
=
(
row
:
any
)
=>
{
uni
.
setStorageSync
(
'pageData'
,
JSON
.
stringify
(
row
));
uni
.
navigateTo
({
url
:
'/pages/apply/formDetail'
,
success
()
{
uni
.
setStorageSync
(
'pageData'
,
JSON
.
stringify
(
row
));
},
url
:
'/pages/apply/formDetail'
});
};
...
...
src/pages/blueTooth/index.vue
浏览文件 @
df3eb3b0
...
...
@@ -3,7 +3,7 @@
<view
style=
"margin: 40rpx 0;"
></view>
<u-button
type=
"error"
@
tap=
"stopSearch"
>
停止搜索
</u-button>
<view
style=
"margin: 40rpx 0;"
></view>
<u-button
type=
"warning"
@
tap=
"
openControl
"
>
跳转页面
</u-button>
<u-button
type=
"warning"
@
tap=
"
navigateTo
"
>
跳转页面
</u-button>
<view
v-for=
"item in list"
:data-title=
"item.deviceId"
:data-name=
"item.name"
:data-advertisData=
"item.advertisServiceUUIDs"
:key=
"item.deviceId"
@
tap=
"bindViewTap"
>
...
...
@@ -56,6 +56,12 @@ const errorCodeTip = (code: number) => {
}
}
const
navigateTo
=
()
=>
{
uni
.
navigateTo
({
url
:
'/pages/blueTooth/printTest'
})
}
const
stopSearch
=
()
=>
{
uni
.
stopBluetoothDevicesDiscovery
({
success
:
(
res
:
any
)
=>
{
...
...
@@ -161,15 +167,11 @@ const bindViewTap = (e: any) => {
deviceId
:
title
,
success
(
res
:
any
)
{
console
.
log
(
'createBLEConnection success:'
,
res
);
console
.
log
(
'before'
,
BLEInformation
.
deviceId
);
BLEInformation
.
deviceId
=
title
;
console
.
log
(
'before'
,
BLEInformation
.
deviceId
);
blueTooth
.
$patch
({
BLEInformation
})
uni
.
hideLoading
()
console
.
log
(
'纳尼'
);
(
'纳尼'
)
setTimeout
(()
=>
{
getSeviceId
();
});
...
...
@@ -228,7 +230,6 @@ const getCharacteristics = async () => {
BLEInformation
:
blueTooth
.
BLEInformation
})
notifyCharacter
.
value
=
true
;
console
.
log
(
'notify'
);
}
if
(
!
writeCharacter
.
value
&&
properties
.
write
)
{
blueTooth
.
BLEInformation
.
writeCharaterId
=
uuid
;
...
...
@@ -237,7 +238,6 @@ const getCharacteristics = async () => {
BLEInformation
:
blueTooth
.
BLEInformation
})
writeCharacter
.
value
=
true
;
console
.
log
(
'write'
);
}
if
(
!
readCharacter
.
value
&&
properties
.
read
)
{
blueTooth
.
BLEInformation
.
readCharaterId
=
uuid
;
...
...
@@ -246,7 +246,6 @@ const getCharacteristics = async () => {
BLEInformation
:
blueTooth
.
BLEInformation
})
readCharacter
.
value
=
true
;
console
.
log
(
'read'
);
}
}
...
...
@@ -268,9 +267,7 @@ const getCharacteristics = async () => {
}
const
openControl
=
()
=>
{
console
.
log
(
'成功跳转'
);
uni
.
navigateTo
({
url
:
'/pages/blueTooth/printTest'
})
uni
.
navigateBack
({
delta
:
1
})
}
</
script
>
...
...
src/pages/blueTooth/printTest.vue
浏览文件 @
df3eb3b0
<
template
>
<div
class=
'app-container'
></div>
</
template
>
<
script
setup
lang=
'ts'
>
import
{
ref
}
from
'vue'
</
script
>
<
style
lang =
"scss"
scoped
>
</
style
>
<!-- <template>
<view class="content">
<view class="body">
<view>
...
...
@@ -11,7 +22,8 @@
标签测试
</u-button>
</view>
<u-button type="warning" @tap="front">向前拉动</u-button>
<u-button type="warning" @tap="after">向后拉动</u-button>
<picker style='margin:20px' mode='selector' :range='state.buffSize' :value='state.buffIndex'
@change='buffBindChange'>
当前每次发送字节数为(点击可更换):{{ state.buffSize[state.buffIndex] }}
...
...
@@ -93,7 +105,15 @@ const state: any = reactive({
})
const blueTooth = useBlueTooth()
const front = () => {
let command = createNew()
command.setFeed(1)
}
const after = () => {
let command = createNew()
command.setBackFeed(1)
}
const inputEvent = (e: any) => state.sendContent = e.detail.value;
const labelTest = () => {
let canvasWidth = state.canvasWidth
...
...
@@ -302,4 +322,4 @@ input {
width: 100%;
height: 100%;
}
</
style
>
\ No newline at end of file
</style> -->
\ No newline at end of file
src/uni_modules/qs-scanlistener/components/qs-scanlistener/qs-scanlistener.vue
浏览文件 @
df3eb3b0
...
...
@@ -3,52 +3,51 @@
</
template
>
<
script
>
import
scaninput
from
'./scanInput.js'
;
scaninput
.
initScan
()
;
scaninput
.
startScan
()
;
import
scaninput
from
'./scanInput.js'
scaninput
.
initScan
()
scaninput
.
startScan
()
export
default
{
name
:
'scan-listener'
,
name
:
"scan-listener"
,
created
()
{
scaninput
.
install
(
this
.
scanHandle
)
;
scaninput
.
install
(
this
.
scanHandle
)
// uni.$on('scan_handle', this.scanHandle)
},
beforeDestroy
()
{
scaninput
.
uninstall
(
this
.
scanHandle
)
;
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'
&&
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
,
''
);
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
.
$emit
(
'scan'
,
this
.
inputVal
.
replace
(
/Unidentified/g
,
""
).
replace
(
/Shift/g
,
""
))
}
this
.
inputVal
=
''
;
this
.
inputVal
=
''
}
},
scanHandle
(
code
)
{
// console.log('广播模式')
this
.
$emit
(
'scan'
,
code
)
;
}
,
this
.
$emit
(
'scan'
,
code
)
}
},
data
()
{
return
{
inputVal
:
''
,
};
}
,
}
;
}
}
</
script
>
<
script
module=
"keyboard"
lang=
"renderjs"
>
export
default
{
...
...
@@ -61,7 +60,7 @@ export default {
keys1
.
concat
(
keys2
,
keys3
).
forEach
(
key
=>
data
[
key
]
=
event
[
key
])
this
.
$ownerInstance
.
callMethod
(
'onEvent'
,
data
)
}
const
names
=
[
'keyup'
]
//'keydown',
const
names
=
[
'keyup'
]
//'keydown',
names
.
forEach
(
name
=>
{
document
.
addEventListener
(
name
,
onKey
,
false
)
})
...
...
@@ -74,4 +73,5 @@ export default {
}
</
script
>
<
style
></
style
>
<
style
>
</
style
>
\ No newline at end of file
src/uni_modules/qs-scanlistener/components/qs-scanlistener/scanInput.js
浏览文件 @
df3eb3b0
let
main
,
receiver
,
filter
,
_codeQueryTag
=
false
,
temp
=
[],
init
=
false
,
start
=
false
;
let
main
,
receiver
,
filter
,
_codeQueryTag
=
false
,
temp
=
[],
init
=
false
,
start
=
false
;
export
default
{
initScan
()
{
if
(
init
)
return
if
(
init
)
return
let
_this
=
this
;
main
=
plus
.
android
.
runtimeMainActivity
();
//获取activity
var
IntentFilter
=
plus
.
android
.
importClass
(
'android.content.IntentFilter'
);
...
...
@@ -14,33 +11,32 @@ export default {
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设备里面看
plus
.
android
.
importClass
(
intent
);
let
code
=
intent
.
getStringExtra
(
uni
.
_qs_scanlistener_label
||
"barcode_string"
);
// 换你的广播标签,你的pda设备里面看
_this
.
queryCode
(
code
);
}
});
init
=
true
},
startScan
()
{
if
(
!
start
)
{
if
(
!
start
)
{
start
=
true
main
.
registerReceiver
(
receiver
,
filter
);
}
},
stopScan
()
{
if
(
start
)
{
if
(
start
)
{
start
=
false
main
.
unregisterReceiver
(
receiver
);
}
},
install
(
fn
)
{
if
(
typeof
fn
==
'function'
&&
!~
temp
.
indexOf
(
fn
))
temp
.
push
(
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
)
if
(
typeof
fn
==
'function'
)
{
const
index
=
temp
.
find
(
i
=>
i
==
fn
)
if
(
~
index
)
temp
.
splice
(
index
,
1
)
}
},
queryCode
:
function
(
code
)
{
...
...
@@ -50,10 +46,10 @@ export default {
// setTimeout(function() {
// _codeQueryTag = false;
// }, 150);
if
(
temp
&&
temp
.
length
)
{
if
(
temp
&&
temp
.
length
)
{
temp
[
temp
.
length
-
1
](
code
)
}
uni
.
vibrateShort
()
uni
.
$emit
(
"qs_scanlistener_handle"
,
code
);
}
}
\ No newline at end of file
}
src/utils/ble/tsc.ts
浏览文件 @
df3eb3b0
...
...
@@ -8,7 +8,7 @@ export const createNew = () => {
jpPrinter
.
name
=
'蓝牙打印机'
jpPrinter
.
init
=
function
()
{
}
jpPrinter
.
jpPrinter
.
addCommand
=
function
(
content
:
any
)
{
//将指令转成数组装起
var
code
=
new
TextEncoder
(
'gb18030'
,
{
...
...
src/utils/config.ts
浏览文件 @
df3eb3b0
...
...
@@ -2,15 +2,15 @@ const CONFIG: any = {
// 开发环境配置
development
:
{
assetsPath
:
'http://192.168.60:81'
,
// 静态资源路径
baseUrl
:
'http://192.168.0.
38:8089
'
,
// 后台接口请求地址
//
baseUrl: 'http://192.168.0.60:81
', // 后台接口请求地址
baseUrl
:
'http://192.168.0.
46
'
,
// 后台接口请求地址
//
baseUrl: 'http://192.168.0.8
', // 后台接口请求地址
hostUrl
:
'http://192.168.0.60:81'
,
// H5地址(前端运行地址)
websocketUrl
:
''
,
// websocket服务端地址
},
// 生产环境配置
production
:
{
assetsPath
:
''
,
// 静态资源路径
baseUrl
:
'
http://192.168.0.38:8089
'
,
// 后台接口请求地址
baseUrl
:
''
,
// 后台接口请求地址
// baseUrl: 'https://api.test.siccat.com/api/graphql',
hostUrl
:
''
,
// H5地址(前端运行地址)
websocketUrl
:
''
,
// websocket服务端地址
...
...
src/utils/print.ts
0 → 100644
浏览文件 @
df3eb3b0
// import { reactive } from "vue";
// import { createNew } from './ble/tsc'
// let blueTooth: any;
// const state: any = reactive({
// looptime: 0,
// currentTime: 1,
// lastData: 0,
// oneTimeData: 0,
// canvasWidth: 1050,
// canvasHeight: 750,
// buffSize: [],
// printNum: [],
// printerNum: 1,
// currentPrint: 1,
// isReceiptSend: false,
// isLabelSend: false
// })
// export const init = () => {
// 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];
// }
// export const labelTest = (tooth: any, printData?: any) => {
// blueTooth = tooth
// let canvasWidth = state.canvasWidth
// let canvasHeight = state.canvasHeight
// let { qrcode, barcode, fields } = printData
// // 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佳博智汇');
// command.setText(40, 50, 'TSS24.BF2', 1, 1, 'WMS编码号');
// command.setBarCode(200, 40, 'EAN8', 64, 1, 3, 3, barcode);
// let num = 60
// for (const k in fields) {
// command.setText(40, num + 40, 'TSS24.BF2', 1, 1, JSON.stringify(fields[k]));
// }
// command.setQR(300, 180, 'L', 6, 'A', JSON.stringify(qrcode));
// setTimeout(() => {
// 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())
// }
// })
// }, 300);
// }
// //准备发送,根据每次发送字节数来处理分包数量
// 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)
// }
// }
// }
// })
// }
\ No newline at end of file
src/utils/util.ts
浏览文件 @
df3eb3b0
...
...
@@ -40,4 +40,22 @@ export const sLoading = (msg: string = '加载中...') => {
export
const
hLoading
=
()
=>
{
uni
.
hideLoading
()
}
// 防抖
interface
DebounceFunc
<
T
extends
(...
args
:
any
[])
=>
any
>
{
(
this
:
ThisParameterType
<
T
>
,
...
args
:
Parameters
<
T
>
):
ReturnType
<
T
>
;
}
export
function
debounce
<
T
extends
(...
args
:
any
[])
=>
any
>
(
fn
:
T
,
delay
=
300
,
):
DebounceFunc
<
T
>
{
let
timer
:
number
|
null
;
return
function
(
this
:
ThisParameterType
<
T
>
,
...
args
:
Parameters
<
T
>
)
{
if
(
timer
)
clearTimeout
(
timer
);
timer
=
setTimeout
(()
=>
{
fn
.
call
(
this
,
...
args
);
},
delay
);
}
as
DebounceFunc
<
T
>
;
}
\ No newline at end of file
vite.config.ts
浏览文件 @
df3eb3b0
import
{
defineConfig
}
from
'vite'
import
{
defineConfig
}
from
'vite'
;
// import pxtovw from 'postcss-px-to-viewport'
import
{
resolve
}
from
'path'
import
{
createSvgIconsPlugin
}
from
'vite-plugin-svg-icons'
import
uni
from
'@dcloudio/vite-plugin-uni'
import
{
resolve
}
from
'path'
;
import
{
createSvgIconsPlugin
}
from
'vite-plugin-svg-icons'
;
import
uni
from
'@dcloudio/vite-plugin-uni'
;
export
default
defineConfig
({
plugins
:
[
...
...
@@ -44,10 +44,14 @@ export default defineConfig({
strictPort
:
false
,
// 端口被占用直接退出
https
:
false
,
// 默认用http方式
proxy
:
{
'/LowCodePlatform'
:
{
target
:
'http://192.168.0.38:8089'
,
'/lowcodeplatform-system'
:
{
target
:
'http://192.168.0.46'
,
// target: 'http://192.168.0.8',
},
'/wms-system'
:
{
target
:
'http://192.168.0.46'
,
// target: 'http://192.168.0.8',
},
},
},
})
})
;
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论