9 Commits
Author SHA1 Message Date
xuan dc6e2ece54 chore(manifest): 更新应用版本号至1.1.4
- 将 versionName 从1.1.3更新为1.1.4
- 将 versionCode 从103更新为104
2026-01-04 14:16:57 +08:00
xuan e0b00cc62b feat(app): 添加自动检查版本更新功能
- 引入 app_upgrade 模块用于版本检测
- 实现 autoCheckUpgrade 方法自动检查版本更新
- 在 APP-PLUS 平台的 onLoad 生命周期调用自动更新检查
- 调用后端接口获取升级信息并判断是否需要更新
- 支持强制检查新版本,跳过时间戳限制
- 优化日志打印,便于排查版本升级过程中的问题
2026-01-04 14:16:00 +08:00
xuan 9272ed0e23 feat(scanner): 多厂商PDA扫码器兼容方案及扫码功能重构
- 采用策略模式及配置表驱动方式支持多品牌扫码器广播注册
- 实现扫码广播的统一注册和注销管理,支持并发多个扫码广播接收器
- 重构扫码处理逻辑,统一处理扫码结果,支持条码和二维码识别
- 移除原有单一品牌扫码注册,整合商米、新大陆等扫码头支持
- 调整扫码相关页面代码,集成scanMixin,实现扫码广播注册和注销自动化
- 优化扫码结果处理,支持删除模式及整缸扫描状态区分
- 修正多处界面文本格式与代码风格,提高代码一致性和可维护性
- 升级manifest版本号至1.1.3,标记此功能更新
2026-01-04 13:57:28 +08:00
xuan 9e4be6db92 refactor(http): 优化升级检查请求及新增完整URL PUT请求方法
- 将升级检查接口调用改为使用统一的 putJson 方法,简化请求逻辑
- 新增 vm.$u.putJsonFullUrl 方法,支持传入完整URL且带默认JSON请求头
- putJsonFullUrl 方法封装了请求的统一header和响应处理逻辑
- manifest版本号升级至1.1.2 (112)
- sys user setting页面增加升级检查返回日志打印,方便调试
2025-12-30 18:16:08 +08:00
xuan 03024c395a fix(http): 更新接口请求方式及环境配置
- 修改.env文件,切换为zhisheng预发布环境变量
- 将outFpmArrangeOrder接口请求改为使用putJson,支持json格式请求体
- 在http.interceptor.js中新增putJson方法,封装带json请求头的PUT请求接口
- 统一接口请求方式,确保请求头为application/json,提高接口兼容性和稳定性
2025-12-30 17:30:47 +08:00
xuan 7043a49206 feat(login): 优化登录逻辑及环境配置展示
- 修改环境变量配置,新增 VUE_APP_ENV_NAME 用于区分环境名称显示
- 调整登录接口请求,pdaLogin与pdaLogout改为相对路径调用
- 登录页面新增环境名称显示,区分不同环境使用状态
- 登录流程支持开发环境动态选择服务器地址,支持自定义地址输入及存储
- 增加请求和响应拦截器日志输出,方便调试接口请求问题
- 优化登录表单输入清除按钮显示与密码显示切换交互体验
- 修复和改善登录相关本地存储,自动保存账号密码和服务器地址
- 调整manifest包配置,禁用app-plus子包
- 格式化和规范登录页面样式调整,提升页面结构与样式一致性
2025-12-26 15:11:37 +08:00
xuan 8a9bb09c18 fix(http): 修正 PDA 登录登出接口的请求地址
- 将 PDA 登录接口的请求地址修改为使用生产环境 API URL 前缀
- 将 PDA 登出接口的请求地址修改为使用生产环境 API URL 前缀
- 保持接口调用方式不变,确保请求路径正确指向后端服务
2025-12-25 11:39:00 +08:00
xuan f63d202327 build(deps): update dependencies and manifest version
更新了项目依赖,包括:
- `@dcloudio` 相关依赖
- `@icon-park/vue`
- `@vue/shared`
- `core-js`
- `flyio`
- `vue-i18n`
- `vuex`
- `@dcloudio/types`
- `babel-plugin-import`

同时,更新了 `manifest.json` 中的 `versionName` 和 `versionCode`。

这些更新旨在提升项目性能、修复已知问题并引入新功能。
2025-08-18 11:43:03 +08:00
xuan aa186a3f82 feat(config): add environment-specific build and dev scripts with dotenv support
- 添加了针对不同环境(mes、zhisheng)的构建和开发脚本
- 集成 dotenv 支持,通过 .env 文件管理环境变量
- 更新 manifest.json 中的图标和启动页路径,修正版本号
- 重构配置文件以支持动态环境变量注入
- 修改 HTTP API 调用地址为可配置化,便于多环境部署切换
2025-08-16 18:09:06 +08:00
48 changed files with 1953 additions and 2152 deletions
+5
View File
@@ -0,0 +1,5 @@
NODE_ENV = development
VUE_APP_ENV_NAME = zhisheng环境
VUE_APP_UPGRADE_NAME = erp_pda_pre
VUE_APP_PRODUCTION_API_URL = https://hcscmpre.zzfzyc.com/hcscm/pda/v1
VUE_APP_DEV_API_URL = https://hcscmpre.zzfzyc.com/hcscm/pda/v1
+5
View File
@@ -0,0 +1,5 @@
NODE_ENV = development
VUE_APP_ENV_NAME = mes环境
VUE_APP_UPGRADE_NAME = erp_pda
VUE_APP_PRODUCTION_API_URL = https://www.haotopai.com/hcscm/mes/server/pda/v1
VUE_APP_DEV_API_URL = https://www.haotopai.com/hcscm/mes/server/pda/v1
+5
View File
@@ -0,0 +1,5 @@
NODE_ENV = development
VUE_APP_ENV_NAME = zhisheng环境
VUE_APP_UPGRADE_NAME = erp_pda_pre
VUE_APP_PRODUCTION_API_URL = https://hcscmpre.zzfzyc.com/hcscm/pda/v1
VUE_APP_DEV_API_URL = https://hcscmpre.zzfzyc.com/hcscm/pda/v1
+3 -1
View File
@@ -1,3 +1,5 @@
# 不使用 pda项目,以后的新需求或者修改 使用 本项目
# pda-cli # pda-cli
## Project setup ## Project setup
@@ -83,4 +85,4 @@ pack.json内容如下:详情可访问 [CLI uni-app发行 - Android/iOS云打
} }
``` ```
### 云服务器走CICD 打包: ### 云服务器走CICD 打包:
需要下载 [Linux HBuilderX Cli](https://ask.dcloud.net.cn/article/41469) 需要下载 [Linux HBuilderX Cli](https://ask.dcloud.net.cn/article/41469)
+50 -45
View File
@@ -7,6 +7,8 @@
"serve": "npm run dev:h5", "serve": "npm run dev:h5",
"build": "npm run build:h5", "build": "npm run build:h5",
"build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build", "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
"build:app-plus:zhisheng": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build --mode zhisheng",
"build:app-plus:mes": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build --mode mes",
"build:custom": "cross-env NODE_ENV=production uniapp-cli custom", "build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
"build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build", "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build", "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
@@ -25,6 +27,8 @@
"build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build", "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
"build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build", "build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
"dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch", "dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
"dev:app-plus:zhisheng": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch --mode zhisheng",
"dev:app-plus:mes": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch --mode mes",
"dev:custom": "cross-env NODE_ENV=development uniapp-cli custom", "dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
"dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve", "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
"dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch", "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
@@ -55,58 +59,59 @@
"浩拓移动端" "浩拓移动端"
], ],
"dependencies": { "dependencies": {
"@dcloudio/uni-app": "^2.0.2-4070520250711001", "@dcloudio/uni-app": "2.0.2-4070520250711001",
"@dcloudio/uni-app-plus": "^2.0.2-4070520250711001", "@dcloudio/uni-app-plus": "2.0.2-4070520250711001",
"@dcloudio/uni-h5": "^2.0.2-4070520250711001", "@dcloudio/uni-h5": "2.0.2-4070520250711001",
"@dcloudio/uni-i18n": "^2.0.2-4070520250711001", "@dcloudio/uni-i18n": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-360": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-360": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-alipay": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-alipay": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-baidu": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-baidu": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-harmony": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-harmony": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-jd": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-jd": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-kuaishou": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-kuaishou": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-lark": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-lark": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-qq": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-qq": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-toutiao": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-toutiao": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-vue": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-vue": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-weixin": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-weixin": "2.0.2-4070520250711001",
"@dcloudio/uni-mp-xhs": "^2.0.2-4070520250711001", "@dcloudio/uni-mp-xhs": "2.0.2-4070520250711001",
"@dcloudio/uni-quickapp-native": "^2.0.2-4070520250711001", "@dcloudio/uni-quickapp-native": "2.0.2-4070520250711001",
"@dcloudio/uni-quickapp-webview": "^2.0.2-4070520250711001", "@dcloudio/uni-quickapp-webview": "2.0.2-4070520250711001",
"@dcloudio/uni-stacktracey": "^2.0.2-4070520250711001", "@dcloudio/uni-stacktracey": "2.0.2-4070520250711001",
"@dcloudio/uni-stat": "^2.0.2-4070520250711001", "@dcloudio/uni-stat": "2.0.2-4070520250711001",
"@icon-park/vue": "^1.3.5", "@icon-park/vue": "^1.4.2",
"@vue/shared": "^3.0.0", "@vue/shared": "^3.5.18",
"core-js": "^3.8.3", "core-js": "^3.45.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"flyio": "^0.6.2", "dotenv": "^17.2.1",
"flyio": "^0.6.14",
"uview-ui": "1.8.8", "uview-ui": "1.8.8",
"vue": ">= 2.6.14 < 2.7", "vue": "^2.6.14",
"vue-i18n": "^8.20.0", "vue-i18n": "^8.28.2",
"vuex": "^3.2.0" "vuex": "^3.6.2"
}, },
"devDependencies": { "devDependencies": {
"@dcloudio/types": "^3.3.2", "@dcloudio/types": "^3.4.19",
"@dcloudio/uni-automator": "^2.0.2-4070520250711001", "@dcloudio/uni-automator": "2.0.2-4070520250711001",
"@dcloudio/uni-cli-i18n": "^2.0.2-4070520250711001", "@dcloudio/uni-cli-i18n": "2.0.2-4070520250711001",
"@dcloudio/uni-cli-shared": "^2.0.2-4070520250711001", "@dcloudio/uni-cli-shared": "2.0.2-4070520250711001",
"@dcloudio/uni-helper-json": "*", "@dcloudio/uni-helper-json": "^1.0.13",
"@dcloudio/uni-migration": "^2.0.2-4070520250711001", "@dcloudio/uni-migration": "2.0.2-4070520250711001",
"@dcloudio/uni-template-compiler": "^2.0.2-4070520250711001", "@dcloudio/uni-template-compiler": "2.0.2-4070520250711001",
"@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.2-4070520250711001", "@dcloudio/vue-cli-plugin-hbuilderx": "2.0.2-4070520250711001",
"@dcloudio/vue-cli-plugin-uni": "^2.0.2-4070520250711001", "@dcloudio/vue-cli-plugin-uni": "2.0.2-4070520250711001",
"@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.2-4070520250711001", "@dcloudio/vue-cli-plugin-uni-optimize": "2.0.2-4070520250711001",
"@dcloudio/webpack-uni-mp-loader": "^2.0.2-4070520250711001", "@dcloudio/webpack-uni-mp-loader": "2.0.2-4070520250711001",
"@dcloudio/webpack-uni-pages-loader": "^2.0.2-4070520250711001", "@dcloudio/webpack-uni-pages-loader": "2.0.2-4070520250711001",
"@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-babel": "~5.0.8",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.8",
"babel-plugin-import": "^1.11.0", "babel-plugin-import": "^1.13.8",
"cross-env": "^7.0.2", "cross-env": "^7.0.3",
"jest": "^25.4.0", "jest": "^25.5.4",
"postcss-comment": "^2.0.0", "postcss-comment": "^2.0.0",
"sass": "1.26.2", "sass": "1.26.2",
"sass-loader": "8.0.2", "sass-loader": "8.0.2",
"vue-template-compiler": ">= 2.6.14 < 2.7" "vue-template-compiler": "^2.6.14"
}, },
"browserslist": [ "browserslist": [
"Android >= 4.4", "Android >= 4.4",
+1 -1
View File
@@ -2,7 +2,7 @@
<view> <view>
<topDropdown :isSxShow="true" :dropdown1="dropdown1" dropdown2="上架中" :options1="options1" :options2="isSjList" :optionsSx="sxList" searchUrl="./searchAdmin" @dropDownFun1="dropDownFun1" @dropDownFun2="dropDownFun2" @optionSxFun="optionSxFun"> <topDropdown :isSxShow="true" :dropdown1="dropdown1" dropdown2="上架中" :options1="options1" :options2="isSjList" :optionsSx="sxList" searchUrl="./searchAdmin" @dropDownFun1="dropDownFun1" @dropDownFun2="dropDownFun2" @optionSxFun="optionSxFun">
</topDropdown> </topDropdown>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请添加或者更换查询条件"></dataNull> title1="请添加或者更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -1,6 +1,6 @@
<template> <template>
<view> <view>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关分类" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关分类"
title1="点击添加按钮添加相关分类"></dataNull> title1="点击添加按钮添加相关分类"></dataNull>
<view v-else class="content"> <view v-else class="content">
<view class="row" v-for="(row, index) in list" :key="index"> <view class="row" v-for="(row, index) in list" :key="index">
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView> <searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请更换查询条件"></dataNull> title1="请更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView> <searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请添加或者更换查询条件"></dataNull> title1="请添加或者更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+2 -2
View File
@@ -81,12 +81,12 @@
<getMore :isMore="tabBars[tabCurrentIndex].isMore" style="margin-bottom: 16px;"></getMore> <getMore :isMore="tabBars[tabCurrentIndex].isMore" style="margin-bottom: 16px;"></getMore>
<view style="height: 36rpx;"></view> <view style="height: 36rpx;"></view>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" title1="请先添加"> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品" title1="请先添加">
</dataNull> </dataNull>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无相关产品"> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品">
</dataNull> </dataNull>
</view> </view>
</view> </view>
+3 -9
View File
@@ -6,7 +6,7 @@
export const isDevelopment = process.env.NODE_ENV === 'development' export const isDevelopment = process.env.NODE_ENV === 'development'
const config = { const config = {
upgradeName: 'erp_pda_pre', upgradeName: process.env.VUE_APP_UPGRADE_NAME || 'erp_pda',
// 产品名称 // 产品名称
productName: '浩拓技术', productName: '浩拓技术',
@@ -17,22 +17,16 @@ const config = {
// 版本检查标识 // 版本检查标识
appCode: 'android', appCode: 'android',
// 内部版本号码
appVersion: 1,
// 管理基础路径
adminPath: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1',
// 环境判断 // 环境判断
isDevelopment: isDevelopment, isDevelopment: isDevelopment,
// 生产环境API URL // 生产环境API URL
productionApiUrl: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1', productionApiUrl: process.env.VUE_APP_PRODUCTION_API_URL || 'https://www.haotopai.com/hcscm/mes/server/pda/v1',
// 开发环境API URL选项 // 开发环境API URL选项
devApiUrlOptions: [ devApiUrlOptions: [
{ label: '测试环境', value: 'https://hcscmtest.zzfzyc.com/hcscm/pda/v1' }, { label: '测试环境', value: 'https://hcscmtest.zzfzyc.com/hcscm/pda/v1' },
{ label: '正式环境', value: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1' }, { label: '正式环境', value: process.env.VUE_APP_DEV_API_URL || 'https://www.haotopai.com/hcscm/mes/server/pda/v1' },
{ label: '自定义', value: 'custom' } { label: '自定义', value: 'custom' }
] ]
+25 -27
View File
@@ -12,9 +12,9 @@ const install = (Vue, vm) => {
// 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等 // 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等
lang: (params = {}) => vm.$u.get('/lang/'+params.lang), lang: (params = {}) => vm.$u.get('/lang/'+params.lang),
index: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index', params), index: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/index', params),
getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/user/getUserInfo', params), getUserInfo: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/user/getUserInfo', params),
login: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/loginByPassword', params), login: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/login/loginByPassword', params),
// PDA登录接口 // PDA登录接口
pdaLogin: (params = {}) => vm.$u.postJson('/login', params), pdaLogin: (params = {}) => vm.$u.postJson('/login', params),
pdaLogout: (params = {}) => vm.$u.postJson('/logout', params), pdaLogout: (params = {}) => vm.$u.postJson('/logout', params),
@@ -23,19 +23,19 @@ const install = (Vue, vm) => {
// 获取成品配布单详情 // 获取成品配布单详情
getFpmArrangeOrder: (params = {}) => vm.$u.get('/product/fpmArrangeOrder/getFpmArrangeOrder', params), getFpmArrangeOrder: (params = {}) => vm.$u.get('/product/fpmArrangeOrder/getFpmArrangeOrder', params),
// 生成出仓单 // 生成出仓单
outFpmArrangeOrder: (params = {}) => vm.$u.put('/product/fpmArrangeOrder/outFpmArrangeOrder', params), outFpmArrangeOrder: (params = {}) => vm.$u.putJson('/product/fpmArrangeOrder/outFpmArrangeOrder', params),
sendCode: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/sendCode', params), sendCode: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/login/sendCode', params),
registerUser: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/registerUser', params), registerUser: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/user/registerUser', params),
//首页相关api //首页相关api
getIndexCardInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getIndexCardInfo', params), getIndexCardInfo: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/index/getIndexCardInfo', params),
getM2mOrderFlowList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderFlowList', params), getM2mOrderFlowList: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/index/getM2mOrderFlowList', params),
//获取卡可购买套餐包 //获取卡可购买套餐包
getM2mOrderPackageList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderPackageList', params), getM2mOrderPackageList: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/index/getM2mOrderPackageList', params),
logout: (params = {}) => vm.$u.get(config.adminPath+'/mobile/login/logout', params), logout: (params = {}) => vm.$u.get(config.productionApiUrl+'/mobile/login/logout', params),
authInfo: (params = {}) => vm.$u.get(config.adminPath+'/authInfo', params), authInfo: (params = {}) => vm.$u.get(config.productionApiUrl+'/authInfo', params),
menuTree: (params = {}) => vm.$u.get(config.adminPath+'/menuTree', params), menuTree: (params = {}) => vm.$u.get(config.productionApiUrl+'/menuTree', params),
switchSys: (params = {}) => vm.$u.get(config.adminPath+'/switch/'+params.sysCode), switchSys: (params = {}) => vm.$u.get(config.productionApiUrl+'/switch/'+params.sysCode),
dictData: (params = {}) => vm.$u.get(config.a取dminPath+'/system/dict/data/type/'+params.dictType), dictData: (params = {}) => vm.$u.get(config.a取dminPath+'/system/dict/data/type/'+params.dictType),
// 账号服务:验证码接口、忘记密码接口、注册账号接口等 // 账号服务:验证码接口、忘记密码接口、注册账号接口等
@@ -46,36 +46,34 @@ const install = (Vue, vm) => {
saveRegByValidCode: (params = {}) => vm.$u.post('/account/saveRegByValidCode', params), saveRegByValidCode: (params = {}) => vm.$u.post('/account/saveRegByValidCode', params),
// APP公共服务 // APP公共服务
upgradeCheck: (params = {}) => vm.$u.put(vm.$u.http.config.baseUrl.replace('/pda/v1', '') + '/version/check', params, { upgradeCheck: (params = {}) => vm.$u.putJson('/version/check', params),
'content-type': 'application/json'
}),
commentSave: (params = {}) => vm.$u.post('/app/comment/save', params), commentSave: (params = {}) => vm.$u.post('/app/comment/save', params),
// 个人信息修改 // 个人信息修改
user: { user: {
saveUserInfo: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/saveUserInfo', params), saveUserInfo: (params = {}) => vm.$u.post(config.productionApiUrl+'/mobile/user/saveUserInfo', params),
infoSavePwd: (params = {}) => vm.$u.put(config.adminPath+'/system/user/profile/updatePwd', params), infoSavePwd: (params = {}) => vm.$u.put(config.productionApiUrl+'/system/user/profile/updatePwd', params),
infoSavePqa: (params = {}) => vm.$u.post(config.adminPath+'/sys/user/infoSavePqa', params), infoSavePqa: (params = {}) => vm.$u.post(config.productionApiUrl+'/sys/user/infoSavePqa', params),
}, },
// 员工用户查询 // 员工用户查询
empUser: { empUser: {
listData: (params = {}) => vm.$u.get(config.adminPath+'/sys/empUser/listData', params), listData: (params = {}) => vm.$u.get(config.productionApiUrl+'/sys/empUser/listData', params),
}, },
// 组织机构查询 // 组织机构查询
office: { office: {
treeData: (params = {}) => vm.$u.get(config.adminPath+'/sys/office/treeData', params), treeData: (params = {}) => vm.$u.get(config.productionApiUrl+'/sys/office/treeData', params),
}, },
// 增删改查例子 // 增删改查例子
testData: { testData: {
form: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/form', params), form: (params = {}) => vm.$u.post(config.productionApiUrl+'/test/testData/form', params),
list: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/listData', params), list: (params = {}) => vm.$u.post(config.productionApiUrl+'/test/testData/listData', params),
save: (params = {}) => vm.$u.postJson(config.adminPath+'/test/testData/save', params), save: (params = {}) => vm.$u.postJson(config.productionApiUrl+'/test/testData/save', params),
disable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/disable', params), disable: (params = {}) => vm.$u.post(config.productionApiUrl+'/test/testData/disable', params),
enable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/enable', params), enable: (params = {}) => vm.$u.post(config.productionApiUrl+'/test/testData/enable', params),
delete: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/delete', params), delete: (params = {}) => vm.$u.post(config.productionApiUrl+'/test/testData/delete', params),
}, },
}; };
+47 -2
View File
@@ -22,6 +22,9 @@ const install = (Vue, vm) => {
// 请求拦截,配置Token等参数 // 请求拦截,配置Token等参数
Vue.prototype.$u.http.interceptor.request = (req) => { Vue.prototype.$u.http.interceptor.request = (req) => {
console.log('request', req);
console.log('baseUrl', vm.$store.state.apiurl);
console.log('完整URL', vm.$store.state.apiurl + req.url);
if (!req.header){ if (!req.header){
req.header = []; req.header = [];
} }
@@ -42,13 +45,15 @@ const install = (Vue, vm) => {
req.header[rememberMeHeader] = vm.vuex_remember; req.header[rememberMeHeader] = vm.vuex_remember;
req.remember = false; req.remember = false;
} }
console.log('request', req);
return req; return req;
} }
// 响应拦截,判断状态码是否通过 // 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = async (res, req) => { Vue.prototype.$u.http.interceptor.response = async (res, req) => {
console.log('response', res); console.log('response', res);
console.log('response statusCode', res?.statusCode);
console.log('response data', res?.data);
console.log('response errMsg', res?.errMsg);
// 处理401未授权状态码 // 处理401未授权状态码
if (res.statusCode === 401) { if (res.statusCode === 401) {
@@ -63,6 +68,7 @@ const install = (Vue, vm) => {
}); });
return false; return false;
} }
console.log('res',res)
if (!(res.data)){ if (!(res.data)){
vm.$u.toast('未连接到服务器') vm.$u.toast('未连接到服务器')
return Promise.reject(new Error('未连接到服务器')); return Promise.reject(new Error('未连接到服务器'));
@@ -125,7 +131,7 @@ const install = (Vue, vm) => {
// 封装 post json 请求 // 封装 post json 请求
vm.$u.postJson = (url, data = {}, header = {}) => { vm.$u.postJson = (url, data = {}, header = {}) => {
console.log('header', header, url, vm.$u) console.log('header', header, url, vm.$store.state.apiurl)
header['content-type'] = 'application/json'; header['content-type'] = 'application/json';
return vm.$u.http.request({ return vm.$u.http.request({
url, url,
@@ -134,7 +140,46 @@ const install = (Vue, vm) => {
data data
}) })
} }
// 封装 post json 请求
vm.$u.putJson = (url, data = {}, header = {}) => {
console.log('header', header, url, vm.$u)
header['content-type'] = 'application/json';
return vm.$u.http.request({
url,
method: 'PUT',
header,
data
})
}
// 封装不使用 baseUrl 的请求(用于完整URL)
vm.$u.putJsonFullUrl = (url, data = {}, header = {}) => {
header['content-type'] = 'application/json';
return new Promise((resolve, reject) => {
uni.request({
url,
method: 'PUT',
header: {
...header,
'Platform': 2,
'x-requested-with': 'XMLHttpRequest',
'Authorization': vm.vuex_token || ''
},
data,
success: (res) => {
console.log('res',res)
if (res.data && res.data.code === 0) {
resolve(res.data.data);
} else {
reject(res.data);
}
},
fail: (err) => {
reject(err);
}
});
});
}
} }
export default { export default {
+177 -133
View File
@@ -1,143 +1,175 @@
// common/scanMixin.js // common/scanMixin.js
// 多厂商PDA扫码器兼容方案 - 策略模式 + 配置表驱动
export default { export default {
data() { data() {
return { return {
scanReceiver: null, scanReceivers: [], // 支持多个接收器
isPageActive: false isPageActive: false,
registeredBrands: [] // 已注册的品牌
} }
}, },
methods: { methods: {
// 注册扫码广播(兼容多种设备) // 扫码器配置表 - 方便扩展新厂商
registerScanBroadcast(scanCallback) { getScannerConfigs() {
try { return [
// 先尝试注册商米扫码头 {
this.registerSunmiBroadcast(scanCallback) brand: 'newland', // 东集
.then(() => { name: '东集',
console.log('商米扫码头注册成功'); action: 'com.android.server.scannerservice.broadcast',
}) dataKey: 'scannerdata',
.catch((error) => { needSetup: true,
console.log('商米扫码头注册失败,尝试新大陆扫码头:', error); setupAction: 'com.android.scanner.service_settings',
// 如果商米扫码头注册失败,尝试新大陆扫码头 setupParams: {
this.registerNewlandBroadcast(scanCallback); action_barcode_broadcast: 'com.android.server.scannerservice.broadcast',
}); key_barcode_broadcast: 'scannerdata',
} catch (error) { endchar: 'ENTER'
console.error("注册扫码广播失败:", error); }
return false; },
} {
brand: 'sunmi', // 商米
name: '商米',
action: 'com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED',
dataKey: 'data',
needSetup: false
},
// {
// brand: 'honeywell', // 霍尼韦尔
// name: '霍尼韦尔',
// action: 'com.honeywell.decode.intent.action.EDIT_DATA',
// dataKey: 'data',
// needSetup: false
// },
// {
// brand: 'zebra', // 斑马
// name: '斑马',
// action: 'com.symbol.datawedge.api.RESULT_ACTION',
// dataKey: 'com.symbol.datawedge.data_string',
// needSetup: false
// },
// {
// brand: 'idata', // 盈达聚力
// name: '盈达聚力',
// action: 'android.intent.action.SCANRESULT',
// dataKey: 'value',
// needSetup: false
// },
// {
// brand: 'urovo', // 优博讯
// name: '优博讯',
// action: 'android.intent.ACTION_DECODE_DATA',
// dataKey: 'barcode_string',
// needSetup: false
// }
];
}, },
// 注册商米扫码头广播接收器 // 注册所有扫码广播(推荐方式:同时注册所有厂商)
registerSunmiBroadcast(scanCallback) { registerScanBroadcast(scanCallback) {
return new Promise((resolve, reject) => { // #ifdef APP-PLUS
const configs = this.getScannerConfigs();
configs.forEach(config => {
try { try {
const main = plus.android.runtimeMainActivity(); this.registerSingleBroadcast(config, scanCallback);
const IntentFilter = plus.android.importClass("android.content.IntentFilter"); this.registeredBrands.push(config.brand);
console.log(`${config.name}扫码广播注册成功`);
const filter = new IntentFilter();
filter.addAction("com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED");
const self = this;
const receiver = plus.android.implements(
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
{
onReceive: (context, intent) => {
console.log('商米扫码广播接收,isPageActive:', self.isPageActive);
// 只有当页面活动时才处理广播
if (!self.isPageActive) return;
try {
// 导入 Intent 类以使用其方法
const Intent = plus.android.importClass("android.content.Intent");
const scanResult = intent.getStringExtra("data");
const sourceBytes = intent.getByteArrayExtra("source_byte");
console.log('商米扫码结果:', scanResult, sourceBytes);
if (scanResult) {
self.handleScanResult(scanResult, scanCallback);
}
} catch (error) {
console.error('处理商米广播数据时出错:', error);
}
}
}
);
// 注册广播接收器
main.registerReceiver(receiver, filter);
this.scanReceiver = receiver;
console.log('商米扫码广播接收器注册成功');
resolve();
} catch (error) { } catch (error) {
console.error('注册商米广播接收器失败:', error); console.log(`${config.name}扫码广播注册失败:`, error);
reject(error);
} }
}); });
if (this.registeredBrands.length > 0) {
console.log('扫码广播注册完成,已注册厂商:', this.registeredBrands.join(', '));
return true;
}
console.error('所有扫码广播注册均失败');
return false;
// #endif
}, },
// 注册新大陆扫码头广播接收器 // 注册指定厂商的扫码广播
registerNewlandBroadcast(scanCallback) { registerScanBroadcastByBrand(brand, scanCallback) {
try { // #ifdef APP-PLUS
const main = plus.android.runtimeMainActivity(); const configs = this.getScannerConfigs();
const config = configs.find(c => c.brand === brand);
// 先配置扫码枪广播设置
try { if (!config) {
const Intent = plus.android.importClass("android.content.Intent"); console.error(`未找到厂商配置: ${brand}`);
const intent = new Intent("com.android.scanner.service_settings"); return false;
intent.putExtra(
"action_barcode_broadcast",
"com.android.server.scannerservice.broadcast"
);
intent.putExtra("key_barcode_broadcast", "scannerdata");
main.sendBroadcast(intent);
console.log('新大陆扫码枪广播配置完成');
} catch (error) {
console.error("配置新大陆扫码枪广播失败:", error);
}
// 注册广播接收器
const IntentFilter = plus.android.importClass(
"android.content.IntentFilter"
);
const filter = new IntentFilter();
filter.addAction("com.android.server.scannerservice.broadcast");
console.log("添加新大陆广播action完成");
const self = this;
const receiver = plus.android.implements(
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
{
onReceive: (context, intent) => {
console.log('新大陆扫码广播接收,isPageActive:', self.isPageActive);
// 只有当页面活动时才处理广播
if (!self.isPageActive) return;
try {
// 导入 Intent 类以使用其方法
const Intent = plus.android.importClass("android.content.Intent");
const scanResult = intent.getStringExtra("scannerdata");
console.log("新大陆扫码结果:", scanResult);
if (scanResult) {
self.handleScanResult(scanResult, scanCallback);
}
} catch (error) {
console.error("处理新大陆广播数据时出错:", error);
}
},
}
);
// 注册广播接收器
main.registerReceiver(receiver, filter);
this.scanReceiver = receiver;
console.log("新大陆扫码广播注册成功,等待扫码...");
} catch (error) {
console.error("注册新大陆扫码广播失败:", error);
throw error;
} }
try {
this.registerSingleBroadcast(config, scanCallback);
this.registeredBrands.push(config.brand);
console.log(`${config.name}扫码广播注册成功`);
return true;
} catch (error) {
console.error(`${config.name}扫码广播注册失败:`, error);
return false;
}
// #endif
},
// 单个广播注册的核心方法
registerSingleBroadcast(config, scanCallback) {
const main = plus.android.runtimeMainActivity();
// 如果需要预配置(如东集)
if (config.needSetup && config.setupAction) {
try {
const Intent = plus.android.importClass('android.content.Intent');
const setupIntent = new Intent(config.setupAction);
Object.keys(config.setupParams || {}).forEach(key => {
setupIntent.putExtra(key, config.setupParams[key]);
});
main.sendBroadcast(setupIntent);
console.log(`${config.name}扫码配置完成`);
} catch (error) {
console.error(`${config.name}扫码配置失败:`, error);
}
}
// 注册广播接收器
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
const filter = new IntentFilter();
filter.addAction(config.action);
const self = this;
const receiver = plus.android.implements(
'io.dcloud.feature.internal.reflect.BroadcastReceiver',
{
onReceive: (context, intent) => {
console.log(`${config.name}扫码广播接收,isPageActive:`, self.isPageActive);
if (!self.isPageActive) return;
try {
plus.android.importClass('android.content.Intent');
const scanResult = intent.getStringExtra(config.dataKey);
console.log(`${config.name}扫码结果:`, scanResult);
if (scanResult) {
self.handleScanResult(scanResult, scanCallback);
}
} catch (error) {
console.error(`处理${config.name}广播数据出错:`, error);
}
}
}
);
main.registerReceiver(receiver, filter);
// 保存接收器引用,用于后续注销
this.scanReceivers.push({
brand: config.brand,
receiver: receiver
});
}, },
// 处理扫码结果的统一方法 // 处理扫码结果的统一方法
@@ -156,18 +188,30 @@ export default {
} }
}, },
// 取消扫码广播监听 // 取消所有扫码广播监听
unregisterScanBroadcast() { unregisterScanBroadcast() {
if (this.scanReceiver) { // #ifdef APP-PLUS
try { if (this.scanReceivers.length === 0) return;
const main = plus.android.runtimeMainActivity();
main.unregisterReceiver(this.scanReceiver); try {
this.scanReceiver = null; const main = plus.android.runtimeMainActivity();
console.log("扫码广播注销成功");
} catch (err) { this.scanReceivers.forEach(item => {
console.error("注销扫码广播失败:", err); try {
} main.unregisterReceiver(item.receiver);
console.log(`${item.brand}扫码广播注销成功`);
} catch (err) {
console.error(`${item.brand}扫码广播注销失败:`, err);
}
});
this.scanReceivers = [];
this.registeredBrands = [];
console.log('所有扫码广播注销完成');
} catch (err) {
console.error('注销扫码广播失败:', err);
} }
// #endif
}, },
// 通用的商品扫描处理方法 // 通用的商品扫描处理方法
+1 -1
View File
@@ -11,7 +11,7 @@
props: { props: {
src: { src: {
type: String, type: String,
default: '/static/img/dataNull.png' default: '/src/static/img/dataNull.png'
}, },
title: { title: {
type: String, type: String,
+11 -11
View File
@@ -2,12 +2,12 @@
"name" : "浩拓技术", "name" : "浩拓技术",
"appid" : "__UNI__F79F300", "appid" : "__UNI__F79F300",
"description" : "浩拓纺织平台", "description" : "浩拓纺织平台",
"versionName" : "1.1.1", "versionName" : "1.1.4",
"versionCode" : 101, "versionCode" : 104,
"transformPx" : false, "transformPx" : false,
"app-plus" : { "app-plus" : {
"optimization" : { "optimization" : {
"subPackages" : true "subPackages" : false
}, },
"safearea" : { "safearea" : {
"bottom" : { "bottom" : {
@@ -40,7 +40,7 @@
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>", "<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>", "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
@@ -76,10 +76,10 @@
}, },
"icons" : { "icons" : {
"android" : { "android" : {
"hdpi" : "dist/dev/app-plus/static/haotop/image/logo/72.png", "hdpi" : "src/static/haotop/image/logo/72.png",
"xhdpi" : "dist/dev/app-plus/static/haotop/image/logo/96.png", "xhdpi" : "src/static/haotop/image/logo/96.png",
"xxhdpi" : "dist/dev/app-plus/static/haotop/image/logo/144.png", "xxhdpi" : "src/static/haotop/image/logo/144.png",
"xxxhdpi" : "dist/dev/app-plus/static/haotop/image/logo/1024.png" "xxxhdpi" : "src/static/haotop/image/logo/192.png"
}, },
"ios" : { "ios" : {
"appstore" : "", "appstore" : "",
@@ -109,9 +109,9 @@
"splashscreen" : { "splashscreen" : {
"androidStyle" : "default", "androidStyle" : "default",
"android" : { "android" : {
"hdpi" : "dist/dev/app-plus/static/haotop/image/logo/Start.png", "hdpi" : "src/static/haotop/image/logo/Start.png",
"xhdpi" : "dist/dev/app-plus/static/haotop/image/logo/Start.png", "xhdpi" : "src/static/haotop/image/logo/Start.png",
"xxhdpi" : "dist/dev/app-plus/static/haotop/image/logo/Start.png" "xxhdpi" : "src/static/haotop/image/logo/Start.png"
} }
} }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
<view> <view>
<topDropdown :isSxShow="true" :dropdown1="dropdown1" dropdown2="上架中" :options1="options1" :options2="isSjList" :optionsSx="sxList" searchUrl="./searchAdmin" @dropDownFun1="dropDownFun1" @dropDownFun2="dropDownFun2" @optionSxFun="optionSxFun"> <topDropdown :isSxShow="true" :dropdown1="dropdown1" dropdown2="上架中" :options1="options1" :options2="isSjList" :optionsSx="sxList" searchUrl="./searchAdmin" @dropDownFun1="dropDownFun1" @dropDownFun2="dropDownFun2" @optionSxFun="optionSxFun">
</topDropdown> </topDropdown>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请添加或者更换查询条件"></dataNull> title1="请添加或者更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -1,6 +1,6 @@
<template> <template>
<view> <view>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关分类" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关分类"
title1="点击添加按钮添加相关分类"></dataNull> title1="点击添加按钮添加相关分类"></dataNull>
<view v-else class="content"> <view v-else class="content">
<view class="row" v-for="(row, index) in list" :key="index"> <view class="row" v-for="(row, index) in list" :key="index">
+2 -2
View File
@@ -44,13 +44,13 @@
</view> </view>
</view> </view>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无产品参数说明"></dataNull> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无产品参数说明"></dataNull>
<view class="xqTitle">产品详情图</view> <view class="xqTitle">产品详情图</view>
<view class="imgXQ" v-if="detail.cpXqtList && detail.cpXqtList.length > 0"> <view class="imgXQ" v-if="detail.cpXqtList && detail.cpXqtList.length > 0">
<u-image width="100%" mode="widthFix" v-for="(item, index) in detail.cpXqtList" :key="index" :src="item.url" <u-image width="100%" mode="widthFix" v-for="(item, index) in detail.cpXqtList" :key="index" :src="item.url"
:lazy-load="true" @click="xqtClickFun(item.url, detail.cpXqtList)"></u-image> :lazy-load="true" @click="xqtClickFun(item.url, detail.cpXqtList)"></u-image>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无产品详情图"></dataNull> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无产品详情图"></dataNull>
<!--提交按钮--> <!--提交按钮-->
<view v-if="!pageType" class="submitView"> <view v-if="!pageType" class="submitView">
<u-button type="primary" class="submitBtn" :ripple="true" ripple-bg-color="#909399" @click="updateCpFun">修改产品</u-button> <u-button type="primary" class="submitBtn" :ripple="true" ripple-bg-color="#909399" @click="updateCpFun">修改产品</u-button>
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView> <searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请更换查询条件"></dataNull> title1="请更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView> <searchView placeholderStr="请输入产品名称" @searchViewClickFun="searchEventsFun($event)"></searchView>
<dataNull v-if="list.length == 0" src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" <dataNull v-if="list.length == 0" src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品"
title1="请添加或者更换查询条件"></dataNull> title1="请添加或者更换查询条件"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="getChanPinFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+2 -2
View File
@@ -57,12 +57,12 @@
<getMore :isMore="tabBars[tabCurrentIndex].isMore" style="margin-bottom: 16px;"></getMore> <getMore :isMore="tabBars[tabCurrentIndex].isMore" style="margin-bottom: 16px;"></getMore>
<view style="height: 36rpx;"></view> <view style="height: 36rpx;"></view>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无相关产品" title1="请先添加"> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品" title1="请先添加">
</dataNull> </dataNull>
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
<dataNull v-else src="/static/img/chahua/dataNullXz.png" title="暂无相关产品"> <dataNull v-else src="/src/static/img/chahua/dataNullXz.png" title="暂无相关产品">
</dataNull> </dataNull>
</view> </view>
</view> </view>
+1 -1
View File
@@ -16,7 +16,7 @@
<getMore :isMore="isMore" nullMsg="已加载全部~"></getMore> <getMore :isMore="isMore" nullMsg="已加载全部~"></getMore>
<view class="h200"></view> <view class="h200"></view>
</view> </view>
<dataNull v-else src="/static/img/dataNull.png" title="暂无相关客户哦~"></dataNull> <dataNull v-else src="/src/static/img/dataNull.png" title="暂无相关客户哦~"></dataNull>
</scroll-view> </scroll-view>
<u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet> <u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet>
</view> </view>
+1 -1
View File
@@ -11,7 +11,7 @@
<getMore :isMore="isMore" nullMsg="已加载全部~"></getMore> <getMore :isMore="isMore" nullMsg="已加载全部~"></getMore>
<view class="h200"></view> <view class="h200"></view>
</view> </view>
<dataNull v-else src="/static/img/dataNull.png" title="暂无相关客户哦~"></dataNull> <dataNull v-else src="/src/static/img/dataNull.png" title="暂无相关客户哦~"></dataNull>
</scroll-view> </scroll-view>
<u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet> <u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet>
</view> </view>
@@ -16,7 +16,7 @@
<getMore :isMore="isMore" nullMsg="已加载全部~"></getMore> <getMore :isMore="isMore" nullMsg="已加载全部~"></getMore>
<view class="h200"></view> <view class="h200"></view>
</view> </view>
<dataNull v-else src="/static/img/dataNull.png" title="暂无相关营销部门哦~"></dataNull> <dataNull v-else src="/src/static/img/dataNull.png" title="暂无相关营销部门哦~"></dataNull>
</scroll-view> </scroll-view>
<u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet> <u-action-sheet :list="sheetList" v-model="moreShow"></u-action-sheet>
</view> </view>
@@ -472,4 +472,4 @@
border-radius: 10rpx; border-radius: 10rpx;
margin: 6rpx 26rpx 20rpx 0; margin: 6rpx 26rpx 20rpx 0;
} }
</style> </style>
+1 -1
View File
@@ -14,7 +14,7 @@
</view> </view>
</view> </view>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关排产单" title1="请添加或者更换搜索添加"> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关排产单" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<topDropdown :isSxShow="true" :isPaiXu="true" :dropdown1="dropdown1" :options1="options1" :optionsSx="sxList" :optionsPx="optionsPx" :isDuoXuan="true" searchLabel1="报价名称" searchPh1="请输入报价单名称" @searchBoxEmitFun="searchBoxEmitFun" @dropDownFun1="dropDownFun1" @optionSxFun="optionSxFun" @optionPxFun="optionPxFun" :isKhShow="true"></topDropdown> <topDropdown :isSxShow="true" :isPaiXu="true" :dropdown1="dropdown1" :options1="options1" :optionsSx="sxList" :optionsPx="optionsPx" :isDuoXuan="true" searchLabel1="报价名称" searchPh1="请输入报价单名称" @searchBoxEmitFun="searchBoxEmitFun" @dropDownFun1="dropDownFun1" @optionSxFun="optionSxFun" @optionPxFun="optionPxFun" :isKhShow="true"></topDropdown>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关合同" title1="请添加或者更换搜索添加"></dataNull> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关合同" title1="请添加或者更换搜索添加"></dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" @refresherrefresh="onRefresh" @refresherrestore="onRestore"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" @refresherrefresh="onRefresh" @refresherrestore="onRestore">
<view v-for="(item, index) in list" :key="index" @click="cardClickFun(item, index)"> <view v-for="(item, index) in list" :key="index" @click="cardClickFun(item, index)">
+1 -1
View File
@@ -16,7 +16,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关销售付运资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关销售付运资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
+1 -1
View File
@@ -10,7 +10,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关销售预约单" title1="请添加或者更换搜索添加"> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关销售预约单" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
+1 -1
View File
@@ -37,7 +37,7 @@
<!-- 空状态展示 --> <!-- 空状态展示 -->
<view v-if="showEmpty" class="empty-state"> <view v-if="showEmpty" class="empty-state">
<dataNull <dataNull
src="/static/img/chahua/gjNull.png" src="/src/static/img/chahua/gjNull.png"
title="暂无相关配布单" title="暂无相关配布单"
title1="请添加或者更换搜索添加" title1="请添加或者更换搜索添加"
></dataNull> ></dataNull>
+113 -296
View File
@@ -6,31 +6,17 @@
<text class="title" style="width: 200px">日期:{{ BillDate }}</text> <text class="title" style="width: 200px">日期:{{ BillDate }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 200px" <text class="title" style="width: 200px">客户名称:{{ CustomerName }}</text>
>客户名称:{{ CustomerName }}</text <text class="title" style="width: 200px">销 售 员:{{ SaleUserName }}</text>
>
<text class="title" style="width: 200px"
>销 售 员:{{ SaleUserName }}</text
>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 200px" <text class="title" style="width: 200px">仓库名称:{{ StoreName }}{{ ToStoreName }}</text>
>仓库名称:{{ StoreName }}{{ ToStoreName }}</text
>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 200px" <text class="title" style="width: 200px">备注内容:{{ BillRemark }}</text>
>备注内容:{{ BillRemark }}</text
>
</u-form-item> </u-form-item>
<u-form-item label-width="130" label="条码资料:"> <u-form-item label-width="130" label="条码资料:">
<input <input type="text" v-model="QRBarCode" maxlength="-1" style="width: 170px" @confirm="SalePickBillDetailScan" />
type="text"
v-model="QRBarCode"
maxlength="-1"
style="width: 170px"
@confirm="SalePickBillDetailScan"
/>
<checkbox-group @change="handleAllCrockNoChange"> <checkbox-group @change="handleAllCrockNoChange">
<checkbox :checked="AllCrockNoScanStatus">整缸</checkbox> <checkbox :checked="AllCrockNoScanStatus">整缸</checkbox>
</checkbox-group> </checkbox-group>
@@ -41,58 +27,38 @@
</u-form> </u-form>
<u-form ref="uForm"> <u-form ref="uForm">
<u-form-item> <u-form-item>
<text class="title" style="width: 400px" <text class="title" style="width: 400px">成品名称:{{ FabricGoodsNo }}{{ FabricGoodsName }}</text>
>成品名称:{{ FabricGoodsNo }}{{ FabricGoodsName }}</text
>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 400px" <text class="title" style="width: 400px">色号颜色:{{ GoodsCodeNo }}{{ GoodsCodeName }}</text>
>色号颜色:{{ GoodsCodeNo }}{{ GoodsCodeName }}</text
>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 200px">成品缸号:{{ CrockNo }}</text> <text class="title" style="width: 200px">成品缸号:{{ CrockNo }}</text>
<text class="title" style="width: 200px" <text class="title" style="width: 200px">成品卷号:{{ GoodsBillNo }}</text>
>成品卷号:{{ GoodsBillNo }}</text
>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title">{{ BillDataMessage }}</text> <text class="title">{{ BillDataMessage }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 130px" <text class="title" style="width: 130px">配布条数:{{ BillSumRoll }}</text>
>配布条数:{{ BillSumRoll }}</text
>
<text class="title" style="width: 130px">数量:{{ BillSumQty }}</text> <text class="title" style="width: 130px">数量:{{ BillSumQty }}</text>
<text class="title" style="width: 120px">米数:{{ BillSumMQty }}</text> <text class="title" style="width: 120px">米数:{{ BillSumMQty }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width: 130px" <text class="title" style="width: 130px">已配条数:{{ BillScanRoll }}</text>
>已配条数:{{ BillScanRoll }}</text
>
<text class="title" style="width: 130px">数量:{{ BillScanQty }}</text> <text class="title" style="width: 130px">数量:{{ BillScanQty }}</text>
<text class="title" style="width: 120px">米数:{{ BillScanMQty }}</text> <text class="title" style="width: 120px">米数:{{ BillScanMQty }}</text>
</u-form-item> </u-form-item>
<view class="submitView"> <view class="submitView">
<u-button <u-button type="primary" class="submitBtn" :ripple="true" :loading="submitLoading" ripple-bg-color="#909399"
type="primary" @click="submitBtnFun">
class="submitBtn"
:ripple="true"
:loading="submitLoading"
ripple-bg-color="#909399"
@click="submitBtnFun"
>
{{ pageType ? "保存" : "提交" }} {{ pageType ? "保存" : "提交" }}
</u-button> </u-button>
</view> </view>
</u-form> </u-form>
<view class="u-demo-area"> <view class="u-demo-area">
<u-toast ref="uToast"></u-toast> <u-toast ref="uToast"></u-toast>
<wyb-table <wyb-table ref="table" :headers="headersMaster" :contents="GoodsDetailList" />
ref="table"
:headers="headersMaster"
:contents="GoodsDetailList"
/>
</view> </view>
</view> </view>
</template> </template>
@@ -105,8 +71,10 @@ import util, {
playErrorAudio, playErrorAudio,
} from "../../common/util"; } from "../../common/util";
import wybTable from "@/components/wyb-table/wyb-table.vue"; import wybTable from "@/components/wyb-table/wyb-table.vue";
import scanMixin from "@/common/scanMixin.js";
let that = ""; let that = "";
export default { export default {
mixins: [scanMixin],
data() { data() {
return { return {
SaleBillNo: "", // 单号 SaleBillNo: "", // 单号
@@ -115,7 +83,7 @@ export default {
align: "center", align: "center",
index: 0, index: 0,
pageType: "", pageType: "",
submitLoading: false, submitLoading: false,
actionSheetShow: false, actionSheetShow: false,
QRBarCode: "", QRBarCode: "",
BillNo: "", BillNo: "",
@@ -192,8 +160,7 @@ export default {
], ],
scanningInput: "", // 用于累积扫码输入 scanningInput: "", // 用于累积扫码输入
lastKeyTime: 0, // 用于判断扫码速度 lastKeyTime: 0, // 用于判断扫码速度
scanReceiver: null, // scanReceiver 和 isPageActive 由 scanMixin 提供
isPageActive: false, // 添加页面活动状态标志
}; };
}, },
@@ -214,14 +181,13 @@ export default {
}, },
onUnload() { onUnload() {
// #ifdef APP-PLUS
this.isPageActive = false; this.isPageActive = false;
// #ifdef APP-PLUS
this.unregisterScanBroadcast(); this.unregisterScanBroadcast();
// #endif // #endif
}, },
onHide() { onHide() {
// 页面隐藏时
this.isPageActive = false; this.isPageActive = false;
// #ifdef APP-PLUS // #ifdef APP-PLUS
this.unregisterScanBroadcast(); this.unregisterScanBroadcast();
@@ -229,10 +195,15 @@ export default {
}, },
onShow() { onShow() {
// 页面显示时
this.isPageActive = true; this.isPageActive = true;
// #ifdef APP-PLUS // #ifdef APP-PLUS
this.registerScanBroadcast(); this.registerScanBroadcast((scanResult) => {
console.log("配布单详情-扫码结果:", scanResult);
this.QRBarCode = scanResult;
this.$nextTick(() => {
this.handleScans();
});
});
// #endif // #endif
}, },
@@ -300,7 +271,7 @@ export default {
} }
this.GoodsDetailList = aResultDataList; this.GoodsDetailList = aResultDataList;
}).catch(error => { }).catch(error => {
this.triggered = false; this.triggered = false;
this.showError(error.msg); this.showError(error.msg);
@@ -323,247 +294,93 @@ export default {
icon: 'success' icon: 'success'
}); });
}, },
handleScans() { handleScans() {
// 删除模式判断 // 删除模式判断
let aBarCodeDelStatus = 1; // 1=正常扫码,3=删除模式 let aBarCodeDelStatus = 1; // 1=正常扫码,3=删除模式
if (this.BarCodeDelStatus) { if (this.BarCodeDelStatus) {
aBarCodeDelStatus = 3; aBarCodeDelStatus = 3;
}
// 整缸扫描判断
let aAllCrockNoScanStatus = 2; // 0=普通扫描,1=整缸扫描
if (this.AllCrockNoScanStatus) {
aAllCrockNoScanStatus = "1";
}
// 数据清理:去除空格、换行符等
let cleanCode = this.QRBarCode.replace(/\s+/g, '').replace(/[\r\n]/g, '');
console.log("this.QRBarCode ---->>" + cleanCode);
// 初始化条码和二维码变量
let aQRBarCode = "";
let aBarCode = "";
if (cleanCode.startsWith("66^") || cleanCode.startsWith("99^") || /[\u4E00-\u9FA5]/.test(cleanCode)) {
aQRBarCode = cleanCode;
} else {
aBarCode = cleanCode;
}
if (aQRBarCode == "" && aBarCode == "") {
this.QRBarCode = "";
this.showError('请扫描二维码或者条码');
return;
}
console.log('请求参数', aBarCodeDelStatus);
console.log('请求参数', aBarCode);
console.log('请求参数', aQRBarCode);
console.log('请求参数', this.BillMasterID);
console.log('请求参数 SaleBillNo', this.SaleBillNo);
console.log('请求参数 token', uni.getStorageSync("userToken").Token);
// 发送请求
util.request({
url: "/product/fpmArrangeOrder/updateFpmArrangeOrder",
method: "PUT",
header: {
Platform: 2,
Authorization: uni.getStorageSync("userToken").Token,
},
data: {
arrange_type: aBarCodeDelStatus, // 1=正常扫码,3=删除模式
bar_code: aBarCode, // 条码(如果是条形码就使用这个)
qr_code: aQRBarCode, // 二维码(如果是二维码就使用这个)
id: parseInt(this.BillMasterID), // 订单ID
// order_no: this.SaleBillNo, // 单号
},
success: (res) => {
console.log('API响应:', res);
if (res.data.code == 0 && res.data.msg == "success") {
var aResultData = res.data.data;
this.playSuccess();
this.FabricGoodsNo = aResultData.product_code;
this.FabricGoodsName = aResultData.product_name;
this.GoodsCodeNo = aResultData.product_color_code;
this.GoodsCodeName = aResultData.product_color_name;
this.CrockNo = aResultData.dyelot_number;
this.GoodsBillNo = aResultData.volume_number;
this.QRBarCode = "";
if (aBarCodeDelStatus == 1) {
this.showSuccess("扫描成功!");
} else {
this.showSuccess("删除成功!");
}
this.SalePickDetail();
} else {
this.showError("扫描出错," + res.data.msg);
this.QRBarCode = "";
}
},
fail: (error) => {
console.error('API请求失败:', error);
this.QRBarCode = "";
this.showError("连接服务器出错,请检查后台服务是否启动!");
},
});
},
// 注册扫码广播接收器(支持商米和新大陆扫码头)
registerScanBroadcast() {
try {
// 先尝试注册商米扫码头
this.registerSunmiBroadcast()
.then(() => {
console.log('商米扫码头注册成功');
})
.catch((error) => {
console.log('商米扫码头注册失败,尝试新大陆扫码头:', error);
// 如果商米扫码头注册失败,尝试新大陆扫码头
this.registerNewlandBroadcast();
});
} catch (error) {
console.error("注册扫码广播失败:", error);
} }
},
// 注册商米扫码头广播接收器 // 整缸扫描判断
registerSunmiBroadcast() { let aAllCrockNoScanStatus = 2; // 0=普通扫描,1=整缸扫描
return new Promise((resolve, reject) => { if (this.AllCrockNoScanStatus) {
try { aAllCrockNoScanStatus = "1";
const main = plus.android.runtimeMainActivity(); }
const IntentFilter = plus.android.importClass("android.content.IntentFilter");
const filter = new IntentFilter();
filter.addAction("com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED");
const receiver = plus.android.implements( // 数据清理:去除空格、换行符等
"io.dcloud.feature.internal.reflect.BroadcastReceiver", let cleanCode = this.QRBarCode.replace(/\s+/g, '').replace(/[\r\n]/g, '');
{
onReceive: (context, intent) => {
console.log('商米扫码广播接收,isPageActive:', this.isPageActive);
// 只有当页面活动时才处理广播
if (!this.isPageActive) return;
try { console.log("this.QRBarCode ---->>" + cleanCode);
const scanResult = intent.getStringExtra("data");
const sourceBytes = intent.getByteArrayExtra("source_byte"); // 初始化条码和二维码变量
let aQRBarCode = "";
console.log('商米扫码结果:', scanResult, sourceBytes); let aBarCode = "";
if (scanResult) { if (cleanCode.startsWith("66^") || cleanCode.startsWith("99^") || /[\u4E00-\u9FA5]/.test(cleanCode)) {
this.handleScanResult(scanResult); aQRBarCode = cleanCode;
} } else {
} catch (error) { aBarCode = cleanCode;
console.error('处理商米广播数据时出错:', error); }
}
} if (aQRBarCode == "" && aBarCode == "") {
this.QRBarCode = "";
this.showError('请扫描二维码或者条码');
return;
}
console.log('请求参数', aBarCodeDelStatus);
console.log('请求参数', aBarCode);
console.log('请求参数', aQRBarCode);
console.log('请求参数', this.BillMasterID);
console.log('请求参数 SaleBillNo', this.SaleBillNo);
console.log('请求参数 token', uni.getStorageSync("userToken").Token);
// 发送请求
util.request({
url: "/product/fpmArrangeOrder/updateFpmArrangeOrder",
method: "PUT",
header: {
Platform: 2,
Authorization: uni.getStorageSync("userToken").Token,
},
data: {
arrange_type: aBarCodeDelStatus, // 1=正常扫码,3=删除模式
bar_code: aBarCode, // 条码(如果是条形码就使用这个)
qr_code: aQRBarCode, // 二维码(如果是二维码就使用这个)
id: parseInt(this.BillMasterID), // 订单ID
// order_no: this.SaleBillNo, // 单号
},
success: (res) => {
console.log('API响应:', res);
if (res.data.code == 0 && res.data.msg == "success") {
var aResultData = res.data.data;
this.playSuccess();
this.FabricGoodsNo = aResultData.product_code;
this.FabricGoodsName = aResultData.product_name;
this.GoodsCodeNo = aResultData.product_color_code;
this.GoodsCodeName = aResultData.product_color_name;
this.CrockNo = aResultData.dyelot_number;
this.GoodsBillNo = aResultData.volume_number;
this.QRBarCode = "";
if (aBarCodeDelStatus == 1) {
this.showSuccess("扫描成功!");
} else {
this.showSuccess("删除成功!");
} }
);
// 注册广播接收器 this.SalePickDetail();
main.registerReceiver(receiver, filter); } else {
this.scanReceiver = receiver; this.showError("扫描出错," + res.data.msg);
console.log('商米扫码广播接收器注册成功'); this.QRBarCode = "";
resolve();
} catch (error) {
console.error('注册商米广播接收器失败:', error);
reject(error);
}
});
},
// 注册新大陆扫码头广播接收器
registerNewlandBroadcast() {
try {
const main = plus.android.runtimeMainActivity();
// 先配置扫码枪广播设置
try {
const Intent = plus.android.importClass("android.content.Intent");
const intent = new Intent("com.android.scanner.service_settings");
intent.putExtra(
"action_barcode_broadcast",
"com.android.server.scannerservice.broadcast"
);
intent.putExtra("key_barcode_broadcast", "scannerdata");
main.sendBroadcast(intent);
console.log('新大陆扫码枪广播配置完成');
} catch (error) {
console.error("配置新大陆扫码枪广播失败:", error);
}
// 注册广播接收器
const IntentFilter = plus.android.importClass(
"android.content.IntentFilter"
);
const filter = new IntentFilter();
filter.addAction("com.android.server.scannerservice.broadcast");
console.log("添加新大陆广播action完成");
const receiver = plus.android.implements(
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
{
onReceive: (context, intent) => {
console.log('新大陆扫码广播接收,isPageActive:', this.isPageActive);
// 只有当页面活动时才处理广播
if (!this.isPageActive) return;
try {
const scanResult = intent.getStringExtra("scannerdata");
console.log("新大陆扫码结果:", scanResult);
if (scanResult) {
this.handleScanResult(scanResult);
}
} catch (error) {
console.error("处理新大陆广播数据时出错:", error);
}
},
} }
); },
fail: (error) => {
// 注册广播接收器 console.error('API请求失败:', error);
main.registerReceiver(receiver, filter); this.QRBarCode = "";
this.scanReceiver = receiver; this.showError("连接服务器出错,请检查后台服务是否启动!");
console.log("新大陆扫码广播注册成功,等待扫码..."); },
} catch (error) { });
console.error("注册新大陆扫码广播失败:", error);
throw error;
}
},
// 处理扫码结果的统一方法
handleScanResult(scanResult) {
try {
// 数据清理:去除空格、换行符等
let cleanCode = scanResult.replace(/\s+/g, '').replace(/[\r\n]/g, '');
console.log("配布单详情-扫码结果:", cleanCode);
this.QRBarCode = cleanCode;
this.$nextTick(() => {
this.handleScans();
});
} catch (error) {
console.error("处理扫码结果时出错:", error);
}
},
// 注销扫码广播接收器
unregisterScanBroadcast() {
if (this.scanReceiver) {
try {
const main = plus.android.runtimeMainActivity();
main.unregisterReceiver(this.scanReceiver);
this.scanReceiver = null;
console.log("扫码广播注销成功");
} catch (error) {
console.error("注销扫码广播失败:", error);
}
}
}, },
SalePickBillDetailScan() { SalePickBillDetailScan() {
@@ -601,13 +418,13 @@ export default {
} }
}, },
// 新增提交订单的方法 // 新增提交订单的方法
submitOrder: function() { submitOrder: function () {
this.submitLoading = true this.submitLoading = true
this.$u.api.outFpmArrangeOrder({ this.$u.api.outFpmArrangeOrder({
id: parseInt(this.BillMasterID) id: parseInt(this.BillMasterID)
}).then(res => { }).then(res => {
this.submitLoading = false this.submitLoading = false
console.log('outFpmArrangeOrder res',res) console.log('outFpmArrangeOrder res', res)
if (res) { if (res) {
this.BillDataMessage = "成功生成出仓单!"; this.BillDataMessage = "成功生成出仓单!";
this.playSuccess(); this.playSuccess();
@@ -617,7 +434,7 @@ export default {
return; return;
} }
}).catch(error => { }).catch(error => {
this.submitLoading = false this.submitLoading = false
this.playError(); this.playError();
this.BillDataMessage = "连接服务器出错,请检查后台服务是否启动!"; this.BillDataMessage = "连接服务器出错,请检查后台服务是否启动!";
}); });
@@ -676,7 +493,7 @@ page {
margin-right: 12rpx; margin-right: 12rpx;
} }
.cpInput > input { .cpInput>input {
box-sizing: border-box; box-sizing: border-box;
border: 1rpx solid #dddddd; border: 1rpx solid #dddddd;
width: 100%; width: 100%;
@@ -690,7 +507,7 @@ page {
margin-right: 12rpx; margin-right: 12rpx;
} }
.cpInput1 > input { .cpInput1>input {
box-sizing: border-box; box-sizing: border-box;
border: 1rpx solid #dddddd; border: 1rpx solid #dddddd;
width: 100%; width: 100%;
@@ -16,7 +16,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
+1 -1
View File
@@ -6,7 +6,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关胚布进仓单" title1="请添加或者更换搜索添加"> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关胚布进仓单" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered"
+2 -2
View File
@@ -15,7 +15,7 @@
@change="onTabChange"></u-tabs> @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料"
title1="请添加或者更换搜索添加"> title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" refresher-enabled :refresher-threshold="200" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" refresher-enabled :refresher-threshold="200"
@@ -228,4 +228,4 @@
margin: 20upx; margin: 20upx;
font-size: 28upx; font-size: 28upx;
} }
</style> </style>
@@ -15,7 +15,7 @@
@change="onTabChange"></u-tabs> @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<!-- <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <!-- <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
@@ -2,12 +2,12 @@
<view class="wrap"> <view class="wrap">
<u-form ref="uForm"> <u-form ref="uForm">
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">单号:{{GoodsCheckBillNo}}</text> <text class="title" style="width:200px;">单号:{{ GoodsCheckBillNo }}</text>
<text class="title" style="width:200px;">日期:{{GoodsCheckBillDate}}</text> <text class="title" style="width:200px;">日期:{{ GoodsCheckBillDate }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">仓库名称:{{StoreName}}</text> <text class="title" style="width:200px;">仓库名称:{{ StoreName }}</text>
<text class="title" style="width:200px;">仓位名称:{{StoreStationName}}</text> <text class="title" style="width:200px;">仓位名称:{{ StoreStationName }}</text>
</u-form-item> </u-form-item>
<u-form-item label-width="150" label="条码资料:"> <u-form-item label-width="150" label="条码资料:">
<input type="text" v-model="QRBarCode" maxlength="-1" style="width:200px;" <input type="text" v-model="QRBarCode" maxlength="-1" style="width:200px;"
@@ -17,32 +17,32 @@
</checkbox-group> </checkbox-group>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title">{{BillDataMessage}}</text> <text class="title">{{ BillDataMessage }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">成品编号:{{FabricGoodsNo}}</text> <text class="title" style="width:200px;">成品编号:{{ FabricGoodsNo }}</text>
<text class="title" style="width:200px;">成品重量:{{GoodsQty}}KG</text> <text class="title" style="width:200px;">成品重量:{{ GoodsQty }}KG</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">成品色号:{{GoodsCodeNo}}</text> <text class="title" style="width:200px;">成品色号:{{ GoodsCodeNo }}</text>
<text class="title" style="width:200px;">成品颜色:{{GoodsCodeName}}</text> <text class="title" style="width:200px;">成品颜色:{{ GoodsCodeName }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">成品缸号:{{CrockNo}}</text> <text class="title" style="width:200px;">成品缸号:{{ CrockNo }}</text>
<text class="title" style="width:200px;">缸号卷号:{{GoodsBillNo}}</text> <text class="title" style="width:200px;">缸号卷号:{{ GoodsBillNo }}</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">本架盘前:{{BillSumOldRoll}}条</text> <text class="title" style="width:200px;">本架盘前:{{ BillSumOldRoll }}条</text>
<text class="title" style="width:200px;">本架实盘:{{BillSumNewRoll}}条</text> <text class="title" style="width:200px;">本架实盘:{{ BillSumNewRoll }}条</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">本色盘前:{{GoodsCodeNoSumOldRoll}}条</text> <text class="title" style="width:200px;">本色盘前:{{ GoodsCodeNoSumOldRoll }}条</text>
<text class="title" style="width:200px;">本色实盘:{{GoodsCodeNoSumNewRoll}}条</text> <text class="title" style="width:200px;">本色实盘:{{ GoodsCodeNoSumNewRoll }}条</text>
</u-form-item> </u-form-item>
<u-form-item> <u-form-item>
<text class="title" style="width:200px;">本缸盘前:{{CrockNoSumOldRoll}}条</text> <text class="title" style="width:200px;">本缸盘前:{{ CrockNoSumOldRoll }}条</text>
<text class="title" style="width:200px;">本缸实盘:{{CrockNoSumNewRoll}}条</text> <text class="title" style="width:200px;">本缸实盘:{{ CrockNoSumNewRoll }}条</text>
</u-form-item> </u-form-item>
</u-form> </u-form>
<view class="u-demo-area"> <view class="u-demo-area">
@@ -55,417 +55,425 @@
<view class="submitView"> <view class="submitView">
<u-button type="primary" style="width:100px;" class="commitBtn" :ripple="true" ripple-bg-color="#909399" <u-button type="primary" style="width:100px;" class="commitBtn" :ripple="true" ripple-bg-color="#909399"
@click="commitBtnFun"> @click="commitBtnFun">
{{CommitType ? '消审' : '审核'}} {{ CommitType ? '消审' : '审核' }}
</u-button> </u-button>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import util, { import util, {
parFabricGoodsBarCode2D, parFabricGoodsBarCode2D,
parYarnGoodsBarCode2D, parYarnGoodsBarCode2D,
playSuccessAudio, playSuccessAudio,
playErrorAudio playErrorAudio
} from '../../common/util'; } from '../../common/util';
import scanMixin from '@/common/scanMixin.js'; import scanMixin from '@/common/scanMixin.js';
import wybTable from '@/components/wyb-table/wyb-table.vue'; import wybTable from '@/components/wyb-table/wyb-table.vue';
//let that = ''; //let that = '';
export default { export default {
mixins: [scanMixin], mixins: [scanMixin],
data() { data() {
return { return {
borderColor: '#e4e7ed', borderColor: '#e4e7ed',
align: 'center', align: 'center',
index: 0, index: 0,
CommitType: '', CommitType: '',
CommitProcName: '', CommitProcName: '',
actionSheetShow: false, actionSheetShow: false,
QRBarCode: '', QRBarCode: '',
GoodsCheckBillID: 0, GoodsCheckBillID: 0,
GoodsCheckBillNo: '', GoodsCheckBillNo: '',
GoodsCheckBillDate: '', GoodsCheckBillDate: '',
GoodsCheckBillMasterNo: '', GoodsCheckBillMasterNo: '',
StoreNameID: '', StoreNameID: '',
StoreName: '', StoreName: '',
StoreStationID: '', StoreStationID: '',
StoreStationNo: '', StoreStationNo: '',
StoreStationName: '', StoreStationName: '',
CustomerName: '', CustomerName: '',
FabricGoodsNo: '', FabricGoodsNo: '',
FabricGoodsName: '', FabricGoodsName: '',
GoodsCodeNo: '', GoodsCodeNo: '',
GoodsCodeName: '', GoodsCodeName: '',
CrockNo: '', CrockNo: '',
GoodsBillNo: '', GoodsBillNo: '',
GoodsQty: 0, GoodsQty: 0,
StoreStationNameFocus: false, StoreStationNameFocus: false,
BillSumOldRoll: 0, BillSumOldRoll: 0,
BillSumNewRoll: 0, BillSumNewRoll: 0,
GoodsCodeNoSumOldRoll: 0, GoodsCodeNoSumOldRoll: 0,
GoodsCodeNoSumNewRoll: 0, GoodsCodeNoSumNewRoll: 0,
CrockNoSumOldRoll: 0, CrockNoSumOldRoll: 0,
CrockNoSumNewRoll: 0, CrockNoSumNewRoll: 0,
BarCodeDelStatus: false, BarCodeDelStatus: false,
GoodsDetailList: [], GoodsDetailList: [],
BillDataMessage: '', BillDataMessage: '',
headersMaster: [{ headersMaster: [{
label: '成品编号', label: '成品编号',
key: 'product_code' key: 'product_code'
}, { }, {
label: '成品名称', label: '成品名称',
key: 'product_name' key: 'product_name'
}, { }, {
label: '成品色号', label: '成品色号',
key: 'product_color_code' key: 'product_color_code'
}, { }, {
label: '成品颜色', label: '成品颜色',
key: 'product_color_name' key: 'product_color_name'
}, { }, {
label: '成品缸号', label: '成品缸号',
key: 'dyelot_number' key: 'dyelot_number'
}, { }, {
label: '盘前条数', label: '盘前条数',
key: 'roll' key: 'roll'
}, { }, {
label: '实盘条数', label: '实盘条数',
key: 'check_roll' key: 'check_roll'
}, { }, {
label: '盈亏条数', label: '盈亏条数',
key: 'different_roll' key: 'different_roll'
}], }],
// 移除了 scanReceiver 和 isPageActive,因为它们现在由 scanMixin 提供 // 移除了 scanReceiver 和 isPageActive,因为它们现在由 scanMixin 提供
} }
}, },
onLoad(e) { onLoad(e) {
//that = this; //that = this;
if (e.billid) { if (e.billid) {
this.GoodsCheckBillID = e.billid; this.GoodsCheckBillID = e.billid;
this.GoodsCheckBillDetailData(); this.GoodsCheckBillDetailData();
} }
}, },
onShow() { onShow() {
// 调用 mixin 中的 onShow 方法 // 设置页面激活状态
if (this.$options.mixins && this.$options.mixins[0] && this.$options.mixins[0].onShow) { this.isPageActive = true;
this.$options.mixins[0].onShow.call(this);
} // #ifdef APP-PLUS
this.registerScanBroadcast((scanResult) => {
// #ifdef APP-PLUS console.log("扫码结果:", scanResult);
this.registerScanBroadcast((scanResult) => {
console.log("扫码结果:", scanResult); // 处理扫描结果
this.QRBarCode = scanResult;
// 处理扫描结果,按照原有逻辑 this.$nextTick(() => {
if(!this.QRBarCode){ this.GoodsCheckBillDetailScan();
console.log("请先扫描资料!", scanResult); });
this.QRBarCode = scanResult; });
this.$nextTick(() => { // #endif
this.GoodsCheckBillDetailScan(); },
});
return; onHide() {
} this.isPageActive = false;
// #ifdef APP-PLUS
this.unregisterScanBroadcast();
// #endif
},
onUnload() {
this.isPageActive = false;
// #ifdef APP-PLUS
this.unregisterScanBroadcast();
// #endif
},
methods: {
// 添加通用错误提示方法
showError(message) {
this.playError();
uni.showModal({
title: '提示',
content: message,
showCancel: false
}); });
// #endif
}, },
methods: {
// 添加通用错误提示方法
showError(message) {
this.playError();
uni.showModal({
title: '提示',
content: message,
showCancel: false
});
},
playSuccess() {
util.playSuccessAudio();
},
playError() {
util.playErrorAudio();
},
BarCodeDelChange: function() { playSuccess() {
this.BarCodeDelStatus = !this.BarCodeDelStatus; util.playSuccessAudio();
}, },
playError() {
util.playErrorAudio();
},
GoodsCheckBillDetailScan() { BarCodeDelChange: function () {
if (this.StoreNameID == 0 && this.GoodsCheckBillNo == '') { this.BarCodeDelStatus = !this.BarCodeDelStatus;
this.QRBarCode = ''; },
this.showError('请先新增单据');
return; GoodsCheckBillDetailScan() {
} if (this.StoreNameID == 0 && this.GoodsCheckBillNo == '') {
this.QRBarCode = '';
// 数据清理:去除空格、换行符等 this.showError('请先新增单据');
let cleanCode = this.QRBarCode.replace(/\s+/g, '').replace(/[\r\n]/g, ''); return;
}
console.log("this.QRBarCode ---->>" + cleanCode);
// 数据清理:去除空格、换行符等
var aQRBarCode = ''; let cleanCode = this.QRBarCode.replace(/\s+/g, '').replace(/[\r\n]/g, '');
var aBarCode = '';
if (cleanCode.startsWith('66^')>0 || cleanCode.startsWith('99^')>0 || /[\u4E00-\u9FA5]/.test(cleanCode)){ console.log("this.QRBarCode ---->>" + cleanCode);
aQRBarCode = cleanCode
}else { var aQRBarCode = '';
aBarCode = cleanCode; var aBarCode = '';
} if (cleanCode.startsWith('66^') > 0 || cleanCode.startsWith('99^') > 0 || /[\u4E00-\u9FA5]/.test(cleanCode)) {
aQRBarCode = cleanCode
if (aQRBarCode == '' && aBarCode == ''){ } else {
this.QRBarCode = ''; aBarCode = cleanCode;
this.aBarCode = '' }
this.showError('请扫描二维码或者条码');
return; if (aQRBarCode == '' && aBarCode == '') {
} this.QRBarCode = '';
this.aBarCode = ''
let aBarCodeDelStatus = 1 this.showError('请扫描二维码或者条码');
if (this.BarCodeDelStatus) { return;
aBarCodeDelStatus = 3; }
};
let aBarCodeDelStatus = 1
util.request({ if (this.BarCodeDelStatus) {
url: '/product/productCheckOrder/updateProductCheckOrder', aBarCodeDelStatus = 3;
method: 'put', };
data: {
'arrange_type': aBarCodeDelStatus, util.request({
'id': parseInt(this.GoodsCheckBillID), url: '/product/productCheckOrder/updateProductCheckOrder',
'bar_code': aBarCode, method: 'put',
'qr_code': aQRBarCode, data: {
}, 'arrange_type': aBarCodeDelStatus,
success: (res) => { 'id': parseInt(this.GoodsCheckBillID),
console.log("-->>--" + JSON.stringify(res.data)); 'bar_code': aBarCode,
if (res.data.code == '0'){ 'qr_code': aQRBarCode,
let aResultData = res.data.data; },
this.FabricGoodsNo = aResultData.product_code; success: (res) => {
this.FabricGoodsName = aResultData.product_name; console.log("-->>--" + JSON.stringify(res.data));
this.GoodsCodeNo = aResultData.product_color_code; if (res.data.code == '0') {
this.GoodsCodeName = aResultData.product_color_name; let aResultData = res.data.data;
this.CrockNo = aResultData.dyelot_number; this.FabricGoodsNo = aResultData.product_code;
this.GoodsBillNo = aResultData.volume_number; this.FabricGoodsName = aResultData.product_name;
this.GoodsQty = aResultData.weight / 10000; this.GoodsCodeNo = aResultData.product_color_code;
this.BillSumOldRoll = aResultData.warehouse_bin_check_before_roll/100; this.GoodsCodeName = aResultData.product_color_name;
this.BillSumNewRoll = aResultData.warehouse_bin_check_roll/100; this.CrockNo = aResultData.dyelot_number;
this.GoodsCodeNoSumOldRoll = aResultData.color_check_before_roll/100; this.GoodsBillNo = aResultData.volume_number;
this.GoodsCodeNoSumNewRoll = aResultData.color_check_roll/100; this.GoodsQty = aResultData.weight / 10000;
this.CrockNoSumOldRoll = aResultData.dye_check_before_roll/100; this.BillSumOldRoll = aResultData.warehouse_bin_check_before_roll / 100;
this.CrockNoSumNewRoll = aResultData.dye_check_roll/100; this.BillSumNewRoll = aResultData.warehouse_bin_check_roll / 100;
this.GoodsCodeNoSumOldRoll = aResultData.color_check_before_roll / 100;
this.GoodsCodeNoSumNewRoll = aResultData.color_check_roll / 100;
this.CrockNoSumOldRoll = aResultData.dye_check_before_roll / 100;
this.CrockNoSumNewRoll = aResultData.dye_check_roll / 100;
this.playSuccess();
this.GoodsCheckBillDetailData();
this.BillDataMessage = res.data.msg;
this.QRBarCode = '';
}
else {
this.showError(res.data.msg);
this.QRBarCode = '';
}
},
fail: (error) => {
this.showError('连接服务器出错,请检查后台服务是否启动!');
console.log('error', error)
},
})
},
GoodsCheckBillDetailData: function () {
console.log("--aaa->>" + this.GoodsCheckBillID);
console.log("--aaa->>" + this.GoodsCheckBillID);
util.request({
url: '/product/productCheckOrder/getProductCheckOrder',
method: 'get',
data: {
'id': parseInt(this.GoodsCheckBillID),
},
success: (res) => {
console.log("-->>--" + JSON.stringify(res.data.data));
this.GoodsDetailList = [];
this.GoodsCheckBillNo = res.data.data.order_no;
this.StoreName = res.data.data.warehouse_name
this.StoreStationName = res.data.data.warehouse_bin_name;
this.GoodsCheckBillDate = this.$u.timeFormat(res.data.data.check_time, 'yyyy-mm-dd')
/* this.BillSumOldRoll = res.data.data.item_data.roll;
this.BillSumNewRoll = res.data.data.item_data.check_roll; */
var aResultData = res.data.data.item_data;
this.BillSumOldRoll = 0;
this.BillSumNewRoll = 0;
for (var i = 0; i < aResultData.length; i++) {
aResultData[i].roll = aResultData[i].roll / 100;
aResultData[i].check_roll = aResultData[i].check_roll / 100;
aResultData[i].different_roll = aResultData[i].different_roll / 100;
this.BillSumOldRoll = this.BillSumOldRoll + aResultData[i].roll;
this.BillSumNewRoll = this.BillSumNewRoll + aResultData[i].check_roll;
};
this.GoodsDetailList = aResultData;
},
})
},
// 审核按钮方法
commitBtnFun: function () {
if (this.BillMasterID <= 0) {
this.showError('当前单据未提交,不能审核或消审!');
return;
}
var aCommitRecallName = '审核';
if (this.CommitType == '') {
aCommitRecallName = '审核';
} else {
aCommitRecallName = '消审';
}
// if (this.CommitProcName == '') {
// this.playError();
// this.BillDataMessage = '当前' + aCommitRecallName + '操作配置有误,不能审核!';
// return;
// }
console.log('GoodsCheckBillID', this.GoodsCheckBillID)
util.request({
url: '/product/productCheckOrder/updateProductCheckOrderAuditStatusPass',
method: 'put',
data: {
'id': parseInt(this.GoodsCheckBillID),
},
success: (res) => {
console.log('审核', res)
if (res.data.code == '0') {
var aResultData = JSON.parse(res.data.data);
console.log('aResultData', aResultData)
if (aResultData.code == '0' && aResultData.msg ==
'success') {
this.playSuccess(); this.playSuccess();
this.GoodsCheckBillDetailData(); this.BillDataMessage = aCommitRecallName + "成功!";
this.BillDataMessage = res.data.msg;
this.QRBarCode = '';
}
else {
this.showError(res.data.msg);
this.QRBarCode = '';
}
},
fail: (error) => {
this.showError('连接服务器出错,请检查后台服务是否启动!');
console.log('error',error)
},
})
},
GoodsCheckBillDetailData: function() { if (aCommitRecallName == '审核') {
console.log("--aaa->>" + this.GoodsCheckBillID); this.CommitType = '已审核'
console.log("--aaa->>" + this.GoodsCheckBillID);
util.request({
url: '/product/productCheckOrder/getProductCheckOrder',
method: 'get',
data: {
'id': parseInt(this.GoodsCheckBillID),
},
success: (res) => {
console.log("-->>--" + JSON.stringify(res.data.data));
this.GoodsDetailList = [];
this.GoodsCheckBillNo = res.data.data.order_no;
this.StoreName = res.data.data.warehouse_name
this.StoreStationName = res.data.data.warehouse_bin_name;
this.GoodsCheckBillDate = this.$u.timeFormat(res.data.data.check_time, 'yyyy-mm-dd')
/* this.BillSumOldRoll = res.data.data.item_data.roll;
this.BillSumNewRoll = res.data.data.item_data.check_roll; */
var aResultData = res.data.data.item_data;
this.BillSumOldRoll = 0;
this.BillSumNewRoll = 0;
for (var i = 0; i < aResultData.length; i++) {
aResultData[i].roll = aResultData[i].roll / 100;
aResultData[i].check_roll = aResultData[i].check_roll / 100;
aResultData[i].different_roll = aResultData[i].different_roll / 100;
this.BillSumOldRoll = this.BillSumOldRoll + aResultData[i].roll;
this.BillSumNewRoll = this.BillSumNewRoll + aResultData[i].check_roll;
};
this.GoodsDetailList = aResultData;
},
})
},
// 审核按钮方法
commitBtnFun: function() {
if (this.BillMasterID <= 0) {
this.showError('当前单据未提交,不能审核或消审!');
return;
}
var aCommitRecallName = '审核';
if (this.CommitType == '') {
aCommitRecallName = '审核';
} else {
aCommitRecallName = '消审';
}
// if (this.CommitProcName == '') {
// this.playError();
// this.BillDataMessage = '当前' + aCommitRecallName + '操作配置有误,不能审核!';
// return;
// }
console.log('GoodsCheckBillID',this.GoodsCheckBillID)
util.request({
url: '/product/productCheckOrder/updateProductCheckOrderAuditStatusPass',
method: 'put',
data: {
'id': parseInt(this.GoodsCheckBillID),
},
success: (res) => {
console.log('审核',res)
if (res.data.code == '0') {
var aResultData = JSON.parse(res.data.data);
console.log('aResultData',aResultData)
if (aResultData.code == '0' && aResultData.msg ==
'success') {
this.playSuccess();
this.BillDataMessage = aCommitRecallName + "成功!";
if (aCommitRecallName == '审核') {
this.CommitType = '已审核'
} else {
this.CommitType = ''
}
} else { } else {
this.showError(aCommitRecallName + '出错!' + aResultData.BillDataMessage); this.CommitType = ''
return;
} }
} else { } else {
this.showError(aCommitRecallName + '出错,' + res.data.msg); this.showError(aCommitRecallName + '出错!' + aResultData.BillDataMessage);
return; return;
} }
}, } else {
fail: (error) => { this.showError(aCommitRecallName + '出错,' + res.data.msg);
this.showError('连接服务器出错,请检查后台服务是否启动!'); return;
}, }
}) },
}, fail: (error) => {
this.showError('连接服务器出错,请检查后台服务是否启动!');
},
})
},
}
} }
}
</script> </script>
<style> <style>
page { page {
background-color: #F8F8F8; background-color: #F8F8F8;
padding-bottom: 260rpx; padding-bottom: 260rpx;
} }
.u-radio { .u-radio {
width: 200rpx !important; width: 200rpx !important;
} }
.submitView { .submitView {
width: 100%; width: 100%;
padding: 16rpx 0 26rpx; padding: 16rpx 0 26rpx;
background-color: #FFFFFF; background-color: #FFFFFF;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
border-top: 1rpx solid #f1f1f1; border-top: 1rpx solid #f1f1f1;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 100; z-index: 100;
} }
.submitBtn { .submitBtn {
width: 666rpx; width: 666rpx;
} }
.productBox { .productBox {
background-color: #FFFFFF; background-color: #FFFFFF;
margin-top: 32rpx; margin-top: 32rpx;
padding: 26rpx 0; padding: 26rpx 0;
} }
.tjcpName { .tjcpName {
width: 686rpx; width: 686rpx;
height: 40rpx; height: 40rpx;
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
border-left: 6rpx solid #007AFF; border-left: 6rpx solid #007AFF;
padding-left: 12rpx; padding-left: 12rpx;
margin-left: 26rpx; margin-left: 26rpx;
margin-top: 26rpx; margin-top: 26rpx;
} }
.cpInput { .cpInput {
width: 150rpx !important; width: 150rpx !important;
margin-right: 12rpx; margin-right: 12rpx;
} }
.cpInput>input { .cpInput>input {
box-sizing: border-box; box-sizing: border-box;
border: 1rpx solid #DDDDDD; border: 1rpx solid #DDDDDD;
width: 100%; width: 100%;
height: 60rpx; height: 60rpx;
border-radius: 10rpx; border-radius: 10rpx;
padding: 0 10rpx; padding: 0 10rpx;
} }
.cpInput1 { .cpInput1 {
width: 200rpx !important; width: 200rpx !important;
margin-right: 12rpx; margin-right: 12rpx;
} }
.cpInput1>input { .cpInput1>input {
box-sizing: border-box; box-sizing: border-box;
border: 1rpx solid #DDDDDD; border: 1rpx solid #DDDDDD;
width: 100%; width: 100%;
height: 60rpx; height: 60rpx;
border-radius: 10rpx; border-radius: 10rpx;
padding: 0 10rpx; padding: 0 10rpx;
} }
.clearIcon { .clearIcon {
position: absolute; position: absolute;
right: 6rpx; right: 6rpx;
top: 6rpx; top: 6rpx;
} }
.greenPrice { .greenPrice {
font-size: 16px; font-size: 16px;
color: #19BE6B !important; color: #19BE6B !important;
font-weight: bold; font-weight: bold;
} }
.disFlex { .disFlex {
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 8rpx; margin-bottom: 8rpx;
} }
.inputName { .inputName {
color: #ADADAD; color: #ADADAD;
font-size: 16px; font-size: 16px;
} }
.addHKQS { .addHKQS {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 16rpx 26rpx; padding: 16rpx 26rpx;
font-size: 15px; font-size: 15px;
font-weight: bold; font-weight: bold;
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
</style> </style>
@@ -18,7 +18,7 @@
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
@@ -16,7 +16,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
@@ -16,7 +16,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关移仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关移仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -14,7 +14,7 @@
</view> </view>
</view> </view>
<dataNull v-if="list.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关排产单" title1="请添加或者更换搜索添加"> <dataNull v-if="list.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关排产单" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" @scrolltolower="selectDataFun"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray" refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"
@@ -6,7 +6,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
+1 -1
View File
@@ -6,7 +6,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关进仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关进仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
+1 -1
View File
@@ -6,7 +6,7 @@
:current="activeTabIndex" @change="onTabChange"></u-tabs> :current="activeTabIndex" @change="onTabChange"></u-tabs>
</div> </div>
</u-sticky> </u-sticky>
<dataNull v-if="ItemDataList.length == 0" src="/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加"> <dataNull v-if="ItemDataList.length == 0" src="/src/static/img/chahua/gjNull.png" title="暂无相关出仓资料" title1="请添加或者更换搜索添加">
</dataNull> </dataNull>
<scroll-view v-else scroll-y="true" :style="{height: scrollHeight}" <scroll-view v-else scroll-y="true" :style="{height: scrollHeight}"
refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray"> refresher-enabled :refresher-threshold="200" :refresher-triggered="triggered" refresher-background="gray">
File diff suppressed because it is too large Load Diff
+1
View File
@@ -47,6 +47,7 @@ export default {
app_name: config.upgradeName, app_name: config.upgradeName,
current_version: appInfo.version current_version: appInfo.version
}) })
console.log('res',res)
if(!res.download_url){ if(!res.download_url){
this.$u.toast('当前版本已是最新版'); this.$u.toast('当前版本已是最新版');
return return
+37 -128
View File
@@ -3,12 +3,7 @@
<common-navbar title="工作台" :showBack="false"> <common-navbar title="工作台" :showBack="false">
<template #right> <template #right>
<view class="scan_box"> <view class="scan_box">
<u-icon <u-icon name="scan" color="#333333" size="46" @click="handleScan"></u-icon>
name="scan"
color="#333333"
size="46"
@click="handleScan"
></u-icon>
</view> </view>
</template> </template>
</common-navbar> </common-navbar>
@@ -21,10 +16,7 @@
</view> </view>
<view class="grid-text">成品配布</view> <view class="grid-text">成品配布</view>
</u-grid-item> </u-grid-item>
<u-grid-item <u-grid-item :index="1" @click="navTo('/pages/storegoods/QRBarCodeReview')">
:index="1"
@click="navTo('/pages/storegoods/QRBarCodeReview')"
>
<view class="home-icon icon-color02"> <view class="home-icon icon-color02">
<i class="iconfont icon-mall-bag"></i> <i class="iconfont icon-mall-bag"></i>
</view> </view>
@@ -35,44 +27,31 @@
<view class="workbench-title">成品管理</view> <view class="workbench-title">成品管理</view>
<view class="toolbar"> <view class="toolbar">
<u-grid class="grid" :col="4" :border="false"> <u-grid class="grid" :col="4" :border="false">
<u-grid-item <u-grid-item :index="0" @click="navTo('/pages/storegoods/dyeworksDyeback')">
:index="0"
@click="navTo('/pages/storegoods/dyeworksDyeback')"
>
<view class="home-icon icon-color04"> <view class="home-icon icon-color04">
<i class="iconfont icon-finance"></i> <i class="iconfont icon-finance"></i>
</view> </view>
<view class="grid-text">染整进仓</view> <view class="grid-text">染整进仓</view>
</u-grid-item> </u-grid-item>
<u-grid-item <u-grid-item :index="1" @click="navTo('/pages/storegoods/storeGoodsBusinessIn')">
:index="1"
@click="navTo('/pages/storegoods/storeGoodsBusinessIn')"
>
<view class="home-icon icon-color03"> <view class="home-icon icon-color03">
<i class="iconfont icon-mall-bag"></i> <i class="iconfont icon-mall-bag"></i>
</view> </view>
<view class="grid-text">成品进仓</view> <view class="grid-text">成品进仓</view>
</u-grid-item> </u-grid-item>
<u-grid-item <u-grid-item :index="2" @click="navTo('/pages/storegoods/storeGoodsBusinessOut')">
:index="2"
@click="navTo('/pages/storegoods/storeGoodsBusinessOut')"
>
<view class="home-icon icon-color12"> <view class="home-icon icon-color12">
<i class="iconfont icon-baoxiaodan"></i> <i class="iconfont icon-baoxiaodan"></i>
</view> </view>
<view class="grid-text">成品出仓</view> <view class="grid-text">成品出仓</view>
</u-grid-item> </u-grid-item>
<u-grid-item <u-grid-item @click="navTo('/pages/storegoods/storeGoodsBusinessCheck')">
@click="navTo('/pages/storegoods/storeGoodsBusinessCheck')"
>
<view class="home-icon icon-color04"> <view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i> <i class="iconfont icon-shenpi"></i>
</view> </view>
<view class="grid-text">成品盘点</view> <view class="grid-text">成品盘点</view>
</u-grid-item> </u-grid-item>
<u-grid-item <u-grid-item @click="navTo('/pages/storegoods/storeGoodsBusinessStationMoveOnly')">
@click="navTo('/pages/storegoods/storeGoodsBusinessStationMoveOnly')"
>
<view class="home-icon icon-color04"> <view class="home-icon icon-color04">
<i class="iconfont icon-shenpi"></i> <i class="iconfont icon-shenpi"></i>
</view> </view>
@@ -151,6 +130,7 @@
</template> </template>
<script> <script>
import CommonNavbar from "@/components/common-navbar/index"; import CommonNavbar from "@/components/common-navbar/index";
import scanMixin from '@/common/scanMixin.js';
/** /**
* Copyright (c) 2013-Now http://aidex.vip All rights reserved. * Copyright (c) 2013-Now http://aidex.vip All rights reserved.
*/ */
@@ -158,6 +138,7 @@ export default {
components: { components: {
CommonNavbar, CommonNavbar,
}, },
mixins: [scanMixin],
data() { data() {
return { return {
show: false, show: false,
@@ -168,34 +149,17 @@ export default {
//{image: '/static/aidex/banner/banner03.png'} //{image: '/static/aidex/banner/banner03.png'}
], ],
todoCount: 3, todoCount: 3,
scanReceiver: null, // scanReceiver 和 isPageActive 已由 scanMixin 提供
isPageActive: false,
}; };
}, },
onLoad() { onLoad() {
// #ifdef APP-PLUS // #ifdef APP-PLUS
this.isPageActive = true; // 使用 scanMixin 的方法注册扫码广播,传入自定义回调
this.registerScanBroadcast(); this.registerScanBroadcast(this.handleScanCode);
// #endif // #endif
}, },
// onUnload, onHide, onShow 已由 scanMixin 自动处理
onUnload() {
// #ifdef APP-PLUS
this.isPageActive = false;
this.unregisterBroadcast();
// #endif
},
onHide() {
// 页面隐藏时
this.isPageActive = false;
},
onShow() {
// 页面显示时
this.isPageActive = true;
},
computed: { computed: {
contentStyle() { contentStyle() {
@@ -206,6 +170,15 @@ export default {
}, },
}, },
methods: { methods: {
// 自定义扫码处理回调 - 处理本页面特有的扫码逻辑
handleScanCode(scanResult) {
console.log('工作台-扫码结果:', scanResult);
const cleanResult = scanResult.trim().replace(/[\r\n]/g, '');
uni.navigateTo({
url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult
});
},
navTo(url) { navTo(url) {
uni.navigateTo({ uni.navigateTo({
url: url, url: url,
@@ -217,11 +190,11 @@ export default {
itemClick(index) { itemClick(index) {
console.log(index); console.log(index);
}, },
// 处理扫码 // 处理扫码(手动点击扫码按钮)
handleScan() { handleScan() {
// uni.navigateTo({ // uni.navigateTo({
// url: '/pages/saleship/salepickscandetail?order_no=FPD-PB-202412270196' // url: '/pages/saleship/salepickscandetail?order_no=FPD-PB-202412270196'
// }) // })
// return // return
// #ifdef APP-PLUS || MP-WEIXIN // #ifdef APP-PLUS || MP-WEIXIN
uni.scanCode({ uni.scanCode({
@@ -229,9 +202,9 @@ export default {
success: (res) => { success: (res) => {
console.log('扫码成功:', res); console.log('扫码成功:', res);
const cleanResult = res.result.trim().replace(/[\r\n]/g, ''); const cleanResult = res.result.trim().replace(/[\r\n]/g, '');
uni.navigateTo({ uni.navigateTo({
url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult
}) })
}, },
fail: (err) => { fail: (err) => {
console.error('扫码失败:', err); console.error('扫码失败:', err);
@@ -275,99 +248,32 @@ export default {
}); });
} }
}, },
// 注册扫码广播 // registerScanBroadcast 和 unregisterScanBroadcast 已由 scanMixin 提供
registerScanBroadcast() {
try {
console.log('开始注册扫码广播');
const main = plus.android.runtimeMainActivity();
// 配置扫码枪广播
try {
const Intent = plus.android.importClass('android.content.Intent');
const intent = new Intent('com.android.scanner.service_settings');
intent.putExtra('action_barcode_broadcast', 'com.android.server.scannerservice.broadcast');
intent.putExtra('key_barcode_broadcast', 'scannerdata');
main.sendBroadcast(intent);
console.log('扫码枪广播配置已发送');
} catch (error) {
console.error('配置扫码枪广播失败:', error);
}
// 注册广播接收器
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
const filter = new IntentFilter();
filter.addAction('com.android.server.scannerservice.broadcast');
const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: (context, intent) => {
// 只有当页面活动时才处理广播
if (!this.isPageActive) return;
try {
console.log("Workbench intent:", intent);
const scanResult = intent.getStringExtra('scannerdata');
console.log('工作台-扫码结果:', scanResult);
if (scanResult) {
this.$nextTick(() => {
const cleanResult = scanResult.trim().replace(/[\r\n]/g, '');
uni.navigateTo({
url: '/pages/saleship/salepickscandetail?order_no=' + cleanResult
});
});
}
} catch (error) {
console.error('处理广播数据时出错:', error, error.stack);
}
}
});
// 注册广播接收器
main.registerReceiver(receiver, filter);
this.scanReceiver = receiver;
console.log('扫码广播注册成功,等待扫码...');
} catch (error) {
console.error('注册扫码广播失败:', error);
console.error('错误详情:', error.message);
console.error('错误堆栈:', error.stack);
}
},
// 注销广播接收器
unregisterBroadcast() {
if (this.scanReceiver) {
try {
const main = plus.android.runtimeMainActivity();
main.unregisterReceiver(this.scanReceiver);
this.scanReceiver = null;
console.log('扫码广播注销成功');
} catch (error) {
console.error('注销扫码广播失败:', error);
}
}
},
}, },
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
@import "index.scss"; @import "index.scss";
.scan_box { .scan_box {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.scan_text { .scan_text {
font-size: 12px; font-size: 12px;
color: #2979ff; color: #2979ff;
} }
} }
.banner-box { .banner-box {
padding: 0 2%; padding: 0 2%;
width: 96%; width: 96%;
height: 170rpx; height: 170rpx;
margin: 30rpx 0 30rpx; margin: 30rpx 0 30rpx;
} }
.u-swiper-wrap { .u-swiper-wrap {
padding: 0 10px; padding: 0 10px;
} }
@@ -378,6 +284,7 @@ export default {
display: inline-block; display: inline-block;
margin: 0 1.5%; margin: 0 1.5%;
} }
.banner-pic image { .banner-pic image {
width: 100%; width: 100%;
height: 170rpx; height: 170rpx;
@@ -394,12 +301,14 @@ export default {
position: relative; position: relative;
top: -3px; top: -3px;
} }
.workbench-title { .workbench-title {
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
color: #333333; color: #333333;
padding: 15px 30rpx; padding: 15px 30rpx;
} }
.home-icon i.icon-tongzhi { .home-icon i.icon-tongzhi {
font-size: 22px; font-size: 22px;
} }
+16 -3
View File
@@ -1,10 +1,23 @@
const dotenv = require('dotenv');
// // Load environment variables from .env file
dotenv.config();
module.exports = { module.exports = {
chainWebpack: (config) => { chainWebpack: (config) => {
config.plugin('define').tap((definitions) => { config.plugin('define').tap((definitions) => {
console.log('VUE_APP_UPGRADE_NAME',JSON.stringify(process.env.VUE_APP_UPGRADE_NAME))
console.log('VUE_APP_PRODUCTION_API_URL',JSON.stringify(process.env.VUE_APP_PRODUCTION_API_URL))
console.log('VUE_APP_DEV_API_URL',JSON.stringify(process.env.VUE_APP_DEV_API_URL))
console.log('VUE_APP_ENV_NAME',JSON.stringify(process.env.VUE_APP_ENV_NAME))
Object.assign(definitions[0], { Object.assign(definitions[0], {
__VUE_OPTIONS_API__: 'true', 'process.env': {
__VUE_PROD_DEVTOOLS__: 'false', ...definitions[0]['process.env'],
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' VUE_APP_UPGRADE_NAME: JSON.stringify(process.env.VUE_APP_UPGRADE_NAME),
VUE_APP_PRODUCTION_API_URL: JSON.stringify(process.env.VUE_APP_PRODUCTION_API_URL),
VUE_APP_DEV_API_URL: JSON.stringify(process.env.VUE_APP_DEV_API_URL),
VUE_APP_ENV_NAME: JSON.stringify(process.env.VUE_APP_ENV_NAME),
}
}) })
return definitions return definitions
}) })