feat: 半屏连续扫与修改密码报错并升至1.1.25
This commit is contained in:
@@ -114,7 +114,7 @@ const install = (Vue, vm) => {
|
|||||||
// 个人信息修改
|
// 个人信息修改
|
||||||
user: {
|
user: {
|
||||||
saveUserInfo: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/user/saveUserInfo', params),
|
saveUserInfo: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/user/saveUserInfo', params),
|
||||||
infoSavePwd: (params = {}) => vm.$u.put(config.productionApiUrl+'/system/user/profile/updatePwd', params),
|
infoSavePwd: (params = {}) => vm.$u.put('/system/user/profile/updatePwd', params),
|
||||||
infoSavePqa: (params = {}) => vm.$u.post(config.productionApiUrl+'/sys/user/infoSavePqa', params),
|
infoSavePqa: (params = {}) => vm.$u.post(config.productionApiUrl+'/sys/user/infoSavePqa', params),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -73,18 +73,33 @@ const install = (Vue, vm) => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
console.log('res',res)
|
console.log('res',res)
|
||||||
if (!(res.data)){
|
const rejectWithMessage = (message) => {
|
||||||
|
const text = String(message || '请求失败').trim() || '请求失败';
|
||||||
|
vm.$u.toast(text);
|
||||||
|
return Promise.reject(new Error(text));
|
||||||
|
};
|
||||||
|
// HTTP 非 200(如 404)时直接报错,避免把字符串/HTML 当业务 data 解析
|
||||||
|
if (res.statusCode && res.statusCode !== 200) {
|
||||||
|
let message = `请求失败(${res.statusCode})`;
|
||||||
|
if (typeof res.data === 'string' && res.data.trim()) {
|
||||||
|
message = res.data.trim().slice(0, 120);
|
||||||
|
} else if (res.data && typeof res.data === 'object') {
|
||||||
|
message = res.data.msg || res.data.message || message;
|
||||||
|
}
|
||||||
|
return rejectWithMessage(message);
|
||||||
|
}
|
||||||
|
if (res.data === undefined || res.data === null || res.data === '') {
|
||||||
const errMsg = String((res && res.errMsg) || '');
|
const errMsg = String((res && res.errMsg) || '');
|
||||||
const isNetworkError = res.statusCode === -1
|
const isNetworkError = res.statusCode === -1
|
||||||
|| /Unable to resolve host|Failed to connect|request:fail|timeout|网络/i.test(errMsg);
|
|| /Unable to resolve host|Failed to connect|request:fail|timeout|网络/i.test(errMsg);
|
||||||
const message = isNetworkError ? '当前没有网络,请检查网络后重试' : '未连接到服务器';
|
const message = isNetworkError ? '当前没有网络,请检查网络后重试' : '未连接到服务器';
|
||||||
vm.$u.toast(message)
|
return rejectWithMessage(message);
|
||||||
return Promise.reject(new Error(message));
|
}
|
||||||
|
if (typeof res.data !== 'object') {
|
||||||
|
return rejectWithMessage(String(res.data).slice(0, 120));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res.data.code !== 0) {
|
if (res.data.code !== 0) {
|
||||||
vm.$u.toast(res.data.msg)
|
return rejectWithMessage(res.data.msg || res.data.message || '请求失败');
|
||||||
return Promise.reject(new Error(res.data.msg))
|
|
||||||
}
|
}
|
||||||
let data = res.data.data;
|
let data = res.data.data;
|
||||||
console.log('data',data)
|
console.log('data',data)
|
||||||
|
|||||||
@@ -0,0 +1,259 @@
|
|||||||
|
<template>
|
||||||
|
<view v-show="visible" class="plus-barcode-panel">
|
||||||
|
<view class="plus-barcode-panel__toolbar">
|
||||||
|
<text class="plus-barcode-panel__tip">{{ tipText }}</text>
|
||||||
|
<text class="plus-barcode-panel__close" @click.stop="close">收起</text>
|
||||||
|
</view>
|
||||||
|
<!-- #ifdef APP-PLUS -->
|
||||||
|
<view :id="holderId" class="plus-barcode-panel__holder" />
|
||||||
|
<!-- #endif -->
|
||||||
|
<!-- #ifndef APP-PLUS -->
|
||||||
|
<view class="plus-barcode-panel__fallback">
|
||||||
|
<text>当前环境不支持半屏扫码,请使用输入框或系统扫码</text>
|
||||||
|
</view>
|
||||||
|
<!-- #endif -->
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const DEFAULT_FILTERS = [0, 1, 2, 8, 10]; // QR EAN13 EAN8 CODE39 CODE128
|
||||||
|
let barcodeSeq = 0;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'PlusBarcodePanel',
|
||||||
|
props: {
|
||||||
|
visible: { type: Boolean, default: false },
|
||||||
|
hintText: { type: String, default: '将条码放入框内,可连续扫' },
|
||||||
|
scanTimeSpace: { type: Number, default: 1200 },
|
||||||
|
filters: { type: Array, default: () => DEFAULT_FILTERS.slice() },
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
barcodeSeq += 1;
|
||||||
|
return {
|
||||||
|
holderId: `plusBarcodeHolder_${barcodeSeq}`,
|
||||||
|
barcodeViewId: `plusBarcodeView_${barcodeSeq}`,
|
||||||
|
_barcode: null,
|
||||||
|
_restartTimer: null,
|
||||||
|
_active: false,
|
||||||
|
_creating: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
tipText() {
|
||||||
|
return this.hintText || '将条码放入框内,可连续扫';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
visible(val) {
|
||||||
|
if (val) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.openNative();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.destroyNative();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.destroyNative();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
open() {
|
||||||
|
if (this.visible) {
|
||||||
|
this.$nextTick(() => this.openNative());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.$emit('update:visible', true);
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.destroyNative();
|
||||||
|
if (this.visible) {
|
||||||
|
this.$emit('update:visible', false);
|
||||||
|
}
|
||||||
|
this.$emit('close');
|
||||||
|
},
|
||||||
|
getCurrentWebview() {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
try {
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
const page = pages[pages.length - 1];
|
||||||
|
if (page && typeof page.$getAppWebview === 'function') {
|
||||||
|
return page.$getAppWebview();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.warn('PlusBarcodePanel getCurrentWebview failed', e);
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
openNative() {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
if (!this.visible || this._creating) return;
|
||||||
|
if (this._barcode) {
|
||||||
|
this.resumeScan();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._creating = true;
|
||||||
|
this._active = true;
|
||||||
|
// 等占位区域完成布局后再量位置,避免 Android 上 rect 为 0
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!this.visible || !this._active) {
|
||||||
|
this._creating = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uni.createSelectorQuery()
|
||||||
|
.in(this)
|
||||||
|
.select('.plus-barcode-panel__holder')
|
||||||
|
.boundingClientRect((rect) => {
|
||||||
|
this._creating = false;
|
||||||
|
if (!this.visible || !this._active) return;
|
||||||
|
if (!rect || !rect.width || !rect.height) {
|
||||||
|
uni.showToast({ title: '扫码区域未就绪', icon: 'none' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.createBarcode(rect);
|
||||||
|
})
|
||||||
|
.exec();
|
||||||
|
}, 80);
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
createBarcode(rect) {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
const webview = this.getCurrentWebview();
|
||||||
|
if (!webview || typeof plus === 'undefined' || !plus.barcode) {
|
||||||
|
uni.showToast({ title: '当前环境不支持扫码', icon: 'none' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.destroyNative(false);
|
||||||
|
try {
|
||||||
|
const barcode = plus.barcode.create(
|
||||||
|
this.barcodeViewId,
|
||||||
|
this.filters && this.filters.length ? this.filters : DEFAULT_FILTERS,
|
||||||
|
{
|
||||||
|
top: `${Math.round(rect.top)}px`,
|
||||||
|
left: `${Math.round(rect.left)}px`,
|
||||||
|
width: `${Math.round(rect.width)}px`,
|
||||||
|
height: `${Math.round(rect.height)}px`,
|
||||||
|
position: 'absolute',
|
||||||
|
background: '#000000',
|
||||||
|
frameColor: '#2979ff',
|
||||||
|
scanbarColor: '#2979ff',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
barcode.onmarked = (type, code) => {
|
||||||
|
this.onMarked(type, code);
|
||||||
|
};
|
||||||
|
barcode.onerror = (err) => {
|
||||||
|
console.error('PlusBarcodePanel onerror', err);
|
||||||
|
};
|
||||||
|
webview.append(barcode);
|
||||||
|
this._barcode = barcode;
|
||||||
|
this._active = true;
|
||||||
|
barcode.start({
|
||||||
|
vibrate: true,
|
||||||
|
sound: 'default',
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error('PlusBarcodePanel create failed', e);
|
||||||
|
uni.showToast({ title: '打开扫码失败', icon: 'none' });
|
||||||
|
this._barcode = null;
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
onMarked(type, code) {
|
||||||
|
const result = String(code || '').trim();
|
||||||
|
if (!result || !this._active) return;
|
||||||
|
try {
|
||||||
|
if (this._barcode) this._barcode.cancel();
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
this.$emit('success', result, type);
|
||||||
|
clearTimeout(this._restartTimer);
|
||||||
|
const gap = Number(this.scanTimeSpace) > 0 ? Number(this.scanTimeSpace) : 1200;
|
||||||
|
this._restartTimer = setTimeout(() => {
|
||||||
|
this.resumeScan();
|
||||||
|
}, gap);
|
||||||
|
},
|
||||||
|
resumeScan() {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
if (!this.visible || !this._active || !this._barcode) return;
|
||||||
|
try {
|
||||||
|
this._barcode.start({
|
||||||
|
vibrate: true,
|
||||||
|
sound: 'default',
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.warn('PlusBarcodePanel resume failed', e);
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
destroyNative(clearActive = true) {
|
||||||
|
clearTimeout(this._restartTimer);
|
||||||
|
this._restartTimer = null;
|
||||||
|
if (clearActive) this._active = false;
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
const barcode = this._barcode;
|
||||||
|
this._barcode = null;
|
||||||
|
if (!barcode) return;
|
||||||
|
try {
|
||||||
|
barcode.cancel();
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
barcode.close();
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import '@/common/pda-typography.scss';
|
||||||
|
|
||||||
|
.plus-barcode-panel {
|
||||||
|
background: #000;
|
||||||
|
margin-top: 16rpx;
|
||||||
|
}
|
||||||
|
.plus-barcode-panel__toolbar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
min-height: 72rpx;
|
||||||
|
padding: 12rpx 26rpx;
|
||||||
|
background: #1f1f1f;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.plus-barcode-panel__tip {
|
||||||
|
flex: 1;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
padding-right: 16rpx;
|
||||||
|
}
|
||||||
|
.plus-barcode-panel__close {
|
||||||
|
color: #2979ff;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.plus-barcode-panel__holder {
|
||||||
|
width: 100%;
|
||||||
|
height: 420rpx;
|
||||||
|
background: #000;
|
||||||
|
}
|
||||||
|
.plus-barcode-panel__fallback {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 420rpx;
|
||||||
|
padding: 24rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -11,6 +11,14 @@
|
|||||||
@confirm="$emit('scan')"
|
@confirm="$emit('scan')"
|
||||||
/>
|
/>
|
||||||
<view
|
<view
|
||||||
|
v-if="scanning"
|
||||||
|
class="fabric-out-scanClose"
|
||||||
|
@click.stop="$emit('phone-scan')"
|
||||||
|
>
|
||||||
|
关闭扫码
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
v-else
|
||||||
class="fabric-out-toolbarIcon"
|
class="fabric-out-toolbarIcon"
|
||||||
@click.stop="$emit('phone-scan')"
|
@click.stop="$emit('phone-scan')"
|
||||||
>
|
>
|
||||||
@@ -35,12 +43,14 @@ export default {
|
|||||||
deleteMode: { type: Boolean, default: false },
|
deleteMode: { type: Boolean, default: false },
|
||||||
message: { type: String, default: '' },
|
message: { type: String, default: '' },
|
||||||
disabledTip: { type: String, default: '当前状态不可扫码' },
|
disabledTip: { type: String, default: '当前状态不可扫码' },
|
||||||
|
scanning: { type: Boolean, default: false },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
||||||
|
@import '@/common/pda-typography.scss';
|
||||||
|
|
||||||
.fabric-out-toolbarIcon {
|
.fabric-out-toolbarIcon {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -54,4 +64,19 @@ export default {
|
|||||||
background: #f7f7f7;
|
background: #f7f7f7;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
.fabric-out-scanClose {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
padding: 0 16rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
border: 1rpx solid #2979ff;
|
||||||
|
background: #eaf2ff;
|
||||||
|
color: #2979ff;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
flex-shrink: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
+2
-2
@@ -2,8 +2,8 @@
|
|||||||
"name" : "浩拓织厂",
|
"name" : "浩拓织厂",
|
||||||
"appid" : "__UNI__F79F300",
|
"appid" : "__UNI__F79F300",
|
||||||
"description" : "周尚-浩拓织厂",
|
"description" : "周尚-浩拓织厂",
|
||||||
"versionName" : "1.1.24",
|
"versionName" : "1.1.25",
|
||||||
"versionCode" : 124,
|
"versionCode" : 125,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
"optimization" : {
|
"optimization" : {
|
||||||
|
|||||||
@@ -42,12 +42,20 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-if="showScanSection">
|
<view v-if="showScanSection">
|
||||||
|
<PlusBarcodePanel
|
||||||
|
ref="plusBarcodePanel"
|
||||||
|
:visible.sync="phoneScanPanelOpen"
|
||||||
|
hint-text="连续扫码出仓,扫完可继续下一条"
|
||||||
|
:scan-time-space="1200"
|
||||||
|
@success="onPlusBarcodeSuccess"
|
||||||
|
/>
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
:value="QRBarCode"
|
:value="QRBarCode"
|
||||||
:delete-mode="BarCodeDelStatus"
|
:delete-mode="BarCodeDelStatus"
|
||||||
:message="BillDataMessage"
|
:message="BillDataMessage"
|
||||||
disabled-tip="请先提交保存后再扫码"
|
disabled-tip="请先提交保存后再扫码"
|
||||||
|
:scanning="phoneScanPanelOpen"
|
||||||
@input="QRBarCode = $event"
|
@input="QRBarCode = $event"
|
||||||
@scan="handleScan"
|
@scan="handleScan"
|
||||||
@phone-scan="handlePhoneScan"
|
@phone-scan="handlePhoneScan"
|
||||||
@@ -98,6 +106,7 @@ import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vu
|
|||||||
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
||||||
|
import PlusBarcodePanel from '@/components/common/PlusBarcodePanel.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -109,6 +118,7 @@ export default {
|
|||||||
FabricOutSummaryTable,
|
FabricOutSummaryTable,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
SearchSelectPopup,
|
SearchSelectPopup,
|
||||||
|
PlusBarcodePanel,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
onLoad() {
|
onLoad() {
|
||||||
|
|||||||
@@ -36,11 +36,19 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-if="showScanSection">
|
<view v-if="showScanSection">
|
||||||
|
<PlusBarcodePanel
|
||||||
|
ref="plusBarcodePanel"
|
||||||
|
:visible.sync="phoneScanPanelOpen"
|
||||||
|
hint-text="连续扫码出仓,扫完可继续下一条"
|
||||||
|
:scan-time-space="1200"
|
||||||
|
@success="onPlusBarcodeSuccess"
|
||||||
|
/>
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
:value="QRBarCode"
|
:value="QRBarCode"
|
||||||
:delete-mode="BarCodeDelStatus"
|
:delete-mode="BarCodeDelStatus"
|
||||||
:message="BillDataMessage"
|
:message="BillDataMessage"
|
||||||
|
:scanning="phoneScanPanelOpen"
|
||||||
@input="QRBarCode = $event"
|
@input="QRBarCode = $event"
|
||||||
@scan="handleScan"
|
@scan="handleScan"
|
||||||
@phone-scan="handlePhoneScan"
|
@phone-scan="handlePhoneScan"
|
||||||
@@ -81,6 +89,7 @@ import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vu
|
|||||||
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
||||||
|
import PlusBarcodePanel from '@/components/common/PlusBarcodePanel.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -92,6 +101,7 @@ export default {
|
|||||||
FabricOutSummaryTable,
|
FabricOutSummaryTable,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
SearchSelectPopup,
|
SearchSelectPopup,
|
||||||
|
PlusBarcodePanel,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
data() {
|
data() {
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ export default {
|
|||||||
auditStatus: 0,
|
auditStatus: 0,
|
||||||
businessUnitOptions: [],
|
businessUnitOptions: [],
|
||||||
dropdownLoading: false,
|
dropdownLoading: false,
|
||||||
|
phoneScanPanelOpen: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -112,25 +113,29 @@ export default {
|
|||||||
},
|
},
|
||||||
onHide() {
|
onHide() {
|
||||||
this.isPageActive = false;
|
this.isPageActive = false;
|
||||||
|
this.closePhoneScanPanel();
|
||||||
this.unregisterScanBroadcast();
|
this.unregisterScanBroadcast();
|
||||||
},
|
},
|
||||||
onUnload() {
|
onUnload() {
|
||||||
this.isPageActive = false;
|
this.isPageActive = false;
|
||||||
|
this.closePhoneScanPanel();
|
||||||
this.unregisterScanBroadcast();
|
this.unregisterScanBroadcast();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handlePhoneScan() {
|
handlePhoneScan() {
|
||||||
// 手机连续扫:优先 Ba-Scanner;无插件时扫完自动再开相机
|
if (!this.canScan) {
|
||||||
this.openPhoneScan({
|
this.showError('请先提交保存后再扫码');
|
||||||
continuous: true,
|
return;
|
||||||
hintText: '连续扫码出仓,扫完可继续下一条',
|
}
|
||||||
scanTimeSpace: 1200,
|
this.phoneScanPanelOpen = !this.phoneScanPanelOpen;
|
||||||
callback: (scanResult) => {
|
},
|
||||||
|
closePhoneScanPanel() {
|
||||||
|
this.phoneScanPanelOpen = false;
|
||||||
|
},
|
||||||
|
onPlusBarcodeSuccess(scanResult) {
|
||||||
this.QRBarCode = String(scanResult || '').trim().replace(/[\r\n]/g, '');
|
this.QRBarCode = String(scanResult || '').trim().replace(/[\r\n]/g, '');
|
||||||
return this.handleScan();
|
return this.handleScan();
|
||||||
},
|
},
|
||||||
});
|
|
||||||
},
|
|
||||||
registerOrderScanBroadcast() {
|
registerOrderScanBroadcast() {
|
||||||
this.registerScanBroadcast((scanResult) => {
|
this.registerScanBroadcast((scanResult) => {
|
||||||
this.QRBarCode = scanResult.trim().replace(/[\r\n]/g, '');
|
this.QRBarCode = scanResult.trim().replace(/[\r\n]/g, '');
|
||||||
@@ -141,6 +146,7 @@ export default {
|
|||||||
const nextCanScan = this.isEditable && canScanAtStatus(status);
|
const nextCanScan = this.isEditable && canScanAtStatus(status);
|
||||||
if (this.canScan && !nextCanScan) {
|
if (this.canScan && !nextCanScan) {
|
||||||
this.unregisterScanBroadcast();
|
this.unregisterScanBroadcast();
|
||||||
|
this.closePhoneScanPanel();
|
||||||
}
|
}
|
||||||
this.canScan = nextCanScan;
|
this.canScan = nextCanScan;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -57,6 +57,14 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<PlusBarcodePanel
|
||||||
|
ref="plusBarcodePanel"
|
||||||
|
:visible.sync="phoneScanPanelOpen"
|
||||||
|
hint-text="连续扫码进仓,扫完可继续下一条"
|
||||||
|
:scan-time-space="1200"
|
||||||
|
@success="onPlusBarcodeSuccess"
|
||||||
|
/>
|
||||||
|
|
||||||
<view class="manual-in__scan">
|
<view class="manual-in__scan">
|
||||||
<input
|
<input
|
||||||
class="manual-in__scan-input"
|
class="manual-in__scan-input"
|
||||||
@@ -77,6 +85,14 @@
|
|||||||
<u-icon name="close-circle-fill" size="44" color="#bfbfbf" />
|
<u-icon name="close-circle-fill" size="44" color="#bfbfbf" />
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view
|
||||||
|
v-if="phoneScanPanelOpen"
|
||||||
|
class="manual-in__scan-close"
|
||||||
|
@click.stop="handlePhoneScan"
|
||||||
|
>
|
||||||
|
关闭扫码
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
v-else
|
||||||
class="manual-in__scan-icon"
|
class="manual-in__scan-icon"
|
||||||
@click.stop="handlePhoneScan"
|
@click.stop="handlePhoneScan"
|
||||||
>
|
>
|
||||||
@@ -133,6 +149,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import CommonNavbar from '@/components/common-navbar/index';
|
import CommonNavbar from '@/components/common-navbar/index';
|
||||||
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
||||||
|
import PlusBarcodePanel from '@/components/common/PlusBarcodePanel.vue';
|
||||||
import scanMixin from '@/common/scanMixin.js';
|
import scanMixin from '@/common/scanMixin.js';
|
||||||
import util from '@/common/util.js';
|
import util from '@/common/util.js';
|
||||||
import { formatWeightKg } from '@/common/storeFabricBusinessOut.js';
|
import { formatWeightKg } from '@/common/storeFabricBusinessOut.js';
|
||||||
@@ -186,7 +203,7 @@ function normalizeLevelIds(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { CommonNavbar, SearchSelectPopup },
|
components: { CommonNavbar, SearchSelectPopup, PlusBarcodePanel },
|
||||||
mixins: [scanMixin],
|
mixins: [scanMixin],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -204,6 +221,7 @@ export default {
|
|||||||
inspectorPickerShow: false,
|
inspectorPickerShow: false,
|
||||||
inspectorOptions: [],
|
inspectorOptions: [],
|
||||||
inspectorOptionsLoaded: false,
|
inspectorOptionsLoaded: false,
|
||||||
|
phoneScanPanelOpen: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -224,9 +242,16 @@ export default {
|
|||||||
this.loadInspectorOptions();
|
this.loadInspectorOptions();
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
|
this.isPageActive = true;
|
||||||
this.refocusScanInput(50);
|
this.refocusScanInput(50);
|
||||||
},
|
},
|
||||||
|
onHide() {
|
||||||
|
this.isPageActive = false;
|
||||||
|
this.closePhoneScanPanel();
|
||||||
|
},
|
||||||
onUnload() {
|
onUnload() {
|
||||||
|
this.isPageActive = false;
|
||||||
|
this.closePhoneScanPanel();
|
||||||
clearTimeout(this._scanFocusTimer);
|
clearTimeout(this._scanFocusTimer);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -237,6 +262,12 @@ export default {
|
|||||||
this.scanFocus = true;
|
this.scanFocus = true;
|
||||||
}, delay);
|
}, delay);
|
||||||
},
|
},
|
||||||
|
closePhoneScanPanel() {
|
||||||
|
this.phoneScanPanelOpen = false;
|
||||||
|
},
|
||||||
|
onPlusBarcodeSuccess(scanResult) {
|
||||||
|
return this.handleScanCode(scanResult);
|
||||||
|
},
|
||||||
navToSetting() {
|
navToSetting() {
|
||||||
uni.navigateTo({ url: '/pages/sys/user/scan-settings' });
|
uni.navigateTo({ url: '/pages/sys/user/scan-settings' });
|
||||||
},
|
},
|
||||||
@@ -354,11 +385,7 @@ export default {
|
|||||||
this.$u.toast(err);
|
this.$u.toast(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.openPhoneScan({
|
this.phoneScanPanelOpen = !this.phoneScanPanelOpen;
|
||||||
callback: (scanResult) => {
|
|
||||||
this.handleScanCode(scanResult);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
onScanConfirm() {
|
onScanConfirm() {
|
||||||
const code = String(this.scanCode || '').trim();
|
const code = String(this.scanCode || '').trim();
|
||||||
@@ -554,6 +581,21 @@ export default {
|
|||||||
background: #f7f7f7;
|
background: #f7f7f7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.manual-in__scan-close {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 72rpx;
|
||||||
|
padding: 0 16rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
border: 1rpx solid #2979ff;
|
||||||
|
background: #eaf2ff;
|
||||||
|
color: #2979ff;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
.manual-in__placeholder {
|
.manual-in__placeholder {
|
||||||
color: #b0b4bb;
|
color: #b0b4bb;
|
||||||
font-size: $pda-font-placeholder;
|
font-size: $pda-font-placeholder;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
|
<u-gap height="20" bg-color="#f5f5f5"></u-gap>
|
||||||
<u-cell-item icon="question-circle" :iconStyle="{ color: '#ff8d06' }" title="常见问题" @click="navTo('problem')"></u-cell-item>
|
<u-cell-item icon="question-circle" :iconStyle="{ color: '#ff8d06' }" title="常见问题" @click="navTo('problem')"></u-cell-item>
|
||||||
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#5f8dff' }" title="意见反馈" @click="navTo('comment')"></u-cell-item>
|
<u-cell-item icon="kefu-ermai" :iconStyle="{ color: '#5f8dff' }" title="意见反馈" @click="navTo('comment')"></u-cell-item>
|
||||||
<u-cell-item icon="map" :iconStyle="{ color: '#316ede' }" title="账号安全" @click="navTo('pwd')"></u-cell-item>
|
<u-cell-item icon="map" :iconStyle="{ color: '#316ede' }" title="修改密码" @click="navTo('pwd')"></u-cell-item>
|
||||||
<u-cell-item icon="scan" :iconStyle="{ color: '#36cfc9' }" title="扫描设置" @click="navTo('scan-settings')"></u-cell-item>
|
<u-cell-item icon="scan" :iconStyle="{ color: '#36cfc9' }" title="扫描设置" @click="navTo('scan-settings')"></u-cell-item>
|
||||||
<u-cell-item icon="order" :iconStyle="{ color: '#59bdf9' }" title="清除缓存" @click="navTo('clear-cache')"></u-cell-item>
|
<u-cell-item icon="order" :iconStyle="{ color: '#59bdf9' }" title="清除缓存" @click="navTo('clear-cache')"></u-cell-item>
|
||||||
<!--<u-cell-item icon="account" :iconStyle="{ color: '#27c0dc' }" title="关于我们" @click="navTo('about')"></u-cell-item>
|
<!--<u-cell-item icon="account" :iconStyle="{ color: '#27c0dc' }" title="关于我们" @click="navTo('about')"></u-cell-item>
|
||||||
|
|||||||
@@ -68,31 +68,30 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
submit() {
|
submit() {
|
||||||
this.$refs.uForm.validate(valid => {
|
this.$refs.uForm.validate(valid => {
|
||||||
if (valid) {
|
if (!valid) {
|
||||||
|
this.$u.toast('您填写的信息有误,请根据提示修正。');
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.$u.api.user.infoSavePwd({
|
this.$u.api.user.infoSavePwd({
|
||||||
oldPassword: this.model.oldPassword,
|
oldPassword: this.model.oldPassword,
|
||||||
newPassword: this.model.newPassword
|
newPassword: this.model.newPassword
|
||||||
}).then(res => {
|
}).then(() => {
|
||||||
if(res.code == '200'){
|
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: res.msg,
|
content: '密码修改成功',
|
||||||
showCancel: false,
|
showCancel: false,
|
||||||
success: function () {
|
success: () => {
|
||||||
uni.navigateBack();
|
uni.navigateBack();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}).catch((err) => {
|
||||||
|
const message = (err && (err.message || err.msg)) || '修改密码失败';
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: res.msg,
|
content: message,
|
||||||
showCancel: false
|
showCancel: false
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
this.$u.toast('您填写的信息有误,请根据提示修正。');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cancel() {
|
cancel() {
|
||||||
|
|||||||
+11
-12
@@ -33,7 +33,7 @@ export default {
|
|||||||
model: {
|
model: {
|
||||||
oldPassword: '',
|
oldPassword: '',
|
||||||
newPassword: '',
|
newPassword: '',
|
||||||
confirmNewPassword: ''
|
confirmPassword: ''
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
oldPassword: [
|
oldPassword: [
|
||||||
@@ -78,31 +78,30 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
submit() {
|
submit() {
|
||||||
this.$refs.uForm.validate(valid => {
|
this.$refs.uForm.validate(valid => {
|
||||||
if (valid) {
|
if (!valid) {
|
||||||
|
this.$u.toast('您填写的信息有误,请根据提示修正。');
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.$u.api.user.infoSavePwd({
|
this.$u.api.user.infoSavePwd({
|
||||||
oldPassword: this.model.oldPassword,
|
oldPassword: this.model.oldPassword,
|
||||||
newPassword: this.model.newPassword
|
newPassword: this.model.newPassword
|
||||||
}).then(res => {
|
}).then(() => {
|
||||||
if(res.code == '200'){
|
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: res.msg,
|
content: '密码修改成功',
|
||||||
showCancel: false,
|
showCancel: false,
|
||||||
success: function () {
|
success: () => {
|
||||||
uni.navigateBack();
|
uni.navigateBack();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}).catch((err) => {
|
||||||
|
const message = (err && (err.message || err.msg)) || '修改密码失败';
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: res.msg,
|
content: message,
|
||||||
showCancel: false
|
showCancel: false
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
this.$u.toast('您填写的信息有误,请根据提示修正。');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cancel() {
|
cancel() {
|
||||||
|
|||||||
Reference in New Issue
Block a user