# iwara-wms-pda **Repository Path**: yang-canc/iwara-wms-pda ## Basic Information - **Project Name**: iwara-wms-pda - **Description**: 伟本PDA项目开源地址 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 6 - **Created**: 2022-11-10 - **Last Updated**: 2025-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > ***如果有新增修改的通用内容,请在本文件上更新使用方法,并注明更新人、更新时间*** > ***创建人:数瀛 高级前端 郁欢欢,创建时间:2022年11月11日*** > ***更新1:*** > ***更新人:数瀛 高级前端 郁欢欢*** > ***更新时间:2022年11月25日*** > ***更新内容:ajax调用,第三参数增加fullRes设置*** > ***更新2:*** > ***更新人:数瀛 高级前端 郁欢欢*** > ***更新时间:2022年11月30日*** > ***更新内容:*** >> ***config配置增加downUrl*** >> ***utils增加parseDic方法、downloadApk方法*** >> ***增加 ActionUserRow 组件*** >> ***增加 ScanInputFormItem 组件*** >> ***增加 EasySelectFormItem 组件*** > ***更新3:*** > ***更新人:数瀛 高级前端 郁欢欢*** > ***更新时间:2022年12月5日*** > ***更新内容:*** >> ***ScanInputFormItem组件增加blur、confirm事件*** > ***更新4:*** > ***更新人:数瀛 高级前端 郁欢欢*** > ***更新时间:2022年12月7日*** > ***更新内容:*** >> ***蓝牙打印方法BluePrint.print增加标签宽高的参数*** > ***更新5:*** > ***更新人:数瀛 高级前端 郁欢欢*** > ***更新时间:2023年3月1日*** > ***更新内容:*** >> ***ScanInputFormItem、EasySelectFormItem组件增加clearable的属性*** >> ***增加UViewFormSelectPicker组件*** ---- ## 使用火狐浏览器FireFox阅读本文件 > 火狐浏览器安装Markdown Viewer扩展组件,安装之后在浏览器的地址栏输入本文件的地址(可以是本地的文件地址,如D:\README.md),回车确认即可。 ---- ## 使用技术梳理 ### 一、uni-app,资料网站:https://uniapp.dcloud.net.cn/ ### 二、VUE2,资料网站:https://v2.cn.vuejs.org/ ### 三、vuex,store全局数据,资料网站:https://v3.vuex.vuejs.org/zh/ ### 四、uview,ui库,资料网站:https://www.uviewui.com/components/intro.html ### 五、DCloud插件市场,其中的绝大多数插件可以使用HbuilderX直接导入到项目中 > HbuilderX会将插件导入到项目的uni_modules文件夹下 > HbuilderX插件导入依赖uniModules核心插件,请先安装;若导入失败,很有可能是uniModules的版本问题,请卸载后再次安装后再导入。 > 使用HbuilderX导入插件,请注意插件的平台支持以及vue语言版本 ---- ## 开发以及编译的工具和环境 ### 一、开发工具HbuilderX,官网:https://www.dcloud.io/hbuilderx.html,安装之后注意把一些常用插件也安装了。如何安装插件,官网有介绍。 ### 二、nodejs #### 1、下载地址:https://nodejs.org/zh-cn/ #### 2、安装之后的配置 > 在nodejs的安装根目录下新建2个文件夹node_global和node_cache,然后以管理员身份打开命令行窗口(cmd)输入如下代码: ~~~ npm config set prefix "node_global文件夹地址" npm config set cache "node_cache文件夹地址" ~~~ > 环境变量设置(如何打开计算机的环境变量窗口,这里不作阐述,不知道的去问度娘): >> NODE_PATH 用户变量,值为:nodejs根目录\node_modules >> Path 系统变量,新增2个属性: >>> nodejs根目录\ >>> nodejs根目录\node_global > cnpm镜像配置,输入如下命令: ~~~ npm install -g cnpm --registry=https://registry.npm.taobao.org ~~~ ---- ## 项目运行及打包 ### 首次安装 > 在项目的根目录,输入命令 ~~~ npm install 或者 cnpm install ~~~ ### 浏览器运行 > HbuilderX打开项目,菜单栏 运行 > 运行到浏览器 > 选择浏览器 > 浏览器打开 开发者工具 ,将显示模式改为 移动设备 模式 ### 真机(手机或者pda)调式 > 1、使用数据线连接 开发电脑 和 真机 > 2、真机的usb调试权限设置打开 > 3、确保 开发电脑 和 真机 处于同一网络 > 4、HbuilderX打开项目,菜单栏 运行 > 运行到手机或模拟器 > 选择调试真机 >> 注意,首次运行的时候,HbuilderX会给真机安装调试app,需要在安装完成后再次运行 ### 云打包 > 1、HbuilderX创建账号并登录 > 2、如果你的HbuilderX是首次对项目进行打包,需要获取下AppId,在manifest.json的基础设置中 > 3、应用图标:准备一张图片,最好是1024*1024像素的,在manifest.json的App图标设置中进行配置。 > 4、自动生成安装apk:菜单栏->发行->原生App云打包。云打包需要等待一段时间。 > 5、打包完成,apk在 unpackage\release\apk 路径下自动生成 ----- ## 项目目录结构 > components 自开发的通用组件 > config 项目参数配置 > node_modules 安装的第三方代码或组件 > pages 开发页面的代码 > service 封装的服务代码 >> request 接口调用封装 >> store vuex全局数据封装 > static 静态资源 >> fonts 字体样式库 >> img 本地图片资源 >> js js资源 >>> print 蓝牙打印 >>> utils 公用js代码 > uni_modules HbuilderX导入的第三方代码或组件 > unpackage HbuilderX打包自动生成的文件夹。HbuilderX自动生成的应用图片也是被保存在这里的。 ---- ## 接口调用 ### 1、代码封装在 \service\request ### 2、使用 > 已经在main.js中全局引入 ~~~ this.$api ~~~ ### 3、可以调用的方法 #### get、deletet、post、put,返回一个Promise,参数: > 第一个参数,string,后端的方法名,必传 > 第二个参数,json object,接口传参,没有后续参数的时候,可不传 > 第三个参数,string 或者 json object,接口调用配置设置,没有后续参数的时候,可不传 >> string时,即json object结构的block值 >> json object时的结构 >>> warn: boolean,出错时是否提示错误信息,可不设置,默认true >>> host:string,接口地址的域名名称,对应config配置中ajax的host,可不设置,默认default >>> block:string,接口地址的模块名称,对应config配置中ajax的block,可不设置,默认default >>> needToken: boolean,headers是否传入token,可不设置,默认true >>> loading: boolean,接口调用过程中是否开启全屏loading,可不设置,默认true >>> fullRes: boolean,接口返回是否将后端的整个结构体返回,可不设置,默认false(只返回结构体的data)(更新1) #### post、put,参数: > 第四个参数,json object,post和put以get传参方式传递的参数,可不传 #### base,返回一个Promise,参数: > 第一个参数,string,get、deletet、post、put中的一个,必传 > 后续参数,沿用 get、deletet、post、put 各自的方法 #### getHeaders,获取项目中的headers配置,参数 > 第一个参数,json object,可不传,结构如下 >> needToken: boolean,headers是否传入token,可不设置,默认true > 第二个参数,json object,原有的headers,可不传 > 返回一个json object,结构如下 >> flag: boolean,设置headers是否通过 >> headers: json object,项目配置后的headers #### getUrl,返回string,一个完整的url,参数: > 第一个参数,string,后端的方法名,必传 > 第二个参数,string 或者 json object,接口调用配置设置,没有后续参数的时候,可不传 >> string时,即json object结构的block值 >> json object时的结构 >>> host:string,接口地址的域名名称,对应config配置中ajax的host,可不设置,默认default >>> block:string,接口地址的模块名称,对应config配置中ajax的block,可不设置,默认default ---- ## config相关 ### 配置说明 > ajax,接口调用相关配置 >> errMsg,string,接口调用出错后的默认提示信息 >> host,json object,接口调用域名配置 >>> default,string,默认域名 >> block,json object,接口调用模块配置 >>> default,string,默认模块 > pagination,json object,分页相关 > path,json object,页面路径,关联pages.json,页面跳转的时候使用此处的配置,便于维护 > downUrl,string,版本更新下载地址配置(更新2) ### 开发使用 > 已经在main.js中全局引入 ~~~ this.$config ~~~ ----- ## utils相关 ### 使用范例 ~~~ import { $alert } from '@/static/js/utils' ~~~ ### utils说明 > $successInfo,Function类型,成功信息提示,参数: >> 第一个参数, string, 成功提示信息, 必传,文字尽量精简,因为只支持单行显示 > $alert,Function类型,弹出一个信息提示窗口,参数: >> 第一个参数, string, 提示信息, 必传 >> 第二个参数, string, 弹窗标题,可不传,默认“系统提示” >> 第三个参数, Function, 点击确认的回调方法, 可不传 > color,json对象类型,颜色处理相关 >> getRandomHexColor,Function类型,返回一个16进制的颜色值 > regexValidate,json对象类型,正则校验 > uuid,Function类型,创建一个随机码,参数: >> 第一个参数, number, 随机码长度, 默认6 >> 第二个参数, number, 随机码组合方式,默认0: >>> 0:大小写字母+数字 >>> 1:小写字母+数字 >>> 2:纯数字 >>> 3:大小写字母 >>> 4:小写字母 > parseDic,Function类型,解析数据字典(更新2): >> 第一个参数, Object, vuex的store对象, 在vue文件中为this.$store >> 第二个参数, string, 字典集合码 >> 第三个参数, string/number, 字典值 >> 返回, string, 字典值对应名称 > downloadApk,Function类型,新版本下载的方法(更新2): >> 第一个参数, Object, config对象, 在vue文件中为this.$config ----- ## 我们自己开发的组件说明 ### 一、PageHeader组件,这个是HeaderPageLayout组件的内置组件,不做详细说明 ### 二、FullPageLayout组件,页面外层组件,通常使用在页面的最外层 #### 组件属性: > gradient,boolean,底色渐变,即是否设置css的background-image属性,默认false > gradient-value,string,底色渐变值,即css的background-image属性的值,默认不设置,采用默认渐变色 > background-color,string,底色,在gradient为false的时候才生效,默认不设置,即透明 > safety,boolean,安全区,页面内容显示的时候,是否将安全区排除,默认true,即排除安全区 > full,boolean,是否整屏,默认true,如果组件不是用在页面的最外层,应该设置为false,这时候组件的宽高为父容器的100% > base-background-color,string,基础底色,页面底色外层的颜色,当有安全区的时候,安全区的颜色为此颜色。默认不设置,即透明,这时候显示的颜色会是uni-app中设置的颜色 #### 组件插槽: > default,默认插槽,页面body内容 ### 三、HeaderPageLayout组件,带有头部布局的页面外层组件,通常使用在页面的最外层 #### 组件属性: > gradient,boolean,页面body部分底色渐变,即是否设置css的background-image属性,默认false > gradient-value,string,页面body部分底色渐变值,即css的background-image属性的值,默认不设置,采用默认渐变色 > background-color,string,页面body部分底色,在gradient为false的时候才生效,默认不设置,即透明 > base-background-color,string,基础底色,页面底色外层的颜色,当有安全区的时候,安全区的颜色为此颜色。当不设置头部底色的时候,头部的底色也为此颜色。默认不设置,即透明,这时候显示的颜色会是uni-app中设置的颜色 > safety,boolean,安全区,页面内容显示的时候,是否将安全区排除,默认true,即排除安全区 > full,boolean,是否整屏,默认true,如果组件不是用在页面的最外层,应该设置为false,这时候组件的宽高为父容器的100% > title,string,头部标题,默认“Title” > header-color,string,头部文字颜色,默认“#212121” > header-gradient,boolean,头部底色渐变,即是否设置css的background-image属性,默认false > header-gradient-value,string,头部底色渐变值,即css的background-image属性的值,默认不设置,采用默认渐变色 > header-background-color,string,底色,在header-gradient为false的时候才生效,默认不设置,即透明 #### 组件插槽: > default,默认插槽,页面body内容 > footer,页脚插槽,页面底部内容 > headerleft,页面标题栏左侧内容 > headerright,页面标题栏右侧内容 ### 组件事件: > headerclick,标题栏左右两侧的点击事件 >> 第一个参数,值为“left”,表示左侧的点击,值为“right”,表示右侧的点击 ### 组件方法: > getBodyHeight,返回组件body的高度,number类型,单位px。 >> 提供此方法的原因在于uni-app使用flex布局的时候,app应用在flex标签容器内部flex-grow(flex)的自适应标签中的标签,无法通过%设置高度。 >> 而本组件使用了flex布局,组件的body部分使用的就是flex-grow自适应 ### 四、DefaultHeaderPageLayout组件,默认的带有标题栏的页面外层组件,通常使用在登录之后页面的最外层 #### 组件属性: > title,string,头部标题,默认“Title” > back-custom,boolean,是否开启返回事件自定义,默认false不开启 #### 组件事件: > back,自定义返回事件 #### 组件插槽: > default,默认插槽,页面body内容 > footer,页脚插槽,页面底部内容 ### 组件方法: > getBodyHeight,同HeaderPageLayout组件 ### 五、EasyPicker,简易的单选选择器 #### 组件属性: > visible,boolean,是否显示,默认false 可用语法糖.sync > list,Array,选择项数据 > value-field,string,选项value字段,默认“value” > label-field,string,选项显示label字段,默认“label” #### 组件事件: > select,选择事件,返回: >> 第一个参数:选中项的value值 >> 第二个参数,整个选中项 >> 第三个参数,选中项在选项中的位置 ### 六、ActionUserRow组件,显示操作员(更新2) ### 七、ScanInputFormItem组件,扫码输入表单(更新2) #### 组件属性: > type,string,输入框type,可选值:number、idcard、digit、password、text,默认“text” > placeholder,string,空置占位文字,默认“请输入...” > label,string,标签名称,默认空字符串 > msg,string,提示信息,默认空字符串 > msg-type,string,提示信息类型,可选值:error(错误信息,红色)、info(常规信息,蓝色),默认“error” > value/v-model,string/number/null > has-search,boolean,是否显示搜索按钮,默认false不显示 > disabled,boolean,是否禁用,默认false不禁用 > clearable,boolean,是否可清空,默认true(更新5) #### 组件事件: > search,搜索按钮点击事件 > clear,清除icon点击事件 > blur,输入框失去焦点事件(更新3) > confirm,点击键盘完成按钮时触发(电脑端回车事件)(更新3) ### 八、EasySelectFormItem组件,单选下拉表单(更新2) #### 组件属性: > placeholder,string,空置占位文字,默认“请输入...” > label,string,标签名称,默认空字符串 > msg,string,提示信息,默认空字符串 > msg-type,string,提示信息类型,可选值:error(错误信息,红色)、info(常规信息,蓝色),默认“error” > value/v-model,string/number/boolean/null > list,Array,选择项数据 > value-field,string,选项value字段,默认“value” > label-field,string,选项显示label字段,默认“label” > disabled,boolean,是否禁用,默认false不禁用 > clearable,boolean,是否可清空,默认true(更新5) #### 组件事件: > select,选项点击事件 > clear,清除icon点击事件 ### 九、UViewFormSelectPicker组件,样式上匹配uview form组件的单选下拉表单(更新5) #### 组件属性: > placeholder,string,空置占位文字,默认“请输入...” > value/v-model,string/number/boolean/null > list,Array,选择项数据 > value-field,string,选项value字段,默认“value” > label-field,string,选项显示label字段,默认“label” > disabled,boolean,是否禁用,默认false不禁用 > clearable,boolean,是否可清空,默认true > disabledColor,boolean,禁用时的背景色,默认#f5f7fa #### 组件事件: > select,选项点击事件 > clear,清除icon点击事件 ----- ## 蓝牙打印使用 ### 范例 ~~~ import BluePrint from '@/pages/print/bluePrint.js' const onPrint = function(){ let ptintContext = [ {type:'text',x:0,y:0,text:'',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:0,y:0,text:'',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:0,y:0,text:'',size:2,rotate:0,bold:0,underline:false,reverse:false}, /* 以上空数据,为防止丢包时打印不正常 */ {type:'text',x:230,y:10,text:'PART:',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:300,y:10,text:'HFAHFOAJFOAJFO',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:230,y:95,text:'NAME:',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:300,y:95,text:'SAHFAKHFKAHFKANFK',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:230,y:180,text:'LOTS:',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:300,y:180,text:'LOTSLOTSLOTSLOTSLOTS',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:13,y:250,text:'SIZE:',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:83,y:250,text:'SIZESIZESIZESIZESIZESIZESIZESIZE',size:2,rotate:0,bold:0,underline:false,reverse:false}, {type:'text',x:105,y:315,text:'MAKINO J(CHINA) CO.LTD',size:3,rotate:0,bold:0,underline:false,reverse:false}, {type:'qr',x:10,y:10,text:'asndkajdkjalda-barcode',width:8,level:1} ] BluePrint.print(this.$store,ptintContext).then(()=>{ console.log('print成功调用') }).catch(()=>{ console.log('print调用出错') }) } ~~~ > 注:BluePrint.print还有第三与第四参数,第三参数为标签宽(number,默认576),第四参数为标签高(number,默认400)(更新4) ### 打印数据字段说明 > type,string,可选值:(line)直线、(text)文字、(qr)二维码、(bar)条形码 > x,number,打印文字、二维码、条形码时候,起始点横坐标 > y,number,打印文字、二维码、条形码时候,起始点纵坐标 > x1,number,打印直线时候,起始点横坐标 > y1,number,打印直线时候,起始点纵坐标 > x2,number,打印直线时候,结束点横坐标 > y2,number,打印直线时候,结束点纵坐标 > text,string,打印文字、二维码、条形码时候,打印内容 > size,number,打印文字时的字体大小,可选值 20/1/2/3/4/5/6/7 ,其他的时候默认为2 > width,number >> 打印直线,表示线宽 >> 打印二维码,表示二维码刻度值,不是生成的二维码的宽度,取值(2到15) >> 打印条形码,表示条形码刻度值,不是生成的条形码的宽度,取值(2到6) > level,number,打印二维码时候,纠错等级,取值(0到20) > height,number,打印条形码时候,高度,取值(1到255) > barType,number,打印条形码时候,条形码类型,可选值: >> 0:CODE39; >> 1:CODE128; >> 2:CODE93; >> 3:CODEBAR; >> 4:EAN8; >> 5:EAN13; >> 6:UPCA; >> 7:UPC-E; >> 8:ITF > rotate,number,打印文字时候,选择角度 > bold,number,打印文字时候,是否加粗(0否1是) > underline,boolean,打印文字时候,下划线设置 > reverse,boolean,打印文字时候,反转设置 ------- ## 页面说明 ### /pages/start/index > 启动页,根据项目需求调整 ### /pages/login/index > 登录页,一般不会大改动了,根据项目需求做微调 ### /pages/home/index > 登录后的首页,根据项目需求,很可能做局部调整 ### /pages/baseTask/out > 入库页面,根据项目需求调整 ### /pages/baseTask/out > 出库页面,根据项目需求调整 ### /pages/print/bluetoothConnection > 物蚂蚁蓝牙打印机,蓝牙连接页面,几乎无需改动 ### /pages/setting/host > 后端接口调用域名设置页面,几乎无需改动 ----- ## json-server 前端数据moke ### 启动配置,如图在package.json中,然后命令行运行 ~~~ npm run api ~~~ > --port 3012 端口号设置为3012 > --host 0.0.0.0 开启ip地址访问 ### RESET Api > GET /demo 获取全部列表 > GET /demo/数据id 获取详情 > POST /demo 增加 > PUT /demo/数据id 整条数据替换 > PATCH /demo/数据id 修改某个字段 > DELETE /demo/数据id 删除 ### 条件查询和分页查询 #### 条件查询,字段名称后增加 > _gte 大于等于 > _lte 小于等于 > _ne 不等于 > _like 包含 #### 分页查询 > _page 页码,从1开始 > _limit 每页多少条数据 > _start 数据索引开始,从0开始 > _end 数据索引结束,不包含end索引 案例:GET模糊查找字段name ~~~ /demo?name_like=value ~~~ ------- ## 新建页面步骤 #### 1、配置pages.json #### 2、配置config/index.js中的path #### 3、首页配置页面入口(根据需要)