> ***如果有新增修改的通用内容,请在本文件上更新使用方法,并注明更新人、更新时间***  
> ***创建人:数瀛 高级前端 郁欢欢,创建时间:2022年11月11日*** 
> ***更新1:***  
> ***更新人:数瀛 高级前端 郁欢欢***  
> ***更新时间:2022年11月25日***  
> ***更新内容:ajax调用,第三参数增加fullRes设置***    
> ***更新2:***  
> ***更新人:数瀛 高级前端 郁欢欢***  
> ***更新时间:2022年11月30日***  
> ***更新内容:***  
>> ***config配置增加downUrl***   
>> ***utils增加parseDic方法、downloadApk方法***   
>> ***增加 ActionUserRow 组件***  
>> ***增加 ScanInputFormItem 组件***  
>> ***增加 EasySelectFormItem 组件***  
 
----
## 使用火狐浏览器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图标设置中进行配置。
  
> 3、应用图标:准备一张图片,最好是1024*1024像素的,在manifest.json的App图标设置中进行配置。  
 > 4、自动生成安装apk:菜单栏->发行->原生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不禁用
#### 组件事件: 
> search,搜索按钮点击事件     
> clear,清除icon点击事件       
### 八、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不禁用
#### 组件事件: 
> 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调用出错')
	})
}
~~~   
### 打印数据字段说明  
> 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地址访问
   
> 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不禁用
#### 组件事件: 
> search,搜索按钮点击事件     
> clear,清除icon点击事件       
### 八、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不禁用
#### 组件事件: 
> 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调用出错')
	})
}
~~~   
### 打印数据字段说明  
> 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、首页配置页面入口(根据需要)  
## 弹框中带模糊查询
import selectItem from "@/components/selectItemWithSearch.vue";
import { palceList } from "@/service/mixins/mixins.js";
mixins: [palceList],
	//库位模糊查询
async getCurrentData(PlaceNo) {
	await this.getPalceList({
	areaCode: this.form.areaNo,
	PlaceNo: PlaceNo,
	});
},
## 弹框中带模糊查询
    
###  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、首页配置页面入口(根据需要)  
## 弹框中带模糊查询
import selectItem from "@/components/selectItemWithSearch.vue";
import { palceList } from "@/service/mixins/mixins.js";
mixins: [palceList],
	//库位模糊查询
async getCurrentData(PlaceNo) {
	await this.getPalceList({
	areaCode: this.form.areaNo,
	PlaceNo: PlaceNo,
	});
},
## 弹框中带模糊查询