diff --git a/.gitignore b/.gitignore
index 59c91545..e9286175 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,16 +1,4 @@
-######################################################################
-# Build Tools
-
-/unpackage/*
-/node_modules/*
-
-######################################################################
-# Development Tools
-
-/.idea/*
-/.vscode/*
-/.hbuilderx/*
-
-package-lock.json
-yarn.lock
+/.gitignore
+/node_modules
+/unpackage
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 00000000..582561b0
--- /dev/null
+++ b/.hbuilderx/launch.json
@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+ // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+ "version": "0.0",
+ "configurations": [{
+ "app-plus" :
+ {
+ "launchtype" : "local"
+ },
+ "default" :
+ {
+ "launchtype" : "local"
+ },
+ "type" : "uniCloud"
+ }
+ ]
+}
diff --git a/App.vue b/App.vue
index 93318b58..fce6d215 100644
--- a/App.vue
+++ b/App.vue
@@ -1,34 +1,37 @@
-
diff --git a/LICENSE b/LICENSE
index 458a14c9..77f865db 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2022 闻荫
+Copyright (c) 2018 DCloud
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..164ea359
--- /dev/null
+++ b/README.md
@@ -0,0 +1,129 @@
+# hello-uniapp
+
+`uni-app`框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机在下方扫码快速体验`uni-app`的强大功能。[官方文档](https://uniapp.dcloud.net.cn/)
+
+## 快速上手
+hello-uniapp 示例工程可以通过两种方式创建, 一种是 HBuilderX, 配套 IDE,集成开发;另一种是 CLI 创建;推荐前者。
+### 通过 HBuilderX 可视化界面创建(推荐)
+
+可视化的方式比较简单,HBuilderX内置相关环境,开箱即用,无需配置nodejs。
+
+开始之前,开发者需先下载安装如下工具:
+
+- HBuilderX:[官方IDE下载地址](https://www.dcloud.io/hbuilderx.html)
+
+HBuilderX是通用的前端开发工具,但为`uni-app`做了特别强化,请下载App开发版。
+
+由于截图在 github 不便浏览,参见官方文档 [HBuilderX 可视化界面创建](https://uniapp.dcloud.net.cn/quickstart?id=_1-%e9%80%9a%e8%bf%87-hbuilderx-%e5%8f%af%e8%a7%86%e5%8c%96%e7%95%8c%e9%9d%a2)
+
+### 通过 vue-cli 创建
+
+```
+npm install -g @vue/cli
+```
+
+#### 创建uni-app
+
+**使用正式版**(对应HBuilderX最新正式版)
+
+```
+vue create -p dcloudio/uni-preset-vue my-project
+```
+
+**使用alpha版**(对应HBuilderX最新alpha版)
+
+```
+vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project
+```
+
+此时,会提示选择项目模板,选择 `hello uni-app` 项目模板,如下所示:
+
+
+
+
+
+创建好后,进入项目目录
+```
+cd my-project
+```
+
+执行该命令运行到 h5 端
+```
+npm run dev:h5
+```
+
+欢迎提 issues,推荐到[官方社区](https://ask.dcloud.net.cn/explore/)提问。
+
+## 扫码体验
+
+
+
一套代码编到10个平台,这不是梦想。眼见为实,扫描10个二维码,亲自体验最全面的跨平台效果!
+
+
+
+ 注:某些平台不能提交简单demo,故补充了一些其他功能;hello uni-app示例代码可从[github](https://github.com/dcloudio/hello-uniapp)获取
+ 快应用仅支持 vivo 、oppo、华为
+ 360小程序仅 windows平台支持,需要在360浏览器中打开
+
+
+
+`uni-app`官网文档详见[https://uniapp.dcloud.io](https://uniapp.dcloud.io)
+
+更多uni-app的模板、示例详见[插件市场](https://ext.dcloud.net.cn/)
+
diff --git a/api/httpRequest.js b/api/httpRequest.js
new file mode 100644
index 00000000..94677b47
--- /dev/null
+++ b/api/httpRequest.js
@@ -0,0 +1,40 @@
+
+function service(options = {}) {
+ let contentType = localStorage.token_type ? "application/json" : "application/x-www-form-urlencoded";
+ // contentType ="application/x-www-form-urlencoded";
+ contentType ="application/json";
+ // localStorage.setItem('token', "4810b80d-f047-4915-821d-d2baf661bb91")
+ let token = localStorage.getItem("token")
+ options.header = {
+ "content-type": contentType,
+ "Authorization": "Bearer "+token
+ // 'withCredentials': true,
+ // 'Blade-Auth':'bearer '+store.state.token,
+ // 'token_type': localStorage.token_type
+ };
+ return new Promise((resolve, reject) => {
+ options.success = (res) => {
+ if (res ) {
+ if(res.statusCode == 200){
+ if(res.data.code==0){
+ resolve(res.data);
+ }else {
+ reject(options.url + res.data.msg)
+ }
+
+ }else {
+ reject(options.url + res.data.msg)
+ }
+
+ } else {
+ reject(options.url + res.data.msg)
+ }
+ };
+ options.fail = (err) => {
+ reject(err);
+ };
+ uni.request(options);
+ });
+ }
+
+ export default service;
diff --git a/api/httpRequest2.js b/api/httpRequest2.js
new file mode 100644
index 00000000..aaeeab91
--- /dev/null
+++ b/api/httpRequest2.js
@@ -0,0 +1,108 @@
+import store from '@/store'
+// import config from '@/config'
+import errorCode from '@/common/utils/errorCode'
+import { toast, showConfirm, tansParams } from '@/common/utils/common'
+import storage from '@/common/utils/storage'
+
+let timeout = 10000
+// const baseUrl = config.baseUrl + config.baseApi;
+
+const request = config => {
+ let requestUrl="";
+ if(getApp()!=undefined){
+ requestUrl = getApp().globalData.request_url
+ }
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false
+ config.header = config.header || {}
+ if (storage.getStorage(storage.constant.token) && !isToken) {
+ config.header['Authorization'] = 'Bearer ' + storage.getStorage(storage.constant.token)
+ }
+ // 设置租户 TODO 芋艿:强制 1 先
+ // config.header['tenant-id'] = storage.getStorage(storage.constant.tenantId);
+ config.header['tenant-id'] = getApp().globalData.tenantId
+ // get请求映射params参数
+ if (config.params) {
+ let url = config.url + '?' + tansParams(config.params)
+ url = url.slice(0, -1)
+ config.url = url
+ }
+ return new Promise((resolve, reject) => {
+ uni.request({
+ method: config.method || 'get',
+ timeout: config.timeout || timeout,
+ // url: config.baseUrl || baseUrl + config.url,
+ url:requestUrl+ config.url,
+ data: config.data,
+ header: config.header,
+ dataType: 'json'
+ }).then(response => {
+ const res=response
+ var statusCode =response.statusCode
+ //请求成功
+ if(statusCode==200){
+ if(res.data.code==401||res.data.code==500){
+ reject(res.data.msg)
+ }else {
+ resolve(res.data)
+ }
+
+ }else if(statusCode==404){
+ //请求失败
+ if(res.data.error){
+ reject(res.data.error)
+ }else {
+ reject(res.errMsg)
+ }
+ }
+
+ // const code = res.data.code || 200
+ // const msg = errorCode[code] || res.data.msg || errorCode['default']
+
+ // if(code==200){
+ // if(res.data.status==404){
+ // // toast(msg)
+ // reject("404")
+ // }else {}
+ // }
+
+ // if (code === 401) {
+ // showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
+ // if (res.confirm) {
+ // store.dispatch('LogOut').then(res => {
+ // uni.reLaunch({ url: '/pages/login' })
+ // })
+ // }
+ // })
+ // reject('无效的会话,或者会话已过期,请重新登录。')
+ // } else if (code === 500) {
+ // toast(msg)
+ // reject('500')
+ // } else if (code !== 200) {
+ // toast(msg)
+ // reject(code)
+ // }else if(code == 200){
+ // if(res.data.status==404){
+ // // toast(msg)
+ // reject("404")
+ // return;
+ // }
+ // resolve(res.data)
+ // }
+ })
+ .catch(error => {
+ var message = error.errMsg
+ if (message === 'Network Error') {
+ message = '后端接口连接异常'
+ } else if (message.includes('timeout')) {
+ message = '系统接口请求超时'
+ } else if (message.includes('Request failed with status code')) {
+ message = '系统接口' + message.substr(message.length - 3) + '异常'
+ }
+ toast(message)
+ reject(error)
+ })
+ })
+}
+
+export default request
diff --git a/api/index.js b/api/index.js
new file mode 100644
index 00000000..0552cfaa
--- /dev/null
+++ b/api/index.js
@@ -0,0 +1,1228 @@
+import request from '@/common/request.js'
+import promise from '@/common/promise.js'
+
+// let printUrl = getApp().globalData.print_url; //打印
+let printUrl = "" //打印
+let devUrl = getApp().globalData.dev_url; //数据请求
+
+export function getlogin(params) { //
+ return request(devUrl + "/api/pda/account/login", { //
+ data: params,
+ method: "post"
+ })
+}
+
+export function getMenus() { //
+ return promise(devUrl + "/api/pda/account/menus", { //
+ data: {},
+ method: "get"
+ })
+}
+
+export function getUserInfo() {
+ return request(devUrl + "/api/pda/account/workgroups", { //
+ data: {},
+ method: "get"
+ })
+}
+
+export function getUserInfoAsync() {
+ return promise(devUrl + "/api/pda/account/workgroups", { //
+ data: {},
+ method: "get"
+ })
+}
+
+
+export function getWorkgroups() {
+ return promise(devUrl + "/api/pda/account/workgroups", { //
+ data: {},
+ method: "get"
+ })
+}
+
+//登出
+export function logout() {
+ return request(devUrl + "/api/pda/account/logout", {
+ method: "post"
+ });
+}
+
+// export function logout() {//
+// return request("/prod/api/pda/account/logout", {
+// data: {},
+// method: "post"
+// })
+// }
+
+
+
+
+
+//按用户查询菜单列表
+export function menus() {
+ return request(
+ devUrl + "/api/pda/account/menus", {
+ method: 'get',
+ data: {}
+ })
+}
+
+//获取任务数量
+export function getJobCount() {
+ return request(
+ devUrl + "/api/pda/job/count", {
+ method: 'get',
+ data: {}
+ })
+}
+
+//获取任务数量
+export function getJobCountAsync(isToday) {
+ return promise(
+ devUrl + "/api/pda/job/count?isToday=" + isToday, {
+ method: 'get',
+ data: {}
+ })
+}
+
+//按用户查询用户信息
+export function profile(params) { //
+ return request(devUrl + "/api/pda/account/profile", { //
+ data: params,
+ method: "get"
+ })
+}
+//修改用户密码
+export function changePassword(params) { //
+ return request(devUrl + "/api/pda/account/change-password", { //
+ data: params,
+ method: "post"
+ })
+}
+//通用
+//查询库存明细
+export const balances = (params) => request(
+ devUrl + "/api/pda/inventory/balances", {
+ method: 'get',
+ data: params
+ });
+
+//通用
+//查询库存明细
+export const issueBalances = (params) => request(
+ devUrl + "/api/pda/inventory/balances/by-issue", {
+ method: 'post',
+ data: params
+ });
+
+//异步的库存查询方法
+export const issueBalancesAsync = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/by-issue", {
+ method: 'post',
+ data: params
+ });
+
+
+//通用
+//查询库存明细
+export const getBalances = (params) => request(
+ devUrl + "/api/pda/inventory/balances/get-list-by-balance-list-input", {
+ method: 'post',
+ data: params
+ });
+
+//异步的库存查询方法
+export const getBalancesAsync = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/get-list-by-balance-list-input", {
+ method: 'post',
+ data: params
+ });
+
+
+//根据零件、箱码、托码、批次、库位类型、库存状态查询库存
+export const getBalancesByFilter = (params) => request(
+ devUrl + "/api/pda/inventory/balances/by-balances-request-many-parameter", {
+ method: 'post',
+ data: params
+ });
+
+//根据零件、箱码、托码、批次、库位类型、库存状态查询库存
+export const getBalancesByFilterAsync = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/by-balances-request-many-parameter", {
+ method: 'post',
+ data: params
+ });
+
+//查询是否有预计入和预计出的占用
+export const getBalancesExpectByFilter = (params) => request(
+ devUrl + "/api/pda/inventory/balances/by-balances-request-many-parameter-not-in-expect-out", {
+ method: 'post',
+ data: params
+ });
+
+//
+
+//根据库位查询库存
+export const getBalancesByStatus = (params) => request(
+ devUrl + "/api/pda/inventory/balances/get-by-location-type-and-inventory-status", {
+ method: 'post',
+ data: params
+ });
+
+//根据库位和零件号查询库存
+export const getBalancesByLocationAndItem = (params) => request(
+ devUrl + "/api/pda/inventory/balances/get-by-location-and-item?locationCode=" + params.locationCode +
+ "&itemCode=" + params.itemCode, {
+ method: 'get',
+ data: params
+ });
+
+
+//根据库位和零件号查询库存
+export const getBalancesByLocationAndItemAsync = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/get-by-location-and-item?locationCode=" + params.locationCode +
+ "&itemCode=" + params.itemCode, {
+ method: 'get',
+ data: params
+ });
+
+//查询线边库存
+export const getWipListAsync = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/get-wip-list?itemCode=" + params.itemCode + "&locationCode=" + params
+ .locationCode, {
+ method: 'get',
+ data: params
+ });
+
+
+//查询库存汇总
+export const summary = (params) => request(
+ devUrl + "/api/pda/inventory/balances/summary", {
+ method: 'get',
+ data: params
+ });
+
+//零件
+//查询零件信息
+export const getitems = (code) => request(
+ devUrl + "/api/pda/item/" + code, {
+ method: 'get',
+ data: code
+ });
+
+//根据库位查询零件
+export const getItemsByLocation = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/get-item-by-location", {
+ method: 'get',
+ data: params
+ });
+
+//查询已占用库存
+export const expectIn = (params) => request(
+ devUrl + "/api/pda/inventory/expect-in", {
+ method: 'get',
+ data: params
+ });
+
+//根据code获取生产线
+export const getprodlineitem = (code) => request(
+ devUrl + "/api/pda/production-line/by-code?code=" + code, {
+ method: 'get',
+ data: {}
+ });
+
+//异步查询生产线
+export const getprodlineitemAsync = (code) => promise(
+ devUrl + "/api/pda/production-line/by-code?code=" + code, {
+ method: 'get',
+ data: {}
+ });
+
+//查询收货任务列表
+export const getReceiptJobList = (params) => request(
+ devUrl + `/api/pda/job/purchase-receipt/list`, {
+ method: 'get',
+ data: params
+ });
+
+//根据number 获取收货任务列表
+export const getReceiptJobByNumber = (params) => request(
+ devUrl + "/api/pda/job/purchase-receipt/by-number/" + params.number + "?isToday=" + params.isToday, {
+ data: {},
+ method: "get"
+ });
+
+//根据Asn number 获取收货任务列表
+export const getReceiptJobByAsnNumber = (params) => request(
+ devUrl + "/api/pda/job/purchase-receipt/list/by-asn/asnNumber=" + params.number + "&isToday=" + params
+ .isToday, {
+ data: {},
+ method: "get"
+ });
+
+//查询收货任务明细
+export const purchaseReceipts = (id) => request(
+ devUrl + `/api/pda/job/purchase-receipt/${id}`, {
+ method: 'get',
+ data: {}
+ });
+
+//开始收货任务
+export function takeReceiptJob(id) {
+ return request(devUrl + `/api/pda/job/purchase-receipt/take/${id}`, { //
+ data: {},
+ method: "post"
+ })
+}
+//取消承接任务
+export function cancelTakeReceiptJob(id) {
+ return request(devUrl + `/api/pda/job/purchase-receipt/cancel-take/${id}`, { //
+ data: {},
+ method: "post"
+ })
+}
+//完成收货任务
+export function finishReceiptJob(id, param) { //
+ return request(devUrl + `/api/pda/job/purchase-receipt/finish/${id}`, { //
+ data: param,
+ method: "post"
+ })
+}
+
+//保存目检结果
+export function saveReceiptResult(id, param) {
+ ///api/pda/job/purchase-receipt/save-detail-inspect/{id}
+ return request(devUrl + `/api/pda/job/purchase-receipt/save-detail-inspect/${id}`, { //
+ data: param,
+ method: "post"
+ })
+}
+
+//重置多个目检结果
+export function resetReceiptResult(id, param) {
+ ///api/pda/job/purchase-receipt/save-detail-inspect/{id}
+ return request(devUrl + `/api/pda/job/purchase-receipt/reset-many-detail-inspect/${id}`, { //
+ data: param,
+ method: "post"
+ })
+}
+
+
+//重置一个目检结果
+export function resetReceiptDetailResult(id, detailId) {
+ ///api/pda/job/purchase-receipt/save-detail-inspect/{id}
+ return request(devUrl + `/api/pda/job/purchase-receipt/reset-detail-inspect/${id}?detailId=${detailId}`, { //
+ data: {},
+ method: "post"
+ })
+}
+
+//待检转合格
+export function unInspectToQualified(id) { //
+ return request(devUrl + `/api/pda/job/purchase-receipt/set-inspect-status-ok-by-inspect/${id}`, { //
+ data: {},
+ method: "post"
+ })
+}
+
+//库存
+//提交库存转移
+export function inventoryTransfer(params) { //
+ return request(devUrl + "/api/pda/store/transfer-note", { //
+ data: params,
+ method: "post"
+ })
+}
+//提交计划外入库
+export function unplannedReceipt(params) { //
+ return request(devUrl + "/api/pda/store/unplanned-receipt", { //
+ data: params,
+ method: "post"
+ })
+}
+//提交计划外出库
+export function unplannedIssue(params) { //
+ return request(devUrl + "/api/pda/store/unplanned-Issue", { //
+ data: params,
+ method: "post"
+ })
+}
+//原料
+//原料收货
+export function purchaseReceipt(params) { //
+ return request(devUrl + "/api/pda/store/purchase-receipt", { //
+ data: params,
+ method: "post"
+ })
+}
+//提交FIFO指导发料
+export function issue(params) { //
+ return request(devUrl + "/api/pda/store/issue", { //
+ data: params,
+ method: "post"
+ })
+}
+//生产
+//提交叫料
+export function materialRequest(params) { //
+ return request(devUrl + "/api/pda/store/material-request", { //
+ data: params,
+ method: "post"
+ })
+}
+//提交完工收货(无任务)
+export function productreceipt(params) { //
+ return request(devUrl + "/api/pda/store/product-receipt", { //
+ data: params,
+ method: "post"
+ })
+}
+
+//完工收货(冲回)
+export function productrecycle(params) { //
+ return request(devUrl + "/api/pda/store/product-recycle", { //
+ data: params,
+ method: "post"
+ })
+}
+
+//提交完工收货(天津)
+export function tjproductreceipt(params) { //
+ return request(devUrl + "/api/pda/store/l7/create-product-receipt-note-with-l7", { //
+ data: params,
+ method: "post"
+ })
+}
+
+//完工收货(天津)
+export function tjproductrecycle(params) { //
+ return request(devUrl + "/api/pda/store/l7/create-product-recycle-note-with-l7", { //
+ data: params,
+ method: "post"
+ })
+}
+
+//库位
+//查询库位信息 根据code
+export const locations = (code) => request(
+ devUrl + "/api/pda/location/" + code, {
+ method: 'get',
+ data: code
+ });
+
+//库位
+//查询库位信息 根据code
+export const locationsAsync = (code) => promise(
+ devUrl + "/api/pda/location/" + code, {
+ method: 'get',
+ data: code
+ });
+
+//库位
+//查询库位信息 根据type
+export const locationByType = (type) => request(
+ devUrl + "/api/pda/location/by-type/" + type, {
+ method: 'get',
+ data: type
+ });
+
+//根据库位查询零件
+export const getLocationByItem = (params) => promise(
+ devUrl + "/api/pda/inventory/balances/get-location-by-item", {
+ method: 'get',
+ data: params
+ });
+
+//消息
+//查询未读消息列表
+export const messageList = (userId) => request(
+ devUrl + "/api/pda/store/message/list/" + userId, {
+ method: 'get',
+ data: {}
+ });
+//消息
+//查询未读消息列表
+export const unreadList = () => request(
+ devUrl + "/api/pda/store/message/unread-list", {
+ method: 'get',
+ data: {}
+ });
+//查询未读消息数量
+export const unreadCount = (userId) => request(
+ devUrl + "/api/pda/store/message/not-read-count/" + userId, {
+ method: 'get',
+ data: {}
+ });
+//变更消息状态
+export function readMessage(id) { //
+ return request(devUrl + "/api/pda/store/message/read/" + id, { //
+ data: id,
+ method: "post"
+ })
+};
+//查询消息明细
+export const messages = (id) => request(
+ devUrl + "/api/pda/store/message/" + id, {
+ method: 'get',
+ data: id
+ });
+//器具
+export function palletbind(id) { //
+ return request(devUrl + "/api/pda/stock/pallet/bind", { //
+ data: id,
+ method: "post"
+ })
+}
+
+//检验任务列表
+export const getInspectList = (params) => request(
+ devUrl + "/api/pda/job/inspect/list", {
+ method: 'get',
+ data: params
+ });
+
+//检验任务详情
+export const getInspectDetail = (params) => request(
+ //api/pda/job/inspect/{id}
+ devUrl + "/api/pda/job/inspect/" + params.id, { //
+ data: {},
+ method: "get"
+ });
+
+//检验任务数量
+export const getInspectCount = (params) => request(
+ devUrl + "/api/pda/job/inspect/count", {
+ data: params,
+ method: "get"
+ });
+
+//承接检验任务
+export const takeInspectJob = (params) => request(
+ devUrl + "/api/pda/job/inspect/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+
+//取消承接检验任务
+export const cancelTakeInspectJob = (id) => request(
+ devUrl + "/api/pda/job/inspect/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//开始检验任务
+export const finshInspectJob = (id, params) => request(
+ devUrl + "/api/pda/job/inspect/finish/" + id, { //
+ data: params,
+ method: "post"
+ })
+
+//上架任务列表
+export const getPutawayJobList = (params) => request(
+ devUrl + "/api/pda/job/put-away/list", {
+ method: 'get',
+ data: params
+ });
+
+//上架任务详情
+export const getPutawayJobDetail = (params) => request(
+ devUrl + "/api/pda/job/put-away/" + params.id, { //
+ data: {},
+ method: "get"
+ });
+
+//上架任务数量
+export const getPutawayJobCount = (params) => request(
+ devUrl + "/api/pda/job/put-away/count", {
+ data: params,
+ method: "get"
+ });
+
+//承接上架任务
+export const takePutawayJob = (params) => request(
+ devUrl + "/api/pda/job/put-away/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+
+//承接上架任务
+export const cancelTakePutawayJob = (id) => request(
+ devUrl + "/api/pda/job/put-away/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//开始上架任务
+export const finshPutawayJob = (id, params) => request(
+ devUrl + "/api/pda/job/put-away/finish/" + id, { //
+ data: params,
+ method: "post"
+ })
+
+//根据托标签生成上架任务
+export const byContainercode = (params) => request(
+ devUrl + "/api/pda/job/put-away/by-containercode/", { //
+ data: params,
+ method: "post"
+ })
+
+//根据箱标签生成上架任务
+export const byPackingcode = (params) => request(
+ devUrl + "/api/pda/job/put-away/by-packingcode", { //
+ data: params,
+ method: "post"
+ })
+
+//检查此箱是否存在任务
+export const checkjobbypacking = (params) => request(
+ devUrl + "/api/pda/job/put-away/check-job-exist-by-packing", { //
+ data: params,
+ method: "get"
+ })
+
+//创建叫料申请
+export const materialrequest = (params) => request(
+ devUrl + "/api/pda/store/material-request", { //
+ data: params,
+ method: "post"
+ })
+
+//根据托标签检查是否存在任务
+export const checkjobbycontainer = (params) => request(
+ devUrl + "/api/pda/job/put-away/check-job-exist-by-container", { //
+ data: params,
+ method: "get"
+ })
+
+//发料任务列表
+export const getIssueList = (params) => request(
+ "http://127.0.0.1:4523/m1/1773588-0-default" + "/api/pda/job/issue/list", {
+ method: 'get',
+ data: params
+ });
+
+//检查是否存在发料任务"/prod/api/pda/job/issue/check-job-exist",
+export const checkIssueJobExist = (params) => request(
+ devUrl + "/api/pda/job/issue/check-job-exist", {
+ method: 'get',
+ data: params
+ });
+
+//检查是否存在发料任务"/prod/api/pda/job/issue/check-job-exist",
+export const checkIssueJobExistAsync = (params) => promise(
+ devUrl + "/api/pda/job/issue/check-job-exist", {
+ method: 'get',
+ data: params
+ });
+
+//根据number 获取发料任务列表
+export const getIssueJobByNumber = (jobNumber) => request(
+ devUrl + "/api/pda/job/issue/by-number/" + jobNumber, {
+ data: {},
+ method: "get"
+ });
+
+
+// 根据MaterialRequest number获取收货任务列表
+export const getIssueListByRequest = (requestNumber) => request(
+ devUrl + "/api/pda/job/issue/list/by-request/" + requestNumber, { //
+ data: {},
+ method: "get"
+ });
+
+//发料任务数量
+export const getIssueCount = (params) => request(
+ devUrl + "/api/pda/job/issue/count", {
+ data: params,
+ method: "get"
+ });
+
+//发料任务详情
+export const getIssueDetail = (params) => request(
+ devUrl + "/api/pda/job/issue/" + params.id, { //
+ data: {},
+ method: "get"
+ });
+
+//承接发料任务
+export const takeIssueJob = (params) => request(
+ devUrl + "/api/pda/job/issue/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+
+//取消承接发料任务
+export const cancelTakeIssueJob = (id) => request(
+ devUrl + "/api/pda/job/issue/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+//完成发料任务
+export const finshIssueJob = (id, params) => request(
+ devUrl + "/api/pda/job/issue/finish/" + id, { //
+ data: params,
+ method: "post"
+ })
+//发货任务列表
+export const getDeliverList = (params) => request(
+ devUrl + "/api/pda/job/deliver/list", {
+ method: 'get',
+ data: params
+ });
+
+//根据number 获取发货任务列表
+export const getDeliverJobByNumber = (number) => request(
+ devUrl + "/api/pda/job/deliver/by-number/" + number, {
+ data: {},
+ method: "get"
+ });
+
+//发货任务数量
+export const getDeliverCount = (params) => request(
+ devUrl + "/api/pda/job/deliver/count", {
+ data: params,
+ method: "get"
+ });
+
+//发货任务详情
+export const getDeliverDetail = (params) => request(
+ 'http://127.0.0.1:4523/m1/1863666-0-default' + "/api/pda/job/deliver/" + params.id, { //
+ data: {},
+ method: "get"
+ });
+
+//承接发货任务
+export const takeDeliverJob = (params) => request(
+ 'http://127.0.0.1:4523/m1/1863666-0-default' + "/api/pda/job/deliver/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+//取消承接发货任务
+export const cancelTakeDeliverJob = (id) => request(
+ 'http://127.0.0.1:4523/m1/1863666-0-default' + "/api/pda/job/deliver/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+//开始发货任务
+export const finshDeliverJob = (id, params) => request(
+ devUrl + "/api/pda/job/deliver/finish/" + id, { //
+ data: params,
+ method: "post"
+ })
+
+//盘点任务列表
+export const getCountJobList = (params) => request(
+ devUrl + "/api/pda/job/count/list", {
+ method: 'get',
+ data: params
+ });
+
+//根据number获取盘点任务
+export const getCountJobByNumber = (number) => request(
+ devUrl + "/api/pda/job/count/by-number/" + number, {
+ data: {},
+ method: "get"
+ });
+
+
+//根据库位获取盘点任务
+export const getCountJobByLocation = (locationCode) => request(
+ devUrl + "/api/pda/job/count/list/by-location/" + locationCode, {
+ data: {},
+ method: "get"
+ });
+
+//根据库位获取盘点任务
+export const getCountJobByLocationAsync = (locationCode) => promise(
+ devUrl + "/api/pda/job/count/list/by-location/" + locationCode, {
+ data: {},
+ method: "get"
+ });
+
+//盘点任务数量
+export const getCountJobCount = (params) => request(
+ devUrl + "/api/pda/job/count/count", {
+ data: params,
+ method: "get"
+ });
+//盘点任务详情
+export const getCountJobDetail = (params) => request(
+ devUrl + "/api/pda/job/count/" + params.id, { //
+ data: {
+ params
+ },
+ method: "get"
+ });
+
+//承接上架任务
+export const takeCountJob = (params) => request(
+ devUrl + "/api/pda/job/count/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+
+//取消承接发货任务
+export const cancelTakeCountJob = (id) => request(
+ devUrl + "/api/pda/job/count/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ }); //取消承接发货任务
+//提交盘点任务
+export const finishCountJob = (id, params) => request(
+ devUrl + "/api/pda/job/count/finish/" + id, { //
+ data: params,
+ method: "post"
+ });
+
+//根据条件新增盘点任务
+export const createCountJob = (params) => request(
+ devUrl + "/api/pda/job/count/create-with-condition/", { //
+ data: params,
+ method: "post"
+ });
+
+//退货任务列表
+export const getReturnJobList = (params) => request(
+ devUrl + "/api/pda/job/purchase-return/list", {
+ method: 'get',
+ data: params
+ });
+
+//根据number 获取盘点任务列表
+export const getReturnJobByNumber = (number) => request(
+ devUrl + "/api/pda/job/purchase-return/by-number/" + number, {
+ data: {},
+ method: "get"
+ });
+
+//退货任务数量
+export const getReturnJobCount = (params) => request(
+ devUrl + "/api/pda/job/purchase-return/count", {
+ data: params,
+ method: "get"
+ });
+
+//退货任务详情
+export const getReturnJobDetail = (id) => request(
+ devUrl + "/api/pda/job/purchase-return/" + id, { //
+ data: {},
+ method: "get"
+ });
+
+//承接退货任务
+export const takePurchaseReturnJob = (id) => request(
+ devUrl + "/api/pda/job/purchase-return/take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//取消承接退货任务
+export const cancelTakePutchaseReturnJob = (id) => request(
+ devUrl + "/api/pda/job/purchase-return/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//完成退货任务
+export const finishReturnJob = (id, returnReason) => request(
+ devUrl + "/api/pda/job/purchase-return/finish/" + id + "?returnReason=" + returnReason, { //
+ data: {},
+ method: "post"
+ });
+
+//完工收货任务
+export const getProductReceiptList = (params) => request(
+ devUrl + "/api/pda/job/product-receipt/list", {
+ method: 'get',
+ data: params
+ });
+
+//完工收货任务详情
+export const getProductReceiptDetail = (params) => request(
+ //api/pda/job/inspect/{id}
+ devUrl + "/api/pda/job/product-receipt/" + params.id, { //
+ data: {},
+ method: "get"
+ });
+
+//承接完工收货任务
+export const takeProductReceiptJob = (params) => request(
+ devUrl + "/api/pda/job/product-receipt/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+//取消承接完工收货任务
+export const cancelTakeProductReceiptJob = (id) => request(
+ devUrl + "/api/pda/job/product-receipt/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//开始完工收货任务
+export const finshProductReceiptJob = (id, params) => request(
+ devUrl + "/api/pda/job/product-receipt/finish/" + id, { //
+ data: params,
+ method: "post"
+ });
+
+//无任务的完工收货
+export const finshProductReceiptNoJob = (id, params) => request(
+ devUrl + "/api/pda/store/product-receipt", { //
+ data: params,
+ method: "post"
+ });
+
+//获取箱标签
+export const getContainerCode = (qty) => request(
+ devUrl + "/api/pda/stock/pack/add-pallet-code-number?qty=" + qty, { //
+ data: {},
+ method: "post"
+ });
+
+//获取生产线
+export const getProductionLine = (params) => request(
+ devUrl + "/api/pda/production-line/list", { //
+ data: params,
+ method: "get"
+ });
+
+//获取班次
+export const getShift = (params) => request(
+ devUrl + "/api/pda/shift/list", { //
+ data: params,
+ method: "get"
+ });
+
+//获取客户地址
+export const getCustomerAddressByCode = (code) => request(
+ devUrl + "/api/pda/customer-address/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//获取客户地址
+export const getCustomerAddressByCodeAsync = (code) => promise(
+ devUrl + "/api/pda/customer-address/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//按客户代码获取客户地址
+export const getCustomerAddressBycustomerCode = (customerCode) => request(
+ devUrl + "/api/pda/customer-address/by-customer?customerCode=" + customerCode, { //
+ data: {},
+ method: "get"
+ });
+
+//按客户代码获取客户地址
+export const getCustomerAddressBycustomerCodeAsync = (customerCode) => promise(
+ devUrl + "/api/pda/customer-address/by-customer?customerCode=" + customerCode, { //
+ data: {},
+ method: "get"
+ });
+
+export const getItemAsync = (code) => promise(
+ devUrl + '/api/pda/item/' + code, { //
+ data: {},
+ method: "get"
+ });
+
+
+//直接发货
+export const finshDeliver = (params) => request(
+ devUrl + "/api/pda/store/deliver", { //
+ data: params,
+ method: "post"
+ });
+
+//原料直发
+export const rawDeliver = (params) => request(
+ devUrl + "/api/pda/store/deliver", { //
+ data: params,
+ method: "post"
+ });
+
+
+//调拨发货
+export const warehouseTransfer = (params) => request(
+ devUrl + "/api/pda/store/warehouse-transfer", { //
+ data: params,
+ method: "post"
+ });
+
+//发货任务列表
+export const getJisDeliverList = (params) => request(
+ devUrl + "/api/pda/job/jis-deliver/list", {
+ method: 'get',
+ data: params
+ });
+//发货任务数量
+export const getJisDeliverCount = (params) => request(
+ devUrl + "/api/pda/job/jis-deliver/count", {
+ data: params,
+ method: "get"
+ });
+
+// //发货任务详情
+// export const getJisDeliverDetail = (params) => request(
+// "/prod/api/pda/job/jis-deliver" , { //
+// data: params,
+// method: "get"
+// });
+
+//发货任务详情
+export const getJisDeliverDetail = (params) => request(
+ devUrl + "/api/pda/job/jis-deliver", { //
+ data: {},
+ method: "get"
+ });
+
+//承接发货任务
+export const takeJisDeliverJob = (params) => request(
+ devUrl + "/api/pda/job/jis-deliver/take/" + params.id, { //
+ data: {},
+ method: "post"
+ });
+//取消承接发货任务
+export const cancelTakeJisDeliverJob = (id) => request(
+ devUrl + "/api/pda/job/jis-deliver/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+//开始发货任务
+///api/pda/job/jis-deliver/finish/{id}
+export const finshJisDeliverJob = (id, params) => request(
+ devUrl + "/api/pda/job/jis-deliver/finish/" + id, { //
+ data: params,
+ method: "post"
+ })
+
+//查询器具是否存在
+export const getContainer = (code) => request(
+ devUrl + "/api/pda/inventory/container/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//查询器具是否存在
+export const getContainerAsync = (code) => promise(
+ devUrl + "/api/pda/inventory/container/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//查询器具是否按序
+export const checkContainerOrder = (code) => request(
+ devUrl + "/api/pda/inventory/container/check-by-code/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//查询器具是否按序
+export const checkContainerOrderAsync = (code) => promise(
+ devUrl + "/api/pda/inventory/container/check-by-code/" + code, { //
+ data: {},
+ method: "get"
+ });
+
+
+export const PrintServices = (data) => {
+ return uni.request({
+ url: printUrl + '/api/print/PrintServices',
+ method: 'post',
+ header: {
+ 'content-type': 'application/x-www-form-urlencoded'
+ },
+ data
+ }).then(res => {
+ if (res != null && res[1] != null) {
+ if (res[1].statusCode != null) {
+ //状态码类型 2开头的全是成功
+ let code = res[1].statusCode.toString().substring(0, 1);
+ if (code === '2') {
+
+ return res[1].data;
+ } else {
+ let message = res[1].data.error.message;
+ if (message != null) {
+ throw res[1].data.error.message;
+ } else {
+ throw res[1].statusCode + "错误";
+ }
+
+ }
+ } else {
+ throw url + "返回的状态码类型为空"
+ }
+ } else {
+ throw url + "返回的res为空"
+ }
+ })
+}
+// 获取版本号
+export const isNewVersion = () => {
+ return uni.request({
+ url: devUrl + `/static/version.json?t=${new Date().getTime()}`,
+ method: 'post'
+ }).then(res => {
+ console.log(res)
+ })
+}
+
+// 东阳新接口
+//报废
+export const scrap = (params) => request(
+ devUrl + "/api/pda/store/scrap", { //
+ data: params,
+ method: "post"
+ });
+
+//上架前退货
+export const returnBeforePutaway = (params) => request(
+ devUrl + "/api/pda/store/purchase-return-note/before-puton", { //
+ data: params,
+ method: "post"
+ });
+
+//获取采购标签信息
+// export const getPurchaseLabel = (code) => request(
+// devUrl + "/api/pda/label/purchaselabel/by-code?code=" + code, { //
+// data: {},
+// method: "get"
+// });
+
+
+// //获取采购标签信息
+// export const getPurchaseLabelAsync = (code) => promise(
+// devUrl + "/api/pda/label/purchaselabel/by-code?code=" + code, { //
+// data: {},
+// method: "get"
+// });
+
+// //获取产品标签信息
+// export const getProductionLabel = (code) => request(
+// devUrl + "/api/pda/label/productionlabel/by-code?code=" + code, { //
+// data: {},
+// method: "get"
+// });
+
+// //获取产品标签信息
+// export const getProductionLabelAsync = (code) => promise(
+// devUrl + "/api/pda/label/productionlabel/by-code?code=" + code, { //
+// data: {},
+// method: "get"
+// });
+
+
+//获取产品标签信息inventorylabel
+export const getInventoryLabel = (code) => request(
+ devUrl + "/api/pda/label/inventorylabel/by-code?code=" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//获取产品标签信息
+export const getInventoryLabelAsync = (code) => promise(
+ devUrl + "/api/pda/label/inventorylabel/by-code?code=" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//回收料收货
+export const recycledMaterialReceipt = (param) => request(
+ devUrl + "/api/pda/store/recycled-material-receipt-note", { //
+ data: param,
+ method: "post"
+ });
+
+//生产退库列表
+export const getProductionReturnJobList = (params) => request(
+ devUrl + "/api/pda/job/production-return/list", {
+ method: 'get',
+ data: params
+ });
+
+//生产退库数量
+export const getProductionReturnJobCount = (params) => request(
+ devUrl + "/api/pda/job/production-return/count", {
+ data: params,
+ method: "get"
+ });
+
+//生产退库详情
+export const getProductionReturnJobDetail = (id) => request(
+ devUrl + "/api/pda/job/production-return/" + id, { //
+ data: {},
+ method: "get"
+ });
+
+//承接生产退库
+export const takeProductionReturnJob = (id) => request(
+ devUrl + "/api/pda/job/production-return/take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//取消承接生产退库
+export const cancelTakeProductionReturnJob = (id) => request(
+ devUrl + "/api/pda/job/production-return/cancel-take/" + id, { //
+ data: {},
+ method: "post"
+ });
+
+//完成生产退库
+export const finishProductionReturnJob = (id, params) => request(
+ devUrl + "/api/pda/job/production-return/finish/" + id, { //
+ data: params,
+ method: "post"
+ });
+
+//直接退库
+export const returnToWarehouse = (params) => request(
+ devUrl + "/api/pda/store/return-to-warehouse", { //
+ data: params,
+ method: "post"
+ });
+
+//采购上架
+export const purchasePutaway = (params) => request(
+ devUrl + "/api/pda/note/put-away/by-purchase", { //
+ data: params,
+ method: "post"
+ });
+
+//半成品上架
+export const semiPutaway = (params) => request(
+ devUrl + "/api/pda/note/put-away/by-semi", { //
+ data: params,
+ method: "post"
+ });
+
+//
+export const getPurchaseDetailAsync = (itemCode, packingCode) => promise(
+ devUrl + "/api/pda/store/purchase-receipt/detail-by-item-and-packing?itemCode=" + itemCode + '&packingCode=' +
+ packingCode, { //
+ data: {},
+ method: "get"
+ });
+
+export const getFileByCode = (fileCode) => request(
+ devUrl + "/api/pda/file/filestore/by-code/" + fileCode, { //
+ data: {},
+ method: "post"
+ });
+
+// 根据 code 获取配置字典
+export const getDictByCode = (code) => request(
+ devUrl + "/api/pda/dict/by-code?code=" + code, { //
+ data: {},
+ method: "get"
+ });
+
+//直接发料
+export const issueDirect = (params) => request(
+ devUrl + "/api/pda/store/issue", { //
+ data: params,
+ method: "post"
+ });
diff --git a/api/login.js b/api/login.js
deleted file mode 100644
index b79fd078..00000000
--- a/api/login.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import request from '@/utils/request'
-
-// 登录方法
-export function login(username, password, captchaVerification) {
- const data = {
- username,
- password,
- captchaVerification
- }
- return request({
- url: '/system/auth/login',
- headers: {
- isToken: false
- },
- 'method': 'POST',
- 'data': data
- })
-}
-
-// 获取用户详细信息
-export function getInfo() {
- return request({
- url: '/system/auth/get-permission-info',
- 'method': 'GET'
- })
-}
-
-// 退出方法
-export function logout() {
- return request({
- url: '/system/auth/logout',
- 'method': 'POST'
- })
-}
diff --git a/api/request.js b/api/request.js
new file mode 100644
index 00000000..5a6d9e33
--- /dev/null
+++ b/api/request.js
@@ -0,0 +1,957 @@
+import request from '@/api/httpRequest.js'
+
+// let devUrl = "http://dev.ccwin-in.com:59096"
+let devUrl = getApp().globalData.dev_url;
+devUrl = "http://dev.ccwin-in.com:23132"
+
+
+export function test(params) {
+ return request({
+ url: "http://www.baidu.com",
+ method: "get",
+ data: params,
+ });
+}
+
+export function login(params) {
+ return request({
+ url: devUrl + "/system/login",
+ method: "post",
+ data: params,
+ });
+}
+
+export function logOut() {
+ return request({
+ url: devUrl + "/system/logout",
+ method: "post",
+ data: {},
+ });
+}
+
+export function authorize() {
+ return request({
+ url: devUrl + "/system/authorize/permissions",
+ method: "get",
+ data: {},
+ });
+}
+
+export function getUserInfo() {
+ return request({
+ url: devUrl + "/organization/user/current/info",
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+/**
+ *
+ * @param {*获取业务类型}
+ * locationCode 获取配置字典
+ */
+export function getBusinesstypeList(params) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getBusinesstypeList",
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ *
+ * @param {*}
+ * Number 按托码查询库存
+ */
+export function getBalanceByContainer(Number) {
+ return request({
+ url: devUrl + "/magic-api/pda/query/getBalanceByContainer?Number=" + Number,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*}
+ * Number 按托码查询托码明细
+ */
+export function getContainerDetailByNumber(Number) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/query/getContainerDetailByNumber?Number=" + Number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+/**
+ *
+ * @param {*器具代码}
+ * ContainerNumber 按器具查询库存明细
+ */
+export function getBalanceByContainerNumberGroup(ContainerNumber) {
+ return request({
+ url: devUrl + "/magic-api/pda/query/getBalanceByContainerNumberGroup?ContainerNumber=" +
+ ContainerNumber,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*} itemcode
+ * 按数量管理查询库存
+ */
+export function getBalanceByItemCode(itemcode) {
+ return request({
+ url: devUrl + "/magic-api/pda/query/getBalanceByItemCode?itemcode=" + itemcode,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*} itemCode
+ * 按物品查询库存汇总
+ */
+export function getBalanceByCodeGroup(itemCode) {
+ return request({
+ url: devUrl + "/magic-api/pda/query/getBalanceByCodeGroup?itemCode=" + itemCode,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 按物品查询库存明细
+ * @param {*} itemCode
+ *
+ */
+export function getBalanceByCode(itemCode) {
+ return request({
+ url: devUrl + "/magic-api/pda/query/getBalanceByCode?itemCode=" + itemCode,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+/**
+ *
+ * @param {*} code 物品代码
+ * 查询管理精度按库位查询接口未完成
+ */
+export function getProductionlineByItemcode_copy_copy(code) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getProductionlineByItemcode_copy_copy?code=" + code,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*} code 物品代码
+ * 查询管理精度按物品查询接口未完成
+ */
+export function getProductionlineByItemcode_copy_copy_copy(code) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getProductionlineByItemcode_copy_copy_copy?code=" + code,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+/**
+ *
+ * @param {*} code 生产线代码
+ * 查询生产线信息接口
+ */
+export function getProductionlineByItemcode_copy(code) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getProductionlineByItemcode_copy?code=" + code,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*} number 器具代码
+ * 根据器具查询包装信息(无器具号)
+ */
+// export function getBalanceByContainer(number) {
+// return request({
+// url: devUrl + "/magic-api/pda/basic/getBalanceByContainer?number=" + number,
+// method: "get",
+// data: {},
+// });
+// }
+
+
+/**
+ *
+ * @param {*} number ASN编号
+ * 按ASN查询任务接口
+ */
+export function getPurchaseReturnByAsnNumber(asnNumber) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereturn/getJobByAsnNumber?asnNumber=" + asnNumber,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*}
+ * 承接任务
+ * jobStatusId:任务id
+ jobStatusTableName:任务主表表名
+ jobStatusTableNameDetail:任务子表表名
+ jobStatusSchemaCode:工作流模板编号
+ jobStatusStatusType:状态类型 1 取消承接 2 承接 3 执行
+ */
+export function takeJob(params) {
+
+ return request({
+ url: devUrl + "/magic-api/pda/job/public/jobStatusUpdate?jobStatusId="
+ +params.jobStatusId
+ +"&jobStatusTableName="+params.jobStatusTableName
+ +"&jobStatusTableNameDetail="+params.jobStatusTableNameDetail
+ +"&jobStatusSchemaCode="+params.jobStatusSchemaCode
+ +"&jobStatusStatusType="+2,
+ method: "post",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*}
+ * 取消承接任务
+ * jobStatusId:任务id
+ jobStatusTableName:任务主表表名
+ jobStatusTableNameDetail:任务子表表名
+ jobStatusSchemaCode:工作流模板编号
+ jobStatusStatusType:状态类型 1 取消承接 2 承接 3 执行
+ */
+export function cancelTakeJob(params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/public/jobStatusUpdate?jobStatusId="
+ +params.jobStatusId
+ +"&jobStatusTableName="+params.jobStatusTableName
+ +"&jobStatusTableNameDetail="+params.jobStatusTableNameDetail
+ +"&jobStatusSchemaCode="+params.jobStatusSchemaCode
+ +"&jobStatusStatusType="+1,
+ method: "post",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*} id 任务id
+ * 暂存任务
+ */
+export function jobStatusToTemporary(id) {
+ return request({
+ url: devUrl + `/magic-api/pda/job/purchasereceipt/jobStatusToTemporary${id}`,
+ method: "post",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*} id 任务id
+ * 获取任务明细暂存
+ * {masterID,page,size
+ }
+ */
+export function getJobDetailStaging(params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereceipt/getJobDetailStaging",
+ method: "get",
+ data: params,
+ });
+}
+
+
+
+/**采购收货
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getPurchaseReceiptJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereceipt/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*} number ASN编号
+ * 按ASN查询任务接口
+ */
+export function getPurchasereceiptByAsnNumber(asnNumber) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereceipt/getJobByAsnNumber?asnNumber=" + asnNumber,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+/**
+ *
+ * @param {*}
+ * 获取任务总数量
+ */
+export function purchasereceiptGetJobCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereceipt/getJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*}
+ * 获取新增任务数量
+ */
+export function purchasereceiptNewJobCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereceipt/getNewJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+/**
+ * 到货检验任务 提交
+ * @param {*} params
+ */
+export function submitInspectJob(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereturn/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ *
+ * @param {*} packingNumber
+ * 按唯一码管理查询库存
+ */
+export function getBalanceByUniquecode(packingNumber) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getBalanceByUniquecode?packingNumber=" + packingNumber,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+/**
+ *
+ * @param {*} requestTime Creatorld
+ * 发料任务筛选接口
+ */
+export function getIssueJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/issue/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+/**
+ *
+ * @param {*} 任务id
+ * 提交任务
+ */
+export function issueJobSubmit(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/issue/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+export function getPurchaseReturnJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/purchasereturn/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+/**
+ * 采购退货 申请列表
+ * @param {*}
+ * 任务状态
+ * CreationTimeStart 开始日期
+ * CreationTimeEnd 结束日期
+ * 获取日期任务列表
+ */
+export function getPurchaseReturnRequestList(params) {
+ return request({
+ url: devUrl + "/magic-api/pda/request/purchasereturn/getRequestList",
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+
+
+
+/**
+ * 原料上架
+ * @param {*}
+ * status 任务状态
+ * CreationTimeStart 开始日期
+ * CreationTimeEnd 结束日期
+ * 获取日期任务列表
+ */
+export function getPutawayJobList(params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/putaway/getJobList",
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ *
+ * @param {*} id 任务id
+ * 原料上架获取任务明细
+ */
+export function putawayGetJobDetail(id) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/putaway/getJobDetail?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**原料上架
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getPutawayJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/putaway/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+/**生产收料
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getProductionReceiptJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productionreceipt/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+
+/**生产退料
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getProductionreturnJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productionreturn/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+/**盘点
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getJobCountByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/count/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+/**
+ *
+ * @param {*} id 任务id
+ * 制品收货 承接任务
+ */
+export function takeProductReceiptJob(id) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/jobStatusToDoing?id=" + id,
+ method: "post",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*} id 任务id
+ * 制品收货 取消承接任务
+ */
+export function cancelTakeProductReceiptJob(id) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/jobStatusToOpen?id=" + id,
+ method: "post",
+ data: {},
+ });
+}
+
+
+/**制品收货
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getProductReceipJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*} 任务id
+ * 提交制品收货
+ */
+export function submitProductReceiptJob(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ *
+ * @param {*}
+ * 获取任务总数量
+ */
+export function getProductReceiptJobCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/getJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*}
+ * 获取新增任务数量
+ */
+export function getProductReceiptJobNewCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productreceipt/getNewJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**制品收货
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getProductPutawayJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productputaway/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*} 任务id
+ * 提交制品收货
+ */
+export function submitProductPutawayJob(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productputaway/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ *
+ * @param {*}
+ * 获取任务总数量
+ */
+export function getProductPutawayJobCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productputaway/getJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ *
+ * @param {*}
+ * 获取新增任务数量
+ */
+export function getProductPutawayJobNewCount() {
+ return request({
+ url: devUrl + "/magic-api/pda/job/productputaway/getNewJobCount",
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ *
+ * @param {*按编号查询生产线}
+ *
+ */
+export function getProductionlineByCode(param) {
+ return request({
+ url: devUrl + "/magic-api/pda/basic/getProductionlineByCode",
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+/**计划外入库
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getJobUnPlannedReceiptByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/unplannedreceipt/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**计划外出库
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getJobUnPlannedIssueByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/unPlannedIssue/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+
+
+/**库存转移
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getInventoryMoveJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/inventorymove/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+
+
+
+/**制品发货
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getDeliverJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/deliver/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+/**
+ * 制品发货提交
+ * @param {*} params
+ */
+export function deliverJobSubmit(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/deliver/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/**客户退货
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getCustomerReturnJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/customerreturn/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+/**
+ * 客户退货提交
+ * @param {*} params
+ */
+export function customerReturnSubmit(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/customerreturn/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+/**调拨入库
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getTransferReceiptJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/transferreceipt/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+/**
+ * 调拨入库提交
+ * @param {*} params
+ */
+export function transferReceiptSubmit(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/transferreceipt/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+
+
+
+
+
+
+/**调拨出库
+ *
+ * @param {*} number 任务编号
+ * 按任务编号查询任务
+ */
+export function getTransferIssueJobByNumber(number) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/transferissue/getJobByNumber?Number=" + number,
+ method: "get",
+ data: {},
+ });
+}
+/**
+ * 调拨出库提交
+ * @param {*} params
+ */
+export function transferIssueSubmit(id, params) {
+ return request({
+ url: devUrl + "/magic-api/pda/job/transferissue/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+
+
+
+
diff --git a/api/request2.js b/api/request2.js
new file mode 100644
index 00000000..115ebf07
--- /dev/null
+++ b/api/request2.js
@@ -0,0 +1,2133 @@
+import request from '@/api/httpRequest2.js'
+const baseApi = "/api/admin-api"
+//公司地址
+ // 本地地址
+// const baseApi = "/admin-api"
+/**
+ * 获取验证码
+ * @param {*}
+ */
+export function getCaptchaImage(params) {
+ return request({
+ url: baseApi + "/system/captcha/captchaImage",
+ method: "get",
+ data: params,
+ });
+}
+/**
+ * 登录方法
+ */
+export function login(username, password, code, uuid) {
+ return request({
+ url: baseApi + '/system/auth/login',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: {
+ username,
+ password,
+ code,
+ uuid
+ }
+ })
+}
+/**
+ * 退出
+ */
+export function logout() {
+ return request({
+ url: baseApi + "/system/auth/logout",
+ method: "post",
+ data: {},
+ });
+}
+/**
+ * 获取登录用户的权限信息
+ */
+export function getPermissionInfo() {
+ return request({
+ url: baseApi + "/system/auth/get-permission-info",
+ method: "get",
+ data: {},
+ });
+}
+/**
+ * 获取租户信息
+ */
+export function getTenantInfo(name) {
+ var params = {
+ name: name,
+ pageNo: 1,
+ pageSize: 100,
+ }
+
+ return request({
+ url: baseApi + "/system/tenant/page",
+ method: "get",
+ data:params,
+ });
+}
+
+
+
+/**
+ * 获取登录用户信息
+ */
+export function getUserProfile() {
+ return request({
+ url: baseApi + '/system/user/profile/get',
+ method: 'get'
+ })
+}
+/**
+ * 修改个人用户密码
+ */
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: baseApi + '/system/user/profile/update-password',
+ method: 'PUT',
+ params: data
+ })
+}
+
+/**
+ * 获取配置字典
+ * @param {*}
+ *
+ */
+export function getDictionaryItem(params) {
+ return request({
+ url: baseApi + "/system/dict-type/getDictByTypes",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 查询 客户信息
+ * @param {*} 物品代码
+ *
+ */
+export function getBasicCustomerList() {
+ return request({
+ url: baseApi + "/wms/customer/list",
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 根据业务代码查询业务类型
+ * @param {*} Code
+ *
+ */
+export function getBusinesstypeByCode(code) {
+ var params ={
+ code:code,
+ pageNo:1,
+ pageSize:100
+ }
+ return request({
+ url: baseApi + "/wms/businesstype/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按物料代码查询库存明细
+ * @param {*} itemCode
+ *
+ */
+
+export function getBalanceByItemCode(params) {
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按物品查询预计入
+ * @param {*} itemCode
+ *
+ */
+export function getExpectinByItemcode(params) {
+ return request({
+ url: baseApi + "/wms/expectin/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按物品查询预计出
+ * @param {*} itemCode
+ *
+ */
+export function getExpectoutByItemcode(params) {
+ return request({
+ url: baseApi + "/wms/expectout/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按库位查询库存汇总
+ * @param {*}
+ *
+ */
+export function getBalanceByLocationcodeGroup(params) {
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按库位查询库存明细
+ * @param {*}
+ */
+export function getBalanceByLocationcode(params) {
+
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 查询器具信息接口
+ * @param {*} number 器具代码
+ */
+export function getContainerByNumber(number) {
+ var params = {
+ number: number,
+ pageNo: 1,
+ pageSize: 100
+ }
+ return request({
+ url: baseApi + "/wms/container-main/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按器具查询库存明细
+ * @param {*器具代码}
+ *
+ */
+export function getBalanceByContainerNumberGroup(params) {
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按器具查询库存明细(无器具)
+ * @param {*器具代码}
+ *
+ */
+export function getBalanceByContainerNumber(params) {
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**标签
+ *
+ * @param {*} header version
+ * 获取标签设置信息
+ */
+export function getLabelByHeader(header, version) {
+ var params = {
+ header: header,
+ version:version,
+ }
+ return request({
+ url: baseApi + "/wms/labeltype/getDetailsByHeader",
+ method: "get",
+ data: params,
+ });
+}
+
+/**包装
+ * 获取包装信息
+ * @param {*}
+ *
+ */
+export function getPackageByNumber(number) {
+ var params = {
+ number: number,
+ pageNo: 1,
+ pageSize: 100
+ }
+ return request({
+ url: baseApi + "/wms/package/page",
+ method: "get",
+ data: params,
+ });
+}
+
+
+
+/**
+ * 查询库位信息接口
+ * @param {*} code 库位代码
+ *
+ */
+export function getBasicLocationByCode(code) {
+ var parmas ={
+ code:code,
+ pageNo:1,
+ pageSize:100
+ }
+ return request({
+ url: baseApi + "/wms/location/page",
+ method: "get",
+ data: parmas,
+ });
+}
+
+/**
+ * 查询物品信息接口
+ * @param {*} code 物品代码
+ *
+ */
+export function getBasicItemByCode(itemCode) {
+ var params = {
+ code: itemCode,
+ pageNo: 1,
+ pageSize: 100
+ }
+ return request({
+ url: baseApi + "/wms/itembasic/page" ,
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 按物品查询库存汇总
+ * @param {*} itemCode
+ *
+ */
+export function getBalanceByCodeGroup(params) {
+ return request({
+ url: baseApi + "/wms/balance/page",
+ method: "get",
+ data: params,
+ });
+}
+
+/**
+ * 查询包装信息接口
+ * @param {*} itemCode 物品代码
+ *
+ */
+export function getItempackagingByItemcode(itemCode) {
+ return request({
+ url: baseApi + "/wms/itempackaging/page?itemCode=" + itemCode,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 供应商发货
+ *
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getSupplierDeliverRecordList(params) {
+ return request({
+ url: baseApi + "/wms/supplierdeliver-record-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+/**
+ * 供应商发货 详情
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getSupplierDeliverRecordDetail(id) {
+ return request({
+ url: baseApi + "/wms/supplierdeliver-record-main/getSupplierdeliverRecordById?id="+id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 报检单查询 = request_inspect
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getInspectRequestList(params) {
+ return request({
+ url: baseApi + "/wms/inspect-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 检验单查询 详情
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getInspectRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/inspect-request-main/getInspectRequestById?id="+id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 采购收货 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getPurchaseReceiptJobList(params) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 采购收货 任务承接
+ * @param {*} id
+ *
+ */
+export function takePurchaseReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 采购收货 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakePurchaseReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 采购收货 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getPurchaseReceiptJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/getPurchasereceiptJobyId?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 采购收货 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function purchaseReceiptJobSubmit(params) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/execute",
+ method: "put",
+ data: params,
+ });
+}
+
+
+
+/**
+ * 采购退货
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * 获取任务明细
+ */
+export function getPurchaseReturnJobList(params) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 采购退货 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+
+export function getPurchasereturnJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-job-main/getReturnJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 采购退货 承接任务
+ * @param {*} id
+ *
+ */
+export function takePurchasereturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 采购退货 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakePurchasereturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 采购退货 任务提交
+ * @param {*} params
+ */
+export function purchaseReturnJobsubmit (params) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-job-main/execute",
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 创建采购退货记录
+ * @param {*} params
+ */
+export function createPurchaseReturnRecord(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereturn/createRecord",
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 采购退货 申请提交
+ * @param {*} params
+ */
+export function createPurchaseReturnRequest(params) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-request-main/submit",
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 到货检验 任务
+ *
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getInspectJobList(params) {
+ return request({
+ url: baseApi + "/wms/inspect-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 到货检验 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getInspectJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/inspect-job-main/getInspectJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 到货检验 任务承接
+ * @param {*} id
+ *
+ */
+export function takeInspectJob(id) {
+ return request({
+ url: baseApi + "/wms/inspect-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 到货检验 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeInspectJob(id) {
+ return request({
+ url: baseApi + "/wms/inspect-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 到货检验 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function inspectJobSubmit(params) {
+ return request({
+ url: baseApi + "/wms/inspect-job-main/execute",
+ method: "put",
+ data: params,
+ });
+}
+
+
+/**
+ * 原料上架 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getPutawayJobList(params) {
+ return request({
+ url: baseApi + "/wms/putaway-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 原料上架 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getPutawayJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/putaway-job-main/getPutawayJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 原料上架 提交
+ * @param {*} params
+ */
+export function putawayJobSubmit(params) {
+ return request({
+ url: baseApi + "/wms/putaway-job-main/execute",
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 原料上架 承接任务
+ * @param {*} id
+ *
+ */
+export function takePutawayJob(id) {
+ return request({
+ url: baseApi + "/wms/putaway-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 原料上架 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakePutawayJob(id) {
+ return request({
+ url: baseApi + "/wms/putaway-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 发料任务 列表
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getIssueJobList(params) {
+ return request({
+ url: baseApi + "/wms/issue-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 发料任务明细
+ * @param {*} 任务id
+ *
+ */
+export function getIssueJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/issue-job-main/getIssueJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 发料 任务承接
+ * @param {*} id
+ *
+ */
+export function takeIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 发料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 生产收料 任务列表
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductionReceiptJobList(params) {
+ return request({
+ url: baseApi + "/wms/productionreceipt-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 生产收料 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductionReceiptJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/productionreceipt-job-main/getProductionreceiptJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 生产收料 任务承接
+ * @param {*} id
+ *
+ */
+export function takeProductionReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 生产收料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeProductionReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+
+/**
+ * 生产收料 提交
+ * @param {*} params
+ */
+export function productionReceiptJobSubmit(id, params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/putaway/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+/**
+ * 库存转移 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getInventoryMoveJobList(params) {
+ return request({
+ url: baseApi + "/wms/inventorymove-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 库存转移 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+
+export function getInventoryMoveJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/inventorymove-job-main/getInventorymoveJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 生产收料 任务承接
+ * @param {*} id
+ *
+ */
+export function takeInventoryMoveJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 生产收料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeInventoryMoveJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+
+/**
+ * 库存转移 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function inventoryMoveSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 盘点 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getCountJobList(params) {
+ return request({
+ url: baseApi + "/wms/count-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 盘点 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getCountJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/count-job-main/getCountJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 盘点 任务承接
+ * @param {*} id
+ *
+ */
+export function takeCountJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 盘点 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeCountJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 盘点 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function countJobSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 计划外入库 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取任务列表
+ * @param {*}
+ */
+export function getUnPlannedReceiptJobList(params) {
+ return request({
+ url: baseApi + "/wms/unplannedreceipt-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 计划外入库 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getUnPlannedReceiptJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/unplannedreceipt-job-main/getUnplannedreceiptJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 计划外入库 任务承接
+ * @param {*} id
+ *
+ */
+export function takeUnPlannedReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 计划外入库 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeUnPlannedReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 计划外入库 提交
+ * @param {*} params
+ */
+export function unPlannedReceiptJobSubmit(id, params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereturn/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 计划外出库 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取任务列表
+ * @param {*}
+ */
+export function getUnPlannedIssueJobList(params) {
+ return request({
+ url: baseApi + "/wms/unplannedissue-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 计划外出库 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getUnPlannedIssueJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/unplannedissue-job-main/getUnplannedissueJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 计划外出库 承接
+ * @param {*} id
+ *
+ */
+export function takeUnPlannedIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 计划外出库 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeUnPlannedIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 计划外出库 提交
+ * @param {*} params
+ */
+export function unPlannedIssueJobSubmit(id, params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereturn/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品收货 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductReceiptJobList(params) {
+ return request({
+ url: baseApi + "/wms/productreceipt-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品收货 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductReceiptJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/productreceipt-job-main/getProductreceiptJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 制品上架 承接
+ * @param {*} id
+ *
+ */
+export function takeProductReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品上架 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeProductReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品收货 提交
+ * @param {*} params
+ */
+export function productReceiptJobsubmit(id, params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereturn/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 制品上架 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductPutawayJobList(params) {
+ return request({
+ url: baseApi + "/wms/productputaway-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品上架 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductPutawayJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/productputaway-job-main/getProductputawayJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 制品上架 承接
+ * @param {*} id
+ *
+ */
+export function takeProductPutawayJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品上架 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeProductPutawayJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 制品上架 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function productPutawayJobSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+
+/**
+ * 制品拆解 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductDismantleJobList(params) {
+ return request({
+ url: baseApi + "/wms/productdismantle-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品拆解 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductDismantleJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/productdismantle-job-main/getProductdismantleJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 制品拆解 任务承接
+ * @param {*} id
+ *
+ */
+export function takeProductDismantleJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品拆解 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeProductDismantleJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品拆解 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function productDismantleJobSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 制品发货 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getDeliverJobList(params) {
+ return request({
+ url: baseApi + "/wms/deliver-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品发货 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getDeliverDetail(id) {
+ return request({
+ url: baseApi + "/wms/deliver-job-main/getDeliverJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 制品发货 任务承接
+ * @param {*} id
+ *
+ */
+export function takeDeliverJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 制品发货 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeDeliverJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+
+/**
+ * 制品发货 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function deliverJobSubmit( params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 客户退货 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getCustomerReturnJobList(params) {
+ return request({
+ url: baseApi + "/wms/customerreturn-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 客户退货 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getCustomerReturnJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/customerreturn-job-main/getCustomerreturnJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 客户退货 任务承接
+ * @param {*} id
+ *
+ */
+export function takeCustomerReturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 客户退货 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeCustomerReturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 客户退货 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function customerReturnJobSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 客户退货申请
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getCustomerReturnRequestList(params) {
+ return request({
+ url: baseApi + "/wms/customerreturn-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ * 客户退货申请 任务明细
+ * @param {*} id 任务id
+ *
+ */
+
+export function getCustomerReturnRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/customerreturn-request-main/getCustomerreturnRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 调拨入库 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getTransferReceiptJobList(params) {
+ return request({
+ url: baseApi + "/wms/transferreceipt-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 调拨入库 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getTransferReceiptJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/transferreceipt-job-main/getTransferreceiptJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 调拨入库 承接
+ * @param {*} id
+ *
+ */
+export function takeTransferReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 调拨入库 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeTransferReceiptJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+
+/**
+ * 调拨入库 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function transferReceiptJobSubmit(params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 调拨出库 任务列表
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getTransferIssueJobList(params) {
+ return request({
+ url: baseApi + "/wms/transferissue-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 调拨出库 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getTransferIssueJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/transferissue-job-main/getTransferissueJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 生产退料 承接
+ * @param {*} id
+ *
+ */
+export function takeTransferIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 生产退料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeTransferIssueJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 调拨出库 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function transferIssueJobSubmit( params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ * 制品上架申请
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductPutawayRequestList(params) {
+ return request({
+ url: baseApi + "/wms/productputaway-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品上架申请 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductPutawayRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/productputaway-request-main/getProductputawayRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 发料申请列表
+ * @param {*} params
+ */
+export function getIssueRequestList(params) {
+ return request({
+ url: baseApi + "/wms/issue-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 发料申请明细
+ * @param {*} id
+ */
+export function getIssueRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/issue-request-main/getIssueRequestById?id="+id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 采购退货 申请列表
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getPurchaseReturnRequestList(params) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 采购退货 获取申请任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getPurchaseReturnRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/purchasereturn-request-main/getPurchasereturnRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 原料上架申请 获取任务列表
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getPutawayRequestList(params) {
+ return request({
+ url: baseApi + "/wms/putaway-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 原料上架申请 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getPutawayRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/putaway-request-main/getPutawayRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 生产退料 任务获取任务列表
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductionreturnJobList(params) {
+ return request({
+ url: baseApi + "/wms/productionreturn-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 生产退料任务 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getProductionReturnJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/productionreturn-job-main/getProductionreturnJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 生产退料 承接
+ * @param {*} id
+ *
+ */
+export function takeProductionReturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 生产退料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeProductionReturnJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 生产退料申请 获取任务列表
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getProductionReturnRequestList(params) {
+ return request({
+ url: baseApi + "/wms/productionreturn-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ * 生产退料 获取任务明细
+ * @param {*} number id 任务id
+ *
+ */
+export function getProductionReturnRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/productionreturn-request-main/getProductionreturnRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+/**
+ * 生产退料 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function productionReturnJobSubmit( params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+
+
+
+/**
+ * 计划外出库申请
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取任务列表
+ * @param {*}
+ */
+export function getUnPlannedIssueRequestList(params) {
+ return request({
+ url: baseApi + "/wms/unplannedissue-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 计划外出库申请 获取明细
+ * @param {*} id 任务id
+ *
+ */
+export function getUnPlannedIssueRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/unplannedissue-request-main/getUnplannedissueRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+
+
+/**
+ * 计划外入库 申请
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取任务列表
+ * @param {*}
+ */
+export function getUnPlannedReceiptRequestList(params) {
+ return request({
+ url: baseApi + "/wms/unplannedreceipt-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 计划外入库申请 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+export function getUnPlannedReceiptRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/unplannedreceipt-request-main/getUnplannedreceiptRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 报废出库 申请
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取任务列表
+ * @param {*}
+ */
+export function getScrapRequestList(params) {
+ return request({
+ url: baseApi + "/wms/scrap-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 报废出库申请 获取申请明细
+ * @param {*} id 任务id
+ *
+ */
+export function getScrapRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/scrap-request-main/getScrapRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 制品发货申请
+ * 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getDeliverRequestList(params) {
+ return request({
+ url: baseApi + "/wms/deliver-request-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 制品发货申请 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+
+export function getDeliverRequestDetail(id) {
+ return request({
+ url: baseApi + "/wms/deliver-request-main/getDeliverRequestById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 报废出库 任务
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getScrapJobList(params) {
+ return request({
+ url: baseApi + "/wms/scrap-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/** 报废出库 获取任务明细
+ * @param {*} id 任务id
+ */
+export function getScrapJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/scrap-job-main/getScrapJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 报废出库 任务承接
+ * @param {*} id
+ *
+ */
+export function takeScrapJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 报废出库 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeScrapJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 报废出库 任务提交
+ * @param {*} 任务id
+ *
+ */
+export function scrapJobSubmit( params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/purchasereceipt/jobSubmit?id=" + id,
+ method: "put",
+ data: params,
+ });
+}
+
+/**
+ * 补料任务 列表
+ *
+ * status 任务状态
+ * 开始日期
+ * 结束日期
+ * 获取日期任务列表
+ * @param {*}
+ */
+export function getRepleinshJobList(params) {
+ return request({
+ url: baseApi + "/wms/repleinsh-job-main/senior",
+ method: "post",
+ data: params,
+ });
+}
+
+/**
+ * 补料任务 获取任务明细
+ * @param {*} id 任务id
+ *
+ */
+
+export function getRepleinshJobDetail(id) {
+ return request({
+ url: baseApi + "/wms/repleinsh-job-main/getRepleinshJobById?id=" + id,
+ method: "get",
+ data: {},
+ });
+}
+
+/**
+ * 补料 任务承接
+ * @param {*} id
+ *
+ */
+export function takeRepleinshJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 补料 放弃承接
+ * @param {*} id
+ *
+ */
+export function cancleTakeRepleinshJob(id) {
+ return request({
+ url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id,
+ method: "put",
+ data: {},
+ });
+}
+
+/**
+ * 补料 提交
+ * @param {*} params
+ */
+export function repleinshJobSubmit(id, params) {
+ return request({
+ url: baseApi + "/magic-api/pda/job/putaway/jobSubmit?id=" + id,
+ method: "post",
+ data: params,
+ });
+}
+
+
+
+/**
+ * "itemCodes": [],
+ "locationCode":"INSPECT"
+ 管理精度策略
+ * @param {*}
+ *
+ */
+export function getManagementPrecision(params) {
+ return request({
+ url: baseApi + "/wms/rule/getPrecisionStrategyByItemCodes",
+ method: "post",
+ data: params,
+ });
+}
+
+
+/**
+ * 查询库存通过多种条件 高级筛选
+ * @param {*}
+ *
+ */
+export function getBalanceByFilter(param) {
+ return request({
+ url: baseApi + "/wms/balance/senior",
+ method: "post",
+ data: param,
+ });
+}
+
+
+
+
+
+
+
diff --git a/api/system/user.js b/api/system/user.js
deleted file mode 100644
index 59e9304c..00000000
--- a/api/system/user.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import upload from '@/utils/upload'
-import request from '@/utils/request'
-
-// 用户密码重置
-export function updateUserPwd(oldPassword, newPassword) {
- const data = {
- oldPassword,
- newPassword
- }
- return request({
- url: '/system/user/profile/update-password',
- method: 'PUT',
- params: data
- })
-}
-
-// 查询用户个人信息
-export function getUserProfile() {
- return request({
- url: '/system/user/profile/get',
- method: 'GET'
- })
-}
-
-// 修改用户个人信息
-export function updateUserProfile(data) {
- return request({
- url: '/system/user/profile/update',
- method: 'PUT',
- data: data
- })
-}
-
-// 用户头像上传
-export function uploadAvatar(data) {
- return upload({
- url: '/system/user/profile/update-avatar',
- method: 'PUT',
- name: data.name,
- filePath: data.filePath
- })
-}
diff --git a/api/test.js b/api/test.js
new file mode 100644
index 00000000..ad2eae61
--- /dev/null
+++ b/api/test.js
@@ -0,0 +1,22 @@
+// import request from '@/common/request.js'
+// import promise from '@/common/promise.js'
+import request from '@/common/request_test.js'
+// let devUrl = this.$dev_url;
+
+let devUrl = "http://dev.ccwin-in.com:59096"
+export function getlogin(params) {
+ return request({
+ url: devUrl + "/api/pda/account/login",
+ method: "post",
+ data: params,
+ });
+}
+
+//修改用户密码
+export function changePassword(params) { //
+ return request({
+ url:devUrl + "/api/pda/account/change-password",//
+ data: params,
+ method: "post"
+ })
+}
diff --git a/api/test_2.js b/api/test_2.js
new file mode 100644
index 00000000..8b712bf9
--- /dev/null
+++ b/api/test_2.js
@@ -0,0 +1,22 @@
+// // import request from '@/common/request.js'
+// // import promise from '@/common/promise.js'
+// import request from '@/common/request_test.js'
+// // let devUrl = this.$dev_url;
+
+// let devUrl = "http://dev.ccwin-in.com:59096"
+// export function getlogin(params) {
+// return request({
+// url: devUrl + "/api/pda/account/login",
+// method: "post",
+// data: params,
+// });
+// }
+
+// //修改用户密码
+// export function changePassword(params) { //
+// return request({
+// url:devUrl + "/api/pda/account/change-password",//
+// data: params,
+// method: "post"
+// })
+// }
diff --git a/changelog.md b/changelog.md
new file mode 100644
index 00000000..4f33931d
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,171 @@
+## 3.4.4(2022-07-25)
+- 新增 同步 uni-ui@1.4.20
+ - uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题
+ - uni-section 新增组件
+## 3.4.3(2022-07-14)
+- 修复 HBuilderX 拉取 hello uni-app 项目直接运行提示无服务空间关联的bug
+## 3.4.2(2022-07-06)
+- 新增 同步 uni-ui@1.4.18
+ - uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题
+ - uni-forms 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力
+ - uni-forms 新增 更多表单示例
+ - uni-forms 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃
+ - uni-forms 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效
+ - uni-forms 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法
+ - uni-forms 新增 子表单的 setRules 方法,配合自定义校验函数使用
+ - uni-forms 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则
+ - uni-forms 修复 由 1.4.0 引发的 label 插槽不生效的bug
+ - uni-forms 修复 子组件找不到 setValue 报错的bug
+ - uni-forms 修复 uni-data-picker 在 uni-forms-item 中报错的bug
+ - uni-forms 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug
+ - uni-forms 修复 表单校验顺序无序问题
+ - uni-forms 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式
+ - uni-forms 优化 动态表单校验方式,废弃拼接name的方式
+ - uni-breadcrumb 修复 微信小程序 separator 不显示问题
+ - uni-data-checkbox 优化 在 uni-forms 中的依赖注入方式
+ - uni-data-picker 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug
+ - uni-data-picker 优化 显示样式
+ - uni-data-select 优化 显示样式
+ - uni-datetime-picker 修复 日历顶部年月及底部确认未国际化 bug
+ - uni-datetime-picker 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致
+ - uni-easyinput 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容
+ - uni-easyinput 新增 clear 事件,点击右侧叉号图标触发
+ - uni-easyinput 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发
+ - uni-easyinput 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等
+ - uni-easyinput 优化 clearable 显示策略
+ - uni-file-picker 修复 在uni-forms下样式不生效的bug
+ - uni-nav-bar 修复 组件示例中插槽用法无法显示内容的bug
+ - uni-swipe-action 修复 vue3 下使用组件不能正常运行的Bug
+ - uni-swipe-action 修复 h5端点击click触发两次的Bug
+ - uni-table 修复 微信小程序存在无使用组件的问题
+## 3.4.1(2022-06-30)
+- 新增 支持 ios 安全区
+## 3.3.8(2022-05-08)
+- 新增 同步 uni-ui@1.4.15
+ - uni-data-picker 修复 字节小程序 本地数据无法选择下一级的Bug
+ - uni-data-select 新增 记住上次的选项(仅 collection 存在时有效)
+ - uni-search-bar 修复 vue3 input 事件不生效的bug
+ - uni-search-bar 修复 多余代码导致的bug
+ - uni-tooltip 更新 text 属性变更为 content
+ - uni-tooltip 更新 移除 width 属性
+ - uni-tooltip 修复 组件根 text 嵌套组件 warning
+## 3.3.7(2022-04-06)
+- 新增 更新扩展组件 uni-nav-bar、uni-list 的展示页面
+## 3.3.6(2022-03-31)
+- 更新 uni-ui 组件及示例
+## 3.3.5(2022-03-30)
+- 修复 插槽兼容 vue3, slot -> v-slot
+- 新增 更新 uni-ui
+## 3.3.4(2022-02-25)
+- 修复 编译到 App 平台的控制台报错
+## 3.3.3(2022-02-23)
+- 修复 模板城市选择 vue3 报错的bug
+- 修复 删除 map.nvue 中多余的 enableOverlooking 变量
+- 修复 swipe-dot.nvue 中条件编译媒体查询
+## 3.3.2(2022-01-26)
+- 修复 默认运行到 vue2
+## 3.3.1(2022-01-26)
+- 新增 同步 uni-ui@1.4.11
+ - uni-collapse 修复 微信小程序resize后组件收起的bug
+ - uni-countdown 修复 在微信小程序中样式不生效的bug
+ - uni-countdown 新增 update 方法 ,在动态更新时间后,刷新组件
+ - uni-load-more 新增 showText属性 ,是否显示文本
+ - uni-load-more 修复 nvue 平台下不显示文本的bug
+ - uni-load-more 修复 微信小程序平台样式选择器报警告的问题
+ - uni-nav-bar 修复 在vue下,标题不垂直居中的bug
+ - uni-nav-bar 修复 height 属性类型错误
+ - uni-nav-bar 新增 height 属性,可修改组件高度
+ - uni-nav-bar 新增 dark 属性可可开启暗黑模式
+ - uni-nav-bar 优化 标题字数过多显示省略号
+ - uni-nav-bar 优化 插槽,插入内容可完全覆盖
+ - uni-popup 修复 isMaskClick 失效的bug
+ - uni-popup 新增 cancelText \ confirmText 属性 ,可自定义文本
+ - uni-popup 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
+ - uni-popup 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
+## 3.3.0(2022-01-04)
+- 修复 开发时在 vue3 下由 pc 端切换到手机端,不能返回上一级页面的 bug
+- 优化 去掉 pc 端 topwindow 右上角用于演示的 url 导航
+## 3.2.12(2021-12-20)
+- 新增 适配京东小程序
+## 3.2.11(2021-12-07)
+- 修复 uni-ui 在 hello-uniapp 中丢失图标、ui 受到公共样式影响等问题
+- 修复 微信登录取值报错的问题
+## 3.2.10(2021-11-30)
+- 修复 map 组件示例不显示的 bug
+## 3.2.9(2021-11-19)
+- 新增 uni-ui 以 uni_modules 方式引入,方便开发者从 hello-uniapp 中 copy 组件及示例
+- 优化 uni-ui 示例页面,完善组件示例
+## 3.2.8(2021-11-10)
+- 新增 适配飞书平台(lark)
+## 3.2.7(2021-10-26)
+- 修复 uni-popup 示例的 button 文字在 iPhone 5 上换行的 bug
+- 修复 uni-table 示例,页面顶部距离不对的 bug
+- 修复 GlobalData示例,在vue3是无效的 bug
+- 优化 删除无用的 project.swan.json 文件
+## 3.2.6(2021-10-08)
+- 由于体验问题,暂时撤销 uni-ui 以 uni_modules 方式引入的修改
+
+## 3.2.4(2021-09-07)
+- 修复 vue3 在 H5 编译报错的 bug
+- 新增 同步 uni-ui
+ - 新增 uni-ui 组件支持国际化 i18n
+ - uni-data-checkbox 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题
+ - uni-datetime-picker 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次
+ - uni-datetime-picker 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法
+ - uni-datetime-picker 优化 调整字号大小,美化日历界面
+ - uni-datetime-picker 修复 因国际化导致的 placeholder 失效的 bug
+ - uni-file-picker 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug
+ - uni-file-picker 新增 参数中返回 fileID 字段
+ - uni-file-picker 修复 腾讯云传入fileID 不能回显的bug
+ - uni-file-picker 修复 选择图片后,不能放大的问题
+ - uni-link 修复 在 nvue 下不显示的 bug
+ - uni-list 修复 在vue3中to属性在发行应用的时候报错的bug
+ - uni-search-bar 修复 value 属性与 modelValue 属性不兼容的Bug
+ - uni-swipe-action 优化 close-all 方法
+ - uni-collapse 优化 show-arrow 属性默认为true
+ - uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头
+ - uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题
+ - uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug
+ - uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug
+ - uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件
+ - uni-file-picker 修复 v-model 值设为 null 报错的Bug
+ - uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件
+ - uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件
+ - uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题
+ - uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题
+
+
+## 3.2.3(2021-08-27)
+- 优化 tabbar 页面移除 vuex 相关代码
+- 新增 适配 vue3 (app)
+## 3.2.2(2021-08-10)
+- 新增 适配快手小程序
+- 新增 同步 uni-ui
+ - uni-datetime-picker 新增 return-type 属性支持返回 date 日期对象
+ - uni-file-picker 修复 fileExtname属性不指定值报错的Bug
+ - uni-file-picker 修复 在某种场景下图片不回显的Bug
+ - uni-link 支持自定义插槽
+ - uni-calendar 修复 弹出层被 tabbar 遮盖 bug
+ - uni-dateformat 调整 默认时间不再是当前时间,而是显示'-'字符
+ - uni-datetime-picker 新增 适配 vue3
+ - uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能
+ - uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug
+ - uni-datetime-picker 修复 type 属性动态赋值无效的 bug
+ - uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug
+ - uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug
+ - uni-datetime-picker 修复 范围选未正确显示当前值的 bug
+ - uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug
+ - uni-file-picker 修复 auto-upload 属性失效的Bug
+## 3.2.1(2021-07-31)
+- 新增 同步 uni-ui@1.3.8
+## 3.2.0(2021-07-30)
+- 新增 同时兼容 vue2 & vue3
+## 3.1.20(2021-07-30)
+- 新增 同时兼容 vue2 & vue3
+## 3.1.17(2021-05-26)
+- 修复 3.1.16 依赖 sass 的问题
+- 条件编译 nuve 不支持 css 属性
+## 3.1.16(2021-05-26)
+- 修复 uni-data-checkbox 不关联服务空间的情况下组件报错的 Bug
+## 3.1.12(2021-05-07)
+- hello-uniapp 发布插件市场
diff --git a/common/airport.js b/common/airport.js
new file mode 100644
index 00000000..445b6aa4
--- /dev/null
+++ b/common/airport.js
@@ -0,0 +1,262 @@
+export default {
+ "list": [{
+ "letter": "A",
+ "data": [
+ "阿克苏机场",
+ "阿拉山口机场",
+ "阿勒泰机场",
+ "阿里昆莎机场",
+ "安庆天柱山机场",
+ "澳门国际机场"
+ ]
+ }, {
+ "letter": "B",
+ "data": [
+ "保山机场",
+ "包头机场",
+ "北海福成机场",
+ "北京南苑机场",
+ "北京首都国际机场"
+ ]
+ }, {
+ "letter": "C",
+ "data": [
+ "长白山机场",
+ "长春龙嘉国际机场",
+ "常德桃花源机场",
+ "昌都邦达机场",
+ "长沙黄花国际机场",
+ "长治王村机场",
+ "常州奔牛机场",
+ "成都双流国际机场",
+ "赤峰机场"
+ ]
+ }, {
+ "letter": "D",
+ "data": [
+ "大理机场",
+ "大连周水子国际机场",
+ "大庆萨尔图机场",
+ "大同东王庄机场",
+ "达州河市机场",
+ "丹东浪头机场",
+ "德宏芒市机场",
+ "迪庆香格里拉机场",
+ "东营机场",
+ "敦煌机场"
+ ]
+ }, {
+ "letter": "E",
+ "data": [
+ "鄂尔多斯机场",
+ "恩施许家坪机场",
+ "二连浩特赛乌苏国际机场"
+ ]
+ }, {
+ "letter": "F",
+ "data": [
+ "阜阳西关机场",
+ "福州长乐国际机场"
+ ]
+ }, {
+ "letter": "G",
+ "data": [
+ "赣州黄金机场",
+ "格尔木机场",
+ "固原六盘山机场",
+ "广元盘龙机场",
+ "广州白云国际机场",
+ "桂林两江国际机场",
+ "贵阳龙洞堡国际机场"
+ ]
+ }, {
+ "letter": "H",
+ "data": [
+ "哈尔滨太平国际机场",
+ "哈密机场",
+ "海口美兰国际机场",
+ "海拉尔东山国际机场",
+ "邯郸机场",
+ "汉中机场",
+ "杭州萧山国际机场",
+ "合肥骆岗国际机场",
+ "和田机场",
+ "黑河机场",
+ "呼和浩特白塔国际机场",
+ "淮安涟水机场",
+ "黄山屯溪国际机场"
+ ]
+ }, {
+ "letter": "I",
+ "data": []
+ }, {
+ "letter": "J",
+ "data": [
+ "济南遥墙国际机场",
+ "济宁曲阜机场",
+ "鸡西兴凯湖机场",
+ "佳木斯东郊机场",
+ "嘉峪关机场",
+ "锦州小岭子机场",
+ "景德镇机场",
+ "井冈山机场",
+ "九江庐山机场",
+ "九寨黄龙机场"
+ ]
+ }, {
+ "letter": "K",
+ "data": [
+ "喀什机场",
+ "克拉玛依机场",
+ "库车龟兹机场",
+ "库尔勒机场",
+ "昆明巫家坝国际机场"
+ ]
+ }, {
+ "letter": "L",
+ "data": [
+ "拉萨贡嘎机场",
+ "兰州中川机场",
+ "丽江三义机场",
+ "黎平机场",
+ "连云港白塔埠机场",
+ "临沧机场",
+ "临沂机场",
+ "林芝米林机场",
+ "柳州白莲机场",
+ "龙岩冠豸山机场",
+ "泸州蓝田机场",
+ "洛阳北郊机场"
+ ]
+ }, {
+ "letter": "M",
+ "data": [
+ "满洲里西郊机场",
+ "绵阳南郊机场",
+ "漠河古莲机场",
+ "牡丹江海浪机场"
+ ]
+ }, {
+ "letter": "N",
+ "data": [
+ "南昌昌北国际机场",
+ "南充高坪机场",
+ "南京禄口国际机场",
+ "南宁吴圩机场",
+ "南通兴东机场",
+ "南阳姜营机场",
+ "宁波栎社国际机场"
+ ]
+ }, {
+ "letter": "O",
+ "data": []
+ }, {
+ "letter": "P",
+ "data": [
+ "普洱思茅机场"
+ ]
+ }, {
+ "letter": "Q",
+ "data": [
+ "齐齐哈尔三家子机场",
+ "秦皇岛山海关机场",
+ "青岛流亭国际机场",
+ "衢州机场",
+ "泉州晋江机场"
+ ]
+ }, {
+ "letter": "R",
+ "data": [
+ "日喀则和平机场"
+ ]
+ }, {
+ "letter": "S",
+ "data": [
+ "三亚凤凰国际机场",
+ "汕头外砂机场",
+ "上海虹桥国际机场",
+ "上海浦东国际机场",
+ "深圳宝安国际机场",
+ "沈阳桃仙国际机场",
+ "石家庄正定国际机场",
+ "苏南硕放国际机场"
+ ]
+ }, {
+ "letter": "T",
+ "data": [
+ "塔城机场",
+ "太原武宿国际机场",
+ "台州路桥机场 (黄岩机场)",
+ "唐山三女河机场",
+ "腾冲驼峰机场",
+ "天津滨海国际机场",
+ "通辽机场",
+ "铜仁凤凰机场"
+ ]
+ }, {
+ "letter": "U",
+ "data": []
+ }, {
+ "letter": "V",
+ "data": []
+ }, {
+ "letter": "W",
+ "data": [
+ "万州五桥机场",
+ "潍坊机场",
+ "威海大水泊机场",
+ "文山普者黑机场",
+ "温州永强国际机场",
+ "乌海机场",
+ "武汉天河国际机场",
+ "乌兰浩特机场",
+ "乌鲁木齐地窝堡国际机场",
+ "武夷山机场",
+ "梧州长洲岛机场"
+ ]
+ }, {
+ "letter": "X",
+ "data": [
+ "西安咸阳国际机场",
+ "西昌青山机场",
+ "锡林浩特机场",
+ "西宁曹家堡机场",
+ "西双版纳嘎洒机场",
+ "厦门高崎国际机场",
+ "香港国际机场",
+ "襄阳刘集机场",
+ "兴义机场",
+ "徐州观音机场"
+ ]
+ }, {
+ "letter": "Y",
+ "data": [
+ "延安二十里堡机场",
+ "盐城机场",
+ "延吉朝阳川机场",
+ "烟台莱山国际机场",
+ "宜宾菜坝机场",
+ "宜昌三峡机场",
+ "伊春林都机场",
+ "伊宁机场",
+ "义乌机场",
+ "银川河东机场",
+ "永州零陵机场",
+ "榆林榆阳机场",
+ "玉树巴塘机场",
+ "运城张孝机场"
+ ]
+ }, {
+ "letter": "Z",
+ "data": [
+ "湛江机场",
+ "昭通机场",
+ "郑州新郑国际机场",
+ "芷江机场",
+ "重庆江北国际机场",
+ "中卫香山机场",
+ "舟山朱家尖机场",
+ "珠海三灶机场"
+ ]
+ }]
+}
diff --git a/common/api/httpRequest.js b/common/api/httpRequest.js
new file mode 100644
index 00000000..97f1ce26
--- /dev/null
+++ b/common/api/httpRequest.js
@@ -0,0 +1,41 @@
+
+function service(options = {}) {
+ let contentType = localStorage.token_type ? "application/json" : "application/x-www-form-urlencoded";
+ // contentType ="application/x-www-form-urlencoded";
+ contentType ="application/json";
+ localStorage.setItem('token', "f6350745-d4ac-4e1a-82f2-7e1a6efd8a3f")
+
+ let token= localStorage.getItem("token")
+ options.header = {
+ "content-type": contentType,
+ "Authorization": "Bearer "+token
+ // 'withCredentials': true,
+ // 'Blade-Auth':'bearer '+store.state.token,
+ // 'token_type': localStorage.token_type
+ };
+ return new Promise((resolve, reject) => {
+ options.success = (res) => {
+ if (res ) {
+ if(res.statusCode == 200){
+ if(res.data.code==0){
+ resolve(res.data);
+ }else {
+ reject(options.url + res.data.msg)
+ }
+
+ }else {
+ reject(options.url + res.data.msg)
+ }
+
+ } else {
+ reject(options.url + res.data.msg)
+ }
+ };
+ options.fail = (err) => {
+ reject(err);
+ };
+ uni.request(options);
+ });
+ }
+
+ export default service;
diff --git a/common/array.js b/common/array.js
new file mode 100644
index 00000000..bb92003e
--- /dev/null
+++ b/common/array.js
@@ -0,0 +1,281 @@
+// 详情和审批
+export function getDetailAndApproveOption() {
+ let option_detail = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '审批',
+ style: {
+ backgroundColor: '#00CC33'
+ }
+ }
+ ];
+ return option_detail;
+}
+//详情、审批通过、审批驳回
+export function getDetailAndApprovePassAndApproveNoOption() {
+ let option_detail = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '审批\n通过',
+ style: {
+ backgroundColor: '#00CC33'
+ }
+ },
+ {
+ text: '审批\n驳回',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_detail;
+}
+//详情、处理、审批不通过
+export function getDetailAndHandleOption() {
+ let option_detail = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '处理',
+ style: {
+ backgroundColor: '#00CC33'
+ }
+ }
+ ];
+ return option_detail;
+}
+//详情、关闭
+export function getDetailAndCloseOption() {
+ let option_detail = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '关闭',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_detail;
+}
+// 采购退货返回侧滑按钮 详情 、编辑、库位、移除
+export function getPurchaseReceiptOption(allowModifyQty,allowModifyLocation) {
+ var option = []
+ option.push(...getDetailOption())
+ if (allowModifyQty == "TRUE") {
+ option.push(...getEditOption())
+ }
+ if (allowModifyLocation == "TRUE") {
+ option.push(...getLocationOption())
+ }
+ option.push(...getRemoveOption())
+ return option;
+}
+
+//详情
+export function getDetailOption() {
+ let option_detail = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ }];
+ return option_detail;
+}
+
+//详情移除(扫描后不允许修改数量)
+export function getDetailRemoveOption() {
+ let option_detail_edit_remove = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '移除',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_detail_edit_remove;
+}
+
+export function getRemoveOption() {
+ let option_detail_remove = [{
+ text: '移除',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }];
+ return option_detail_remove;
+}
+
+
+
+export function getEditOption() {
+ let option_detail_edit = [{
+ text: '编辑',
+ style: {
+ backgroundColor: '#F1A532'
+ }
+ }];
+ return option_detail_edit;
+}
+export function getLocationOption() {
+ let option_detail_location = [{
+ text: '库位',
+ style: {
+ backgroundColor: '#00A3FF'
+ }
+ }];
+ return option_detail_location;
+}
+
+
+//清空
+export function getClearOption() {
+ let option_detail_edit_remove = [{
+ text: '清空',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }];
+ return option_detail_edit_remove;
+}
+
+
+//详情编辑移除
+export function getDetailEditRemoveOption() {
+ let option_detail_edit_remove = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '编辑',
+ style: {
+ backgroundColor: '#F1A532'
+ }
+ },
+ {
+ text: '移除',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_detail_edit_remove;
+}
+
+
+//详情编辑放弃
+export function getDetailGiveupOption() {
+ let option_detail_giveup = [{
+ text: '详情',
+ style: {
+ backgroundColor: '#3C9CFF'
+ }
+ },
+ {
+ text: '放弃',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_detail_giveup;
+}
+
+
+
+//详情编辑移除
+export function getEditRemoveOption() {
+ let option_edit_remove = [{
+ text: '编辑',
+ style: {
+ backgroundColor: '#F1A532'
+ }
+ },
+ {
+ text: '移除',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }
+ ];
+ return option_edit_remove;
+}
+
+
+// 库存状态字典项
+export function getInventoryStatusArray() {
+ let array = [{
+ text: '待检',
+ value: "kcztINSP"
+ }, {
+ text: '合格',
+ value: "kcztOK"
+ }, {
+ text: '不合格',
+ value: "kcztNOK"
+ }, {
+ text: '隔离',
+ value: "kcztHOLD"
+ }, {
+ text: '报废',
+ value: "kcztSCRAP"
+ }]
+ return array;
+}
+
+// 业务类型字典项
+export function getBusinessTypeArray() {
+ let array = [{
+ text: '供应商发货',
+ value: "SupplierDeliver"
+ }, {
+ text: '采购收货',
+ value: "PurchaseReceipt"
+ }, {
+ text: '采购退货',
+ value: "PurchaseReturn"
+ }, {
+ text: '采购上架',
+ value: "PurchasePutaway"
+ }]
+ return array;
+}
+
+export function getLocationTypeArray(data) {
+ var list = []
+ if (data == undefined || data == null || data == "") {
+ return list
+ }
+
+ if (data.indexOf(',') < 0) {
+ list.push(data)
+ } else {
+ var arrayItems = data.split(',')
+ arrayItems.forEach(res => {
+ list.push(res)
+ })
+ }
+
+ return list
+}
diff --git a/common/balance.js b/common/balance.js
new file mode 100644
index 00000000..6e72e2cf
--- /dev/null
+++ b/common/balance.js
@@ -0,0 +1,336 @@
+
+import {
+ getManagementPrecision,
+ getBalanceByFilter
+} from '@/api/request2.js';
+
+/**
+ * "itemCode": [],
+ "locationCode":"INSPECT"
+ 管理精度策略
+ * @param {*}
+ *
+ */
+export function getManagementPrecisions(itemCodes, locationCode, callback) {
+ // let jsonParem = JSON.stringify(param)
+ let result = {
+ list: [],
+ success: true,
+ message: ''
+ };
+
+ var params = {
+ itemCodes: itemCodes,
+ locationCode: locationCode
+ }
+ getManagementPrecision(params).then(res => {
+ if (res.data == null) {
+ result.success = false
+ result.message = '未查询到管理精度信息'
+ } else {
+ result.list = res.data;
+ }
+ callback(result);
+ }).catch(error => {
+ result.success = false;
+ result.message = error;
+ callback(result);
+ })
+}
+
+export function getBalanceByManagementPrecision(label, locationCode, callback) {
+ let result = {
+ list: [],
+ success: true,
+ message: ''
+ };
+ let params = {
+ itemCodes: [label.itemCode],
+ locationCode: locationCode
+ };
+ // let jsonParem = JSON.stringify(param)
+ getManagementPrecision(params).then(res => {
+ let managementPrecision = res.data[0].ManagementPrecision;
+ switch (managementPrecision) {
+ case 'BY_PACKAGING':
+ byPacking(label, locationCode, res => {
+ res.managementPrecision = managementPrecision;
+ callback(res);
+ });
+ break;
+ case 'BY_BATCH':
+ byBatch(label, locationCode, res => {
+ res.managementPrecision = managementPrecision;
+ callback(res);
+ });
+ break;
+ case 'BY_QUANTITY':
+ byQuantity(label, locationCode, res => {
+ res.managementPrecision = managementPrecision;
+ callback(res);
+ });
+ break;
+ case 'BY_UNIQUEID':
+ byUniqueId(label, res => {
+ res.managementPrecision = managementPrecision;
+ callback(res);
+ });
+ break;
+ }
+ }).catch(error => {
+ let result = {
+ success: false,
+ message: error
+ };
+ callback(result);
+ })
+}
+/** 按包装管理查询库存
+ * @param {Object} label
+ * @param {Object} locationCode
+ * @param {Object} callback
+ */
+export function byPacking(label, locationCode, callback) {
+ let result = {
+ success: true,
+ message: '',
+ data: {}
+ };
+ var filters = []
+ filters.push({
+ column: "packing_number",
+ action: "==",
+ value: label.packingNumber
+ })
+ filters.push({
+ column: "item_code",
+ action: "==",
+ value: label.itemCode
+ })
+ filters.push({
+ column: "batch",
+ action: "==",
+ value: label.batch
+ })
+ filters.push({
+ column: "location_code",
+ action: "==",
+ value: locationCode
+ })
+
+ var params = {
+ filters: filters,
+ pageNo: 1,
+ pageSize: 100,
+ }
+ getBalanceByFilter(params).then(res => {
+ if (res.data == null) {
+ result.success = false;
+ result.message =
+ "按包装管理查询、未查询到物料号[" + label.itemCode + "]" +
+ "到箱码[" + label.packingNumber + "]" +
+ "批次[" + label.batch + "]" +
+ "库位[" + label.locationCode + "]的信息"
+ } else {
+ result.success = true;
+ result.data = res.data;
+ }
+
+ callback(result)
+ }).catch(err => {
+ result.success = false;
+ result.data = null;
+ result.message = err;
+ callback(result)
+ })
+}
+/** 按批次管理查询库存
+ * @param {Object} label
+ * @param {Object} locationCode
+ * @param {Object} callback
+ */
+export function byBatch(label, locationCode, callback) {
+ var filters = []
+ filters.push({
+ column: "item_code",
+ action: "==",
+ value: label.itemCode
+ })
+ filters.push({
+ column: "batch",
+ action: "==",
+ value: label.batch
+ })
+ filters.push({
+ column: "location_code",
+ action: "==",
+ value: locationCode
+ })
+
+ var params = {
+ filters: filters,
+ pageNo: 1,
+ pageSize: 100,
+ }
+
+ let result = {
+ success: true,
+ message: '',
+ data: {}
+ };
+ getBalanceByFilter(params).then(res => {
+ if (res.data == null) {
+ result.success = false;
+ result.message =
+ "按批次管理查询、未查询到物料号[" + label.itemCode + "]" +
+ "批次[" + label.batch + "]" +
+ "库位[" + label.locationCode + "]的信息"
+ } else {
+ result.success = true;
+ result.data = res.data;
+ }
+ callback(result)
+ }).catch(err => {
+ result.success = false;
+ result.data = null;
+ result.message = err.message;
+ callback(result)
+ })
+}
+/** 按数量管理查询库存
+ * @param {Object} label
+ * @param {Object} locationCode
+ * @param {Object} callback
+ */
+export function byQuantity(label, locationCode, callback) {
+ let result = {
+ success: true,
+ message: '',
+ data: {}
+ };
+
+ var filters = []
+ filters.push({
+ column: "item_code",
+ action: "==",
+ value: label.itemCode
+ })
+ filters.push({
+ column: "location_code",
+ action: "==",
+ value: locationCode
+ })
+
+ var params = {
+ filters: filters,
+ pageNo: 1,
+ pageSize: 100,
+ }
+
+ getBalanceByFilter(params).then(res => {
+ if (res.data == null) {
+ result.success = false;
+ result.message =
+ "按数量管理查询、未查询到物料号[" + label.itemCode + "]" +
+ "库位[" + label.locationCode + "]的信息"
+ } else {
+ result.success = true;
+ result.data = res.data;
+ }
+ callback(result)
+ }).catch(err => {
+ result.success = false;
+ result.data = null;
+ result.message = err.message;
+ callback(result)
+ })
+}
+/** 按唯一码管理查询库存
+ * @param {Object} label
+ * @param {Object} locationCode
+ * @param {Object} callback
+ */
+export function byUniqueId(label, locationCode, callback) {
+ let param = {
+ packingNumber: label.packingNumber
+ };
+ let result = {
+ success: true,
+ message: '',
+ data: {}
+ };
+
+ var filters = []
+ filters.push({
+ column: "packing_number",
+ action: "==",
+ value: label.packingNumber
+ })
+
+ var params = {
+ filters: filters,
+ pageNo: 1,
+ pageSize: 100,
+ }
+
+ getBalanceByFilter(params).then(res => {
+ if (res.data == null) {
+ result.success = false;
+ result.message =
+ "按唯一码管理查询、未查询到箱码[" + label.packingNumber + "]" +
+ "的信息"
+ } else {
+ result.success = true;
+ result.data = res.data;
+ }
+ callback(result)
+ }).catch(err => {
+ result.success = false;
+ result.data = null;
+ result.message = err.message;
+ callback(result)
+ })
+}
+/**
+ * 查询指定库位下的库存
+ * @param {*} param
+ * @param {*} callback
+ */
+export function balanceByLocation(locationCode, callback) {
+ let result = {
+ success: true,
+ message: '',
+ data: {}
+ };
+
+ var filters = []
+ filters.push({
+ column: "location_code",
+ action: "==",
+ value: locationCode
+ })
+
+ var params = {
+ filters: filters,
+ pageNo: 1,
+ pageSize: 100,
+ }
+
+ getBalanceByFilter(params).then(res => {
+ if (res.data == null) {
+ result.success = false;
+ result.message =
+ "按唯一码管理查询、未查询到库位[" + label.locationCode + "]" +
+ "的信息"
+ } else {
+ result.success = true;
+ result.data = res.data;
+ }
+ callback(result)
+ }).catch(err => {
+ result.success = false;
+ result.data = null;
+ result.message = err.message;
+ callback(result)
+ })
+}
diff --git a/common/basic.js b/common/basic.js
new file mode 100644
index 00000000..4133ed10
--- /dev/null
+++ b/common/basic.js
@@ -0,0 +1,871 @@
+let maxPageSize = 1000;
+export {
+ maxPageSize
+}
+
+let jobStatusList = [];
+let itemStatusList =[];
+let locationTypeList = [];
+let uomList = [];
+let inventoryStatusList = [];
+let containerTypeList = [];
+let packUnitList = [];
+let requestStatusList = [];
+let unplannedReceiptReasonList = [];
+let unplannedIissueReason = [];
+let scrapReasonList = [];
+let inspectFailedReasonList = [];
+
+
+
+//获取字典信息
+export function clearCacheData() {
+ jobStatusList = [];
+ itemStatusList = [];
+ locationTypeList = [];
+ uomList = [];
+ inventoryStatusList = [];
+ containerTypeList = [];
+ packUnitList = [];
+ requestStatusList = [];
+ unplannedReceiptReasonList = [];
+ unplannedIissueReason = [];
+ scrapReasonList = [];
+ inspectFailedReasonList = [];
+
+}
+
+//获取字典信息
+export function getDirectoryInfo(type) {
+ var result = [];
+ var list = uni.getStorageSync("dictionary")
+ if (list != undefined && list.length > 0) {
+ for (let item of list) {
+ if (item.type == type) {
+ result = item.subList
+ break;
+ }
+ }
+ }
+
+ return result
+}
+
+
+
+//将字典项转为数组
+export function getDirectoryItemArray(data) {
+ var array = []
+ if (data == undefined || data == null || data == "") {
+ return array
+ }
+
+ if (data.indexOf(',') < 0) {
+ array.push(data)
+ } else {
+ var arrayItems = data.split(',')
+ arrayItems.forEach(res => {
+ array.push(res)
+ })
+ }
+ return array
+}
+
+//查询字典项是否在列表中
+export function checkDirectoryItemExist(list, type) {
+ let exist = false;
+ if (list == null || list.length == 0) {
+ exist = true;
+ } else {
+ var temp = list.filter(res => {
+ if (res == type) {
+ return res
+ }
+ })
+ if (temp != undefined && temp.length > 0) {
+ exist = true
+ }
+ }
+ return exist
+}
+
+//获取任务状态
+export function getJobStateInfo(value) {
+ var resultInfo = "";
+ if (jobStatusList.length == 0) {
+ jobStatusList = getDirectoryInfo("job_status")
+ }
+ if (jobStatusList.length > 0) {
+ for (let item of jobStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取任务状态样式
+export function getJobStateStyle(value) {
+ let item = getJobStateInfo(value);
+ if (item == null || item == '') {
+ return 'other'
+ } else {
+ if (item.remark == '') {
+ return 'other'
+ } else {
+ return item.remark;
+ }
+ }
+}
+
+//获取库位描述
+export function getListLocationTypeDesc(lst) {
+ let desc = '';
+ lst.forEach(res => {
+ desc += getLocationTypeInfo(res).label + ","
+ })
+ desc = desc.slice(0, -1);
+ return desc;
+}
+
+//获取物品状态
+export function getItemStateInfo(value) {
+ var resultInfo = "";
+ if (itemStatusList.length == 0) {
+ itemStatusList = getDirectoryInfo("item_status")
+ }
+ if (itemStatusList.length > 0) {
+ for (let item of itemStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库位类型
+export function getLocationTypeInfo(value) {
+ var resultInfo = "";
+ if (locationTypeList.length == 0) {
+ locationTypeList = getDirectoryInfo("location_type")
+ }
+ if (locationTypeList.length > 0) {
+ for (let item of locationTypeList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库位类型名称
+export function getLocationTypeName(value) {
+ let location = getLocationTypeInfo(value);
+
+ return location == '' ? value : location.label;
+}
+
+//获取计量单位
+export function getUnitInfo(value) {
+ var resultInfo = "";
+ if (uomList.length == 0) {
+ uomList = getDirectoryInfo("uom")
+ }
+ if (uomList.length > 0) {
+ for (let item of uomList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取包装单位
+export function getStdPackUnitInfo(value) {
+ var resultInfo = "";
+ if (packUnitList.length == 0) {
+ packUnitList = getDirectoryInfo("pack_unit")
+ }
+ if (packUnitList.length > 0) {
+ for (let item of packUnitList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取申请状态
+export function getRequestStateInfo(value) {
+ var resultInfo = "";
+ if (requestStatusList.length == 0) {
+ requestStatusList = getDirectoryInfo("request_status")
+ }
+ if (requestStatusList.length > 0) {
+ for (let item of requestStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库存状态
+export function getInventoryStatusInfo(value) {
+ var resultInfo = "";
+ if (inventoryStatusList.length == 0) {
+ inventoryStatusList = getDirectoryInfo("inventory_status")
+ }
+ if (inventoryStatusList.length > 0) {
+ for (let item of inventoryStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库存样式
+export function getInventoryStatusStyle(value) {
+ let item = getInventoryStatusInfo(value);
+ if (item == null || item == '') {
+ return 'other'
+ } else {
+ if (item.remark == '') {
+ return 'other'
+ } else {
+ return item.remark;
+ }
+ }
+}
+
+//获取库存状态
+export function getInventoryStatusName(value) {
+ let item = getInventoryStatusInfo(value);
+ if (item == null || item == '') {
+ return value
+ } else {
+ if (item.label == '') {
+ return value
+ } else {
+ return item.label;
+ }
+ }
+}
+
+
+//获取状态描述
+export function getInventoryStatusDesc(lst) {
+ let desc = '';
+ lst.forEach(res => {
+ desc += getInventoryStatusInfo(res).label + ","
+ })
+ desc = desc.slice(0, -1);
+ return desc;
+}
+
+
+//获取器具状态
+export function getContainerStatusInfo(value) {
+ var resultInfo = "";
+ if (containerTypeList.length == 0) {
+ containerTypeList = getDirectoryInfo("container_type")
+ }
+ if (containerTypeList.length > 0) {
+ for (let item of containerTypeList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取计划外入库原因
+export function getUnPlannedReceiptReasonList(value) {
+ if (unplannedReceiptReasonList.length == 0) {
+ unplannedReceiptReasonList = getDirectoryInfo("unplanned_receipt_reason")
+ }
+ unplannedReceiptReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return unplannedReceiptReasonList
+}
+
+//获取计划外出库原因
+export function getUnPlannedIssuseReasonList(value) {
+ if (unplannedIissueReason.length == 0) {
+ unplannedIissueReason = getDirectoryInfo("unplanned_issue_reason")
+ }
+ unplannedIissueReason.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return unplannedIissueReason
+}
+
+//获取报废出库原因
+export function getScarpReasonList(value) {
+ if (scrapReasonList.length == 0) {
+ scrapReasonList = getDirectoryInfo("scrap_reason")
+ }
+ scrapReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return scrapReasonList
+}
+
+//获取检验不合格原因
+export function getInspectReasonList(value) {
+ if (inspectFailedReasonList.length == 0) {
+ inspectFailedReasonList = getDirectoryInfo("inspect_failed_reason")
+ }
+ inspectFailedReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return inspectFailedReasonList
+}
+
+
+// //数量状态
+// export function getCoutJobStatuStyle(val) {
+// if (val == 1) return 'state_inspect'
+// else if (val == 2) return 'state_ok'
+// else if (val == 3) return 'state_nook'
+// else return 'other'
+// }
+
+// export function getCountJobStatuDesc(val) {
+// if (val == 1) return '待检'
+// else if (val == 2) return '合格'
+// else if (val == 3) return '不合格'
+// else return "未知"
+// }
+
+// export function getPartCodeState(val) {
+// if (val == 0) return '可用'
+// else if (val == 1) return '新增'
+// else if (val == 2) return '隔离'
+// else if (val == 3) return '未知'
+// else return '未知'
+// }
+
+// export function getLocationState(val) {
+// if (val == 'kwlxINSP') return '待检库'
+// else if (val == 'kwlxRAW') return '原料库'
+// else if (val == 'kwlxSEMI') return '半成品库'
+// else if (val == 'kwlxFG') return '成品库'
+// else if (val == 'kwlxWIP') return '线边库'
+// else if (val == 'kwlxHOLD') return '隔离库'
+// else if (val == 'kwlxSCRAP') return '报废库'
+// else if (val == 'kwlxNOK') return '不合格品库'
+// else if (val == 'kwxOVERFLOW') return '溢出库'
+// else if (val == 'kwlxCUsT') return '客户寄售库'
+// else if (val == 'kwlxOUTSIDE') return '外库'
+// else if (val == 'kwlxDIFF') return '盘点差异库'
+// else if (val == 'kwxTRANSPORT') return '在途库'
+// else return '未知'
+
+// }
+
+// export function getLocationStyle(val) {
+// if (val == 'kwlxRAW') return 'state_raw'
+// else if (val == 'kwlxFG') return 'state_fg'
+// else if (val == 'kwlxSEMI') return 'state_semi'
+// else if (val == 'kwlxHOLD') return 'state_hold'
+// else if (val == 4) return 'state_unk'
+// }
+
+// //任务状态
+// export function getJobStatuStyle(val) {
+// if (val == 'JOB_PENDING') return 'job_state_un-doing'
+// else if (val == '1') return 'job_state_doing'
+// else if (val == 'reztDONE') return 'job_state_completed'
+// else if (val == 'rwztCLOSED') return 'job_state_close'
+// else if (val == 'rwztCANCELLED') return 'job_state_cancelled'
+// else return 'unk'
+// }
+// //任务状态
+// //open pending completed close
+// export function getJobStatuDesc(val) {
+// if (val == 'JOB_PENDING') return '待处理'
+// else if (val == '1') return '执行中'
+// else if (val == 'reztDONE') return '完成'
+// else if (val == 'rwztCLOSED') return '关闭'
+// else if (val == 'rwztCANCELLED') return '作废'
+// else return '其他'
+// }
+
+// //检验任务状态
+// export function getInspectTypeStyle(val) {
+// if (val == 0) return 'unk'
+// else if (val == 1) return 'exempt'
+// else if (val == 2) return 'full'
+// else if (val == 3) return 'sampling'
+// else if (val == 4) return 'pick'
+// else return 'other'
+// }
+// //open pending completed close
+// export function getInspectTypeDesc(val) {
+// if (val == 0) return '未知'
+// else if (val == 1) return '免检'
+// else if (val == 2) return '全检'
+// else if (val == 3) return '抽检'
+// else if (val == 4) return '挑选'
+// else return '其他'
+// }
+
+
+// //库存状态
+// export function getInventoryStatusStyle(val) {
+// if (val == 'kcztUNK') return 'unk'
+// else if (val == 'kcztINSP') return 'inventory_status_insp'
+// else if (val == 'kcztOK') return 'inventory_status_ok'
+// else if (val == 'kcztNOK') return 'inventory_status_nok'
+// else if (val == 'kcztHOLD') return 'inventory_status_hold'
+// else if (val == 'kcztSCRAP') return 'inventory_status_scarp'
+// else return 'other'
+// }
+
+
+// //库存状态
+// export function getInventoryStatusDesc(val) {
+// if (val == 'kcztUNK') return '未知'
+// else if (val == 'kcztINSP') return '待检'
+// else if (val == 'kcztOK') return '合格'
+// else if (val == 'kcztNOK') return '不合格'
+// else if (val == 'kcztHOLD') return '隔离'
+// else if (val == 'kcztSCRAP') return '报废'
+// else return '其他'
+// }
+
+// //库存状态
+// export function getInventoryStatusStyle(val) {
+// if (val == 0) return 'unk'
+// else if (val == 1) return 'insp'
+// else if (val == 2) return 'ok'
+// else if (val == 3) return 'nok'
+// else if (val == 4) return 'hold'
+// else if (val == 5) return 'scarp'
+// else if (val == 6) return 'frozen'
+// else if (val == 31) return 'nok'
+// else return 'other'
+// }
+
+
+// //库存状态kcztINSP
+// export function getInventoryStatusDesc(val) {
+// if (val == 0) return '未知'
+// else if (val == 1) return '待检'
+// else if (val == 2) return '合格'
+// else if (val == 3) return '不合格'
+// else if (val == 4) return '隔离'
+// else if (val == 5) return '报废'
+// else if (val == 6) return '冻结'
+// else if (val == 31) return '不合格'
+// // else if (val == 31) return '目检不合格'
+// else return '其他'
+// }
+
+// //零件状态
+// export function getItemStatusStyle(val) {
+// if (val == "wpztUNK") return 'item_unk'
+// else if (val == "wpztENABLE") return 'item_active'
+// else if (val == "wpztHOLD") return 'item_hold'
+// else if (val == "wpztNEW") return 'item_new'
+// else if (val == "wpztPLAN") return 'item_plan'
+// else if (val == "wpztDISABLE") return 'item_disable'
+// else return 'other'
+// }
+
+// export function getItemStatusStyle(val) {
+// if (val == 0) return 'unk_item'
+// else if (val == 1) return 'active_item'
+// else if (val == 2) return 'hold_item'
+// else if (val == 3) return 'new_item'
+// else if (val == 4) return 'plan_item'
+// else if (val == 5) return 'disable_item'
+// else return 'other'
+// }
+
+
+// //零件状态描述
+// export function getItemStatusDesc(val) {
+// if (val == "wpztUNK") return '未知'
+// else if (val == "wpztENABLE") return '可用'
+// else if (val == "wpztHOLD") return '隔离'
+// else if (val == "wpztNEW") return '新增'
+// else if (val == "wpztPLAN") return '规划'
+// else if (val == "wpztDISABLE") return '禁用'
+// else return '其他'
+// }
+
+// //盘点状态
+// export function getCountStageTypeStyle(val) {
+// if (val == 0) return 'unk'
+// else if (val == 1) return 'initial'
+// else if (val == 2) return 'afresh'
+// else if (val == 3) return 'supervision'
+// else return 'other'
+// }
+
+
+// //盘点状态
+// export function getCountStageDesc(val) {
+// if (val == 0) return '未知'
+// else if (val == 1) return '初盘'
+// else if (val == 2) return '重盘'
+// else if (val == 3) return '监盘'
+// else return '其他'
+// }
+
+// //盘点计划类型
+// export function getCheckTypeDesc(val) {
+// if (val == 0) return '未知'
+// else if (val == 1) return '周期盘点'
+// else if (val == 2) return '物理盘点'
+// else return '其他'
+// }
+
+// //盘点方式
+// export function getCountMethodDesc(val) {
+// if (val == 0) return '未知'
+// else if (val == 1) return '库位盘点'
+// else if (val == 2) return '物品盘点'
+// else if (val == 3) return '库位零件盘点'
+// else return '其他'
+// }
+
+// //获取库位类型
+// export function getLocationType(val) {
+// if (val == 'kwlxINSP') return 'location_inspect'
+// else if (val == 'kwlxRAW') return 'location_raw'
+// else if (val == 'kwlxSEMI') return 'location_semi'
+// else if (val == 'kwlxFG') return 'location_fg'
+// else if (val == 'kwlxWIP') return 'location_wip'
+// else if (val == 'kwlxHOLD') return 'location_hold'
+// else if (val == 'kwlxSCRAP') return 'location_scrap'
+// else if (val == 'kwlxNOK') return 'location_nok'
+// else if (val == 'kwxOVERFLOW') return 'location_overflow'
+// else if (val == 'kwlxCUsT') return 'location_cust'
+// else if (val == 'kwlxOUTSIDE') return 'location_outside'
+// else if (val == 'kwlxDIFF') return 'location_diff'
+// else if (val == 'kwxTRANSPORT') return 'location_transport'
+// else return 'location_other'
+// }
+
+// //获取库位类型描述
+// export function getLocationTypeDesc(val) {
+// if (val == 'kwlxINSP') return '待检库'
+// else if (val == 'kwlxRAW') return '原料库'
+// else if (val == 'kwlxSEMI') return '半成品库'
+// else if (val == 'kwlxFG') return '成品库'
+// else if (val == 'kwlxWIP') return '线边库'
+// else if (val == 'kwlxHOLD') return '隔离库'
+// else if (val == 'kwlxSCRAP') return '报废库'
+// else if (val == 'kwlxNOK') return '不合格品库'
+// else if (val == 'kwxOVERFLOW') return '溢出库'
+// else if (val == 'kwlxCUsT') return '客户寄售库'
+// else if (val == 'kwlxOUTSIDE') return '外库'
+// else if (val == 'kwlxDIFF') return '盘点差异库'
+// else if (val == 'kwxTRANSPORT') return '在途库'
+// else return '其他'
+
+// }
+
+// //获取任务类型描述
+// export function getJobType(val) {
+// if (val == 0) return 'uno'
+// else if (val == 1) return 'PurchaseReceiptJob' //采购收货
+// else if (val == 2) return 'PurchaseReturnJob' //采购退货任务
+// else if (val == 3) return 'InspectJob' //检验任务
+// else if (val == 4) return 'PutawayJob' //上架任务
+// else if (val == 5) return 'ProductReceiveJob' //完工收货任务
+// else if (val == 6) return 'IssueJob' //发料任务
+// else if (val == 7) return 'DeliverJob' //发货任务
+// else if (val == 8) return 'CheckJob' //校验任务
+// else if (val == 9) return 'CountJob' //盘点任务
+// else return 'Other'
+// }
+
+
+// 获取业务类型字典项
+export function getBusinessTypeDesc(type) {
+ if (type == "SupplierDeliver") {
+ return "供应商发货"
+ } else if (type = "PurchaseReceipt") {
+ return "采购收货";
+ } else if (type = "PurchaseReturn") {
+ return "采购退货";
+ } else if (type = "PurchasePutaway") {
+ return "采购上架";
+ }
+}
+
+
+export function queryManageModel(managementList, itemCode) {
+ var result = managementList.filter(res => {
+ if (res.itemCode == itemCode) {
+ return res.ManagementPrecision
+ }
+ })
+
+ if (result != undefined) {
+ return result[0].ManagementPrecision
+ } else {
+ return ""
+ }
+}
+
+export function getPackingNumberAndBatch(managementList, itemCode,packingNumber,batch) {
+ var itemInfo = {
+ packingNumber: "",
+ batch: ""
+ }
+
+ var manageType = queryManageModel(managementList, itemCode)
+ if (manageType == "BY_QUANTITY") {
+ itemInfo.packingNumber = ""
+ itemInfo.batch = ""
+ } else if (manageType == "BY_BATCH") {
+ itemInfo.packingNumber = ""
+ itemInfo.batch = batch
+ } else if (manageType == "BY_PACKAGING") {
+ itemInfo.packingNumber = packingNumber
+ itemInfo.batch = batch
+ } else if (manageType == "BY_UNIQUE_ID") {
+ itemInfo.packingNumber = packingNumber
+ itemInfo.batch = batch
+ }
+ return itemInfo;
+
+}
+
+// //提示是否消息
+// export function showConfirmMsg(content, callback) {
+// uni.showModal({
+// title: '提示',
+// cancelText: '否',
+// confirmText: '是',
+// content: content,
+// success: function(res) {
+// if (res.confirm) {
+// callback(true);
+// } else {
+// callback(false);
+// }
+// },
+// })
+// scanErrorAudio();
+// }
+
+export function compare(key) {
+ return function(a, b) {
+ var val1 = a[key];
+ var val2 = b[key];
+ return val2 - val1;
+ }
+}
+
+export function compareDesc(key) {
+ return function(a, b) {
+ var val1 = a[key];
+ var val2 = b[key];
+ return val1 - val2;
+ }
+}
+
+export function goHome() {
+ uni.reLaunch({
+ url: '/pages/index/index'
+ }).catch((e) => {});
+
+}
+/**
+ * 获取当天时间2023-11-07 00:00:00-->2023-11-07 23:59:59
+ */
+export function getTodayDate() {
+ var startTime = new Date(new Date().toLocaleDateString()).getTime();
+ var endTime = startTime+24*60*60*1000-1
+ console.log("获取时间",startTime+","+endTime)
+ return startTime+","+endTime;
+}
+
+export function getCurrDate() {
+ var date = new Date();
+ return getDate(date);
+}
+
+export function getCurrDateTime() {
+ var date = new Date();
+ return getDate(date) + " " + getTime(date);
+}
+
+export function getISODateTime() {
+ var date = new Date();
+ return getDate(date) + "T" + getTime(date) + "Z";
+}
+
+//格式化处理
+export function dateFormat(time) {
+ let date = new Date(time);
+ return getDate(date) + " " + getTime(date);
+}
+
+//获取日期部分
+export function getDate(date) {
+ var year = date.getFullYear(); //年
+ var month = date.getMonth() + 1; //月
+ var day = date.getDate(); //日
+
+ month = month < 10 ? "0" + month : month;
+ day = day < 10 ? "0" + day : day;
+ return year + "-" + month + "-" + day;
+}
+
+//获取时间部分
+export function getTime(date) {
+ let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+ let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+ let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+ // 拼接
+ return hours + ":" + minutes + ":" + seconds;
+}
+
+//将20220713转成2022-07-13
+export function toYYYY_MM_DD(value) {
+ return value.substring(0, 4) + "-" + value.substring(4, 6) + "-" + value.substring(6, 8)
+}
+
+export function getRootFontSize() {
+ const self = this;
+ var fontSize = getApp().globalData.rootFontSize;
+ if (fontSize) {
+ return fontSize;
+ } else {
+ fontSize = uni.getStorageSync('root_font_size');
+ if (fontSize) {
+ getApp().globalData.rootFontSize = fontSize;
+ } else {
+ fontSize = '20px'; //默认字体大小
+ self.setRootFontSize(fontSize);
+ }
+ return fontSize;
+
+ }
+}
+
+export function getRemoveOption() {
+ let options = [{
+ text: '移除',
+ style: {
+ backgroundColor: '#F56C6C'
+ }
+ }]
+ return options;
+}
+
+export function setRootFontSize(fontSize) {
+ uni.setStorageSync('root_font_size', fontSize);
+ getApp().globalData.rootFontSize = fontSize;
+}
+
+
+export function scanErrorAudio() {
+ var music = null;
+ music = uni.createInnerAudioContext(); //创建播放器对象
+ music.src = "../../static/video/error.wav";
+ music.volume = 1;
+ music.play(); //执行播放
+ music.onEnded(() => {
+ //播放结束
+ music = null;
+ });
+}
+
+
+export function newMessageAudio() {
+ var music = null;
+ music = uni.createInnerAudioContext(); //创建播放器对象
+ music.src = "../../static/video/error.wav";
+ music.volume = 1;
+ music.play(); //执行播放
+ music.onEnded(() => {
+ //播放结束
+ music = null;
+ });
+}
+
+
+export function vibrate() {
+ uni.vibrateLong({
+ success: function() {
+
+ }
+ })
+}
+
+
+export function getDataSource(details) {
+ let items = [];
+ details.forEach(detail => {
+ var item = items.find(r =>
+ r.itemCode == detail.itemCode)
+ if (item == undefined) {
+ item = createItemInfo(detail);
+ let newDetail = createDetailInfo(detail); //
+ item.details.push(newDetail);
+ items.push(item)
+ } else {
+ item.qty += Number(detail.qty)
+ let newDetail = createDetailInfo(detail); //
+ item.details.push(newDetail);
+ }
+ })
+ return items;
+}
+
+export function createItemInfo(res) {
+ let item = {
+ itemCode: res.itemCode,
+ itemName: res.itemName,
+ stdPackQty: Number(res.stdPackQty),
+ stdPackUnit: res.stdPackUnit,
+ qty: Number(res.qty),
+ handleQty: 0,
+ uom: res.uom,
+ details: []
+ }
+ return item;
+}
+
+export function createDetailInfo(data) {
+ data.scaned = false;
+ // data.record = {};
+ let detail = data;
+ return detail;
+}
+
+export function updateTitle(title) {
+ uni.setNavigationBarTitle({
+ title: title
+ })
+}
diff --git a/common/cache.js b/common/cache.js
new file mode 100644
index 00000000..e69de29b
diff --git a/common/classify.data.js b/common/classify.data.js
new file mode 100644
index 00000000..857a59e6
--- /dev/null
+++ b/common/classify.data.js
@@ -0,0 +1,371 @@
+export default [{
+ "name": "库存查询",
+ "children": [{
+ "name": "按零件查询库存",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "pages/query/item",
+ "index": 1,
+ },
+ {
+ "name": "按库位查询库存",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/query/location",
+ "index": 2,
+ },
+ {
+ "name": "按器具查询库存",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/query/container",
+ "index": 3,
+ },
+ {
+ "name": "单据查询",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/query/number",
+ "index": 3,
+ }
+
+ ]
+ },
+ {
+ "name": "原料管理",
+ "children": [{
+ "name": "采购收货任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/purchaseReceipt/job/receiptJob",
+ "index": 1,
+ },
+ {
+ "name": "到货检验任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/inspect/job/inspectJob",
+ "index": 1,
+ },
+ {
+ "name": "采购退货任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/purchaseReturn/job/returnJob",
+ "index": 2,
+ },
+ {
+ "name": "采购退货记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/purchaseReturn/record/returnRecord",
+ "index": 3,
+ },
+
+ {
+ "name": "原料上架任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/putaway/job/putawayJob",
+ "index": 3,
+ },
+ {
+ "name": "原料上架记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/putaway/record/putawayRecord",
+ "index": 3,
+ },
+ {
+ "name": "发料任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/issue/job/issueJob",
+ "index": 4,
+ },
+ {
+ "name": "直接发料",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/issue/record/issueRecord",
+ "index": 5,
+ },
+ {
+ "name": "生产收料任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReceipt/job/productionReceiptJob",
+ "index": 5,
+ },
+ {
+ "name": "生产收料记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReceipt/record/productionReceiptRecord",
+ "index": 5,
+ },
+ {
+ "name": "生产退料任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReturn/job/returnJob",
+ "index": 6,
+ },
+ {
+ "name": "生产合格退料",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReturn/record/returnToStore",
+ "index": 7,
+ },
+ {
+ "name": "生产隔离退料",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReturn/record/returnToHold",
+ "index": 8,
+ },
+
+ ]
+ },
+ {
+ "name": "库存管理",
+ "children": [{
+ "name": "库存转移任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/inventoryMove/job/inventoryMoveJob",
+ "index": 8,
+ }, {
+ "name": "库存转移",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/inventoryMove/record/moveFree",
+ "index": 8,
+ },
+ {
+ "name": "合格转隔离",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/inventoryMove/record/moveOkToHold",
+ "index": 8,
+ },
+ {
+ "name": "隔离转合格",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/inventoryMove/record/moveHoldToOk",
+ "index": 8,
+ },
+
+ {
+ "name": "盘点任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/count/job/countJob",
+ "index": 8,
+ },
+ {
+ "name": "库位盘点",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/count/record/countRecord",
+ "index": 8,
+ },
+ {
+ "name": "计划外入库任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/job/receiptJob",
+ "index": 8,
+ },
+ {
+ "name": "计划外出库任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/job/issueJob",
+ "index": 8,
+ },
+ {
+ "name": "计划外入库记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/record/receiptRecord",
+ "index": 8,
+ },
+ {
+ "name": "计划外出库记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/record/issueRecord",
+ "index": 8,
+ },
+ {
+ "name": "报废出库\n(记录)",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/scrap/record/scrapRecord",
+ "index": 8,
+ },
+ ]
+ },
+ {
+ "name": "制品管理",
+ "children": [{
+ "name": "制品收货任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/productReceipt/job/productReceiptJob',
+ "index": 1,
+ },
+ {
+ "name": "制品收货记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/productReceipt/record/productReceiptRecord',
+ "index": 1,
+ },
+ {
+ "name": "制品上架任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/productPutaway/job/productPutawayJob',
+ "index": 1,
+ },
+ {
+ "name": "制品上架记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/productPutaway/record/productPutawayRecord',
+ "index": 1,
+ },
+ {
+ "name": "制品发货任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/deliver/job/deliverJob',
+ "index": 1,
+ },
+ {
+ "name": "制品发货记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/deliver/record/deliverRecord',
+ "index": 1,
+ },
+ {
+ "name": "客户退货任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/customerReturn/job/returnJob',
+ "index": 1,
+ },
+ {
+ "name": "客户退货记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": '/pages/customerReturn/record/returnRecord',
+ "index": 1,
+ },
+ {
+ "name": "调拨接收任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/transfer/job/receiptJob",
+ "index": 8,
+ },
+ {
+ "name": "调拨接收记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/transfer/record/receiptRecord",
+ "index": 8,
+ },
+ {
+ "name": "调拨发出任务",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/transfer/job/issueJob",
+ "index": 8,
+ },
+ {
+ "name": "调拨发出记录",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/transfer/record/issueRecord",
+ "index": 8,
+ },
+
+ ]
+ },
+ {
+ "name": "器具管理",
+ "children": [{
+ "name": "托盘绑定",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/pallet/record/bindPalletRecord",
+ "index": 8,
+ },
+ {
+ "name": "托盘解绑",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/pallet/record/unBindPalletRecord",
+ "index": 8,
+ },
+ {
+ "name": "拆包",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/package/record/splitPackageRecord",
+ "index": 8,
+ },
+ {
+ "name": "合包",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/package/record/mergePackageRecord",
+ "index": 8,
+ },
+ {
+ "name": "翻包",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/package/record/overPackageRecord",
+ "index": 8,
+ },
+
+
+ ]
+ },
+ {
+ "name": "申请(原料)",
+ "children": [{
+ "name": "发料申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/issue/request/issueRequest",
+ "index": 8,
+ },
+ {
+ "name": "采购退货申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/purchaseReturn/request/returnRequest",
+ "index": 8,
+ },
+ {
+ "name": "原料上架申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/putaway/request/putawayRequest",
+ "index": 8,
+ },
+ {
+ "name": "生产退料合格申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReturn/request/returnToStoreRequest",
+ "index": 8,
+ },
+ {
+ "name": "生产退料隔离申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productionReturn/request/returnToHoldRequest",
+ "index": 8,
+ },
+
+ {
+ "name": "制品上架申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/productPutaway/request/putawayRequest",
+ "index": 8,
+ },
+ {
+ "name": "成品发货申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/deliver/request/deliverRequest",
+ "index": 8,
+ },
+ {
+ "name": "客户退货申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/customerReturn/request/customerReturnRequest",
+ "index": 8,
+ },
+ {
+ "name": "计划外入库申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/request/receiptRequest",
+ "index": 8,
+ },
+ {
+ "name": "计划外出库申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/unPlanned/request/issueRequest",
+ "index": 8,
+ },
+ {
+ "name": "报废出库申请",
+ "icon": "/static/menus/dy_menu/menu_search_lj.svg",
+ "url": "/pages/scrap/request/scrapRrequest",
+ "index": 8,
+ }
+
+
+ ]
+ }
+
+]
diff --git a/common/commit.js b/common/commit.js
new file mode 100644
index 00000000..9e64c027
--- /dev/null
+++ b/common/commit.js
@@ -0,0 +1,42 @@
+import utils from '@/common/utils.js';
+export default {
+ commitTask(scanCount,total){
+ var isCommit=false;
+ if(scanCount==0){
+ isCommit = false;
+ // this.openScanPopup();
+ uni.showToast({
+ title: "请先扫描"
+ })
+ return isCommit;
+ }
+ if (this.scanCount==total) {
+ //提交
+ isCommit =true;
+ // uni.showToast({
+ // title: "可以提交"
+ // })
+
+ } else {
+ //判断是否可以部分提交,可以提交,提交数据,
+ let receipt_isPartCommit = getApp().globalData.recepit_configList.filter(
+ res => {
+ if (res.name == 'receipt_isPartCommit') {
+ return res;
+ }
+ });
+ if (receipt_isPartCommit[0].value) {
+ isCommit = true;
+ uni.showToast({
+ title: "可以部分提交"
+ })
+ //提交
+ } else {
+ isCommit = false;
+
+ }
+ }
+
+ return isCommit;
+ }
+}
\ No newline at end of file
diff --git a/common/common.js b/common/common.js
new file mode 100644
index 00000000..dc2377ed
--- /dev/null
+++ b/common/common.js
@@ -0,0 +1,33 @@
+export default {
+ created() {
+ const self = this;
+
+ },
+ mounted() {
+ const self = this;
+ },
+ methods: {
+ //设置字体
+ getRootFontSize(){
+ const self = this;
+ var fontSize = getApp().globalData.rootFontSize;
+ if(fontSize){
+ return fontSize;
+ }else{
+ fontSize = uni.getStorageSync('root_font_size');
+ if(fontSize){
+ getApp().globalData.rootFontSize=fontSize;
+ }else{
+ fontSize='20px';//默认字体大小
+ self.setRootFontSize(fontSize);
+ }
+ return fontSize;
+ }
+ },
+ setRootFontSize(fontSize){
+ uni.setStorageSync('root_font_size',fontSize);
+ getApp().globalData.rootFontSize=fontSize;
+ },
+
+ }
+}
\ No newline at end of file
diff --git a/common/config.js b/common/config.js
new file mode 100644
index 00000000..262a770c
--- /dev/null
+++ b/common/config.js
@@ -0,0 +1,26 @@
+let url_config = ""
+
+let jsApiList = [
+ 'biz.cspace.saveFile', //钉盘保存文件
+ 'biz.map.search', //位置搜索
+ 'device.geolocation.get', //定位
+ 'biz.ding.create', //创建ding消息
+ 'device.base.getUUID', //uuid
+ 'biz.contact.choose', //联系人
+ 'biz.contact.complexPicker', //选人和部门
+ 'biz.contact.departmentsPicker', //选部门
+ 'biz.chat.chooseConversationByCorpId', //会话选择
+ "biz.contact.chooseMobileContacts", //手机联系人
+];
+
+let option = {
+ corpId: '', //企业ID
+ agentId: '', //微应用ID
+ serverPath: url_config, //接口基础地址
+ jsApiList: jsApiList, //鉴权列表
+ isDebug: false //判断是否alert
+};
+export default {
+ url_config,
+ option
+}
diff --git a/common/detail.js b/common/detail.js
new file mode 100644
index 00000000..f2c5d88d
--- /dev/null
+++ b/common/detail.js
@@ -0,0 +1,76 @@
+export function getDataSource(details) {
+ let items = [];
+ details.forEach(detail => {
+ var item = items.find(r =>
+ r.itemCode == detail.itemCode)
+ if (item == undefined) {
+ item = createItemInfo(detail);
+ let newDetail = createDetailInfo(detail); //
+ item.details.push(newDetail);
+ items.push(item)
+ } else {
+ item.qty += detail.qty
+ let newDetail = createDetailInfo(detail); //
+ item.details.push(newDetail);
+ }
+ })
+ return items;
+}
+
+export function createItemInfo(detail) {
+ let item = {
+ itemCode: detail.itemCode,
+ itemName: detail.itemName,
+ stdPackQty: Number(detail.stdPackQty)||undefined,
+ stdPackUnit: detail.stdPackUnit,
+ qty: Number(detail.qty),
+ handleQty: 0,
+ uom: detail.uom,
+ details: []
+ }
+ return item;
+}
+
+export function createDetailInfo(data) {
+ data.scaned = false;
+ // data.record = {};
+ let detail = data;
+ return detail;
+}
+
+//根据明细创建记录
+export function createRecordInfo(detail, balance) {
+ var record = {}
+ // let record = JSON.parse(JSON.stringify(detail));
+ //克隆对象,深度克隆,防止双向绑定同一个变量
+ Object.assign(record, detail)
+ detail.scaned = true;
+ detail.balance = balance;
+ detail.recommendInventoryStatus = detail.inventoryStatus;
+ detail.inventoryStatus = balance.inventoryStatus;
+ record.qty = Number(balance.qty);
+ return record;
+}
+
+//计算实际数量
+export function calcHandleQty(detailSource) {
+ for (let item of detailSource) {
+ item.handleTotalQty = 0;
+ for (let detail of item.details) {
+ if (detail != undefined && detail.scaned) {
+ item.handleTotalQty += Number(detail.handleQty)
+ }
+ }
+ }
+}
+
+
+export function getScanCount(detailList) {
+ let items = detailList.filter(r => {
+ if (r.scaned) {
+ return r;
+ }
+ })
+ let scanCount = items != null ? items.length : 0;
+ return scanCount;
+}
diff --git a/common/directory.js b/common/directory.js
new file mode 100644
index 00000000..af8e4037
--- /dev/null
+++ b/common/directory.js
@@ -0,0 +1,388 @@
+
+
+let jobStatusList = [];
+let itemStatusList =[];
+let locationTypeList = [];
+let uomList = [];
+let inventoryStatusList = [];
+let containerTypeList = [];
+let packUnitList = [];
+let requestStatusList = [];
+let unplannedReceiptReasonList = [];
+let unplannedIissueReason = [];
+let scrapReasonList = [];
+let inspectFailedReasonList = [];
+let nextActionList = [];
+let inspectTypeList = [];
+
+
+// 获取业务类型字典项
+export function getBusinessTypeDesc(type) {
+ if (type == "SupplierDeliver") {
+ return "供应商发货"
+ } else if (type = "PurchaseReceipt") {
+ return "采购收货";
+ } else if (type = "PurchaseReturn") {
+ return "采购退货";
+ } else if (type = "PurchasePutaway") {
+ return "采购上架";
+ }
+}
+
+//获取字典信息
+export function clearCacheData() {
+ jobStatusList = [];
+ itemStatusList =[];
+ locationTypeList = [];
+ uomList = [];
+ inventoryStatusList = [];
+ containerTypeList = [];
+ packUnitList = [];
+ requestStatusList = [];
+ unplannedReceiptReasonList = [];
+ unplannedIissueReason = [];
+ scrapReasonList = [];
+ inspectFailedReasonList = [];
+ nextActionList = [];
+ inspectTypeList = [];
+}
+
+//获取字典信息
+export function getDirectoryInfo(type) {
+
+ var result = [];
+ var list = uni.getStorageSync("dictionary")
+ if (list != undefined && list.length > 0) {
+ for (let item of list) {
+ if (item.type == type) {
+ result = item.subList
+ break;
+ }
+ }
+ }
+
+ return result
+}
+
+//将字典项转为数组
+export function getDirectoryItemArray(data) {
+ var array = []
+ if (data == undefined || data == null || data == "") {
+ return array
+ }
+
+ if (data.indexOf(',') < 0) {
+ array.push(data)
+ } else {
+ var arrayItems = data.split(',')
+ arrayItems.forEach(res => {
+ array.push(res)
+ })
+ }
+ return array
+}
+
+//查询字典项是否在列表中
+export function checkDirectoryItemExist(list, type) {
+ let exist = false;
+ if (list == null || list.length == 0) {
+ exist = true;
+ } else {
+ var temp = list.filter(res => {
+ if (res == type) {
+ return res
+ }
+ })
+ if (temp != undefined && temp.length > 0) {
+ exist = true
+ }
+ }
+ return exist
+}
+
+
+//获取任务状态
+export function getJobStateInfo(value) {
+ var resultInfo = "";
+ if (jobStatusList.length == 0) {
+ jobStatusList = getDirectoryInfo("job_status")
+ }
+ if (jobStatusList.length > 0) {
+ for (let item of jobStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取任务状态样式
+export function getJobStateStyle(value) {
+ let item = getJobStateInfo(value);
+ if (item == null || item == '') {
+ return 'other'
+ } else {
+ if (item.remark == '') {
+ return 'other'
+ } else {
+ return item.remark;
+ }
+ }
+}
+
+//获取库位描述
+export function getListLocationTypeDesc(lst) {
+ let desc = '';
+ lst.forEach(res => {
+ desc += getLocationTypeInfo(res).label + ","
+ })
+ desc = desc.slice(0, -1);
+ return desc;
+}
+
+//获取物品状态
+export function getItemStateInfo(value) {
+ var resultInfo = "";
+ if (itemStatusList.length == 0) {
+ itemStatusList = getDirectoryInfo("item_status")
+ }
+ if (itemStatusList.length > 0) {
+ for (let item of itemStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库位类型
+export function getLocationTypeInfo(value) {
+ var resultInfo = "";
+ if (locationTypeList.length == 0) {
+ locationTypeList = getDirectoryInfo("location_type")
+ }
+ if (locationTypeList.length > 0) {
+ for (let item of locationTypeList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库位类型名称
+export function getLocationTypeName(value) {
+ let location = getLocationTypeInfo(value);
+
+ return location == '' ? value : location.label;
+}
+
+//获取计量单位
+export function getUnitInfo(value) {
+ var resultInfo = "";
+ if (uomList.length == 0) {
+ uomList = getDirectoryInfo("uom")
+ }
+ if (uomList.length > 0) {
+ for (let item of uomList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取包装单位
+export function getStdPackUnitInfo(value) {
+ var resultInfo = "";
+ if (packUnitList.length == 0) {
+ packUnitList = getDirectoryInfo("pack_unit")
+ }
+ if (packUnitList.length > 0) {
+ for (let item of packUnitList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取申请状态
+export function getRequestStateInfo(value) {
+ var resultInfo = "";
+ if (requestStatusList.length == 0) {
+ requestStatusList = getDirectoryInfo("request_status")
+ }
+ if (requestStatusList.length > 0) {
+ for (let item of requestStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+
+//获取库存状态
+export function getInventoryStatusInfo(value) {
+ var resultInfo = "";
+ if (inventoryStatusList.length == 0) {
+ inventoryStatusList = getDirectoryInfo("inventory_status")
+ }
+ if (inventoryStatusList.length > 0) {
+ for (let item of inventoryStatusList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取库存样式
+export function getInventoryStatusStyle(value) {
+ let item = getInventoryStatusInfo(value);
+ if (item == null || item == '') {
+ return 'other'
+ } else {
+ if (item.remark == '') {
+ return 'other'
+ } else {
+ return item.remark;
+ }
+ }
+}
+
+//获取库存样式
+export function getInventoryStatusName(value) {
+ let item = getInventoryStatusInfo(value);
+ if (item == null || item == '') {
+ return value
+ } else {
+ if (item.label == '') {
+ return value
+ } else {
+ return item.label;
+ }
+ }
+}
+
+//获取状态描述
+export function getInventoryStatusDesc(lst) {
+ let desc = '';
+ lst.forEach(res => {
+ desc += getInventoryStatusInfo(res).label + ","
+ })
+ desc = desc.slice(0, -1);
+ return desc;
+}
+
+//获取器具状态
+export function getContainerStatusInfo(value) {
+ var resultInfo = "";
+ if (containerTypeList.length == 0) {
+ containerTypeList = getDirectoryInfo("container_type")
+ }
+ if (containerTypeList.length > 0) {
+ for (let item of containerTypeList) {
+ if (item.value == value) {
+ resultInfo = item
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
+//获取计划外入库原因
+export function getUnPlannedReceiptReasonList(value) {
+ if (unplannedReceiptReasonList.length == 0) {
+ unplannedReceiptReasonList = getDirectoryInfo("unplanned_receipt_reason")
+ }
+ unplannedReceiptReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return unplannedReceiptReasonList
+}
+
+//获取计划外出库原因
+export function getUnPlannedIssuseReasonList(value) {
+ if (unplannedIssueReasonList.length == 0) {
+ unplannedIssueReasonList = getDirectoryInfo("unplanned_issue_reason")
+ }
+ unplannedIssueReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return unplannedIssueReasonList
+}
+
+//获取报废出库原因
+export function getScarpReasonList(value) {
+ if (scrapReasonList.length == 0) {
+ scrapReasonList = getDirectoryInfo("scrap_reason")
+ }
+ scrapReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.code
+ })
+ return scrapReasonList
+}
+
+//获取检验失败原因
+export function getInspectFailedReasonList(value) {
+ if (inspectFailedReasonList.length == 0) {
+ inspectFailedReasonList = getDirectoryInfo("inspect_failed_reason")
+ }
+ inspectFailedReasonList.forEach(res => {
+ res.text = res.label;
+ res.value = res.value
+ })
+ return inspectFailedReasonList
+}
+
+//获取下一步动作
+export function getNextActionList(value) {
+ if (nextActionList.length == 0) {
+ nextActionList = getDirectoryInfo("next_action")
+ }
+ nextActionList.forEach(res => {
+ res.text = res.label;
+ res.value = res.value
+ })
+ return nextActionList
+}
+
+
+
+//获取检验类型
+export function getInspectType(value) {
+ var resultInfo = "";
+ if (inspectTypeList.length == 0) {
+ inspectTypeList = getDirectoryInfo("inspect_type")
+ }
+ if (inspectTypeList.length > 0) {
+ for (let item of inspectTypeList) {
+ if (item.value == value) {
+ resultInfo = item.label
+ break;
+ }
+ }
+ }
+ return resultInfo
+}
+
diff --git a/common/graceChecker.js b/common/graceChecker.js
new file mode 100644
index 00000000..b3db2d75
--- /dev/null
+++ b/common/graceChecker.js
@@ -0,0 +1,97 @@
+/**
+数据验证(表单验证)
+来自 grace.hcoder.net
+作者 hcoder 深海
+*/
+export default {
+ error:'',
+ check : function (data, rule){
+ for(var i = 0; i < rule.length; i++){
+ if (!rule[i].checkType){return true;}
+ if (!rule[i].name) {return true;}
+ if (!rule[i].errorMsg) {return true;}
+ if (!data[rule[i].name]) {this.error = rule[i].errorMsg; return false;}
+ switch (rule[i].checkType){
+ case 'string':
+ var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
+ if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
+ break;
+ case 'int':
+ var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
+ if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
+ break;
+ break;
+ case 'between':
+ if (!this.isNumber(data[rule[i].name])){
+ this.error = rule[i].errorMsg;
+ return false;
+ }
+ var minMax = rule[i].checkRule.split(',');
+ minMax[0] = Number(minMax[0]);
+ minMax[1] = Number(minMax[1]);
+ if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+ this.error = rule[i].errorMsg;
+ return false;
+ }
+ break;
+ case 'betweenD':
+ var reg = /^-?[1-9][0-9]?$/;
+ if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+ var minMax = rule[i].checkRule.split(',');
+ minMax[0] = Number(minMax[0]);
+ minMax[1] = Number(minMax[1]);
+ if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+ this.error = rule[i].errorMsg;
+ return false;
+ }
+ break;
+ case 'betweenF':
+ var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
+ if (!reg.test(data[rule[i].name])){this.error = rule[i].errorMsg; return false;}
+ var minMax = rule[i].checkRule.split(',');
+ minMax[0] = Number(minMax[0]);
+ minMax[1] = Number(minMax[1]);
+ if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+ this.error = rule[i].errorMsg;
+ return false;
+ }
+ break;
+ case 'same':
+ if (data[rule[i].name] != rule[i].checkRule) { this.error = rule[i].errorMsg; return false;}
+ break;
+ case 'notsame':
+ if (data[rule[i].name] == rule[i].checkRule) { this.error = rule[i].errorMsg; return false; }
+ break;
+ case 'email':
+ var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
+ if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+ break;
+ case 'phoneno':
+ var reg = /^1[0-9]{10,10}$/;
+ if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+ break;
+ case 'zipcode':
+ var reg = /^[0-9]{6}$/;
+ if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+ break;
+ case 'reg':
+ var reg = new RegExp(rule[i].checkRule);
+ if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+ break;
+ case 'in':
+ if(rule[i].checkRule.indexOf(data[rule[i].name]) == -1){
+ this.error = rule[i].errorMsg; return false;
+ }
+ break;
+ case 'notnull':
+ if(data[rule[i].name] == null || data[rule[i].name].length < 1){this.error = rule[i].errorMsg; return false;}
+ break;
+ }
+ }
+ return true;
+ },
+ isNumber : function (checkVal){
+ var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
+ return reg.test(checkVal);
+ }
+}
\ No newline at end of file
diff --git a/common/html-parser.js b/common/html-parser.js
new file mode 100644
index 00000000..20a89b28
--- /dev/null
+++ b/common/html-parser.js
@@ -0,0 +1,352 @@
+/*
+ * HTML5 Parser By Sam Blowes
+ *
+ * Designed for HTML5 documents
+ *
+ * Original code by John Resig (ejohn.org)
+ * http://ejohn.org/blog/pure-javascript-html-parser/
+ * Original code by Erik Arvidsson, Mozilla Public License
+ * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
+ *
+ * ----------------------------------------------------------------------------
+ * License
+ * ----------------------------------------------------------------------------
+ *
+ * This code is triple licensed using Apache Software License 2.0,
+ * Mozilla Public License or GNU Public License
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Simple HTML Parser.
+ *
+ * The Initial Developer of the Original Code is Erik Arvidsson.
+ * Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights
+ * Reserved.
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ----------------------------------------------------------------------------
+ * Usage
+ * ----------------------------------------------------------------------------
+ *
+ * // Use like so:
+ * HTMLParser(htmlString, {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ * // or to get an XML string:
+ * HTMLtoXML(htmlString);
+ *
+ * // or to get an XML DOM Document
+ * HTMLtoDOM(htmlString);
+ *
+ * // or to inject into an existing document/DOM node
+ * HTMLtoDOM(htmlString, document);
+ * HTMLtoDOM(htmlString, document.body);
+ *
+ */
+// Regular Expressions for parsing tags and attributes
+var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; // Empty Elements - HTML 5
+
+var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); // Block Elements - HTML 5
+// fixed by xxx 将 ins 标签从块级名单中移除
+
+var block = makeMap('a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); // Inline Elements - HTML 5
+
+var inline = makeMap('abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); // Elements that you can, intentionally, leave open
+// (and which close themselves)
+
+var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); // Attributes that have their values filled in disabled="disabled"
+
+var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything)
+
+var special = makeMap('script,style');
+function HTMLParser(html, handler) {
+ var index;
+ var chars;
+ var match;
+ var stack = [];
+ var last = html;
+
+ stack.last = function () {
+ return this[this.length - 1];
+ };
+
+ while (html) {
+ chars = true; // Make sure we're not in a script or style element
+
+ if (!stack.last() || !special[stack.last()]) {
+ // Comment
+ if (html.indexOf('');
+
+ if (index >= 0) {
+ if (handler.comment) {
+ handler.comment(html.substring(4, index));
+ }
+
+ html = html.substring(index + 3);
+ chars = false;
+ } // end tag
+
+ } else if (html.indexOf('') == 0) {
+ match = html.match(endTag);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(endTag, parseEndTag);
+ chars = false;
+ } // start tag
+
+ } else if (html.indexOf('<') == 0) {
+ match = html.match(startTag);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(startTag, parseStartTag);
+ chars = false;
+ }
+ }
+
+ if (chars) {
+ index = html.indexOf('<');
+ var text = index < 0 ? html : html.substring(0, index);
+ html = index < 0 ? '' : html.substring(index);
+
+ if (handler.chars) {
+ handler.chars(text);
+ }
+ }
+ } else {
+ html = html.replace(new RegExp('([\\s\\S]*?)<\/' + stack.last() + '[^>]*>'), function (all, text) {
+ text = text.replace(/|/g, '$1$2');
+
+ if (handler.chars) {
+ handler.chars(text);
+ }
+
+ return '';
+ });
+ parseEndTag('', stack.last());
+ }
+
+ if (html == last) {
+ throw 'Parse Error: ' + html;
+ }
+
+ last = html;
+ } // Clean up any remaining tags
+
+
+ parseEndTag();
+
+ function parseStartTag(tag, tagName, rest, unary) {
+ tagName = tagName.toLowerCase();
+
+ if (block[tagName]) {
+ while (stack.last() && inline[stack.last()]) {
+ parseEndTag('', stack.last());
+ }
+ }
+
+ if (closeSelf[tagName] && stack.last() == tagName) {
+ parseEndTag('', tagName);
+ }
+
+ unary = empty[tagName] || !!unary;
+
+ if (!unary) {
+ stack.push(tagName);
+ }
+
+ if (handler.start) {
+ var attrs = [];
+ rest.replace(attr, function (match, name) {
+ var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : '';
+ attrs.push({
+ name: name,
+ value: value,
+ escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') // "
+
+ });
+ });
+
+ if (handler.start) {
+ handler.start(tagName, attrs, unary);
+ }
+ }
+ }
+
+ function parseEndTag(tag, tagName) {
+ // If no tag name is provided, clean shop
+ if (!tagName) {
+ var pos = 0;
+ } // Find the closest opened tag of the same type
+ else {
+ for (var pos = stack.length - 1; pos >= 0; pos--) {
+ if (stack[pos] == tagName) {
+ break;
+ }
+ }
+ }
+
+ if (pos >= 0) {
+ // Close all the open elements, up the stack
+ for (var i = stack.length - 1; i >= pos; i--) {
+ if (handler.end) {
+ handler.end(stack[i]);
+ }
+ } // Remove the open elements from the stack
+
+
+ stack.length = pos;
+ }
+ }
+}
+
+function makeMap(str) {
+ var obj = {};
+ var items = str.split(',');
+
+ for (var i = 0; i < items.length; i++) {
+ obj[items[i]] = true;
+ }
+
+ return obj;
+}
+
+function removeDOCTYPE(html) {
+ return html.replace(/<\?xml.*\?>\n/, '').replace(/\n/, '').replace(/\n/, '');
+}
+
+function parseAttrs(attrs) {
+ return attrs.reduce(function (pre, attr) {
+ var value = attr.value;
+ var name = attr.name;
+
+ if (pre[name]) {
+ pre[name] = pre[name] + " " + value;
+ } else {
+ pre[name] = value;
+ }
+
+ return pre;
+ }, {});
+}
+
+function parseHtml(html) {
+ html = removeDOCTYPE(html);
+ var stacks = [];
+ var results = {
+ node: 'root',
+ children: []
+ };
+ HTMLParser(html, {
+ start: function start(tag, attrs, unary) {
+ var node = {
+ name: tag
+ };
+
+ if (attrs.length !== 0) {
+ node.attrs = parseAttrs(attrs);
+ }
+
+ if (unary) {
+ var parent = stacks[0] || results;
+
+ if (!parent.children) {
+ parent.children = [];
+ }
+
+ parent.children.push(node);
+ } else {
+ stacks.unshift(node);
+ }
+ },
+ end: function end(tag) {
+ var node = stacks.shift();
+ if (node.name !== tag) console.error('invalid state: mismatch end tag');
+
+ if (stacks.length === 0) {
+ results.children.push(node);
+ } else {
+ var parent = stacks[0];
+
+ if (!parent.children) {
+ parent.children = [];
+ }
+
+ parent.children.push(node);
+ }
+ },
+ chars: function chars(text) {
+ var node = {
+ type: 'text',
+ text: text
+ };
+
+ if (stacks.length === 0) {
+ results.children.push(node);
+ } else {
+ var parent = stacks[0];
+
+ if (!parent.children) {
+ parent.children = [];
+ }
+
+ parent.children.push(node);
+ }
+ },
+ comment: function comment(text) {
+ var node = {
+ node: 'comment',
+ text: text
+ };
+ var parent = stacks[0];
+
+ if (!parent.children) {
+ parent.children = [];
+ }
+
+ parent.children.push(node);
+ }
+ });
+ return results.children;
+}
+
+export default parseHtml;
diff --git a/common/initModal.js b/common/initModal.js
new file mode 100644
index 00000000..90a1356b
--- /dev/null
+++ b/common/initModal.js
@@ -0,0 +1,58 @@
+import Vuex from 'vuex'
+// 自定义弹窗
+export default function initModal(v) {
+ // 挂在store到全局Vue原型上
+ v.prototype.$modalStore = new Vuex.Store({
+ state: {
+ show: false,
+ title: "标题",
+ content: '内容',
+ showCancel: true,
+ cancelText: "取消",
+ cancelColor: "#333333",
+ cancelBackgroundColor: "rgba(236, 236, 236, 0.39)",
+ confirmText: "确定",
+ confirmColor: "#333333",
+ confirmBackgroundColor: "#FFBB24",
+ success: null,
+ },
+ mutations: {
+ hideModal(state) {
+ // 小程序导航条页面控制
+ // #ifndef H5
+ if (state.hideTabBar) {
+ wx.showTabBar();
+ }
+ // #endif
+ state.show = false
+ },
+ showModal(state, data) {
+ state = Object.assign(state, data)
+ console.log(state);
+ state.show = true
+ },
+ success(state, res) {
+ let cb = state.success
+ let resObj = {
+ cancel: false,
+ confirm: false
+ }
+ res == "confirm" ? resObj.confirm = true : resObj.cancel = true
+ cb && cb(resObj)
+ }
+ }
+ })
+ v.prototype.$showModal = function(option) {
+ if (typeof option === 'object') {
+ // #ifndef H5
+ if (option.hideTabBar) {
+ wx.hideTabBar();
+ }
+ // #endif
+
+ v.prototype.$modalStore.commit('showModal', option)
+ } else {
+ throw "配置项必须为对象传入的值为:" + typeof option;
+ }
+ }
+}
diff --git a/common/label.js b/common/label.js
new file mode 100644
index 00000000..60824ee0
--- /dev/null
+++ b/common/label.js
@@ -0,0 +1,160 @@
+let labelDic = [];
+
+import {
+ getLabelByHeader,
+ getPackageByNumber
+} from '@/api/request2.js';
+
+
+export function getLabelInfo(scanMsg, callBack) {
+ console.log('扫描信息:', scanMsg);
+ if (scanMsg.length == 0) {
+ return null
+ }
+ let items = scanMsg.split(';');
+ let header = items[0];
+ let version = items[1];
+ if (header != '' && version != '') {
+ //解析扫描的是一维码还是二维码
+ let type = header.substring(header.length - 1, header.length);
+ if (type == 'Q') //qrcode
+ {
+ getQRCodeInfo(header, version, scanMsg, callBack);
+ } else if (type == 'B') //barcode
+ {
+ getBarCodeInfo(header, version, items[2], callBack);
+ } else { //直接输入文本
+ getBarCodeInfo('text', 'V1.0', scanMsg, callBack);
+ }
+ }
+}
+
+export function getQRCodeInfo(header, version, scanMsg, callBack) {
+ //获取包装信息
+ let labelItem = labelDic.find(r => r.header == header && r.version == version);
+ if (labelItem == undefined) {
+ let labelResult = {
+ label: {
+ barType: 'QRCode',
+ },
+ package: {},
+ sucess: true,
+ message: ''
+ }
+ getLabelByHeader(header, version).then(res => {
+ if (res.data==null) {
+ labelResult.sucess = false;
+ labelResult.message = '未查找到标签头为[' + header + ']的标签类型';
+ callBack(labelResult);
+ } else {
+ let newItem = {
+ header: header,
+ version: version,
+ label: res.data,
+ };
+
+ labelDic.push(newItem);
+ getLabelItems(newItem, scanMsg, callBack);
+ }
+ }).catch(err => {
+ labelResult.sucess = false;
+ labelResult.message = err;
+ callBack(err);
+ })
+ } else {
+ getLabelItems(labelItem, scanMsg, callBack);
+ }
+}
+
+export function getLabelItems(labelItem, scanMsg, callBack) {
+ let labelResult = analysisQRCodeLabel(labelItem, scanMsg);
+ if (labelResult.label.labelType == 'PurchaseLabel' || labelResult.label.labelType == 'MakeLabel') {
+ //查询包装信息
+ let packingNumber = labelResult.label.packingNumber
+ if (packingNumber != undefined) {
+ getPackageByNumber(packingNumber).then(pack => {
+ if (pack.data.list.length == 0) {
+ labelResult.sucess = false;
+ labelResult.message = '包装号[' + packingNumber + ']没有包装信息';
+ } else {
+ labelResult.package = pack.data.list[0];
+ console.log('包装信息', JSON.stringify(labelResult.package))
+ }
+ callBack(labelResult);
+ }).catch(err => {
+ labelResult.sucess = false;
+ labelResult.message = err;
+ callBack(labelResult);
+ })
+ } else {
+ labelResult.sucess = false;
+ labelResult.message = '在条码中未解析到箱码';
+ callBack(labelResult);
+ }
+ } else {
+ callBack(labelResult);
+ }
+}
+
+export function analysisQRCodeLabel(labelItem, scanMsg) {
+ let labelResult = {
+ label: {
+ labelType: labelItem.label.labelType,
+ barType: 'QRCode',
+ },
+ package: {},
+ sucess: true,
+ message: ''
+ }
+
+ let separators = labelItem.label.separators;
+ if (separators == undefined || separators == null) {
+ labelResult.message = "未读取到分隔符";
+ } else {
+ if (scanMsg.indexOf(separators) < 0) {
+ labelResult.sucess = false;
+ labelResult.message = "标签格式不正确";
+ } else {
+ try {
+ let scanItems = scanMsg.split(separators);
+ if (scanItems.length > 0) {
+ scanItems.forEach((item, index) => {
+ let type = item.substring(0, 1);
+ let value = item.substring(1, item.length);
+ if (type == 'H') {
+ labelResult.label.header = item;
+ } else if (type == 'V') {
+ labelResult.label.version = item;
+ } else {
+ let barcode = labelItem.label.subList.find(code => code.prefixChar.toUpperCase() ==
+ type
+ .toUpperCase());
+ if (barcode != undefined) {
+ labelResult.label[barcode.code] = value;
+ }
+ }
+ })
+ }
+ } catch (e) {
+ labelResult.message = e.message;
+ }
+
+ }
+ }
+ // console.log('标签', labelResult.label)
+ return labelResult;
+}
+
+export function getBarCodeInfo(header, version, value, callBack) {
+ let labelResult = {
+ label: {
+ labelType: header,
+ barType: 'BarCode',
+ code:value
+ },
+ package: null,
+ sucess: true,
+ message: '',
+ }
+ callBack(labelResult);
+}
diff --git a/common/message.js b/common/message.js
new file mode 100644
index 00000000..0dd5280d
--- /dev/null
+++ b/common/message.js
@@ -0,0 +1,112 @@
+import * as dd from 'dingtalk-jsapi';
+import store from '@/store/index'
+
+let showAlert=true
+
+let message = {
+ error: function (msg) { //进入项目初始化配置
+ uni.showToast({
+ title: msg,
+ icon: "none"
+ });
+ },
+ alert:function (message) {
+ return new Promise((resolve, reject) => {
+ if (showAlert){
+ dd.device.notification.alert({
+ message: message,
+ title: "提示",
+ buttonName: "收到",
+ onSuccess : function(res) {
+ // 调用成功时回调
+ console.log(res)
+ },
+ onFail : function(err) {
+ // 调用失败时回调
+ console.log(err)
+ }
+ });
+ }
+ })
+ }
+}
+let selectD = {
+ selectPeo: function (option) {
+ return new Promise((resolve, reject) => {
+ dd.biz.contact.complexPicker({
+ title: option.title ? option.title : "选择人员", //标题
+ corpId: store.state.corpId, //企业的corpId
+ multiple: option.multiple ? option.multiple : true, //是否多选
+ limitTips: option.limitTips ? option.limitTips : "超出了", //超过限定人数返回提示
+ maxUsers: option.maxUsers ? option.maxUsers : 100, //最大可选人数
+ pickedUsers: option.pickedUsers ? option.pickedUsers : [], //已选用户
+ pickedDepartments: option.pickedDepartments ? option.pickedDepartments :[], //已选部门
+ disabledUsers: option.disabledUsers ? option.disabledUsers :[], //不可选用户
+ disabledDepartments: option.disabledDepartments ? option.disabledDepartments :[], //不可选部门
+ requiredUsers: option.requiredUsers ? option.requiredUsers :[], //必选用户(不可取消选中状态)
+ requiredDepartments: option.requiredDepartments ? option.requiredDepartments :[], //必选部门(不可取消选中状态)
+ appId: store.state.agentId, //微应用Id,企业内部应用查看AgentId
+ permissionType: "GLOBAL", //可添加权限校验,选人权限,目前只有GLOBAL这个参数
+ responseUserOnly: true, //返回人,或者返回人和部门
+ startWithDepartmentId: 0, //仅支持0和-1
+ onSuccess: function (result) {
+ // alert(JSON.stringify(result))
+ resolve(result);
+/**
+ {
+ selectedCount:1, //选择人数
+ users:[{"name":"","avatar":"","emplId ":""}],//返回选人的列表,列表中的对象包含name(用户名),avatar(用户头像),emplId(用户工号)三个字段
+ departments:[{"id":,"name":"","number":}]//返回已选部门列表,列表中每个对象包含id(部门id)、name(部门名称)、number(部门人数)
+}
+ */
+ },
+ onFail: function (err) {
+ alert("唤起联系人失败");
+ reject(err)
+ }
+ });
+ })
+ },
+ selectDept: function (option) {
+ return new Promise((resolve, reject) => {
+ dd.biz.contact.departmentsPicker({
+ title: option.title ? option.title : "选择部门", //标题
+ corpId: store.state.corpId, //企业的corpId
+ multiple: option.multiple ? option.multiple : true, //是否多选
+ limitTips: option.limitTips ? option.limitTips : "超出了", //超过限定人数返回提示
+ maxDepartments: option.maxDepartments ? option.maxDepartments : 100, //最大可选部门
+ pickedDepartments: option.pickedDepartments ? option.pickedDepartments :[], //已选部门
+ disabledDepartments: option.disabledDepartments ? option.disabledDepartments :[], //不可选部门
+ requiredDepartments: option.requiredDepartments ? option.requiredDepartments :[], //必选部门(不可取消选中状态)
+ appId: store.state.agentId, //微应用Id,企业内部应用查看AgentId
+ permissionType: "GLOBAL", //可添加权限校验,选人权限,目前只有GLOBAL这个参数
+ onSuccess: function (result) {
+
+ resolve(result);
+ /**
+ {
+ "userCount":10, //选择人数。
+ "departments":[
+ {
+ "number":10,
+ "name":"班车2",
+ "id":405921063
+ }
+ ], //返回已选部门列表,列表中每个对象包含id (部门id)、name (部门名称)、number (部门人数)。
+ "departmentsCount":1 //选择的部门数。
+ }
+ */
+ },
+ onFail: function (err) {
+ alert("唤起部门失败");
+ reject(err)
+ }
+ });
+ })
+ },
+}
+
+export default {
+ message,
+ selectD
+}
diff --git a/common/modelConfig.js b/common/modelConfig.js
new file mode 100644
index 00000000..b0826b49
--- /dev/null
+++ b/common/modelConfig.js
@@ -0,0 +1,5 @@
+let maxPageSize = 10;
+
+export default{
+ maxPageSize
+}
\ No newline at end of file
diff --git a/common/permission.js b/common/permission.js
new file mode 100644
index 00000000..d9249d99
--- /dev/null
+++ b/common/permission.js
@@ -0,0 +1,245 @@
+/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
+
+var isIOS
+
+function album() {
+ var result = 0;
+ var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+ var authStatus = PHPhotoLibrary.authorizationStatus();
+ if (authStatus === 0) {
+ result = null;
+ } else if (authStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(PHPhotoLibrary);
+ return result;
+}
+
+function camera() {
+ var result = 0;
+ var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+ var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+ if (authStatus === 0) {
+ result = null;
+ } else if (authStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(AVCaptureDevice);
+ return result;
+}
+
+function location() {
+ var result = 0;
+ var cllocationManger = plus.ios.import("CLLocationManager");
+ var enable = cllocationManger.locationServicesEnabled();
+ var status = cllocationManger.authorizationStatus();
+ if (!enable) {
+ result = 2;
+ } else if (status === 0) {
+ result = null;
+ } else if (status === 3 || status === 4) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(cllocationManger);
+ return result;
+}
+
+function push() {
+ var result = 0;
+ var UIApplication = plus.ios.import("UIApplication");
+ var app = UIApplication.sharedApplication();
+ var enabledTypes = 0;
+ if (app.currentUserNotificationSettings) {
+ var settings = app.currentUserNotificationSettings();
+ enabledTypes = settings.plusGetAttribute("types");
+ if (enabledTypes == 0) {
+ result = 0;
+ console.log("推送权限没有开启");
+ } else {
+ result = 1;
+ console.log("已经开启推送功能!")
+ }
+ plus.ios.deleteObject(settings);
+ } else {
+ enabledTypes = app.enabledRemoteNotificationTypes();
+ if (enabledTypes == 0) {
+ result = 3;
+ console.log("推送权限没有开启!");
+ } else {
+ result = 4;
+ console.log("已经开启推送功能!")
+ }
+ }
+ plus.ios.deleteObject(app);
+ plus.ios.deleteObject(UIApplication);
+ return result;
+}
+
+function contact() {
+ var result = 0;
+ var CNContactStore = plus.ios.import("CNContactStore");
+ var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+ if (cnAuthStatus === 0) {
+ result = null;
+ } else if (cnAuthStatus == 3) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(CNContactStore);
+ return result;
+}
+
+function record() {
+ var result = null;
+ var avaudiosession = plus.ios.import("AVAudioSession");
+ var avaudio = avaudiosession.sharedInstance();
+ var status = avaudio.recordPermission();
+ console.log("permissionStatus:" + status);
+ if (status === 1970168948) {
+ result = null;
+ } else if (status === 1735552628) {
+ result = 1;
+ } else {
+ result = 0;
+ }
+ plus.ios.deleteObject(avaudiosession);
+ return result;
+}
+
+function calendar() {
+ var result = null;
+ var EKEventStore = plus.ios.import("EKEventStore");
+ var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+ if (ekAuthStatus == 3) {
+ result = 1;
+ console.log("日历权限已经开启");
+ } else {
+ console.log("日历权限没有开启");
+ }
+ plus.ios.deleteObject(EKEventStore);
+ return result;
+}
+
+function memo() {
+ var result = null;
+ var EKEventStore = plus.ios.import("EKEventStore");
+ var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+ if (ekAuthStatus == 3) {
+ result = 1;
+ console.log("备忘录权限已经开启");
+ } else {
+ console.log("备忘录权限没有开启");
+ }
+ plus.ios.deleteObject(EKEventStore);
+ return result;
+}
+
+
+function requestIOS(permissionID) {
+ return new Promise((resolve, reject) => {
+ switch (permissionID) {
+ case "push":
+ resolve(push());
+ break;
+ case "location":
+ resolve(location());
+ break;
+ case "record":
+ resolve(record());
+ break;
+ case "camera":
+ resolve(camera());
+ break;
+ case "album":
+ resolve(album());
+ break;
+ case "contact":
+ resolve(contact());
+ break;
+ case "calendar":
+ resolve(calendar());
+ break;
+ case "memo":
+ resolve(memo());
+ break;
+ default:
+ resolve(0);
+ break;
+ }
+ });
+}
+
+function requestAndroid(permissionID) {
+ return new Promise((resolve, reject) => {
+ plus.android.requestPermissions(
+ [permissionID],
+ function(resultObj) {
+ var result = 0;
+ for (var i = 0; i < resultObj.granted.length; i++) {
+ var grantedPermission = resultObj.granted[i];
+ console.log('已获取的权限:' + grantedPermission);
+ result = 1
+ }
+ for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+ var deniedPresentPermission = resultObj.deniedPresent[i];
+ console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+ result = 0
+ }
+ for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+ var deniedAlwaysPermission = resultObj.deniedAlways[i];
+ console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+ result = -1
+ }
+ resolve(result);
+ },
+ function(error) {
+ console.log('result error: ' + error.message)
+ resolve({
+ code: error.code,
+ message: error.message
+ });
+ }
+ );
+ });
+}
+
+function gotoAppPermissionSetting() {
+ if (permission.isIOS) {
+ var UIApplication = plus.ios.import("UIApplication");
+ var application2 = UIApplication.sharedApplication();
+ var NSURL2 = plus.ios.import("NSURL");
+ var setting2 = NSURL2.URLWithString("app-settings:");
+ application2.openURL(setting2);
+ plus.ios.deleteObject(setting2);
+ plus.ios.deleteObject(NSURL2);
+ plus.ios.deleteObject(application2);
+ } else {
+ var Intent = plus.android.importClass("android.content.Intent");
+ var Settings = plus.android.importClass("android.provider.Settings");
+ var Uri = plus.android.importClass("android.net.Uri");
+ var mainActivity = plus.android.runtimeMainActivity();
+ var intent = new Intent();
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+ intent.setData(uri);
+ mainActivity.startActivity(intent);
+ }
+}
+
+const permission = {
+ get isIOS(){
+ return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios')
+ },
+ requestIOS: requestIOS,
+ requestAndroid: requestAndroid,
+ gotoAppSetting: gotoAppPermissionSetting
+}
+
+export default permission
diff --git a/common/promise.js b/common/promise.js
new file mode 100644
index 00000000..79398dcf
--- /dev/null
+++ b/common/promise.js
@@ -0,0 +1,26 @@
+import urlConfig from './config.js'
+const promise = {}
+
+promise.asyncRequest = (url, options = {}, power) => {
+ return new Promise((resolve, reject) => {
+ uni.request({
+ url: url,
+ ...options, //data,method...
+ header: {
+ "content-type": "application/json",
+ 'withCredentials': true,
+ 'Authorization': localStorage.token_type,
+ // 'Authorization': localStorage.token_type,
+ ...options.header,
+ },
+ success: (res) => {
+ resolve(res.data);
+ },
+ fail: (err) => {
+ reject(err)
+ }
+ });
+ })
+}
+
+export default promise.asyncRequest
diff --git a/common/record.js b/common/record.js
new file mode 100644
index 00000000..a8358538
--- /dev/null
+++ b/common/record.js
@@ -0,0 +1,68 @@
+import {
+ getBusinesstypeByCode
+} from '@/api/request2.js';
+
+import {
+ getDirectoryItemArray,
+} from '@/common/directory.js';
+
+export function createItemInfo(balance, pack) {
+ let item = {
+ itemCode: pack.itemCode,
+ itemName: pack.itemName,
+ stdPackQty: pack.stdPackQty,
+ stdPackUnit: pack.stdPackUnit,
+ qty: Number(balance.qty),
+ handleQty: 0,
+ uom: pack.uom,
+ details: []
+ }
+ return item;
+}
+export function createDetailInfo(data, pack) {
+ data.scaned = true;
+ // data.toInventoryStatus = this.toInventoryStatus == "" ? data.inventoryStatus : this.toInventoryStatus;
+ let detail = {};
+ Object.assign(detail, data)
+ detail.balanceQty = Number(detail.qty)
+ detail.package = pack;
+ return detail;
+}
+
+//计算实际数量
+export function calcHandleQty(detailSource) {
+ for (let item of detailSource) {
+ item.qty = 0;
+ for (let detail of item.details) {
+ if (detail != undefined && detail.scaned) {
+ item.qty = item.qty + Number(detail.qty)
+ }
+ }
+ }
+}
+
+export function getBusinessType(typeCode, callback) {
+ let result = {
+ success: true,
+ businessType: '',
+ fromlocationTypeList: '',
+ tolocationTypeList: '',
+ message: ''
+ };
+ getBusinesstypeByCode(typeCode).then(res => {
+ if (res.data.total > 0) {
+ result.businessType = res.data.list[0];
+ result.fromlocationTypeList = getDirectoryItemArray(res.data.list[0].outLocationTypes)
+ result.tolocationTypeList = getDirectoryItemArray(res.data.list[0].inLocationTypes)
+ callback(result)
+ } else {
+ result.success = false;
+ result.message = '业务类型[' + typeCode + ']获取失败';
+ callback(result)
+ }
+ }).catch(error => {
+ result.success = false;
+ result.message = error;
+ callback(result)
+ })
+}
diff --git a/common/request.js b/common/request.js
new file mode 100644
index 00000000..aa357e47
--- /dev/null
+++ b/common/request.js
@@ -0,0 +1,123 @@
+import urlConfig from './config.js'
+// import store from '@/store/index'
+const request = {}
+
+request.globalRequest = (url, options = {}, power) => {
+ /* 权限判断 因为有的接口请求头可能需要添加的参数不一样,所以这里做了区分
+ 1 == 不通过access_token校验的接口
+ 2 == 文件下载接口列表
+ 3 == 验证码登录 */
+
+ let contentType = localStorage.token_type ? "application/json" : "application/x-www-form-urlencoded";
+
+ return new Promise((resolve, reject) => {
+ uni.request({
+ url: url,
+ ...options, //data,method...
+ header: {
+ "content-type": contentType,
+ "Authorization": localStorage.token_type,
+ 'withCredentials': true,
+ // 'Blade-Auth':'bearer '+store.state.token,
+ 'token_type': localStorage.token_type,
+ ...options.header,
+ },
+ success: (res) => {
+ if (res != null) {
+ if (res.statusCode != null) {
+ let statusCode = res.statusCode.toString();
+ // 状态码类型 2开头的全是成功
+ let code = statusCode.substring(0, 1);
+ if (statusCode == '200') {
+ resolve(res.data);
+ } else if (statusCode == '204') {
+ if (options.method == 'get') {
+ reject("没查到")
+ } else {
+ resolve(res.data)
+ }
+ } else if (statusCode == '400') {
+ if (res.data.error) {
+ if (res.data.error.message) {
+ reject(res.data.error.message);
+ }
+ } else if (res.data.errors) {
+ let errors = res.data.errors;
+ let errorMsg = '请求参数错误:\n';
+ let keys = Object.keys(errors);
+ for (var i = 0; i < keys.length; i++) {
+ let key = keys[i];
+ let value = errors[key];
+ errorMsg += i + 1 + ':' + value + '\n';
+ }
+ reject(errorMsg);
+ }
+ } else if (statusCode == '404') {
+ if (res.data === '') {
+ reject('未找到接口');
+ } else {
+ reject(res.data);
+ }
+ } else if (statusCode == '403') {
+ let message = res.data.error.message;
+ if (message) {
+ let temp;
+ try {
+ temp = JSON.parse(message)
+ } catch (err) {
+ reject(message);
+ }
+ if (temp) {
+ var hintError = temp.error;
+ var hintErrorDes = temp.error_description;
+ if (hintError == 'invalid_grant') {
+ if (hintErrorDes.includes(
+ 'Invalid username or password!')) {
+ reject('用户名或密码错误');
+ } else if (hintErrorDes.includes(
+ 'The user account has been locked out due to invalid login attempts'
+ )) {
+ reject("账号已被锁定,请稍后再试");
+ }
+ } else {
+ reject(message)
+ }
+ }
+ } else {
+ reject(res.statusCode + "错误")
+ }
+ } else {
+ let message = res.data.error.message;
+ if (message != undefined) {
+ reject(res.data.error.message)
+ } else {
+ reject(res.statusCode + "错误")
+ }
+ }
+ } else {
+ reject('options.url' + "返回的状态码类型为空")
+ }
+ } else {
+ reject('options.url' + "返回的res为空")
+ }
+ },
+ fail: (eror) => {
+ reject(eror)
+ }
+ })
+ })
+ // .catch(params => {
+ // reject(params);
+ // })
+}
+
+
+
+
+export default request.globalRequest
+
+// 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String。转换规则如下:
+
+// 对于 GET 方法,会将数据转换为 query string。例如 { name: 'name', age: 18 } 转换后的结果是 name=name&age=18。
+// 对于 POST 方法且 header['content-type'] 为 application/json 的数据,会进行 JSON 序列化。
+// 对于 POST 方法且 header['content-type'] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string。
diff --git a/common/request_test.js b/common/request_test.js
new file mode 100644
index 00000000..ab93d5ff
--- /dev/null
+++ b/common/request_test.js
@@ -0,0 +1,103 @@
+import urlConfig from './config.js'
+// import store from '@/store/index'
+
+function service(options = {}) {
+ let contentType = localStorage.token_type ? "application/json" : "application/x-www-form-urlencoded";
+ options.header = {
+ "content-type": contentType,
+ "Authorization": localStorage.token_type,
+ 'withCredentials': true,
+ // 'Blade-Auth':'bearer '+store.state.token,
+ 'token_type': localStorage.token_type
+ };
+ return new Promise((resolve, reject) => {
+ options.success = (res) => {
+ console.log("请求成功", res);
+ // 如果请求回来的状态码不是200则执行以下操作
+ if (res != null ) {
+ if (res.statusCode != null) {
+ let statusCode = res.statusCode.toString();
+ // 状态码类型 2开头的全是成功
+ let code = statusCode.substring(0, 1);
+ if (statusCode == '200') {
+ resolve(res.data);
+ } else if (statusCode == '204') {
+ if (options.method == 'get') {
+ return null;
+ } else {
+ reject(res.data)
+ }
+ } else if (statusCode == '400') {
+ if (res.data.error) {
+ if (res.data.error.message) {
+ reject(res.data.error.message);
+ }
+ } else if (res.data.errors) {
+ let errors = res.data.errors;
+ let errorMsg = '请求参数错误:\n';
+ let keys = Object.keys(errors);
+ for (var i = 0; i < keys.length; i++) {
+ let key = keys[i];
+ let value = errors[key];
+ errorMsg += i + 1 + ':' + value + '\n';
+ }
+ reject(errorMsg);
+ }
+ } else if (statusCode == '404') {
+ if (res.data === '') {
+ reject('未找到接口');
+ } else {
+ reject(res.data);
+ }
+ }
+ else if (statusCode == '403') {
+ let message = res.data.error.message;
+ if (message) {
+ let temp;
+ try {
+ temp = JSON.parse(message)
+ } catch (err) {
+ reject(message) ;
+ }
+ if (temp) {
+ var hintError = temp.error;
+ var hintErrorDes = temp.error_description;
+ if (hintError == 'invalid_grant') {
+ if (hintErrorDes.includes('Invalid username or password!')) {
+ reject('用户名或密码错误');
+ } else if (hintErrorDes.includes(
+ 'The user account has been locked out due to invalid login attempts'
+ )) {
+ reject("账号已被锁定,请稍后再试");
+ }
+ } else {
+ reject(message)
+ }
+ }
+ } else {
+ reject(res.statusCode + "错误")
+ }
+ }
+ else {
+ let message = res.data.error.message;
+ if (message != undefined) {
+ reject(res.data.error.message)
+ } else {
+ reject(res.statusCode + "错误")
+ }
+ }
+ } else {
+ reject('options.url' + "返回的状态码类型为空")
+ }
+ } else {
+ reject('options.url' + "返回的res为空")
+ }
+ };
+ options.fail = (err) => {
+ reject(err);
+ };
+ uni.request(options);
+ });
+ }
+
+ export default service;
diff --git a/common/scan.js b/common/scan.js
new file mode 100644
index 00000000..93a3e8c5
--- /dev/null
+++ b/common/scan.js
@@ -0,0 +1,309 @@
+//解析扫描信息
+//P2251076NAA;L220325;Q2000;N0205183222000006;SS0000066;V02051832;OPO1072;C15;
+//解析规则
+//P:itemCode 物料号
+//L:lot批次
+//Q:qty 数量
+//N:asn 供应商商发货单 ASN
+//S:packingCode 箱码
+//T:containerCode托盘
+//V:supplierCode 供应商代码
+//O: order订单号
+//C: poLine订单行
+//B:supplierBatch 供应商批次
+
+//返回结果
+//sucess true:成功 false:失败
+//scanType barcode:条码 qrcode:二维码
+//isPack true:箱码 false:托码
+export function analyseScanInfo(scanMsg) {
+ let scanResult = {
+ sucess: false,
+ message: "",
+ data: {
+ isPack: null,
+ scanType: null,
+ itemCode: null,
+ batch: null,
+ qty: null,
+ asn: null,
+ packingNumber: null,
+ supplierBatch: null,
+ order: null,
+ poLine: null,
+ code: null,
+ }
+ };
+ if (scanMsg === "") {
+ scanResult.message = "扫描到的内容为空";
+ } else {
+ try {
+ console.log('1.扫描到的内容:', scanMsg);
+ //条码
+ if (scanMsg.indexOf(';') < 0) {
+ scanResult.sucess = true;
+ scanResult.data.code = scanMsg;
+ scanResult.data.scanType = 'barcode'; //条码
+ } else {
+ let arrayItems = scanMsg.split(';');
+ if (arrayItems.length > 0) {
+ scanResult.data.scanType = 'qrcode'; //二维码
+ scanResult.data["test"] = 'test';
+ arrayItems.forEach((item, index) => {
+ if (item != "") {
+ let type = item.substring(0, 1);
+ let value = item.substring(1, item.length);
+ if (type != "") {
+ scanResult.data.scanType = 'qrcode';
+ switch (type) {
+ case "P": //物料号
+ case "p":
+ scanResult.data.itemCode = value;
+ break;
+ case "L": //批次
+ case "l":
+ scanResult.data.lot = value;
+ break;
+ case "Q": //数量
+ case "q":
+ scanResult.data.qty = value;
+ break;
+ case "N": //供应商商发货单 ASN
+ case "n":
+ scanResult.data.asn = value;
+ break;
+ case "S": //箱码
+ case "s":
+ scanResult.data.packingNumber = value;
+ scanResult.data.isPack = true;
+ break;
+ case "T": //托盘
+ case "t":
+ scanResult.data.containerCode = value;
+ scanResult.data.isPack = false;
+ break;
+ case "V": //供应商批次
+ case "v":
+ scanResult.data.supplierCode = value;
+ break;
+ case "O": //订单号
+ case "o":
+ scanResult.data.order = value;
+ break;
+ case "C": //订单行
+ case "c":
+ scanResult.data.poLine = value;
+ break;
+ case "B": //供应商批次
+ case "b":
+ scanResult.data.supplierBatch = value;
+ break;
+ // default: //条码
+ // scanResult.data.code = item;
+ // scanResult.data.scanType = 'barcode';
+ // break;
+ }
+ }
+ }
+ })
+
+ scanResult.sucess = true;
+ } else { //扫描的是条码,直接返回接收到的内容
+ scanResult.sucess = true;
+ scanResult.data.code = scanMsg;
+ scanResult.data.scanType = 'barcode';
+ }
+ }
+ } catch (ex) {
+ scanResult.sucess = false;
+ scanResult.message = "解析遇到异常" + ex.message;
+ }
+ }
+
+ return scanResult;
+}
+
+//解析完工收货标签
+//P2250229RAA;L220408;Q100;N62840610;SB0000107;UEA;DU571LS;FA;E2022-4-8
+//P零件号,L批次,Q数量,N生产计划号,S箱码,U计量单位,D生产线,F班次,E日期,M零件名称(待添加)
+//解析规则
+//P:itemCode 物料号
+//L:lot批次
+//Q:qty 数量
+//N:pnumber productionPlanNumber生产计划号
+//S:packingCode 箱码
+//U:uom 计量单位
+//D:prodLine 生产线
+//F:shift 班次
+//E:produceDate日期
+
+//返回结果
+//sucess true:成功 false:失败
+//scanType barcode:条码 qrcode:二维码
+//isPack true:箱码 false:托码
+export function analyseProductLabelInfo(scanMsg) {
+ let scanResult = {
+ sucess: false,
+ message: "",
+ data: {
+ itemCode: null,
+ lot: null,
+ qty: null,
+ pnumber: null,
+ packingCode: null,
+ uom: null,
+ prodLine: null,
+ shift: null,
+ produceDate: null
+ }
+ };
+ if (scanMsg == "") {
+ scanResult.message = "扫描到的内容为空";
+ } else {
+ try {
+ //条码
+ if (scanMsg.indexOf(';') < 0) {
+ scanResult.sucess = false;
+ scanResult.message = "标签格式不正确";
+ } else {
+ let arrayItems = scanMsg.split(';');
+ if (arrayItems.length > 0) {
+ arrayItems.forEach((item, index) => {
+ if (item != "") {
+ let type = item.substring(0, 1);
+ let value = item.substring(1, item.length);
+ if (type != "") {
+ switch (type) {
+ case "P": //物料号
+ case "p":
+ scanResult.data.itemCode = value;
+ break;
+ case "L": //批次
+ case "l":
+ scanResult.data.lot = value;
+ break;
+ case "Q": //数量
+ case "q":
+ scanResult.data.qty = value;
+ break;
+ case "N": //生产计划号 ASN
+ case "n":
+ scanResult.data.pnumber = value;
+ break;
+ case "S": //箱码
+ case "s":
+ scanResult.data.packingCode = value;
+ break;
+ case "U": //计量单位
+ case "u":
+ scanResult.data.uom = value;
+ break;
+ case "D": //生产线
+ case "d":
+ scanResult.data.prodLine = value;
+ break;
+ case "F": //班次
+ case "f":
+ scanResult.data.shift = value;
+ break;
+ case "E": //日期
+ case "e":
+ scanResult.data.produceDate = value;
+ break;
+ default:
+ scanResult.sucess = false;
+ scanResult.message = "无法识别的前缀" + type;
+ break;
+ }
+ scanResult.sucess = true;
+ } else {
+ scanResult.sucess = false;
+ scanResult.message = "标签信息不能为空" + type;
+ }
+ }
+ })
+
+
+ } else { //扫描的是条码,直接返回接收到的内容
+ scanResult.sucess = false;
+ scanResult.message = "标签分隔符错误";
+ }
+ }
+ } catch (ex) {
+ scanResult.sucess = false;
+ scanResult.message = "解析遇到异常" + ex.message;
+ }
+ }
+ return scanResult;
+}
+
+
+//解析天津mes标签
+//1#2546319FL#254FL003#202207110009:
+//1.序号1,2.生产号2546311FL,3.零件号254FL004,4.批序号202207110009
+export function analyseTJMesQRCode(scanMsg) {
+ let scanResult = {
+ sucess: false,
+ message: "",
+ items: []
+ };
+ if (scanMsg == "") {
+ scanResult.message = "扫描到的内容为空";
+ } else {
+ try {
+ if (scanMsg.indexOf(':') < 0) {
+ scanResult.sucess = false;
+ scanResult.message = "标签格式不正确";
+ } else {
+ let arrayItems = scanMsg.split(':');
+ if (arrayItems.length > 0) {
+ arrayItems.forEach((item, index) => {
+ if (item != "") {
+ if (item.includes('#')) {
+ let datas = item.split('#');
+ //为空时是:2N
+ if (datas.length > 1) {
+ let itemCode = datas[2];
+ let location = itemCode.substring(3, 5);
+ let data = {
+ seq: datas[0], //序号
+ produceNo: datas[1], //生产号
+ // projectNo: datas[2], //项目号
+ itemCode: itemCode, //配置码(零件号)
+ lot: datas[3], //批次
+ position: location //上层、下层
+ }
+ scanResult.items.push(data)
+ }
+ } else {
+ if (item.includes('N')) {
+ let seq = item.substring(0, item.length - 1);
+ let data = {
+ seq: seq, //序号
+ produceNo: 'N', //生产号
+ projectNo: 'N', //项目号
+ itemCode: 'N', //配置码(零件号)
+ lot: 'N', //批次
+ position: ''
+ }
+ scanResult.items.push(data)
+ }
+ }
+ } else {
+ scanResult.sucess = false;
+ scanResult.message = "标签信息不能为空";
+ }
+ })
+ scanResult.sucess = true;
+ } else { //扫描的是条码,直接返回接收到的内容
+ scanResult.sucess = false;
+ scanResult.message = "标签分隔符错误";
+ }
+ }
+ } catch (ex) {
+ scanResult.sucess = false;
+ scanResult.message = "解析遇到异常" + ex.message;
+ }
+ }
+ return scanResult;
+}
diff --git a/common/storage.js b/common/storage.js
new file mode 100644
index 00000000..e69de29b
diff --git a/common/style/PDA_style.css b/common/style/PDA_style.css
new file mode 100644
index 00000000..47edd46a
--- /dev/null
+++ b/common/style/PDA_style.css
@@ -0,0 +1,221 @@
+
+@media screen and (min-width:400px) {
+ uni-app, uni-page-head{
+ height: 60px;
+ }
+ uni-page-head .uni-page-head{
+ height: 60px !important;
+ }
+ uni-page-head[uni-page-head-type=default]~uni-page-wrapper{
+ height: calc(100% - 70px) !important;
+ }
+ uni-page-head .uni-page-head__title{
+ font-size: 1.125rem !important;
+ line-height: 40px !important;
+ font-weight: normal !important;
+ }
+ uni-page-head .uni-btn-icon{
+ font-size: 1.725rem !important;
+ }
+ .font_xs{
+ font-size: 0.825rem !important;
+ }
+ .font_xl{
+ font-size: 1.325rem !important;
+ }
+ .mini-type-style{
+ font-size: 0.8rem !important;
+ }
+ .cen_card .label_box .label_info uni-text{
+ line-height: 1.725 !important;
+ /* font-size: 1rem !important; */
+ color: #333;
+ }
+ .cen_card .label_box .label_info{
+ background-color: #eee !important;
+ }
+ .popup_box .detail-list{
+ box-shadow: none !important;
+ }
+ .detail-list,.device-detail{
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15) !important;
+ }
+ .list_form .uni-table-tr{
+ background-color: #f0f0f0 !important;
+ }
+ .list_form .uni-table-th{
+ border-bottom: 1px solid #cfcfcf !important;
+ }
+ /* yuanswitch
+ .require_wrap{
+ padding-top: 0 !important;
+ }
+ .require_wrap .require_cell{
+ line-height: 1.75 !important;
+ }
+ .ljh_box .tit_ljh{
+ font-size: 1.25rem !important;
+ }
+ .cen_card .label_box .label_info {
+ background-color: #eee !important;
+ }
+ .cen_card .label_box .label_info uni-image{
+ width: 48rpx !important;
+ height: 48rpx !important;
+ }
+
+ .cen_card .label_box .label_info uni-text{
+ line-height: 1.5 !important;
+ font-size: 1rem !important;
+ color: #333;
+ }
+ .ljh_box .tit_ljh .state-style, .top_card .state-style{
+ font-size: 0.8rem !important;
+ }
+ .card_task .ljh_box{
+ margin-bottom: 0 !important;
+ }
+ .task_num uni-image{
+ width: 56rpx !important;
+ height: 56rpx !important;
+ }
+ .task_num uni-text{
+ font-size: 1rem !important;
+ }
+ .pda_receipt_label .label_order uni-text{
+ font-size: 1rem;
+ color: #434556;
+ }
+ .pda_receipt_label .icon_normal{
+ width: 56rpx;
+ height: 56rpx;
+ }
+ .pda_receipt_bot .icon_normal{
+ width: 56rpx;
+ height: 56rpx;
+ float: left;
+ }
+ .pda_receipt_bot .text_darkblue{
+ float: left;
+ font-size: 1rem;
+ margin-top: 8rpx;
+ display: inline-block;
+ }*/
+ .top_card .text_lightblue{
+ font-size: 1rem !important;
+ }
+ .top_card .cell_box .cell_info{
+ margin-bottom: 0;
+ }
+ .uni-tab-item-title{
+ font-size: 1.125rem !important;
+ }
+ .cell_box .cell_info uni-view{
+ font-size: 1rem !important;
+ color: #101010 !important;
+ }
+ .cell_box .cell_info .text_lightblue{
+ font-size: 0.875rem !important;
+ color: #6A6E7A !important;
+ }
+ .cell_box .cell_info .text_black{
+ font-size: 1.125rem !important;
+
+ }
+ .scan_float uni-image{
+ margin-top: 18rpx !important;
+ }
+ .scan_float uni-view{
+ font-size: 0.875rem !important;
+ letter-spacing: 1px;
+ }
+ .new_btn_bot .new_save_btn,.popup_box .pop_title uni-text{
+ font-size: 1rem !important;
+ }
+ .bot_card{
+ background-color: #eee !important;
+ }
+ .bot_card_item uni-text{
+ font-size: 0.8rem !important;
+ font-weight: 600;
+ }
+ .summary_state .state_point{
+ font-size: 1rem !important;
+ }
+ .summary_item label{
+ float: left;
+ }
+ .summary_item uni-text{
+ font-size: 1.125rem !important;
+ font-weight: normal !important;
+ float: left;
+ }
+ /* popup */
+ .popup_box{
+ box-sizing: border-box;
+ }
+ .popup_box .uni-steps{
+ width:100%;
+ overflow-x: hidden;
+ }
+ .popup_box .uni-steps__row-line-item{
+ height: 60rpx !important;
+ }
+ .popup_box .uni-steps__row-text-container{
+ margin-top: 0 !important;
+ }
+ .popup_box,.uni-popup .uni-scroll-view-content{
+ border-top-left-radius:30rpx !important;
+ border-top-right-radius:30rpx !important;
+ }
+ .popup_box .pop_title{
+ font-size: 1.125rem !important;
+ letter-spacing: 1px;
+ }
+ .popup_box .pop_tab .tab_tit{
+ font-size: 0.875rem !important;
+ }
+ .popup_box .pop_tab .tab_tit_active{
+ font-size: 1rem !important;
+ }
+ .popup_box .pop_tab .tab_info{
+ min-height: 200rpx !important;
+ }
+ .popup_box .pop_tab .tab_info uni-textarea{
+ height: 200rpx;
+ }
+ .popup_box .pop_tab .tab_info uni-button{
+ font-size: 0.875rem !important;
+ letter-spacing: 1px;
+ }
+ /*底部按钮*/
+ .new_btn_bot .new_save_btn{
+ background-color: #E4EAFF !important;
+ height: 50px;
+ line-height: 50px;
+ }
+ .new_btn_bot .new_clear_btn{
+ font-size: 1rem !important;
+ line-height: 50px;
+ }
+ .scroll-detail{
+ padding-bottom: 70px !important;
+ }
+ .count_shadow,.device-detail{
+ box-shadow: 0 0 20rpx rgba(0,0,0,0.2);
+ }
+ .list_info {
+ padding: 0 20rpx 20rpx;
+ margin-top: 0;
+ }
+ .uni-scroll-view-content .creattp_list{
+ width: 100% !important;
+ }
+ .creattp_list .uni-list .list_cell uni-text{
+ font-weight: bold;
+ }
+ .popup_box .scan_scroll{
+ max-height: 44vh !important;
+
+ }
+}
diff --git a/common/style/new_style.css b/common/style/new_style.css
new file mode 100644
index 00000000..4db40b76
--- /dev/null
+++ b/common/style/new_style.css
@@ -0,0 +1,2663 @@
+/*WMY 20220818 cssv1.0*/
+/*公共*/
+uni-page-head .uni-page-head {
+ z-index: 98 !important;
+ background-color: #fff !important;
+}
+
+uni-page-head .uni-page-head__title {
+ font-weight: normal;
+}
+
+.whole {
+ width: 100%;
+}
+
+.fl {
+ float: left;
+}
+
+.fr {
+ float: right;
+}
+
+.tc {
+ text-align: center;
+}
+
+.text_bold {
+ font-weight: bold;
+}
+
+.text_black {
+ color: #101010;
+}
+
+.text_packingCode {
+ color: #101010;
+ word-break: break-all;
+}
+
+.text_lightblue {
+ color: #6A6E7A;
+}
+
+.text_darkblue {
+ color: #434556;
+}
+
+.text_blue {
+ color: #5A7CF3;
+}
+
+.font_xs {
+ font-size: 0.775rem;
+}
+
+.font_sm {
+ font-size: 0.825rem;
+}
+
+.font_xl {
+ font-size: 1.125rem;
+}
+
+.margin_top {
+ margin-top: 20rpx;
+}
+
+.margin_bottom {
+ margin-bottom: 20rpx;
+}
+
+.margin_xs_top {
+ margin-top: 10rpx;
+}
+
+.margin_xs_bottom {
+ margin-bottom: 10rpx;
+}
+
+.margin_right {
+ margin-right: 20rpx;
+}
+
+.margin {
+ margin: 20rpx;
+}
+
+.padding_10 {
+ padding: 10rpx;
+}
+
+.padding_15 {
+ padding: 15rpx;
+}
+
+.padding_20 {
+ padding: 20rpx;
+}
+
+.padding {
+ padding: 20rpx;
+}
+
+.padding_bottom {
+ padding-bottom: 20rpx;
+}
+
+.nopad {
+ padding: 0 !important;
+}
+
+.nopad_bot {
+ padding-bottom: 0 !important;
+}
+
+/*
+零件状态
+未知,可用,隔离,新增,规划,禁用
+*/
+
+.item_active {
+ background-color: #5FCB94;
+ color: #FFFFFF;
+}
+
+.item_hold {
+ background-color: #FF4206;
+ color: #FFFFFF;
+}
+
+.item_new {
+ background-color: #E6A23C;
+ color: #FFFFFF;
+}
+
+.item_plan {
+ background-color: #2677F9;
+ color: #FFFFFF;
+}
+
+.item_disable {
+ background-color: #666;
+ color: #FFFFFF;
+}
+
+/* 器具状态 */
+.container_empty {
+ background-color: #FF4206;
+ color: #FFFFFF;
+}
+
+.container_useing {
+ background-color: #5FCB94;
+ color: #FFFFFF;
+}
+
+
+.container_repair {
+ background-color: #666;
+ color: #FFFFFF;
+}
+
+.container_scrap {
+ background-color: #E6A23C;
+ color: #FFFFFF;
+}
+
+
+
+.scan_float {
+ position: fixed;
+ z-index: 10;
+ right: 20rpx;
+ bottom: 20%;
+ width: 110rpx;
+ height: 110rpx;
+ background-color: #5A7CF3;
+ border-radius: 50%;
+ text-align: center;
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);
+}
+
+.scan_float image {
+ width: 40rpx;
+ height: 40rpx;
+ margin-top: 10rpx;
+}
+
+.scan_float view {
+ color: #fff;
+ font-size: .725rem;
+ margin-top: -8rpx;
+}
+
+.top_card {
+ background-color: #5A7CF3;
+ overflow: hidden;
+ /* padding: 20rpx 0; */
+}
+
+.top_card .device-detail {
+ /* margin-top: 0 !important; */
+}
+
+.top_card .mini-type-style {
+ color: #fff !important;
+ font-weight: normal;
+ height: 46rpx;
+}
+
+.cen_card {
+ padding: 0 0rpx;
+ width: 100%;
+ box-sizing: border-box;
+ float: left;
+}
+
+.cell_box {
+ width: 100%;
+}
+
+.cell_box .cell_info {
+ position: relative;
+ /* width: 25%; */
+ padding: 0 20rpx;
+ margin: 0 0 20rpx;
+ text-align: center;
+}
+
+.cell_box .cell_long {
+ /* width: 33%; */
+}
+
+.cell_box .cell_info view {
+ font-size: 0.825rem;
+ margin-bottom: 10rpx;
+ color: #7B8195;
+}
+
+.cell_box .cell_info .text_black {
+ font-size: .875rem;
+ color: #101010;
+}
+
+.cell_box .cell_info .text_lightblue {
+ color: #949CB6;
+ font-size: 0.8rem;
+}
+
+.cell_box .cell_info::after {
+ position: absolute;
+ content: "";
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 20px;
+ background-color: #ddd;
+}
+
+.cell_box .cell_info:last-child::after {
+ width: 0;
+}
+
+.cen_card .label_box {
+ margin-bottom: 20rpx;
+}
+
+.cen_card .label_box .label_info {
+ background-color: #eee;
+ color: #434556;
+ font-size: 0.875rem;
+ padding: 8rpx;
+ border-radius: 8rpx;
+ margin-right: 10rpx;
+ vertical-align: middle;
+}
+
+.cen_card .label_box .label_info image {
+ /* float: left; */
+ vertical-align: middle;
+}
+
+.cen_card .label_box .label_info text {
+ /* line-height: 1.25; */
+ /* float: left; */
+ vertical-align: middle;
+}
+
+.photo_btn {
+ background-color: #ececec;
+ color: #5A7CF3;
+ font-size: 0.875rem;
+ padding: 8rpx 10rpx;
+ border-radius: 8rpx;
+}
+
+.photo_btn text {
+ line-height: 1.5;
+}
+
+.cen_card .cell_box .text_black {
+ font-size: 0.875rem;
+}
+
+.cen_card .cell_box .cell_info .text_lightblue {
+ font-size: 0.725rem;
+}
+
+.bot_card {
+ background-color: #f8f8f8;
+ padding: 16rpx;
+ overflow: hidden;
+}
+
+.bot_card_item {
+ width: 50%;
+ text-align: left;
+ height: 60rpx;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+/* .item_long{
+ width: 32% !important;
+}
+*/
+.item_short {
+ width: 20%;
+}
+
+.bot_card_item uni-text {
+ font-size: .725rem;
+ margin-left: 4rpx;
+ color: #333333;
+ background-color: transparent;
+}
+
+.bot_card_item .icon_state {
+ float: left;
+ margin-top: 22rpx;
+}
+
+.summary_wrap {
+ padding: 20rpx;
+ padding-top: 0;
+}
+
+.summary_state .state_point {
+ font-size: 0.825rem;
+}
+
+.summary_item uni-text {
+ font-size: 0.825rem;
+}
+
+.bot_card_item uni-text.state_point {
+ background-color: transparent;
+}
+
+.bot_card_item label {
+ vertical-align: middle;
+}
+
+.icon_normal {
+ width: 58rpx;
+ height: 58rpx;
+ vertical-align: middle
+}
+
+.bot_card_item .icon_normal {
+ float: left;
+ width: 46rpx;
+ height: 46rpx;
+}
+
+.icon_bg {
+ display: inline-block;
+ width: 46rpx;
+ height: 46rpx;
+ border-radius: 4rpx;
+}
+
+.icon_bg_xm {
+ background-color: #45B5F3;
+}
+
+.icon_bg_kw {
+ background-color: #5A7CF3;
+}
+
+.icon_bg_pc {
+ background-color: #BF94EB;
+}
+
+.icon_state {
+ display: inline-block;
+ width: 20rpx;
+ height: 20rpx;
+ border-radius: 50%;
+}
+
+.state_point {
+ background: none;
+}
+
+.title_tab {
+ display: flex;
+ justify-content: center;
+ height: 100rpx;
+}
+
+.bottom {
+ padding: 0 !important;
+}
+
+.uni-popup .uni-scroll-view {
+ overflow: visible !important;
+}
+
+.uni-popup .uni-scroll-view-content {
+ overflow-y: scroll;
+ max-height: 94vh;
+ background-color: #fff;
+ border-top-left-radius: 20rpx;
+ border-top-right-radius: 20rpx;
+}
+
+.uni-popup .scroll-Y {
+ padding-bottom: 0;
+}
+
+.popup_box {
+ position: relative;
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+ background: #fff url(@/static/icons_ui/popup_bot_bg.png) no-repeat left top;
+ background-size: 100%;
+ max-height: 93vh;
+}
+
+.popup_box .pop_title {
+ font-size: 0.9rem;
+ font-weight: bold;
+ color: #fff;
+ padding: 20rpx 20rpx;
+ font-size: 35rpx;
+}
+
+.popup_box .pop_title text {
+ font-size: 0.9rem;
+ font-weight: normal;
+}
+
+.popup_box .uni-steps {
+ width: 98%;
+}
+
+.popup_box .top_bg {
+ width: 100%;
+ height: inherit;
+}
+
+.popup_box .pop_tab {
+ padding: 20rpx;
+ box-sizing: border-box;
+ width: 100%;
+}
+
+.popup_box .pop_tab .tab_tit {
+ font-size: .825rem;
+ text-align: center;
+ color: #333;
+ background-color: #fff;
+ /* width: 30%; */
+ box-sizing: border-box;
+ padding: 10rpx 16rpx;
+ border-top-left-radius: 8rpx;
+ border-top-right-radius: 8rpx;
+ margin-right: 6rpx;
+}
+
+.popup_box .pop_tab .tab_tit_active {
+ color: #5A7CF3;
+ font-weight: bold;
+ /* font-size: 0.875rem; */
+}
+
+.popup_box .pop_tab .tab_info {
+ position: relative;
+ background-color: #fff;
+ border-radius: 8rpx;
+ box-shadow: 0 6rpx 20rpx rgba(90, 124, 143, 0.1);
+ min-height: 100rpx;
+}
+
+.popup_box .pop_tab .tab_info textarea {
+ height: 280rpx;
+}
+
+.popup_box .pop_tab .tab_info .uni-textarea-placeholder {
+ font-size: 0.825rem;
+}
+
+.popup_box .scan_scroll {
+ max-height: 41vh;
+ width: 100%;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+
+.popup_box .scan_scroll .uni-scroll-view-content {
+ /* width: 104%; */
+ overflow-x: hidden;
+ background-color: transparent;
+}
+
+.popup_box .pop_tab .next_info {
+ box-shadow: 0 0 20rpx rgba(90, 124, 143, 0.1);
+}
+
+.popup_box .pop_tab .tab_notitle {
+ border-radius: 8rpx;
+}
+
+.popup_box .pop_tab .tab_info button {
+ position: absolute;
+ bottom: 10rpx;
+ right: 20rpx;
+ background: #3C9CFF;
+ color: #fff;
+ border: 0;
+ border-radius: 8rpx;
+ width: 130rpx;
+ float: right;
+ font-size: .725rem;
+}
+
+.popup_box .pop_tab .tab_info textarea {
+ padding-top: 20rpx;
+}
+
+.list_wrap {
+ margin: 20rpx;
+}
+
+.ljh_box {
+ padding: 20rpx;
+ z-index: 10;
+ width: 100%;
+ float: left;
+ box-sizing: border-box;
+}
+
+.ljh_left {
+ margin-top: 10rpx;
+}
+
+/* .ljh_right{
+ float: right;
+} */
+.ljh_right uni-text {
+ line-height: 1.5;
+}
+
+.ljh_right .tnum .num_edit {
+ background-color: #FFF9DB;
+ width: 150rpx;
+}
+
+.ljh_right .tnum {
+ font-size: 1.25rem;
+ color: #EC5B28;
+ font-weight: bold;
+ margin-right: 4rpx;
+}
+
+.ljh_right .tunit {
+ font-size: 0.875rem;
+ color: #F5AB91;
+}
+
+.ljh_box .tit_ljh {
+ line-height: 1.5;
+ font-size: 0.875rem;
+ color: #101010;
+ font-weight: bold;
+ word-break: break-all;
+}
+
+.ljh_box .tit_ljh .mini-type-style {
+ float: left;
+ margin-top: 10rpx;
+ padding: 0 8rpx;
+ font-size: 0.725rem;
+}
+
+.ljh_box .tit_ljh .state-style,
+.top_card .state-style {
+ font-size: .625rem;
+ padding: 4rpx 6rpx;
+ margin-right: 8rpx;
+ vertical-align: middle;
+ font-weight: normal;
+ border-radius: 4rpx;
+ color: #fff;
+}
+
+.ljh_box .tit_ljh .state-style {
+ /* padding: 6rpx; */
+}
+
+.ljh_box .tit_ljh text {
+ float: left;
+}
+
+.ljh_box .desc_ljh {
+ line-height: 1.5;
+}
+
+.label_normal {
+ margin-top: 20rpx;
+}
+
+.label_normal .label_col image {
+ float: left;
+ vertical-align: middle;
+}
+
+.label_normal .label_col text {
+ font-size: 0.825rem;
+ line-height: 1.25;
+ float: left;
+ color: #434556;
+}
+
+.lo_cellbox {
+ margin-top: 20rpx;
+}
+
+.lo_cellbox .cell_info {
+ margin-bottom: 0;
+}
+
+/*提交按钮*/
+.new_btn_bot {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 100%;
+ background-color: #fff;
+ padding: 20rpx;
+ z-index: 10;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
+}
+
+.bot_pos {
+ position: initial;
+}
+
+.new_btn_bot .new_save_btn {
+ background-color: #E7ECFF;
+ color: #5A7CF3;
+ font-size: .875rem;
+}
+
+.new_btn_bot .new_clear_btn {
+ background-color: #FFDADD;
+ color: #f00;
+ font-size: .875rem;
+ margin-right: 20rpx;
+}
+
+.new_btn_bot .new_cancel_btn {
+ background-color: #eee;
+ color: #333;
+ font-size: .875rem;
+ margin-right: 20rpx;
+}
+
+.new_btn_bot .btn_double {
+ width: 50%;
+}
+
+.new_btn_bot uni-button:after {
+ border: 0;
+}
+
+.choose_main {
+ position: relative;
+ z-index: 2;
+}
+
+.choose_layout {
+ position: relative;
+ width: 100%;
+ height: 130rpx;
+ background-color: #fff;
+
+}
+
+.choose_icon_layout {
+ position: absolute;
+ right: 160rpx;
+ top: 10rpx;
+ bottom: 0rpx;
+ /* width: 100rpx;
+ height:100rpx; */
+}
+
+.choose_icon {
+ margin-top: 5rpx;
+ margin-bottom: 10rpx;
+ width: 100rpx;
+ height: 100rpx;
+}
+
+.choose_marked {
+ position: absolute;
+ width: 100%;
+ /* height: 100%; */
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ border-top: 6rpx solid #5FCB94;
+ background-image: linear-gradient(rgba(95, 203, 148, 0.5), rgba(95, 203, 148, 0));
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+}
+
+.choose_marked_faild {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ border-top: 6rpx solid #FF0000;
+ background-image: linear-gradient(rgba(255, 100, 97, 0.3), rgba(255, 100, 97, 0));
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+}
+
+.nodeliver_tag {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+ border-top: 6rpx solid #F54D4D;
+ background-image: linear-gradient(rgba(245, 77, 77, 0.1), rgba(245, 77, 77, 0));
+
+}
+
+.choose_marked image {
+ float: right;
+ margin-right: 28%;
+ margin-top: 20rpx;
+ width: 120rpx;
+ height: 120rpx;
+}
+
+.choose_marked_faild image {
+ float: right;
+ margin-right: 28%;
+ margin-top: 20rpx;
+ width: 120rpx;
+ height: 120rpx;
+}
+
+.pop_list {
+ background-color: #fff;
+ /* padding: 20rpx; */
+ padding-top: 0;
+ margin-top: 20rpx;
+}
+
+.uni-scroll-view-content .creattp_list {
+ padding: 6rpx 20rpx 0;
+ box-sizing: border-box;
+ width: 96%;
+}
+
+.list_info .uni-scroll-view-content {
+ max-height: 10vh;
+}
+
+.pop_list .detail-content {
+ margin-bottom: 20rpx;
+ border-radius: 16rpx;
+ overflow: hidden;
+ box-shadow: 0 0 14rpx rgba(0, 0, 0, 0.1);
+}
+
+.pop_btn {
+ padding: 20rpx;
+ padding-top: 0;
+}
+
+.pop_btn button {
+ width: 49%;
+ height: 90rpx;
+ line-height: 90rpx;
+ font-size: 0.875rem;
+ margin: 0;
+ color: #333;
+}
+
+.pop_btn button::after {
+ border: 0;
+}
+
+.pop_btn .cancel {
+ background-color: #eee;
+}
+
+.pop_btn .save {
+ background-color: #5A7CF3;
+ color: #fff;
+}
+
+.popinpop {
+ margin: 10px 1%;
+ border-radius: 8px;
+ background-color: #fff;
+ color: #666666;
+ line-height: 1.5;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+ width: 98%;
+
+}
+
+.scan_btn:after {
+ border: 8rpx;
+}
+
+.popup_box .pop_tab .tab_info .clean_scan_btn {
+ background-color: #eee;
+ color: #333;
+ margin-right: 140rpx;
+ border-radius: 8rpx;
+}
+
+.popup_box .pop_tab .tab_info .clean_scan_btn::after {
+ border: 0;
+}
+
+/*检验任务-topline*/
+.card_task {
+ padding: 20rpx;
+ padding-bottom: 0;
+}
+
+.task_num {
+ border-bottom: 1px solid #eee;
+ padding-bottom: 10rpx;
+ margin-bottom: 10rpx;
+ overflow: hidden;
+}
+
+.top_card .task_num {
+ border: 0;
+}
+
+.task_num image {
+ vertical-align: middle;
+ margin-right: 10rpx;
+}
+
+.task_num text {
+ color: #333;
+ vertical-align: middle;
+}
+
+.label_order image {
+ /* vertical-align: text-bottom; */
+ vertical-align: middle;
+}
+
+.label_order text {
+ font-size: .825rem;
+ vertical-align: middle;
+}
+
+.tit_jxs {
+ font-size: 1rem !important;
+ margin-bottom: 10rpx;
+}
+
+.tit_jxs .state-style {
+ vertical-align: middle;
+ margin-top: 6rpx;
+}
+
+/* 为按序发货添加 */
+/* .state-style{
+ background-color: #ececec;
+} */
+.receipt_bot {
+ justify-content: space-between;
+ border-top: 1px solid #eee;
+ padding-top: 10rpx;
+}
+
+/*收货列表*/
+.require_wrap {
+ background-color: #fff;
+ padding: 20rpx;
+}
+
+.require_wrap uni-button:after {
+ border: 0;
+}
+
+.require_wrap .require_cell {
+ background: #f5f5f5;
+ font-size: .825rem;
+ padding: 10rpx 20rpx;
+ margin-right: 20rpx;
+ border-radius: 50rpx;
+ line-height: 1.5;
+ margin-left: 0;
+ border: 1px solid #f5f5f5;
+}
+
+.require_wrap .require_active {
+ border: 1px solid #5A7CF3;
+ background-color: #EFF6FF;
+ color: #5A7CF3;
+}
+
+.require_wrap .require_active text {
+ display: inline-block;
+ width: 20rpx;
+ height: 20rpx;
+ background-color: #5A7CF3;
+ border-radius: 50%;
+ float: left;
+ margin: 12rpx 10rpx 12rpx 0;
+}
+
+.list_inspect .uni-input-input {
+ color: #f00;
+}
+
+.list_form {
+ padding: 20rpx;
+ padding-top: 0;
+}
+
+.list_form .uni-table-tr {
+ background-color: #f8f8f8;
+ color: red;
+}
+
+.list_form .uni-table-th {
+ padding: 10rpx !important;
+ border-bottom: 1px solid #ececec;
+ font-weight: normal !important;
+ font-size: 0.775rem;
+ color: red;
+}
+
+.list_form .uni-easyinput {
+ background-color: #FFF9DB;
+}
+
+.list_form .uni-easyinput__content {
+ min-height: 50rpx !important;
+ text-align: center;
+}
+
+.count_shadow {
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+}
+
+.count_list {
+ font-size: 0.8rem;
+ color: #0F5EFF;
+ padding: 10rpx 0;
+}
+
+.count_list text:first-child {
+ margin-left: 0;
+}
+
+.count_list text {
+ margin: 10rpx;
+}
+
+.popuni_list::after {
+ height: 0 !important;
+}
+
+.uni-list .list_cell {
+ margin-bottom: 20rpx;
+ height: 100rpx;
+ align-items: center;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+}
+
+.uni-list .list_cell:last-child {
+ margin-bottom: 0;
+}
+
+.uni-list .list_cell .is-input-border {
+ border: 0;
+}
+
+.uni-list .list_cell .title {
+ padding-left: 20rpx;
+ font-size: 0.875rem;
+}
+
+.uni-list .list_cell .info {
+ padding-right: 20rpx;
+ color: #333;
+ font-size: 0.875rem;
+}
+
+.popuni_list .list_cell {
+ background-color: #fff;
+ border-radius: 8rpx;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+}
+
+.popuni_list .list_cell .uni-data-tree-input {
+ padding-left: 0;
+}
+
+.popuni_list .list_cell .input-value-border {
+ border: 0;
+ padding: 0;
+}
+
+.popuni_list .list_cell .selected-list {
+ padding-left: 0;
+}
+
+/* .uni-list .list_cell .necessary_tag{
+ padding-right: 0;
+ color: #f00;
+} */
+.uni-list .list_cell .uni-easyinput {
+ padding-right: 20rpx;
+ text-align: right;
+ box-sizing: border-box;
+ border: 0;
+}
+
+.uni-list .list_cell .uni-input-input {
+ font-size: 0.875rem;
+}
+
+.list_card {
+ margin-top: 20rpx;
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+}
+
+.list_card:first-child {
+ margin-top: 10rpx;
+}
+
+.inspect_form .uni-label {
+ font-size: 0.875rem;
+}
+
+.pda-list-cell-db .is-input-border,
+.pda-list-cell-db .input-value-border {
+ border: 0 !important;
+}
+
+.list_locode {
+ padding: 20rpx;
+ padding-top: 0;
+}
+
+.inspect_card {
+ background-color: #fff;
+ margin: 20rpx;
+ border-radius: 16rpx;
+}
+
+.inspect_card .ljh_box text {
+ line-height: 1.75;
+}
+
+.inspect_list_locode {
+ border-bottom: 1px solid #eee;
+ padding-bottom: 20rpx;
+}
+
+.inspect_list_locode image {
+ vertical-align: middle;
+}
+
+.default_nodata {
+ position: relative;
+ left: 50%;
+ transform: translateX(-50%);
+ margin-top: 100rpx;
+ width: 390rpx;
+ height: 300rpx;
+
+}
+
+
+.default_goscan {
+ width: 100%;
+}
+
+.default_goscan .img_goscan {
+ position: relative;
+ width: 500rpx;
+ height: 500rpx;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.default_goscan button {
+ width: 60%;
+ height: 100rpx;
+ background-color: #5A7CF3;
+ color: #fff;
+ border-radius: 50rpx;
+ text-align: center;
+ line-height: 100rpx;
+}
+
+.default_goscan button image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-right: 20rpx;
+ vertical-align: middle;
+ margin-top: -8rpx;
+
+}
+
+.new_bot_box {
+ position: fixed;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ background-color: transparent;
+ z-index: 10;
+}
+
+.new_bot_box .uni-collapse {
+ background-color: transparent !important;
+}
+
+.new_bot_box .uni-collapse-item__title.uni-collapse-item-border {
+ width: 96%;
+ margin: 0 2%;
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+ overflow: hidden;
+ text-align: center;
+}
+
+.new_bot_box .uni-collapse-item__title-text {
+ padding-left: 40rpx;
+}
+
+.new_bot_box .uni-collapse-item__title.uni-collapse-item-border,
+.new_bot_box .uni-collapse-item__title-box {
+ background-color: #7B8195 !important;
+ color: #fff !important;
+}
+
+.new_bot_box .uni-collapse-item__title-box {
+ height: 80rpx !important;
+ line-height: 80rpx !important;
+}
+
+.new_bot_box .content {
+ background-color: #fff !important;
+}
+
+.new_bot_box .content .uni-easyinput {
+ box-sizing: border-box;
+}
+
+.new_bot_box .content .uni-data-picker,
+.new_bot_box .input-value,
+.new_bot_box .uni-input-input,
+.new_bot_box .selected-item,
+.new_bot_box .placeholder,
+.new_bot_box .uni-easyinput__content-input {
+ font-size: 0.875rem !important;
+}
+
+.new_bot_box .content .tit_bot_box {
+ padding: 20rpx 20rpx 10rpx;
+ font-size: 0.875rem;
+}
+
+.new_bot_box .uni-collapse-item__wrap-content.uni-collapse-item--border {
+ border: 0;
+}
+
+.new_bot_box .border .uni-easyinput {
+ border: 1px solid #e5e5e5;
+ border-radius: 10rpx;
+}
+
+.hold_form .uni-table-th-content {
+ font-weight: normal;
+ font-size: 0.775rem;
+}
+
+.top_wrap {
+ padding: 20rpx;
+ background-color: #fff;
+}
+
+.top_wrap .top_card {
+ border-radius: 8px;
+ color: #fff;
+ line-height: 100rpx;
+}
+
+.top_wrap .top_card .top_lines_info {
+ padding: 0 20rpx;
+}
+
+.top_wrap .top_card .top_lines_info text {
+ font-size: 0.9rem;
+ margin-left: 10rpx;
+}
+
+/* 按序收货 */
+.recept_form {
+ padding: 20rpx;
+}
+
+.recept_form .form_title {
+ padding: 20rpx 20rpx 0;
+}
+
+.recept_form .form_title image {
+ float: left;
+ margin-top: 10rpx;
+ margin-right: 10rpx;
+}
+
+.recept_form .form_title text {
+ font-size: 1rem;
+ vertical-align: middle;
+}
+
+.recept_form .table--border {
+ border: 0 !important;
+}
+
+.recept_form th {
+ background-color: #F3F6FF;
+ color: #434556 !important;
+}
+
+.recept_form th.table--border,
+.recept_form td.table--border {
+ border: 0;
+}
+
+.recept_form .recept_form_info {
+ background-color: #fff;
+ border-radius: 16rpx;
+ padding-bottom: 16rpx;
+}
+
+.recept_form .uni-table-td {
+ font-size: 0.8rem;
+}
+
+/* 天津发货详情 */
+.deliver_card {
+ flex: 1;
+ line-height: 30px;
+ margin: 20rpx 20rpx 0;
+ border-radius: 16rpx;
+ overflow: hidden;
+ background-color: transparent;
+ position: relative;
+ border-bottom-color: #f5f5f5;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+}
+
+.deliver_card .card_info {
+ background-color: #fff;
+}
+
+.deliver_card .deliverState {
+ background-color: #fff;
+ padding: 20rpx 10rpx;
+ background-color: transparent;
+ border-left: 10rpx solid transparent;
+}
+
+.deliver_card .deliverState .content-text image {
+ vertical-align: text-bottom;
+ margin-right: 6rpx;
+}
+
+.deliver_card .deliverState .content-text text {
+ margin-right: 10rpx;
+}
+
+.deliver_card .deliverState1 {
+ background-color: #fff;
+ border-left: 10rpx solid #F6CB61;
+}
+
+.deliver_card .deliverState3 {
+ background-color: #fff;
+ border-left: 10rpx solid #5FCB94;
+}
+
+.deliver_card .deliverState4 {
+ background-color: #fff;
+ border-left: 10rpx solid #EC5B28;
+}
+
+.deliver_card .card_state {
+ border: 1px solid transparent;
+ padding: 0 20rpx;
+ font-size: 0.8rem;
+ position: absolute;
+ right: 20rpx;
+ top: 50%;
+ transform: translateY(-50%);
+ border-radius: 80rpx;
+}
+
+.deliver_card .tjpending {
+ border-color: #F6CB61;
+ color: #F6CB61;
+}
+
+.deliver_card .tjsent {
+ border-color: #5FCB94;
+ color: #5FCB94;
+}
+
+.deliver_card .tjnosend {
+ border-color: #EC5B28;
+ color: #EC5B28;
+}
+
+.login_wrap {
+ width: 100%;
+ position: relative;
+ top: -20rpx;
+ background-color: #fff;
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+}
+
+.login_title {
+ position: absolute;
+ top: 120rpx;
+ left: 30rpx;
+ color: #fff;
+ font-size: 1.125rem;
+ font-weight: bold;
+ letter-spacing: 4rpx;
+ line-height: 1.5;
+}
+
+.login_title text {
+ font-size: 1.125rem;
+ letter-spacing: 0;
+}
+
+/* 登录 */
+.mybox .is-input-border {
+ border: 0 !important;
+}
+
+/* 消息列表 */
+.msg_body {
+ background-color: #fff;
+}
+
+.msg_list {
+ padding-top: 20rpx;
+}
+
+.msg_list .uni-list-chat__header {
+ width: 60rpx !important;
+ height: 60rpx !important;
+ background-color: #3d7eff;
+ border-color: transparent !important;
+ border-radius: 6rpx !important;
+}
+
+.msg_list .uni-list--border-top,
+.msg_list .uni-list--border-bottom,
+.msg_list .uni-list--border:after,
+.msg_body .uni-list:after {
+ height: 0 !important;
+}
+
+.msg_list .uni-list-chat__header-image {
+ width: 50rpx !important;
+ height: 50rpx !important;
+}
+
+.msg_list .uni-badge--dot {
+ left: inherit !important;
+ right: 20rpx;
+ top: 40rpx !important;
+}
+
+.msg_list .uni-list-chat__content-title {
+ font-size: .9rem !important;
+}
+
+.msg_list .hasread .uni-list-chat__header {
+ background-color: #ccc;
+}
+
+/* index */
+.index_top {
+ background-color: #5A7CF3;
+ width: 100%;
+}
+
+.index_top .uni-searchbar {
+ padding-right: 0 !important;
+}
+
+.index_top .index_btn {
+ background-color: transparent;
+ font-size: 0.825rem;
+ padding: 0 0.9rem;
+
+}
+
+.index_top uni-button:after {
+ border: 0 !important;
+}
+
+.index_top .uni-searchbar__box {
+ background-color: rgba(255, 255, 255, 0.3) !important;
+ border-color: transparent !important;
+ justify-content: inherit !important;
+}
+
+.index_top .uni-searchbar__text-input,
+.uni-searchbar__box-icon-search,
+.index_top .uniui-search {
+ color: #fff !important;
+}
+
+.index_top .uni-searchbar__text-placeholder,
+.index_top .uni-input-placeholder {
+ color: #eee !important;
+}
+
+.index_top .uni-input-input {
+ color: #fff;
+}
+
+.common_title {
+ font-size: .825rem;
+ font-weight: bold;
+}
+
+.common_icons {
+ width: 100%;
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.common_icons .common_info {
+ position: relative;
+ top: -120rpx;
+ background-color: #fff;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 20rpx;
+ border-radius: 16rpx;
+
+ /* box-shadow: 0 0 10rpx rgba(0,0,0,0.1); */
+}
+
+.common_icons .common_info .common_cell {
+ margin-right: 20rpx;
+ text-align: center;
+}
+
+.common_icons .common_info .common_cell .cell_icon {
+ background-color: #EEF2FE;
+ border-radius: 50%;
+ width: 110rpx;
+ height: 110rpx;
+ margin: 20rpx 20rpx 0;
+}
+
+.common_icons .common_info .common_cell .cell_icon image {
+ float: left;
+ width: 50rpx;
+ height: 50rpx;
+ margin: 35rpx;
+}
+
+.common_icons .common_info .cell_last {
+ margin-right: 0;
+}
+
+uni-tabbar .uni-tabbar-border {
+ height: 0;
+}
+
+.index_menu {
+ width: 100%;
+ float: left;
+ margin-top: -100rpx;
+ /* height: calc(100% - 200px); */
+}
+
+.index_menu .menu_content {
+ width: 26%;
+ text-align: center;
+ float: left;
+ height: 100%;
+ overflow-y: scroll;
+}
+
+.index_menu .index_title .title_left {
+ width: 100%;
+ border-left: 2px solid transparent;
+ line-height: 80rpx;
+ font-size: 0.825rem;
+ text-align: center;
+}
+
+.index_menu .menu_content .index_title {
+ width: 100%;
+ float: left;
+ line-height: 100rpx;
+ font-size: 0.825rem;
+}
+
+.index_menu .menu_content .tit_active {
+ box-sizing: border-box;
+ background-color: #fff;
+ border-left: 2px solid #5A7CF3;
+ font-weight: bold;
+ float: left;
+}
+
+.index_menuinfo {
+ width: 74%;
+ float: left;
+ box-sizing: border-box;
+ padding: 20rpx;
+ position: relative;
+ overflow-y: scroll;
+ background-color: #fff;
+ /* height: 100%; */
+
+}
+
+.menu_ab {
+ position: absolute;
+ top: 420rpx;
+ left: 0;
+ width: 100%;
+ z-index: 10;
+ /* height: calc(100% - 185px); */
+
+}
+
+.index_menuinfo .icon_block {
+ position: relative;
+ text-align: center;
+ width: 33%;
+ float: left;
+ /* margin-top: -10rpx; */
+}
+
+.index_menuinfo .icon_block image {
+ float: left;
+ width: 80%;
+ height: 80rpx;
+ margin: 3% 10% 0;
+}
+
+.index_menuinfo .icon_block text {
+ float: left;
+ width: 100%;
+ font-size: .8rem;
+ height: 80rpx;
+ color: #101010;
+}
+
+.index_menuinfo .icon_block .index_badge {
+ width: 42rpx;
+ height: 42rpx;
+ font-size: 0.6rem;
+ background-color: #c00;
+ position: absolute;
+ right: 0;
+ color: #fff;
+ text-align: center;
+ line-height: 42rpx;
+ border-radius: 50%;
+}
+
+uni-tabbar.uni-tabbar-bottom .uni-tabbar {
+ box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
+}
+
+uni-modal .uni-modal__bd {
+ font-size: 1rem !important;
+ color: #000 !important;
+}
+
+.passwordpage .uni-forms-item__label .label-text {
+ font-size: 0.8rem !important;
+}
+
+.passwordpage .is-input-border {
+ border: 0 !important;
+}
+
+.passwordpage .is-direction-left {
+ padding: 10rpx 20rpx;
+ background-color: #fff;
+ /* margin: 20rpx 0; */
+}
+
+.passwordpage .uni-forms-item__inner {
+ padding-bottom: 10rpx !important;
+}
+
+.passwordpage .new_save_btn {
+ font-size: 1rem;
+}
+
+.personal uni-button:after {
+ border: 0 !important;
+}
+
+.personal .uni-list:after {
+ height: 0 !important;
+}
+
+.personal .uni-list-item__icon {
+ margin-right: 0 !important;
+}
+
+.personal .uni-list-item__extra-text {
+ font-size: 1rem !important;
+ color: #101010 !important;
+ font-weight: bold;
+}
+
+.personal .uni-list--border-top,
+.uni-list--border-bottom,
+.uni-list--border::after {
+ background-color: transparent !important;
+}
+
+uni-modal .uni-modal__ft {
+ font-size: 0.875rem;
+}
+
+uni-modal .uni-modal__title {
+ color: #333;
+}
+
+uni-modal .uni-modal__bd {
+ padding: 1.3em 1.6em 1.3em;
+ min-height: 40px;
+ /* font-size: 15px; */
+ line-height: 1.4;
+ /* color: #999; */
+ max-height: 400px;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+uni-modal .uni-modal__hd {
+ padding: 1em 1.6em .3em;
+ height: 30px;
+}
+
+/*dy_add*/
+.btn_unusual button {
+ margin-right: 10rpx;
+}
+
+.btn_unusual button:last-child {
+ margin-right: 0;
+}
+
+/* .tit_ljh .text_white{
+ color: #fff !important;
+ font-size: 0.725rem;
+ font-weight: normal;
+ padding: 4rpx;
+} */
+.bot_card .pending {
+ color: #5FCB94;
+}
+
+.camera_pop {
+ border-top-left-radius: 16rpx;
+ border-top-right-radius: 16rpx;
+}
+
+.camera_list {
+ padding: 20rpx;
+ box-sizing: border-box;
+ max-height: 75vh;
+ overflow-y: scroll;
+}
+
+.camera_list .list_cell {
+ border-bottom: 1px solid #eee;
+ box-shadow: none;
+ margin-bottom: 0;
+}
+
+.camera_list .list_cell .uni-easyinput {
+ padding-right: 0;
+}
+
+.camera_list .list_cell .title {
+ color: #666;
+}
+
+.camera_list .selected-item {
+ font-size: 0.875rem;
+}
+
+.camera_list .input-value span {
+ padding: 0;
+ font-size: 0.875rem;
+}
+
+.camera_pop .pop_btn {
+ background-color: #fff;
+}
+
+.cell_box .result_card .text_black {
+ font-size: 1rem;
+}
+
+.cell_box .result_card .red {
+ color: #c00;
+}
+
+.new_btn_bot .btn_triple {
+ margin-right: 10rpx;
+}
+
+.cell_box .scan_btn_fr {
+ float: right;
+ background-color: #ececec;
+ color: #5A7CF3;
+ font-size: 0.725rem;
+ padding: 10rpx 20rpx;
+ border-radius: 16rpx;
+ line-height: 2;
+ margin: 0 20rpx 20rpx 0;
+ height: 60rpx;
+}
+
+.cell_box .scan_btn_fr image {
+ /* margin-top: 4rpx; */
+ /* float: left; */
+}
+
+.cell_box .scan_btn_fr text {}
+
+.login_wrap .content-clear-icon {
+ display: none;
+}
+
+.login_wrap .conone .uni-easyinput {
+ padding-left: 10rpx !important;
+}
+
+.quality_cell {
+ height: auto !important;
+}
+
+.quality_cell .title {
+ line-height: 80rpx;
+ color: #666;
+}
+
+.check_textarea {
+ font-size: 0.875rem;
+ color: #333;
+}
+
+.check_textarea uni-textarea {
+ padding: 10rpx 20rpx;
+ height: 40px;
+}
+
+.check_textarea .uni-textarea-placeholder {
+ font-size: 0.875rem;
+ color: #ccc;
+}
+
+.common_card .ljh_box,
+.pop_card .ljh {
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.common_card .ljh_box .tit_ljh,
+.pop_card .ljh_box .tit_ljh {
+ float: left;
+ width: 50%;
+}
+
+.common_card .ljh_info,
+.pop_card .ljh_info {
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.common_card .desc_card,
+.pop_card .desc_card {
+ width: 100%;
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.common_card .label_xm,
+.pop_card .label_xm {
+ background-color: #45B5F3;
+ line-height: 2.0;
+ padding: 0 10rpx;
+ color: #fff;
+ border-radius: 8rpx;
+ max-width: 300rpx;
+ font-size: 0.7rem;
+ overflow: visble;
+ word-break: break-all;
+ /* overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ font-size: 0.7rem;*/
+}
+
+.result_nodata text {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ color: #999;
+ font-size: 1.125rem;
+ margin-top: -20rpx;
+}
+
+.passwordpage .uni-forms-item__label {
+ width: 180rpx !important;
+}
+
+/* 20221114add */
+.semi_col {
+ margin-top: 0;
+}
+
+.semi_col .uni-collapse-item__title-text span {
+ font-size: 1rem;
+ /* font-weight: bold; */
+}
+
+.semi_col .common_card .ljh_box .tit_ljh {
+ font-size: 1rem;
+ width: 56%;
+ /* font-weight: normal; */
+}
+
+.semi_col .num_color {
+ color: #EC5B28;
+}
+
+.issuelist {
+ position: relative;
+}
+
+.issuelist .notuse,
+.issuelist .use {
+ float: right;
+ color: #333;
+ font-size: 0.825rem;
+}
+
+.issuelist .notuse image,
+.issuelist .use image {
+ vertical-align: middle;
+}
+
+.issuecard .task_num {
+ border: 0;
+ margin-bottom: 0;
+ padding: 0;
+
+ border-bottom: 1px solid #eee;
+ padding-bottom: 10rpx;
+ margin-bottom: 10rpx;
+ overflow: hidden;
+}
+
+.issuelist .tag_icon {
+ width: 94rpx;
+ height: 94rpx;
+ position: absolute;
+ right: 0;
+ top: -6rpx;
+}
+
+button::after {
+ border: none;
+ border-radius: 0;
+}
+
+.btn_confirm {
+ width: 50%;
+ border: none;
+ background: #009EFF;
+ border-radius: 0;
+ color: #FFFFFF;
+}
+
+.btn_cancle {
+ width: 50%;
+ border: none;
+ background: #FFFFFF;
+ border-radius: 0;
+ color: #000000;
+}
+
+.line_color {
+ /* color: #E7E6E4; */
+ color: #F5EBF4;
+ /* padding-top: 10rpx;
+ padding-bottom: 10rpx; */
+}
+
+
+
+.filter_button {
+ font-size: 28rpx;
+ padding-left: 20rpx;
+ padding-right: 20rpx;
+ /* width: 240rpx; */
+ color: #fff;
+ background-color: #3C9CFF;
+}
+
+.filter_button_after {
+ opacity: 0.7;
+}
+
+.btn_edit_big_confirm {
+ font-size: 35rpx;
+ width: 50%;
+ color: #fff;
+ background-color: #3C9CFF;
+ border: none;
+ border-radius: 0;
+}
+
+.btn_edit_big_cancle {
+ font-size: 35rpx;
+ width: 50%;
+ color: #303133;
+ border: none;
+ border-radius: 0;
+ box-shadow: none;
+ background-color: #fff;
+
+}
+
+.btn_edit_big_after {
+ opacity: 0.7;
+}
+
+.btn_add_big {
+ background-color: #D8D8D8;
+ color: #fff;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.icons_close {
+ width: 70rpx;
+ height: 70rpx;
+ margin: 10rpx;
+}
+
+.paizhao {
+ padding-bottom: 10rpx;
+ padding-top: 20rpx;
+ padding-left: 20rpx;
+}
+
+.paizhao image {
+ width: 50rpx;
+ height: 50rpx;
+}
+
+.card_partCode {
+ font-size: 36rpx;
+ font-weight: 500;
+ padding: 10rpx;
+
+}
+
+.card_icon_normal {
+ width: 45rpx;
+ height: 45rpx;
+ vertical-align: middle
+}
+
+.card_packing_code {
+ font-size: 32rpx;
+ color: #3315EB;
+}
+
+.card_packing_code_content {
+ font-size: 32rpx;
+}
+
+
+.card_batch {
+ color: #00B574;
+ font-size: 32rpx;
+}
+
+
+.card_batch_content {
+ font-size: 32rpx;
+}
+
+.card_business {
+ color: #F1A532;
+ font-size: 32rpx;
+}
+
+.card_business_content {
+ font-size: 32rpx;
+}
+
+.card_location {
+ color: #00A3FF;
+}
+
+.card_supportCode {
+ color: #DA8910;
+ font-size: 32rpx;
+}
+
+.card_supportCode_content {
+ font-size: 32rpx;
+}
+
+.scan_view {
+ background: linear-gradient(to right, #7ED7BD, #DCEFEE);
+}
+
+.pack_view {
+ font-size: 32rpx;
+ padding: 5rpx;
+}
+
+.location_view {
+ font-size: 32rpx;
+ padding: 5rpx;
+}
+
+.batch_view {
+ font-size: 32rpx;
+ padding: 5rpx;
+}
+
+.business_view {
+ font-size: 32rpx;
+ padding: 5rpx;
+}
+
+.pop_customer {
+ border-radius: 8rpx;
+ background-color: #fff;
+}
+
+.nodata {
+ width: 390rpx;
+ height: 300rpx;
+}
+
+.text_ellipsis {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.task_item {
+ margin: 10rpx;
+ background-color: #fff;
+}
+
+.task_card {
+ padding: 12rpx;
+ background-color: #fff;
+ border-radius: 10rpx;
+ margin: 12rpx;
+
+}
+
+.task_number {
+ font-size: 35rpx;
+ font-weight: 600;
+ /* bold */
+}
+
+.task_text {
+ font-size: 30rpx;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.request_state_un-doing {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+.job_state_doing {
+ font-size: 28rpx;
+ background: rgba(236, 156, 0, 0.2);
+ color: #EC9C00;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+.job_state_un-doing {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+.job_state_completed {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+.job_state_close {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+
+.job_state_cancelled {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #ff0000;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+.pop_detail {
+ background-color: #fff;
+ width: 100%;
+ border-radius: 8rpx 8rpx 0rpx 0rpx;
+ padding: 15rpx;
+}
+
+.pop_detail .item {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+
+ margin-left: 10rpx;
+ margin-right: 10rpx;
+
+ display: flex;
+ flex-direction: row;
+
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+}
+
+.pop_detail .item_title {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+}
+
+.pop_detail .text_wrap {
+ color: #909399;
+ word-break: break-all;
+ text-align: right;
+}
+
+.pop_detail .item_big_title {
+ /* color: #2196F3; */
+ /* font-size: 35rpx; */
+ margin-left: 10rpx;
+ margin-right: 10rpx;
+ margin-top: 10rpx;
+ margin-bottom: 10rpx;
+}
+
+
+
+
+/deep/.uni-popup .uni-popup__wrapper {
+ width: 100% !important;
+ padding: 15rpx 20rpx 15rpx 20rpx;
+}
+
+.btn_bottom {
+ position: fixed;
+ bottom: 10rpx;
+ right: 0;
+}
+
+.btn_add_small {
+
+ background-color: #3C9CFF;
+ width: 200rpx;
+ font-size: 30rpx;
+ color: #fff;
+ border-radius: 5rpx;
+}
+
+.btn_add_small_after {
+ opacity: 0.7;
+}
+
+.btn_commit_after {
+ opacity: 0.7;
+}
+
+/* 禁用时样式 */
+button[disabled] {
+ background-color: #fff;
+ color: #666;
+}
+
+.btn_commit {
+ background-color: #3C9CFF;
+ font-size: 30rpx;
+ color: #fff;
+ text-align: center;
+ padding-left: 80rpx;
+ padding-right: 80rpx;
+ margin-right: 20rpx;
+ margin-left: 10rpx;
+}
+
+.btn_add {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+
+ position: absolute;
+ width: 97%;
+ height: 35px;
+ border-radius: 3px;
+ opacity: 1;
+ padding: 5px;
+ margin-left: 5px;
+ margin-right: 5px;
+
+ box-sizing: border-box;
+ border: 1px dashed #AAAAAA;
+ background: #D8D8D8;
+
+ color: #FFFFFF;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 26px;
+ letter-spacing: 0em;
+}
+
+.btn_clear_after {
+ opacity: 0.7;
+}
+
+
+.btn_clear {
+ background-color: #fff;
+ font-size: 30rpx;
+ color: #000;
+ text-align: center;
+ padding-left: 80rpx;
+ padding-right: 80rpx;
+ margin-right: 10rpx;
+ margin-left: 20rpx;
+}
+
+.icons_scan_close {
+ width: 35rpx;
+ height: 35rpx;
+}
+
+.count_image {
+ width: 45rpx;
+ height: 45rpx;
+}
+
+.count_type_light {
+ color: #0CC2B6;
+ font-size: 30rpx;
+ margin-left: 10rpx;
+ margin-right: 10rpx;
+}
+
+.count_type_black {
+ color: #FA5151;
+ font-size: 30rpx;
+ margin-left: 10rpx;
+ margin-right: 10rpx;
+}
+
+.btn_bot {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ padding-bottom: 20rpx;
+ padding-right: 20rpx;
+ z-index: 10;
+}
+
+.btn_single_commit {
+ background-color: #3C9CFF;
+ font-size: 30rpx;
+ color: #fff;
+ text-align: center;
+ width: 180rpx;
+}
+
+.center {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+}
+
+.text_recommend {
+ color: #0A84FF;
+ font-size: 38rpx;
+}
+
+.text_stock {
+ font-size: 36rpx;
+}
+
+.text_default {
+ color: #000000;
+ font-size: 36rpx;
+}
+
+.text_greater {
+ color: #F56C6C;
+ font-size: 36rpx;
+}
+
+.text_less {
+ color: #FF9500;
+ font-size: 36rpx;
+}
+
+.text_equal {
+ color: #34C759;
+ font-size: 38rpx;
+}
+
+.std_pack {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 0px;
+ color: #909399;
+ font-size: 30rpx;
+}
+
+.std_uom {
+ color: #909399;
+ font-size: 30rpx;
+ margin-left: 5rpx;
+ margin-right: 5rpx;
+}
+
+.uom {
+ color: #909399;
+ font-size: 30rpx;
+ margin-left: 5rpx;
+ margin-right: 5rpx;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+
+.std_split {
+ color: #909399;
+ font-size: 36rpx;
+ margin-left: 5rpx;
+ margin-right: 5rpx;
+}
+
+.inspect_job {
+ color: #F1A532;
+ font-size: 36rpx;
+ margin-right: 10rpx;
+}
+
+.ok_job {
+ color: #53C21D;
+ font-size: 36rpx;
+ margin-right: 2rpx;
+}
+
+.nook_job {
+ color: #E45656;
+ font-size: 36rpx;
+ margin-right: 10rpx;
+}
+
+.raw_location {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+ padding-left: 15rpx;
+ padding-right: 15rpx;
+ background-color: #34C759;
+ color: #fff;
+ font-size: 35rpx;
+}
+
+.fg_location {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+ padding-left: 15rpx;
+ padding-right: 15rpx;
+ background-color: #5A7CF3;
+ color: #fff;
+ font-size: 35rpx;
+}
+
+.semi_location {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+ padding-left: 15rpx;
+ padding-right: 15rpx;
+ background-color: #FF9500;
+ color: #fff;
+ font-size: 35rpx;
+}
+
+.hold_location {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+ padding-left: 15rpx;
+ padding-right: 15rpx;
+ background-color: #F56C6C;
+ color: #fff;
+ font-size: 35rpx;
+}
+
+.unk_location {
+ padding-top: 5rpx;
+ padding-bottom: 5rpx;
+ padding-left: 15rpx;
+ padding-right: 15rpx;
+ background-color: #999999;
+ color: #fff;
+ font-size: 35rpx;
+}
+
+.qty_input {
+ width: 150rpx;
+ height: 60rpx;
+ line-height: 10rpx;
+ font-size: 10rpx;
+ color: #000000;
+ text-align: right;
+ border: 1px solid rgb(220, 211, 211);
+ padding: 5rpx;
+}
+
+.qty_inspect_input {
+ width: 150rpx;
+ height: 60rpx;
+ line-height: 10rpx;
+ font-size: 10rpx;
+ color: #000000;
+ text-align: center;
+ border: 1px solid rgb(220, 211, 211);
+ padding: 5rpx;
+}
+
+.icon_close {
+ width: 100rpx;
+ height: 100rpx;
+ opacity: 1;
+
+}
+
+.icon_edit {
+ width: 30rpx;
+ height: 40%;
+ opacity: 1;
+ margin-left: 10rpx;
+}
+
+.title_popup {
+ margin-top: 16px;
+ margin-bottom: 16px;
+ margin-left: 8px;
+ margin-right: 8px;
+ font-size: 35rpx;
+ text-align: center;
+}
+
+.close_button {
+ /* 自动布局子元素 */
+ position: static;
+ left: 20px;
+ /* top: 1109.01px; */
+ width: 100%;
+ height: 40px;
+ border-radius: 40px;
+ opacity: 1;
+
+ /* 自动布局 */
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ padding: 9px 12px;
+ gap: 10px;
+ align-self: stretch;
+
+ /* 颜色/白色 */
+ background: #FFFFFF;
+ box-sizing: border-box;
+ /* 颜色/边框 */
+ border: 1px solid #E7E6E4;
+ z-index: 3;
+}
+
+/**
+ * 申请状态 新增
+ */
+.request_status_new {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 审批中
+ */
+.request_status_reviewing {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 审批通过
+ */
+.request_status_agreed {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 审批驳回
+ */
+.request_status_refused {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 处理中
+ */
+.request_status_handling {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 部分完成
+ */
+.request_status_partial {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 已完成
+ */
+.request_status_completed {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 中止
+ */
+.request_status_abort {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+/**
+ * 申请状态 已关闭
+ */
+.request_status_cancelled {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
diff --git a/common/style/pdabasic.css b/common/style/pdabasic.css
new file mode 100644
index 00000000..f1083f3f
--- /dev/null
+++ b/common/style/pdabasic.css
@@ -0,0 +1,739 @@
+/*
+.pda-list {
+ padding: 10rpx 10rpx;
+ box-sizing: border-box;
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+}
+ */
+
+/* 列表 */
+.pda-list {
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ background-color: #FFFFFF;
+ position: relative;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 16rpx;
+ margin-bottom: 10rpx;
+}
+
+.pda-list:after {
+ position: absolute;
+ z-index: 10;
+ /* right: 0; */
+ bottom: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.pda-list-cell {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1px solid #eee;
+ padding: 10rpx 0;
+}
+
+.pda-list-cell:last-child {
+ border-bottom: 0;
+}
+
+.pda-list-cell-left {
+ white-space: nowrap;
+ /* padding: 0 10rpx; */
+}
+
+.pda-list-cell-db,
+.pda-list-cell-right {
+ flex: 1;
+}
+
+.pda-list-cell .pda-list-cell-db .uni-input-input {
+ font-size: .875rem;
+}
+
+.pda-list-cell .uni-easyinput__content-input,
+.pda-list-cell .uni-input-placeholder {
+ height: 2rem;
+ line-height: 2rem;
+}
+
+.pda-list-cell .placeholder {
+ color: #999 !important;
+ font-size: 0.875rem;
+ padding-left: 10rpx;
+}
+
+.pda-list-cell .uni-label {
+ color: #434556;
+}
+
+.list_locode .uni-collapse-item__title-box {
+ font-weight: bold !important;
+}
+
+.display-flex {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.list-body {
+ /* height: 84rpx; */
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ overflow: hidden;
+}
+
+.list-text-top {
+ width: 100%;
+ color: #000;
+ font-weight: bolder;
+ /* line-height: 36rpx; */
+ /* font-size: 30rpx; */
+}
+
+.list-text-bottom {
+ /* line-height: 30rpx; */
+ /* font-size: 26rpx; */
+ color: #8f8f94;
+}
+
+
+/* 改为detail-content */
+/* margin-bottom: 20rpx; */
+.device-detail {
+ padding: 10rpx !important;
+ margin: 10rpx;
+ border-radius: 16rpx;
+ background-color: #fff;
+ color: #666666;
+ line-height: 1.5;
+ overflow: hidden;
+}
+
+.list-style {
+ margin-bottom: 0rpx;
+ border-radius: 16rpx;
+ background-color: #FFFFFF;
+ color: #666666;
+ line-height: 1.5;
+}
+
+.border-font {
+ color: #000;
+ font-weight: bolder;
+}
+
+.space-between {
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+}
+
+.accept-button {
+ width: 30%;
+ font-size: 16px;
+ background-color: #7ac756;
+ color: #ffffff;
+}
+
+.bigsave-button {
+ width: 80%;
+ font-size: 16px;
+ background-color: #007AFF;
+ color: #ffffff;
+}
+
+.save-button {
+ width: 30%;
+ font-size: 16px;
+ background-color: #007AFF;
+ color: #ffffff;
+}
+
+.scroll-detail {
+ overflow: hidden;
+ padding-bottom: 60px;
+ height: 480px;
+ /* 没有高度不可以回到顶部 */
+ /* background-color: #ffffff; */
+}
+
+.scrollView {
+ overflow: hidden;
+ padding-bottom: 50px
+}
+
+.scroll-Y {
+ /* height: 70ux; */
+ padding-bottom: 50px
+}
+
+.bottom1 {
+ position: fixed;
+ width: 100%;
+ /* padding: 10rpx 10rpx; */
+ left: 0;
+ /* right: 0; */
+ bottom: 0;
+ background-color: #ffffff;
+}
+
+.bottom {
+ position: fixed;
+ display: flex;
+ width: 100%;
+ padding: 10rpx 10rpx;
+ left: 0;
+ /* right: 0; */
+ bottom: 0;
+ background-color: #ffffff;
+}
+
+
+.pars-num {
+ /* font-size: 26rpx; */
+}
+
+.right-width {
+ text-align: center;
+ width: 100rpx;
+}
+
+.state-style {
+ float: left;
+ margin-top: 10rpx;
+ /* border-radius: 16rpx;
+ padding: 0rpx 10rpx; */
+ /* line-height: 50rpx;
+ height: 50rpx; */
+ /* width: 120rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center; */
+ /* 垂直居中 */
+}
+
+.uni-popup-view {
+ background-color: #fff;
+ border-radius: 10px;
+}
+
+.uni-popup-button-box {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ flex-direction: row;
+ padding: 10px 15px;
+}
+
+.uni-popup-button {
+ flex: 1;
+ /* // border-radius: 50px;
+ // color: #666; */
+ /* font-size: 16px; */
+}
+
+/* 任务状态 */
+/* 打开 */
+.open {
+ font-size: 28rpx;
+ background: rgba(95, 203, 148, 0.2);
+ color: #22AF68;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+/* 进行中 */
+.pending {
+ font-size: 28rpx;
+ background: rgba(236, 156, 0, 0.2);
+ color: #EC9C00;
+ padding: 10rpx 20rpx 10rpx 20rpx;
+ border-radius: 10rpx;
+}
+
+/* 完成 */
+.completed {
+ background-color: #E6A23C;
+ color: #FFFFFF;
+ border-radius: 10rpx;
+}
+
+/* 关闭 */
+.close {
+ background-color: #F56C6C;
+ color: #FFFFFF;
+}
+
+
+/* 关闭 */
+.other {
+ background-color: #808080;
+ color: #FFFFFF;
+ border-radius: 10rpx;
+}
+
+/* 其他 */
+.unk {
+ background-color: #ececec;
+ color: #666;
+ border-radius: 10rpx;
+}
+
+/* 检验任务状态 */
+/* 免检 */
+.exempt {
+ background-color: #409EFF;
+ color: #FFFFFF;
+}
+
+/* 全检 */
+.full {
+ background-color: #67C23A;
+ color: #FFFFFF;
+}
+
+/* 抽检 */
+.sampling {
+ background-color: #E6A23C;
+ color: #FFFFFF;
+}
+
+/* 挑检 */
+.pick {
+ background-color: #F56C6C;
+ color: #FFFFFF;
+}
+
+/* 库存状态 */
+
+.uni-link {
+ background-color: #BD2C00;
+ color: #BD2C00 !important;
+}
+
+.inventory_status_insp {
+ color: #F9AE3D;
+ margin-right: 10rpx;
+}
+
+.inventory_status_ok {
+ color: #67C23A;
+ margin-right: 10rpx;
+}
+
+.inventory_status_nok {
+ color: #FF2424;
+ margin-right: 10rpx;
+}
+
+.inventory_status_hold {
+ color: #EC9C00;
+ margin-right: 10rpx;
+}
+
+.inventory_status_scarp {
+ color: #999;
+ margin-right: 10rpx;
+}
+
+.frozen {
+ color: #FF581D;
+ margin-right: 10rpx;
+}
+
+.pass {
+ color: #67C23A !important;
+}
+
+.unPass {
+ color: #FF2424 !important;
+}
+
+.location_inspect {
+ background-color: #F6CB61;
+ color: #FFFFFF;
+}
+
+.location_raw {
+ background-color: #2DA8D8;
+ color: #FFFFFF;
+}
+
+.location_semi {
+ background-color: #EDAE50;
+ color: #FFFFFF;
+}
+
+.location_fg {
+ background-color: #078343;
+ color: #FFFFFF;
+}
+
+.location_wip {
+ background-color: #FC85FE;
+ color: #FFFFFF;
+}
+
+.location_scrap {
+ background-color: #E30016;
+ color: #FFFFFF;
+}
+
+.location_noc {
+ background-color: #C31223;
+ color: #FFFFFF;
+}
+
+.location_overflow {
+ background-color: #7D1EDC;
+ color: #FFFFFF;
+}
+
+.location_customer {
+ background-color: #5A7CF3;
+ color: #FFFFFF;
+}
+
+
+/* //零件状态
+export function getItemTypeStyle(val) {
+ if (val == 0) return 'active'
+ else if (val == 1) return 'hold'
+ else if (val == 2) return 'new'
+ else if (val == 3) return 'plan'
+ else if (val == 4) return 'disable'
+ else return 'other'
+}
+ */
+
+/* 零件状态 */
+.active {
+ background-color: #5FCB94;
+ color: #FFFFFF;
+}
+
+.hold_item {
+ background-color: #FF4206;
+ color: #FFFFFF;
+}
+
+.new {
+ background-color: #E6A23C;
+ color: #FFFFFF;
+}
+
+.plan {
+ background-color: #2677F9;
+ color: #FFFFFF;
+}
+
+.disable {
+ background-color: #666;
+ color: #FFFFFF;
+}
+
+/* 任务编号字体 */
+.text-number {
+ color: #000;
+ font-weight: bolder;
+}
+
+/* 零件编号字体 */
+.text-itemcode {
+ /* font-size: 26rpx; */
+ color: #000;
+ font-weight: bolder;
+}
+
+.text-desc {
+ color: #8f8f91;
+ /* font-size: 22rpx; */
+}
+
+/* 零件编号字体 */
+.text-bolder {
+ color: #000;
+ font-weight: bolder;
+}
+
+.detail-list {
+ background-color: #fff;
+ /* padding: 10rpx; */
+ /* margin: 20rpx; */
+ /* border-radius: 16rpx; */
+ /* overflow: hidden; */
+}
+
+.detail-content {
+ position: relative;
+ flex: 1;
+ /* font-size: 26rpx; */
+ color: #101010;
+}
+
+.example-body {
+ background-color: #FFFFFF;
+}
+
+.result-box {
+ text-align: center;
+ padding: 20px 0px;
+ /* font-size: 16px; */
+}
+
+.toptext {
+ padding-left: 20upx;
+ line-height: 80upx;
+}
+
+.numberstyle {
+ display: flex;
+ /* flex-direction: row-reverse; */
+ border-bottom: 10upx solid #EEEEEE;
+ width: 200upx;
+ padding-bottom: 20upx;
+}
+
+.input {
+ height: 20rpx;
+ padding: 0rpx 8rpx;
+ line-height: 50rpx;
+ /* font-size: 25rpx; */
+ background: #FFF;
+ border-radius: 4rpx;
+ flex: 1;
+}
+
+.mini-type-style {
+ vertical-align: middle;
+ font-size: 0.725rem;
+ margin-right: 6rpx;
+ border-radius: 4rpx;
+ padding: 4rpx 8rpx;
+ /* width: 80rpx; */
+ /* height: 46rpx;
+ min-width: 80rpx;
+ display: flex;
+ flex-direction: column; */
+
+}
+
+.text-color {
+ color: #000;
+ font-weight: bolder;
+}
+
+.tabs {
+ flex: 1;
+ flex-direction: column;
+ overflow: hidden;
+ /* background-color: #ffffff; */
+}
+
+/* .scroll-h {
+ touch-action: none;
+ width: 100%;
+ height: 100rpx;
+ flex-direction: row;
+ white-space: nowrap;
+ justify-content: center;
+} */
+
+.line-h {
+ height: 1rpx;
+ background-color: #cccccc;
+}
+
+.uni-tab-item {
+ /* #ifndef APP-PLUS */
+ display: inline-block;
+ /* #endif */
+ flex-wrap: nowrap;
+ padding: 0 30rpx;
+}
+
+.uni-tab-item-title {
+ position: relative;
+ color: #555;
+ /* font-size: 24rpx; */
+ height: 100rpx;
+ line-height: 100rpx;
+ flex-wrap: nowrap;
+ /* #ifndef APP-PLUS */
+ white-space: nowrap;
+ /* #endif */
+}
+
+.uni-tab-item-title-active {
+ color: #101010;
+ font-weight: bold;
+}
+
+.uni-tab-item-title-active:after {
+ left: 50%;
+ transform: translateX(-50%);
+ position: absolute;
+ bottom: -20rpx;
+ display: inline-block;
+ content: "";
+ width: 40rpx;
+ height: 8rpx;
+ background-color: #5a7cf3;
+ border-radius: 5px;
+}
+
+/* .blece {
+ padding: 10upx;
+ color: #111111;
+ border-bottom: 2px solid #f5f5f5;
+ display: flex;
+ flex-wrap: wrap;
+} */
+
+.conbox {
+ /* padding: 10rpx 0; */
+ padding-left: 10rpx;
+}
+
+.myinput {
+ display: flex;
+ box-sizing: border-box;
+ overflow: hidden;
+ position: relative;
+ flex: 1;
+ justify-content: center;
+ flex-direction: row;
+ align-items: center;
+ height: 88rpx;
+ padding: 20rpx 0;
+ /* border-width: 0.5px;
+ border-style: solid;
+ border-color: #e5e5e5;
+ border-radius: 5px;
+ background-color: rgb(248, 248, 248);
+ font-size: 18px;*/
+ font-size: .825rem;
+}
+
+.qtyinput {
+ height: 50px;
+ padding: 10px 0px;
+ font-size: 20px;
+}
+
+
+.count-input {
+ padding: 5rpx 3rpx;
+ width: 95%;
+ font-size: 18px;
+}
+
+.pda-data-picker {
+ padding: 5rpx 3rpx;
+ width: 95%;
+ font-size: 18px;
+}
+
+.inputPlaceholderStyle {
+ font-size: 16px;
+}
+
+.inputfocus {
+ border-color: #007AFF;
+}
+
+
+.txt-16 {
+ font-size: 16px;
+}
+
+.txt-18 {
+ font-size: 18px;
+}
+
+.txt-20 {
+ font-size: 20px;
+}
+
+.pda-label {
+ width: 210rpx;
+ word-wrap: break-word;
+ word-break: break-all;
+ text-indent: 20rpx;
+ font-size: 16px;
+}
+
+.fontsize-16 {
+ font-size: 16px;
+}
+
+.fontsize-18 {
+ font-size: 18px;
+}
+
+.fontsize-20 {
+ font-size: 20px;
+}
+
+/deep/ .uni-collapse-item__title-text {
+ font-size: 16px;
+}
+
+
+/deep/ .input-value {
+ font-size: 16px;
+}
+
+/deep/ .uni-input-input {
+ font-size: 18px;
+}
+
+page {
+ width: 100%;
+ height: 100%;
+ /* background-color: #fff; */
+}
+
+.page-wraper {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+}
+
+
+.page-main {
+ flex: 1;
+ position: relative;
+}
+
+.page-main-scroll {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+}
+
+.page-main-list {
+ /* height: 80rpx;
+ line-height: 80rpx; */
+ text-align: center;
+ background: #e0e0e0;
+
+}
diff --git a/common/style/uni.css b/common/style/uni.css
new file mode 100644
index 00000000..da90d1ad
--- /dev/null
+++ b/common/style/uni.css
@@ -0,0 +1,3404 @@
+@font-face {
+ font-family: uniicons;
+ font-weight: normal;
+ font-style: normal;
+ src: url('~@/static/uni.ttf') format('truetype');
+}
+
+/* #ifdef H5 */
+.fix-left-window {
+ padding-left: var(--window-left);
+}
+
+.pc-hide {
+ display: none !important;
+}
+
+/* #endif */
+
+/*通用 */
+
+/* view{
+ font-size:28rpx;
+ line-height:1.8;
+} */
+progress,
+checkbox-group {
+ width: 100%;
+}
+
+form {
+ width: 100%;
+}
+
+.uni-flex {
+ display: flex;
+ flex-direction: row;
+}
+
+.uni-flex-item {
+ flex: 1;
+}
+
+.uni-row {
+ flex-direction: row;
+}
+
+.uni-column {
+ flex-direction: column;
+}
+
+.uni-link {
+ color: #576B95;
+ font-size: 26rpx;
+}
+
+.uni-center {
+ text-align: center;
+}
+
+.uni-inline-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+}
+
+.uni-inline-item text {
+ margin-right: 20rpx;
+}
+
+.uni-inline-item text:last-child {
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+
+/* page */
+.common-page-head {
+ padding: 35rpx;
+ text-align: center;
+}
+
+.common-page-head-title {
+ display: inline-block;
+ padding: 0 40rpx;
+ font-size: 30rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ color: #BEBEBE;
+ box-sizing: border-box;
+ border-bottom: 2rpx solid #D8D8D8;
+}
+
+.uni-padding-wrap {
+ /* width:690rpx; */
+ padding: 0 30rpx;
+}
+
+.uni-word {
+ text-align: center;
+ padding: 200rpx 100rpx;
+}
+
+.uni-title {
+ font-size: 30rpx;
+ font-weight: 500;
+ padding: 20rpx 0;
+ line-height: 1.5;
+}
+
+.uni-text {
+ font-size: 28rpx;
+}
+
+.uni-title text {
+ font-size: 24rpx;
+ color: #888;
+}
+
+.uni-text-gray {
+ color: #ccc;
+}
+
+.uni-text-small {
+ font-size: 24rpx;
+}
+
+.uni-common-mb {
+ margin-bottom: 30rpx;
+}
+
+.uni-common-pb {
+ padding-bottom: 30rpx;
+}
+
+.uni-common-pl {
+ padding-left: 30rpx;
+}
+
+.uni-common-mt {
+ margin-top: 30rpx;
+}
+
+/* 背景色 */
+.uni-bg-red {
+ background: #F76260;
+ color: #FFF;
+}
+
+.uni-bg-green {
+ background: #09BB07;
+ color: #FFF;
+}
+
+.uni-bg-blue {
+ background: #007AFF;
+ color: #FFF;
+}
+
+.uni-bg-white {
+ background: #FFFFFF;
+}
+
+/* 标题 */
+.uni-h1 {
+ font-size: 80rpx;
+ font-weight: 700;
+}
+
+.uni-h2 {
+ font-size: 60rpx;
+ font-weight: 700;
+}
+
+.uni-h3 {
+ font-size: 48rpx;
+ font-weight: 700;
+}
+
+.uni-h4 {
+ font-size: 36rpx;
+ font-weight: 700;
+}
+
+.uni-h5 {
+ font-size: 28rpx;
+ color: #8f8f94;
+}
+
+.uni-h6 {
+ font-size: 24rpx;
+ color: #8f8f94;
+}
+
+.uni-bold {
+ font-weight: bold;
+}
+
+/* 文本溢出隐藏 */
+.uni-ellipsis {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+/* 竖向百分百按钮 */
+.uni-btn-v {
+ padding: 10rpx 0;
+}
+
+.uni-btn-v button {
+ margin: 20rpx 0;
+}
+
+/* 表单 */
+.uni-form-item {
+ display: flex;
+ width: 100%;
+ padding: 10rpx 0;
+}
+
+.uni-form-item .title {
+ padding: 10rpx 25rpx;
+}
+
+.uni-label {
+ width: 210rpx;
+ word-wrap: break-word;
+ word-break: break-all;
+ text-indent: 20rpx;
+}
+
+.uni-input {
+ height: 80rpx;
+ padding: 15rpx 25rpx;
+ line-height: 80rpx;
+ font-size: 28rpx;
+ background: #FFF;
+ flex: 1;
+}
+
+radio-group,
+checkbox-group {
+ width: 100%;
+}
+
+radio-group label,
+checkbox-group label {
+ padding-right: 20rpx;
+}
+
+.uni-form-item .with-fun {
+ display: flex;
+ flex-wrap: nowrap;
+ background: #FFFFFF;
+}
+
+.uni-form-item .with-fun .uni-icon {
+ width: 40px;
+ height: 80rpx;
+ line-height: 80rpx;
+ flex-shrink: 0;
+}
+
+/* loadmore */
+.uni-loadmore {
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ padding-bottom: 30rpx;
+}
+
+/*数字角标*/
+/* .uni-badge,
+.uni-badge-default {
+ font-family: 'Helvetica Neue', Helvetica, sans-serif;
+ font-size: 12px;
+ line-height: 1;
+ display: inline-block;
+ padding: 3px 6px;
+ color: #333;
+ border-radius: 100px;
+ background-color: rgba(0, 0, 0, .15);
+} */
+.uni-badge.uni-badge-inverted {
+ padding: 0 5px 0 0;
+ color: #929292;
+ background-color: transparent
+}
+
+.uni-badge-primary {
+ color: #fff;
+ background-color: #007aff
+}
+
+.uni-badge-blue.uni-badge-inverted,
+.uni-badge-primary.uni-badge-inverted {
+ color: #007aff;
+ background-color: transparent
+}
+
+.uni-badge-green,
+.uni-badge-success {
+ color: #fff;
+ background-color: #4cd964;
+}
+
+.uni-badge-green.uni-badge-inverted,
+.uni-badge-success.uni-badge-inverted {
+ color: #4cd964;
+ background-color: transparent
+}
+
+.uni-badge-warning,
+.uni-badge-yellow {
+ color: #fff;
+ background-color: #f0ad4e
+}
+
+.uni-badge-warning.uni-badge-inverted,
+.uni-badge-yellow.uni-badge-inverted {
+ color: #f0ad4e;
+ background-color: transparent
+}
+
+.uni-badge-danger,
+.uni-badge-red {
+ color: #fff;
+ background-color: #dd524d
+}
+
+.uni-badge-danger.uni-badge-inverted,
+.uni-badge-red.uni-badge-inverted {
+ color: #dd524d;
+ background-color: transparent
+}
+
+.uni-badge-purple,
+.uni-badge-royal {
+ color: #fff;
+ background-color: #8a6de9
+}
+
+.uni-badge-purple.uni-badge-inverted,
+.uni-badge-royal.uni-badge-inverted {
+ color: #8a6de9;
+ background-color: transparent
+}
+
+/*折叠面板 */
+.uni-collapse-content {
+ height: 0;
+ width: 100%;
+ overflow: hidden;
+}
+
+.uni-collapse-content.uni-active {
+ height: auto;
+}
+
+/*卡片视图 */
+.uni-card {
+ background: #fff;
+ border-radius: 8rpx;
+ margin: 20rpx 0;
+ position: relative;
+ /* box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); */
+}
+
+.uni-card-content {
+ font-size: 30rpx;
+}
+
+.uni-card-content.image-view {
+ width: 100%;
+ margin: 0;
+}
+
+.uni-card-content-inner {
+ position: relative;
+ padding: 30rpx;
+}
+
+.uni-card-footer,
+.uni-card-header {
+ position: relative;
+ display: flex;
+ min-height: 50rpx;
+ padding: 20rpx 30rpx;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-card-header {
+ font-size: 36rpx;
+}
+
+.uni-card-footer {
+ color: #6d6d72;
+}
+
+.uni-card-footer:before,
+.uni-card-header:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-card-header:after {
+ top: auto;
+ bottom: 0;
+}
+
+.uni-card-media {
+ justify-content: flex-start;
+}
+
+.uni-card-media-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+
+.uni-card-media-body {
+ height: 84rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+}
+
+.uni-card-media-text-top {
+ line-height: 36rpx;
+ font-size: 34rpx;
+}
+
+.uni-card-media-text-bottom {
+ line-height: 30rpx;
+ font-size: 28rpx;
+ color: #8f8f94;
+}
+
+.uni-card-link {
+ color: #007AFF;
+}
+
+/* 列表 */
+.uni-list {
+ background-color: #FFFFFF;
+ position: relative;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.uni-list:after {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+/* .uni-list::before {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+} */
+.uni-list-cell {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-list-cell-hover {
+ background-color: #eee;
+}
+
+.uni-list-cell-pd {
+ padding: 22rpx 30rpx;
+}
+
+.uni-list-cell-left {
+ white-space: nowrap;
+ font-size: 28rpx;
+ padding: 0 30rpx;
+}
+
+.uni-list-cell-db,
+.uni-list-cell-right {
+ flex: 1;
+}
+
+.uni-list-cell::after {
+ position: absolute;
+ z-index: 3;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list .uni-list-cell:last-child::after {
+ height: 0rpx;
+}
+
+.uni-list-cell-last.uni-list-cell::after {
+ height: 0rpx;
+}
+
+.uni-list-cell-divider {
+ position: relative;
+ display: flex;
+ color: #999;
+ background-color: #f7f7f7;
+ padding: 15rpx 20rpx;
+}
+
+.uni-list-cell-divider::before {
+ position: absolute;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list-cell-divider::after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list-cell-navigate {
+ font-size: 30rpx;
+ padding: 22rpx 30rpx;
+ line-height: 48rpx;
+ position: relative;
+ display: flex;
+ box-sizing: border-box;
+ width: 100%;
+ flex: 1;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-list-cell-navigate {
+ padding-right: 36rpx;
+}
+
+.uni-navigate-badge {
+ padding-right: 50rpx;
+}
+
+.uni-list-cell-navigate.uni-navigate-right:after {
+ font-family: uniicons;
+ content: '\e583';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-list-cell-navigate.uni-navigate-bottom:after {
+ font-family: uniicons;
+ content: '\e581';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after {
+ font-family: uniicons;
+ content: '\e580';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-collapse.uni-list-cell {
+ flex-direction: column;
+}
+
+.uni-list-cell-navigate.uni-active {
+ background: #eee;
+}
+
+.uni-list.uni-collapse {
+ box-sizing: border-box;
+ height: 0;
+ overflow: hidden;
+}
+
+.uni-collapse .uni-list-cell {
+ padding-left: 20rpx;
+}
+
+.uni-collapse .uni-list-cell::after {
+ left: 52rpx;
+}
+
+.uni-list.uni-active {
+ height: auto;
+}
+
+/* 三行列表 */
+.uni-triplex-row {
+ display: flex;
+ flex: 1;
+ width: 100%;
+ box-sizing: border-box;
+ flex-direction: row;
+ padding: 22rpx 30rpx;
+}
+
+.uni-triplex-right,
+.uni-triplex-left {
+ display: flex;
+ flex-direction: column;
+}
+
+.uni-triplex-left {
+ width: 84%;
+}
+
+.uni-triplex-left .uni-title {
+ padding: 8rpx 0;
+}
+
+.uni-triplex-left .uni-text,
+.uni-triplex-left .uni-text-small {
+ color: #999999;
+}
+
+.uni-triplex-right {
+ width: 16%;
+ text-align: right;
+}
+
+/* 图文列表 */
+.uni-media-list {
+ padding: 22rpx 30rpx;
+ box-sizing: border-box;
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+}
+
+.uni-navigate-right.uni-media-list {
+ padding-right: 74rpx;
+}
+
+.uni-pull-right {
+ flex-direction: row-reverse;
+}
+
+.uni-pull-right>.uni-media-list-logo {
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+
+.uni-media-list-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+
+.uni-media-list-logo image {
+ height: 100%;
+ width: 100%;
+}
+
+.uni-media-list-body {
+ height: 84rpx;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ overflow: hidden;
+}
+
+.uni-media-list-text-top {
+ width: 100%;
+ line-height: 36rpx;
+ font-size: 30rpx;
+}
+
+.uni-media-list-text-bottom {
+ width: 100%;
+ line-height: 30rpx;
+ font-size: 26rpx;
+ color: #8f8f94;
+}
+
+/* 九宫格 */
+.uni-grid-9 {
+ background: #f2f2f2;
+ width: 750rpx;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ border-top: 2rpx solid #eee;
+}
+
+.uni-grid-9-item {
+ width: 250rpx;
+ height: 200rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ border-bottom: 2rpx solid;
+ border-right: 2rpx solid;
+ border-color: #eee;
+ box-sizing: border-box;
+}
+
+.no-border-right {
+ border-right: none;
+}
+
+.uni-grid-9-image {
+ width: 100rpx;
+ height: 100rpx;
+}
+
+.uni-grid-9-text {
+ width: 250rpx;
+ line-height: 4rpx;
+ height: 40rpx;
+ text-align: center;
+ font-size: 30rpx;
+}
+
+.uni-grid-9-item-hover {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+/* 上传 */
+.uni-uploader {
+ flex: 1;
+ flex-direction: column;
+}
+
+.uni-uploader-head {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.uni-uploader-info {
+ color: #B2B2B2;
+}
+
+.uni-uploader-body {
+ margin-top: 16rpx;
+}
+
+.uni-uploader__files {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.uni-uploader__file {
+ margin: 10rpx;
+ width: 210rpx;
+ height: 210rpx;
+}
+
+.uni-uploader__img {
+ display: block;
+ width: 210rpx;
+ height: 210rpx;
+}
+
+.uni-uploader__input-box {
+ position: relative;
+ margin: 10rpx;
+ width: 208rpx;
+ height: 208rpx;
+ border: 2rpx solid #D9D9D9;
+}
+
+.uni-uploader__input-box:before,
+.uni-uploader__input-box:after {
+ content: " ";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #D9D9D9;
+}
+
+.uni-uploader__input-box:before {
+ width: 4rpx;
+ height: 79rpx;
+}
+
+.uni-uploader__input-box:after {
+ width: 79rpx;
+ height: 4rpx;
+}
+
+.uni-uploader__input-box:active {
+ border-color: #999999;
+}
+
+.uni-uploader__input-box:active:before,
+.uni-uploader__input-box:active:after {
+ background-color: #999999;
+}
+
+.uni-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+
+/*问题反馈*/
+.feedback-title {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20rpx;
+ color: #8f8f94;
+ font-size: 28rpx;
+}
+
+.feedback-star-view.feedback-title {
+ justify-content: flex-start;
+ margin: 0;
+}
+
+.feedback-quick {
+ position: relative;
+ padding-right: 40rpx;
+}
+
+.feedback-quick:after {
+ font-family: uniicons;
+ font-size: 40rpx;
+ content: '\e581';
+ position: absolute;
+ right: 0;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.feedback-body {
+ background: #fff;
+}
+
+.feedback-textare {
+ height: 200rpx;
+ font-size: 34rpx;
+ line-height: 50rpx;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 20rpx 30rpx 0;
+}
+
+.feedback-input {
+ font-size: 34rpx;
+ height: 50rpx;
+ min-height: 50rpx;
+ padding: 15rpx 20rpx;
+ line-height: 50rpx;
+}
+
+.feedback-uploader {
+ padding: 22rpx 20rpx;
+}
+
+.feedback-star {
+ font-family: uniicons;
+ font-size: 40rpx;
+ margin-left: 6rpx;
+}
+
+.feedback-star-view {
+ margin-left: 20rpx;
+}
+
+.feedback-star:after {
+ content: '\e408';
+}
+
+.feedback-star.active {
+ color: #FFB400;
+}
+
+.feedback-star.active:after {
+ content: '\e438';
+}
+
+.feedback-submit {
+ background: #007AFF;
+ color: #FFFFFF;
+ margin: 20rpx;
+}
+
+/* input group */
+.uni-input-group {
+ position: relative;
+ padding: 0;
+ border: 0;
+ background-color: #fff;
+}
+
+.uni-input-group:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-group:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ font-size: 28rpx;
+ padding: 22rpx 30rpx;
+ justify-content: space-between;
+}
+
+.uni-input-group .uni-input-row:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row label {
+ line-height: 70rpx;
+}
+
+/* textarea */
+.uni-textarea {
+ width: 100%;
+ background: #FFF;
+}
+
+.uni-textarea textarea {
+ width: 96%;
+ padding: 18rpx 2%;
+ line-height: 1.6;
+ font-size: 28rpx;
+ height: 150rpx;
+}
+
+/* tab bar */
+.uni-tab-bar {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ overflow: hidden;
+ height: 100%;
+}
+
+.uni-tab-bar .list {
+ width: 750rpx;
+ height: 100%;
+}
+
+.uni-swiper-tab {
+ width: 100%;
+ white-space: nowrap;
+ line-height: 100rpx;
+ height: 100rpx;
+ border-bottom: 1px solid #c8c7cc;
+}
+
+.swiper-tab-list {
+ font-size: 30rpx;
+ width: 150rpx;
+ display: inline-block;
+ text-align: center;
+ color: #555;
+}
+
+.uni-tab-bar .active {
+ color: #007AFF;
+}
+
+.uni-tab-bar .swiper-box {
+ flex: 1;
+ width: 100%;
+ height: calc(100% - 100rpx);
+}
+
+.uni-tab-bar-loading {
+ padding: 20rpx 0;
+}
+
+/* comment */
+.uni-comment {
+ padding: 5rpx 0;
+ display: flex;
+ flex-grow: 1;
+ flex-direction: column;
+}
+
+.uni-comment-list {
+ flex-wrap: nowrap;
+ padding: 10rpx 0;
+ margin: 10rpx 0;
+ width: 100%;
+ display: flex;
+}
+
+.uni-comment-face {
+ width: 70rpx;
+ height: 70rpx;
+ border-radius: 100%;
+ margin-right: 20rpx;
+ flex-shrink: 0;
+ overflow: hidden;
+}
+
+.uni-comment-face image {
+ width: 100%;
+ border-radius: 100%;
+}
+
+.uni-comment-body {
+ width: 100%;
+}
+
+.uni-comment-top {
+ line-height: 1.5em;
+ justify-content: space-between;
+}
+
+.uni-comment-top text {
+ color: #0A98D5;
+ font-size: 24rpx;
+}
+
+.uni-comment-date {
+ line-height: 38rpx;
+ flex-direction: row;
+ justify-content: space-between;
+ display: flex !important;
+ flex-grow: 1;
+}
+
+.uni-comment-date view {
+ color: #666666;
+ font-size: 24rpx;
+ line-height: 38rpx;
+}
+
+.uni-comment-content {
+ line-height: 1.6em;
+ font-size: 28rpx;
+ padding: 8rpx 0;
+}
+
+.uni-comment-replay-btn {
+ background: #FFF;
+ font-size: 24rpx;
+ line-height: 28rpx;
+ padding: 5rpx 20rpx;
+ border-radius: 30rpx;
+ color: #333 !important;
+ margin: 0 10rpx;
+}
+
+/* swiper msg */
+.uni-swiper-msg {
+ width: 100%;
+ padding: 12rpx 0;
+ flex-wrap: nowrap;
+ display: flex;
+}
+
+.uni-swiper-msg-icon {
+ width: 50rpx;
+ margin-right: 20rpx;
+}
+
+.uni-swiper-msg-icon image {
+ width: 100%;
+ flex-shrink: 0;
+}
+
+.uni-swiper-msg swiper {
+ width: 100%;
+ height: 50rpx;
+}
+
+.uni-swiper-msg swiper-item {
+ line-height: 50rpx;
+}
+
+/* product */
+.uni-product-list {
+ display: flex;
+ width: 100%;
+ flex-wrap: wrap;
+ flex-direction: row;
+}
+
+.uni-product {
+ padding: 20rpx;
+ display: flex;
+ flex-direction: column;
+}
+
+.image-view {
+ height: 330rpx;
+ width: 330rpx;
+ margin: 12rpx 0;
+}
+
+.uni-product-image {
+ height: 330rpx;
+ width: 330rpx;
+}
+
+.uni-product-title {
+ width: 300rpx;
+ word-break: break-all;
+ display: -webkit-box;
+ overflow: hidden;
+ line-height: 1.5;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.uni-product-price {
+ margin-top: 10rpx;
+ font-size: 28rpx;
+ line-height: 1.5;
+ position: relative;
+}
+
+.uni-product-price-original {
+ color: #e80080;
+}
+
+.uni-product-price-favour {
+ color: #888888;
+ text-decoration: line-through;
+ margin-left: 10rpx;
+}
+
+.uni-product-tip {
+ position: absolute;
+ right: 10rpx;
+ background-color: #ff3333;
+ color: #ffffff;
+ padding: 0 10rpx;
+ border-radius: 5rpx;
+}
+
+/* timeline */
+.uni-timeline {
+ margin: 35rpx 0;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+
+
+.uni-timeline-item {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+ padding-bottom: 20rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+
+}
+
+.uni-timeline-item .uni-timeline-item-keynode {
+ width: 160rpx;
+ flex-shrink: 0;
+ box-sizing: border-box;
+ padding-right: 20rpx;
+ text-align: right;
+ line-height: 65rpx;
+}
+
+.uni-timeline-item .uni-timeline-item-divider {
+ flex-shrink: 0;
+ position: relative;
+ width: 30rpx;
+ height: 30rpx;
+ top: 15rpx;
+ border-radius: 50%;
+ background-color: #bbb;
+}
+
+
+
+.uni-timeline-item-divider::before,
+.uni-timeline-item-divider::after {
+ position: absolute;
+ left: 15rpx;
+ width: 1rpx;
+ height: 100vh;
+ content: '';
+ background: inherit;
+}
+
+.uni-timeline-item-divider::before {
+ bottom: 100%;
+}
+
+.uni-timeline-item-divider::after {
+ top: 100%;
+}
+
+
+.uni-timeline-last-item .uni-timeline-item-divider:after {
+ display: none;
+}
+
+.uni-timeline-first-item .uni-timeline-item-divider:before {
+ display: none;
+}
+
+.uni-timeline-item .uni-timeline-item-content {
+ padding-left: 20rpx;
+}
+
+.uni-timeline-last-item .bottom-border::after {
+ display: none;
+}
+
+.uni-timeline-item-content .datetime {
+ color: #CCCCCC;
+}
+
+/* 自定义节点颜色 */
+.uni-timeline-last-item .uni-timeline-item-divider {
+ background-color: #1AAD19;
+}
+
+
+/* uni-icon */
+
+.uni-icon {
+ font-family: uniicons;
+ font-size: 24px;
+ font-weight: normal;
+ font-style: normal;
+ line-height: 1;
+ display: inline-block;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+}
+
+.uni-icon.uni-active {
+ color: #007aff;
+}
+
+.uni-icon-contact:before {
+ content: '\e100';
+}
+
+.uni-icon-person:before {
+ content: '\e101';
+}
+
+.uni-icon-personadd:before {
+ content: '\e102';
+}
+
+.uni-icon-contact-filled:before {
+ content: '\e130';
+}
+
+.uni-icon-person-filled:before {
+ content: '\e131';
+}
+
+.uni-icon-personadd-filled:before {
+ content: '\e132';
+}
+
+.uni-icon-phone:before {
+ content: '\e200';
+}
+
+.uni-icon-email:before {
+ content: '\e201';
+}
+
+.uni-icon-chatbubble:before {
+ content: '\e202';
+}
+
+.uni-icon-chatboxes:before {
+ content: '\e203';
+}
+
+.uni-icon-phone-filled:before {
+ content: '\e230';
+}
+
+.uni-icon-email-filled:before {
+ content: '\e231';
+}
+
+.uni-icon-chatbubble-filled:before {
+ content: '\e232';
+}
+
+.uni-icon-chatboxes-filled:before {
+ content: '\e233';
+}
+
+.uni-icon-weibo:before {
+ content: '\e260';
+}
+
+.uni-icon-weixin:before {
+ content: '\e261';
+}
+
+.uni-icon-pengyouquan:before {
+ content: '\e262';
+}
+
+.uni-icon-chat:before {
+ content: '\e263';
+}
+
+.uni-icon-qq:before {
+ content: '\e264';
+}
+
+.uni-icon-videocam:before {
+ content: '\e300';
+}
+
+.uni-icon-camera:before {
+ content: '\e301';
+}
+
+.uni-icon-mic:before {
+ content: '\e302';
+}
+
+.uni-icon-location:before {
+ content: '\e303';
+}
+
+.uni-icon-mic-filled:before,
+.uni-icon-speech:before {
+ content: '\e332';
+}
+
+.uni-icon-location-filled:before {
+ content: '\e333';
+}
+
+.uni-icon-micoff:before {
+ content: '\e360';
+}
+
+.uni-icon-image:before {
+ content: '\e363';
+}
+
+.uni-icon-map:before {
+ content: '\e364';
+}
+
+.uni-icon-compose:before {
+ content: '\e400';
+}
+
+.uni-icon-trash:before {
+ content: '\e401';
+}
+
+.uni-icon-upload:before {
+ content: '\e402';
+}
+
+.uni-icon-download:before {
+ content: '\e403';
+}
+
+.uni-icon-close:before {
+ content: '\e404';
+}
+
+.uni-icon-redo:before {
+ content: '\e405';
+}
+
+.uni-icon-undo:before {
+ content: '\e406';
+}
+
+.uni-icon-refresh:before {
+ content: '\e407';
+}
+
+.uni-icon-star:before {
+ content: '\e408';
+}
+
+.uni-icon-plus:before {
+ content: '\e409';
+}
+
+.uni-icon-minus:before {
+ content: '\e410';
+}
+
+.uni-icon-circle:before,
+.uni-icon-checkbox:before {
+ content: '\e411';
+}
+
+.uni-icon-close-filled:before,
+.uni-icon-clear:before {
+ content: '\e434';
+}
+
+.uni-icon-refresh-filled:before {
+ content: '\e437';
+}
+
+.uni-icon-star-filled:before {
+ content: '\e438';
+}
+
+.uni-icon-plus-filled:before {
+ content: '\e439';
+}
+
+.uni-icon-minus-filled:before {
+ content: '\e440';
+}
+
+.uni-icon-circle-filled:before {
+ content: '\e441';
+}
+
+.uni-icon-checkbox-filled:before {
+ content: '\e442';
+}
+
+.uni-icon-closeempty:before {
+ content: '\e460';
+}
+
+.uni-icon-refreshempty:before {
+ content: '\e461';
+}
+
+.uni-icon-reload:before {
+ content: '\e462';
+}
+
+.uni-icon-starhalf:before {
+ content: '\e463';
+}
+
+.uni-icon-spinner:before {
+ content: '\e464';
+}
+
+.uni-icon-spinner-cycle:before {
+ content: '\e465';
+}
+
+.uni-icon-search:before {
+ content: '\e466';
+}
+
+.uni-icon-plusempty:before {
+ content: '\e468';
+}
+
+.uni-icon-forward:before {
+ content: '\e470';
+}
+
+.uni-icon-back:before,
+.uni-icon-left-nav:before {
+ content: '\e471';
+}
+
+.uni-icon-checkmarkempty:before {
+ content: '\e472';
+}
+
+.uni-icon-home:before {
+ content: '\e500';
+}
+
+.uni-icon-navigate:before {
+ content: '\e501';
+}
+
+.uni-icon-gear:before {
+ content: '\e502';
+}
+
+.uni-icon-paperplane:before {
+ content: '\e503';
+}
+
+.uni-icon-info:before {
+ content: '\e504';
+}
+
+.uni-icon-help:before {
+ content: '\e505';
+}
+
+.uni-icon-locked:before {
+ content: '\e506';
+}
+
+.uni-icon-more:before {
+ content: '\e507';
+}
+
+.uni-icon-flag:before {
+ content: '\e508';
+}
+
+.uni-icon-home-filled:before {
+ content: '\e530';
+}
+
+.uni-icon-gear-filled:before {
+ content: '\e532';
+}
+
+.uni-icon-info-filled:before {
+ content: '\e534';
+}
+
+.uni-icon-help-filled:before {
+ content: '\e535';
+}
+
+.uni-icon-more-filled:before {
+ content: '\e537';
+}
+
+.uni-icon-settings:before {
+ content: '\e560';
+}
+
+.uni-icon-list:before {
+ content: '\e562';
+}
+
+.uni-icon-bars:before {
+ content: '\e563';
+}
+
+.uni-icon-loop:before {
+ content: '\e565';
+}
+
+.uni-icon-paperclip:before {
+ content: '\e567';
+}
+
+.uni-icon-eye:before {
+ content: '\e568';
+}
+
+.uni-icon-arrowup:before {
+ content: '\e580';
+}
+
+.uni-icon-arrowdown:before {
+ content: '\e581';
+}
+
+.uni-icon-arrowleft:before {
+ content: '\e582';
+}
+
+.uni-icon-arrowright:before {
+ content: '\e583';
+}
+
+.uni-icon-arrowthinup:before {
+ content: '\e584';
+}
+
+.uni-icon-arrowthindown:before {
+ content: '\e585';
+}
+
+.uni-icon-arrowthinleft:before {
+ content: '\e586';
+}
+
+.uni-icon-arrowthinright:before {
+ content: '\e587';
+}
+
+.uni-icon-pulldown:before {
+ content: '\e588';
+}
+
+.uni-icon-scan:before {
+ content: "\e612";
+}
+
+/* 分界线 */
+.uni-divider {
+ height: 110rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+
+.uni-divider__content {
+ font-size: 28rpx;
+ color: #999;
+ padding: 0 20rpx;
+ position: relative;
+ z-index: 101;
+ background: #F4F5F6;
+}
+
+.uni-divider__line {
+ background-color: #CCCCCC;
+ height: 1px;
+ width: 100%;
+ position: absolute;
+ z-index: 100;
+ top: 50%;
+ left: 0;
+ transform: translateY(50%);
+}
+
+/* view{
+ font-size:28rpx;
+ line-height:1.8;
+} */
+progress,
+checkbox-group {
+ width: 100%;
+}
+
+form {
+ width: 100%;
+}
+
+.uni-flex {
+ display: flex;
+ flex-direction: row;
+}
+
+.uni-flex-item {
+ flex: 1;
+}
+
+.uni-row {
+ flex-direction: row;
+}
+
+.uni-column {
+ flex-direction: column;
+}
+
+.uni-link {
+ color: #576B95;
+ font-size: 26rpx;
+}
+
+.uni-center {
+ text-align: center;
+}
+
+.uni-inline-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.uni-inline-item text {
+ margin-right: 20rpx;
+}
+
+.uni-inline-item text:last-child {
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+
+/* page */
+.common-page-head {
+ padding: 35rpx;
+ text-align: center;
+}
+
+.common-page-head-title {
+ display: inline-block;
+ padding: 0 40rpx;
+ font-size: 30rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ color: #BEBEBE;
+ box-sizing: border-box;
+ border-bottom: 2rpx solid #D8D8D8;
+}
+
+.uni-padding-wrap {
+ /* width:690rpx; */
+ padding: 0 30rpx;
+}
+
+.uni-word {
+ text-align: center;
+ padding: 200rpx 100rpx;
+}
+
+.uni-title {
+ font-size: 30rpx;
+ font-weight: 500;
+ padding: 20rpx 0;
+ line-height: 1.5;
+}
+
+.uni-text {
+ font-size: 28rpx;
+}
+
+.uni-title text {
+ font-size: 24rpx;
+ color: #888;
+}
+
+.uni-text-gray {
+ color: #ccc;
+}
+
+.uni-text-small {
+ font-size: 24rpx;
+}
+
+.uni-common-mb {
+ margin-bottom: 30rpx;
+}
+
+.uni-common-pb {
+ padding-bottom: 30rpx;
+}
+
+.uni-common-pl {
+ padding-left: 30rpx;
+}
+
+.uni-common-mt {
+ margin-top: 30rpx;
+}
+
+/* 背景色 */
+.uni-bg-red {
+ background: #F76260;
+ color: #FFF;
+}
+
+.uni-bg-green {
+ background: #09BB07;
+ color: #FFF;
+}
+
+.uni-bg-blue {
+ background: #007AFF;
+ color: #FFF;
+}
+
+/* 标题 */
+.uni-h1 {
+ font-size: 80rpx;
+ font-weight: 700;
+}
+
+.uni-h2 {
+ font-size: 60rpx;
+ font-weight: 700;
+}
+
+.uni-h3 {
+ font-size: 48rpx;
+ font-weight: 700;
+}
+
+.uni-h4 {
+ font-size: 36rpx;
+ font-weight: 700;
+}
+
+.uni-h5 {
+ font-size: 28rpx;
+ color: #8f8f94;
+}
+
+.uni-h6 {
+ font-size: 24rpx;
+ color: #8f8f94;
+}
+
+.uni-bold {
+ font-weight: bold;
+}
+
+/* 文本溢出隐藏 */
+.uni-ellipsis {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+/* 竖向百分百按钮 */
+.uni-btn-v {
+ padding: 10rpx 0;
+}
+
+.uni-btn-v button {
+ margin: 20rpx 0;
+}
+
+/* 表单 */
+.uni-form-item {
+ display: flex;
+ width: 100%;
+ padding: 10rpx 0;
+}
+
+.uni-form-item .title {
+ padding: 10rpx 25rpx;
+}
+
+.uni-label {
+ width: 210rpx;
+ word-wrap: break-word;
+ word-break: break-all;
+ text-indent: 20rpx;
+}
+
+.uni-input {
+ height: 50rpx;
+ padding: 15rpx 25rpx;
+ line-height: 50rpx;
+ font-size: 28rpx;
+ background: #FFF;
+ flex: 1;
+}
+
+radio-group,
+checkbox-group {
+ width: 100%;
+}
+
+radio-group label,
+checkbox-group label {
+ padding-right: 20rpx;
+}
+
+.uni-form-item .with-fun {
+ display: flex;
+ flex-wrap: nowrap;
+ background: #FFFFFF;
+}
+
+.uni-form-item .with-fun .uni-icon {
+ width: 40px;
+ height: 80rpx;
+ line-height: 80rpx;
+ flex-shrink: 0;
+}
+
+/* loadmore */
+.uni-loadmore {
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ padding-bottom: 30rpx;
+}
+
+/*数字角标*/
+/* .uni-badge,
+.uni-badge-default {
+ font-family: 'Helvetica Neue', Helvetica, sans-serif;
+ font-size: 12px;
+ line-height: 1;
+ display: inline-block;
+ padding: 3px 6px;
+ color: #333;
+ border-radius: 100px;
+ background-color: rgba(0, 0, 0, .15);
+} */
+.uni-badge.uni-badge-inverted {
+ padding: 0 5px 0 0;
+ color: #929292;
+ background-color: transparent
+}
+
+.uni-badge-primary {
+ color: #fff;
+ background-color: #007aff
+}
+
+.uni-badge-blue.uni-badge-inverted,
+.uni-badge-primary.uni-badge-inverted {
+ color: #007aff;
+ background-color: transparent
+}
+
+.uni-badge-green,
+.uni-badge-success {
+ color: #fff;
+ background-color: #4cd964;
+}
+
+.uni-badge-green.uni-badge-inverted,
+.uni-badge-success.uni-badge-inverted {
+ color: #4cd964;
+ background-color: transparent
+}
+
+.uni-badge-warning,
+.uni-badge-yellow {
+ color: #fff;
+ background-color: #f0ad4e
+}
+
+.uni-badge-warning.uni-badge-inverted,
+.uni-badge-yellow.uni-badge-inverted {
+ color: #f0ad4e;
+ background-color: transparent
+}
+
+.uni-badge-danger,
+.uni-badge-red {
+ color: #fff;
+ background-color: #dd524d
+}
+
+.uni-badge-danger.uni-badge-inverted,
+.uni-badge-red.uni-badge-inverted {
+ color: #dd524d;
+ background-color: transparent
+}
+
+.uni-badge-purple,
+.uni-badge-royal {
+ color: #fff;
+ background-color: #8a6de9
+}
+
+.uni-badge-purple.uni-badge-inverted,
+.uni-badge-royal.uni-badge-inverted {
+ color: #8a6de9;
+ background-color: transparent
+}
+
+/*折叠面板 */
+.uni-collapse-content {
+ height: 0;
+ width: 100%;
+ overflow: hidden;
+}
+
+.uni-collapse-content.uni-active {
+ height: auto;
+}
+
+/*卡片视图 */
+.uni-card {
+ background: #fff;
+ border-radius: 8rpx;
+ margin: 20rpx 0;
+ position: relative;
+ /* box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); */
+}
+
+.uni-card-content {
+ font-size: 30rpx;
+}
+
+.uni-card-content.image-view {
+ width: 100%;
+ margin: 0;
+}
+
+.uni-card-content-inner {
+ position: relative;
+ padding: 30rpx;
+}
+
+.uni-card-footer,
+.uni-card-header {
+ position: relative;
+ display: flex;
+ min-height: 50rpx;
+ padding: 20rpx 30rpx;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-card-header {
+ font-size: 36rpx;
+}
+
+.uni-card-footer {
+ color: #6d6d72;
+}
+
+.uni-card-footer:before,
+.uni-card-header:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-card-header:after {
+ top: auto;
+ bottom: 0;
+}
+
+.uni-card-media {
+ justify-content: flex-start;
+}
+
+.uni-card-media-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+
+.uni-card-media-body {
+ height: 84rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+}
+
+.uni-card-media-text-top {
+ line-height: 36rpx;
+ font-size: 34rpx;
+}
+
+.uni-card-media-text-bottom {
+ line-height: 30rpx;
+ font-size: 28rpx;
+ color: #8f8f94;
+}
+
+.uni-card-link {
+ color: #007AFF;
+}
+
+/* 列表 */
+.uni-list {
+ background-color: #FFFFFF;
+ position: relative;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.uni-list:after {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+/* .uni-list::before {
+ position: absolute;
+ z-index: 10;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+} */
+.uni-list-cell {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-list-cell-hover {
+ background-color: #eee;
+}
+
+.uni-list-cell-pd {
+ padding: 22rpx 30rpx;
+}
+
+.uni-list-cell-left {
+ white-space: nowrap;
+ font-size: 28rpx;
+ padding: 0 30rpx;
+}
+
+.uni-list-cell-db,
+.uni-list-cell-right {
+ flex: 1;
+}
+
+.uni-list-cell::after {
+ position: absolute;
+ z-index: 3;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list .uni-list-cell:last-child::after {
+ height: 0rpx;
+}
+
+.uni-list-cell-last.uni-list-cell::after {
+ height: 0rpx;
+}
+
+.uni-list-cell-divider {
+ position: relative;
+ display: flex;
+ color: #999;
+ background-color: #f7f7f7;
+ padding: 15rpx 20rpx;
+}
+
+.uni-list-cell-divider::before {
+ position: absolute;
+ right: 0;
+ top: 0;
+ left: 0;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list-cell-divider::after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0rpx;
+ height: 1px;
+ content: '';
+ -webkit-transform: scaleY(.5);
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-list-cell-navigate {
+ font-size: 30rpx;
+ padding: 22rpx 30rpx;
+ line-height: 48rpx;
+ position: relative;
+ display: flex;
+ box-sizing: border-box;
+ width: 100%;
+ flex: 1;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.uni-list-cell-navigate {
+ padding-right: 36rpx;
+}
+
+.uni-navigate-badge {
+ padding-right: 50rpx;
+}
+
+.uni-list-cell-navigate.uni-navigate-right:after {
+ font-family: uniicons;
+ content: '\e583';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-list-cell-navigate.uni-navigate-bottom:after {
+ font-family: uniicons;
+ content: '\e581';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after {
+ font-family: uniicons;
+ content: '\e580';
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.uni-collapse.uni-list-cell {
+ flex-direction: column;
+}
+
+.uni-list-cell-navigate.uni-active {
+ background: #eee;
+}
+
+.uni-list.uni-collapse {
+ box-sizing: border-box;
+ height: 0;
+ overflow: hidden;
+}
+
+.uni-collapse .uni-list-cell {
+ padding-left: 20rpx;
+}
+
+.uni-collapse .uni-list-cell::after {
+ left: 52rpx;
+}
+
+.uni-list.uni-active {
+ height: auto;
+}
+
+/* 三行列表 */
+.uni-triplex-row {
+ display: flex;
+ flex: 1;
+ width: 100%;
+ box-sizing: border-box;
+ flex-direction: row;
+ padding: 22rpx 30rpx;
+}
+
+.uni-triplex-right,
+.uni-triplex-left {
+ display: flex;
+ flex-direction: column;
+}
+
+.uni-triplex-left {
+ width: 84%;
+}
+
+.uni-triplex-left .uni-title {
+ padding: 8rpx 0;
+}
+
+.uni-triplex-left .uni-text,
+.uni-triplex-left .uni-text-small {
+ color: #999999;
+}
+
+.uni-triplex-right {
+ width: 16%;
+ text-align: right;
+}
+
+/* 图文列表 */
+.uni-media-list {
+ padding: 22rpx 30rpx;
+ box-sizing: border-box;
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+}
+
+.uni-navigate-right.uni-media-list {
+ padding-right: 74rpx;
+}
+
+.uni-pull-right {
+ flex-direction: row-reverse;
+}
+
+.uni-pull-right>.uni-media-list-logo {
+ margin-right: 0rpx;
+ margin-left: 20rpx;
+}
+
+.uni-media-list-logo {
+ height: 84rpx;
+ width: 84rpx;
+ margin-right: 20rpx;
+}
+
+.uni-media-list-logo image {
+ height: 100%;
+ width: 100%;
+}
+
+.uni-media-list-body {
+ height: 84rpx;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-start;
+ overflow: hidden;
+}
+
+.uni-media-list-text-top {
+ width: 100%;
+ line-height: 36rpx;
+ font-size: 30rpx;
+}
+
+.uni-media-list-text-bottom {
+ width: 100%;
+ line-height: 30rpx;
+ font-size: 26rpx;
+ color: #8f8f94;
+}
+
+/* 九宫格 */
+.uni-grid-9 {
+ background: #f2f2f2;
+ width: 750rpx;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ border-top: 2rpx solid #eee;
+}
+
+.uni-grid-9-item {
+ width: 250rpx;
+ height: 200rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ border-bottom: 2rpx solid;
+ border-right: 2rpx solid;
+ border-color: #eee;
+ box-sizing: border-box;
+}
+
+.no-border-right {
+ border-right: none;
+}
+
+.uni-grid-9-image {
+ width: 100rpx;
+ height: 100rpx;
+}
+
+.uni-grid-9-text {
+ width: 250rpx;
+ line-height: 4rpx;
+ height: 40rpx;
+ text-align: center;
+ font-size: 30rpx;
+}
+
+.uni-grid-9-item-hover {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+/* 上传 */
+.uni-uploader {
+ flex: 1;
+ flex-direction: column;
+}
+
+.uni-uploader-head {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.uni-uploader-info {
+ color: #B2B2B2;
+}
+
+.uni-uploader-body {
+ margin-top: 16rpx;
+}
+
+.uni-uploader__files {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.uni-uploader__file {
+ margin: 10rpx;
+ width: 210rpx;
+ height: 210rpx;
+}
+
+.uni-uploader__img {
+ display: block;
+ width: 210rpx;
+ height: 210rpx;
+}
+
+.uni-uploader__input-box {
+ position: relative;
+ margin: 10rpx;
+ width: 208rpx;
+ height: 208rpx;
+ border: 2rpx solid #D9D9D9;
+}
+
+.uni-uploader__input-box:before,
+.uni-uploader__input-box:after {
+ content: " ";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #D9D9D9;
+}
+
+.uni-uploader__input-box:before {
+ width: 4rpx;
+ height: 79rpx;
+}
+
+.uni-uploader__input-box:after {
+ width: 79rpx;
+ height: 4rpx;
+}
+
+.uni-uploader__input-box:active {
+ border-color: #999999;
+}
+
+.uni-uploader__input-box:active:before,
+.uni-uploader__input-box:active:after {
+ background-color: #999999;
+}
+
+.uni-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+
+/*问题反馈*/
+.feedback-title {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20rpx;
+ color: #8f8f94;
+ font-size: 28rpx;
+}
+
+.feedback-star-view.feedback-title {
+ justify-content: flex-start;
+ margin: 0;
+}
+
+.feedback-quick {
+ position: relative;
+ padding-right: 40rpx;
+}
+
+.feedback-quick:after {
+ font-family: uniicons;
+ font-size: 40rpx;
+ content: '\e581';
+ position: absolute;
+ right: 0;
+ top: 50%;
+ color: #bbb;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.feedback-body {
+ background: #fff;
+}
+
+.feedback-textare {
+ height: 200rpx;
+ font-size: 34rpx;
+ line-height: 50rpx;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 20rpx 30rpx 0;
+}
+
+.feedback-input {
+ font-size: 34rpx;
+ height: 50rpx;
+ min-height: 50rpx;
+ padding: 15rpx 20rpx;
+ line-height: 50rpx;
+}
+
+.feedback-uploader {
+ padding: 22rpx 20rpx;
+}
+
+.feedback-star {
+ font-family: uniicons;
+ font-size: 40rpx;
+ margin-left: 6rpx;
+}
+
+.feedback-star-view {
+ margin-left: 20rpx;
+}
+
+.feedback-star:after {
+ content: '\e408';
+}
+
+.feedback-star.active {
+ color: #FFB400;
+}
+
+.feedback-star.active:after {
+ content: '\e438';
+}
+
+.feedback-submit {
+ background: #007AFF;
+ color: #FFFFFF;
+ margin: 20rpx;
+}
+
+/* input group */
+.uni-input-group {
+ position: relative;
+ padding: 0;
+ border: 0;
+ background-color: #fff;
+}
+
+.uni-input-group:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-group:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ font-size: 28rpx;
+ padding: 22rpx 30rpx;
+ justify-content: space-between;
+}
+
+.uni-input-group .uni-input-row:after {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 30rpx;
+ height: 2rpx;
+ content: '';
+ transform: scaleY(.5);
+ background-color: #c8c7cc;
+}
+
+.uni-input-row label {
+ line-height: 70rpx;
+}
+
+/* textarea */
+.uni-textarea {
+ width: 100%;
+ background: #FFF;
+}
+
+.uni-textarea textarea {
+ width: 96%;
+ padding: 18rpx 2%;
+ line-height: 1.6;
+ font-size: 28rpx;
+ height: 150rpx;
+}
+
+/* tab bar */
+.uni-tab-bar {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ overflow: hidden;
+ height: 100%;
+}
+
+.uni-tab-bar .list {
+ width: 750rpx;
+ height: 100%;
+}
+
+.uni-swiper-tab {
+ width: 100%;
+ white-space: nowrap;
+ line-height: 100rpx;
+ height: 100rpx;
+ border-bottom: 1px solid #c8c7cc;
+}
+
+.swiper-tab-list {
+ font-size: 30rpx;
+ width: 150rpx;
+ display: inline-block;
+ text-align: center;
+ color: #555;
+}
+
+.uni-tab-bar .active {
+ color: #007AFF;
+}
+
+.uni-tab-bar .swiper-box {
+ flex: 1;
+ width: 100%;
+ height: calc(100% - 100rpx);
+}
+
+.uni-tab-bar-loading {
+ padding: 20rpx 0;
+}
+
+/* comment */
+.uni-comment {
+ padding: 5rpx 0;
+ display: flex;
+ flex-grow: 1;
+ flex-direction: column;
+}
+
+.uni-comment-list {
+ flex-wrap: nowrap;
+ padding: 10rpx 0;
+ margin: 10rpx 0;
+ width: 100%;
+ display: flex;
+}
+
+.uni-comment-face {
+ width: 70rpx;
+ height: 70rpx;
+ border-radius: 100%;
+ margin-right: 20rpx;
+ flex-shrink: 0;
+ overflow: hidden;
+}
+
+.uni-comment-face image {
+ width: 100%;
+ border-radius: 100%;
+}
+
+.uni-comment-body {
+ width: 100%;
+}
+
+.uni-comment-top {
+ line-height: 1.5em;
+ justify-content: space-between;
+}
+
+.uni-comment-top text {
+ color: #0A98D5;
+ font-size: 24rpx;
+}
+
+.uni-comment-date {
+ line-height: 38rpx;
+ flex-direction: row;
+ justify-content: space-between;
+ display: flex !important;
+ flex-grow: 1;
+}
+
+.uni-comment-date view {
+ color: #666666;
+ font-size: 24rpx;
+ line-height: 38rpx;
+}
+
+.uni-comment-content {
+ line-height: 1.6em;
+ font-size: 28rpx;
+ padding: 8rpx 0;
+}
+
+.uni-comment-replay-btn {
+ background: #FFF;
+ font-size: 24rpx;
+ line-height: 28rpx;
+ padding: 5rpx 20rpx;
+ border-radius: 30rpx;
+ color: #333 !important;
+ margin: 0 10rpx;
+}
+
+/* swiper msg */
+.uni-swiper-msg {
+ width: 100%;
+ padding: 12rpx 0;
+ flex-wrap: nowrap;
+ display: flex;
+}
+
+.uni-swiper-msg-icon {
+ width: 50rpx;
+ margin-right: 20rpx;
+}
+
+.uni-swiper-msg-icon image {
+ width: 100%;
+ flex-shrink: 0;
+}
+
+.uni-swiper-msg swiper {
+ width: 100%;
+ height: 50rpx;
+}
+
+.uni-swiper-msg swiper-item {
+ line-height: 50rpx;
+}
+
+/* product */
+.uni-product-list {
+ display: flex;
+ width: 100%;
+ flex-wrap: wrap;
+ flex-direction: row;
+}
+
+.uni-product {
+ padding: 20rpx;
+ display: flex;
+ flex-direction: column;
+}
+
+.image-view {
+ height: 330rpx;
+ width: 330rpx;
+ margin: 12rpx 0;
+}
+
+.uni-product-image {
+ height: 330rpx;
+ width: 330rpx;
+}
+
+.uni-product-title {
+ width: 300rpx;
+ word-break: break-all;
+ display: -webkit-box;
+ overflow: hidden;
+ line-height: 1.5;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.uni-product-price {
+ margin-top: 10rpx;
+ font-size: 28rpx;
+ line-height: 1.5;
+ position: relative;
+}
+
+.uni-product-price-original {
+ color: #e80080;
+}
+
+.uni-product-price-favour {
+ color: #888888;
+ text-decoration: line-through;
+ margin-left: 10rpx;
+}
+
+.uni-product-tip {
+ position: absolute;
+ right: 10rpx;
+ background-color: #ff3333;
+ color: #ffffff;
+ padding: 0 10rpx;
+ border-radius: 5rpx;
+}
+
+/* timeline */
+.uni-timeline {
+ margin: 35rpx 0;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+
+
+.uni-timeline-item {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+ padding-bottom: 20rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+
+}
+
+.uni-timeline-item .uni-timeline-item-keynode {
+ width: 160rpx;
+ flex-shrink: 0;
+ box-sizing: border-box;
+ padding-right: 20rpx;
+ text-align: right;
+ line-height: 65rpx;
+}
+
+.uni-timeline-item .uni-timeline-item-divider {
+ flex-shrink: 0;
+ position: relative;
+ width: 30rpx;
+ height: 30rpx;
+ top: 15rpx;
+ border-radius: 50%;
+ background-color: #bbb;
+}
+
+
+
+.uni-timeline-item-divider::before,
+.uni-timeline-item-divider::after {
+ position: absolute;
+ left: 15rpx;
+ width: 1rpx;
+ height: 100vh;
+ content: '';
+ background: inherit;
+}
+
+.uni-timeline-item-divider::before {
+ bottom: 100%;
+}
+
+.uni-timeline-item-divider::after {
+ top: 100%;
+}
+
+
+.uni-timeline-last-item .uni-timeline-item-divider:after {
+ display: none;
+}
+
+.uni-timeline-first-item .uni-timeline-item-divider:before {
+ display: none;
+}
+
+.uni-timeline-item .uni-timeline-item-content {
+ padding-left: 20rpx;
+}
+
+.uni-timeline-last-item .bottom-border::after {
+ display: none;
+}
+
+.uni-timeline-item-content .datetime {
+ color: #CCCCCC;
+}
+
+/* 自定义节点颜色 */
+.uni-timeline-last-item .uni-timeline-item-divider {
+ background-color: #1AAD19;
+}
+
+
+/* uni-icon */
+
+.uni-icon {
+ font-family: uniicons;
+ font-size: 24px;
+ font-weight: normal;
+ font-style: normal;
+ line-height: 1;
+ display: inline-block;
+ text-decoration: none;
+ -webkit-font-smoothing: antialiased;
+}
+
+.uni-icon.uni-active {
+ color: #007aff;
+}
+
+.uni-icon-contact:before {
+ content: '\e100';
+}
+
+.uni-icon-person:before {
+ content: '\e101';
+}
+
+.uni-icon-personadd:before {
+ content: '\e102';
+}
+
+.uni-icon-contact-filled:before {
+ content: '\e130';
+}
+
+.uni-icon-person-filled:before {
+ content: '\e131';
+}
+
+.uni-icon-personadd-filled:before {
+ content: '\e132';
+}
+
+.uni-icon-phone:before {
+ content: '\e200';
+}
+
+.uni-icon-email:before {
+ content: '\e201';
+}
+
+.uni-icon-chatbubble:before {
+ content: '\e202';
+}
+
+.uni-icon-chatboxes:before {
+ content: '\e203';
+}
+
+.uni-icon-phone-filled:before {
+ content: '\e230';
+}
+
+.uni-icon-email-filled:before {
+ content: '\e231';
+}
+
+.uni-icon-chatbubble-filled:before {
+ content: '\e232';
+}
+
+.uni-icon-chatboxes-filled:before {
+ content: '\e233';
+}
+
+.uni-icon-weibo:before {
+ content: '\e260';
+}
+
+.uni-icon-weixin:before {
+ content: '\e261';
+}
+
+.uni-icon-pengyouquan:before {
+ content: '\e262';
+}
+
+.uni-icon-chat:before {
+ content: '\e263';
+}
+
+.uni-icon-qq:before {
+ content: '\e264';
+}
+
+.uni-icon-videocam:before {
+ content: '\e300';
+}
+
+.uni-icon-camera:before {
+ content: '\e301';
+}
+
+.uni-icon-mic:before {
+ content: '\e302';
+}
+
+.uni-icon-location:before {
+ content: '\e303';
+}
+
+.uni-icon-mic-filled:before,
+.uni-icon-speech:before {
+ content: '\e332';
+}
+
+.uni-icon-location-filled:before {
+ content: '\e333';
+}
+
+.uni-icon-micoff:before {
+ content: '\e360';
+}
+
+.uni-icon-image:before {
+ content: '\e363';
+}
+
+.uni-icon-map:before {
+ content: '\e364';
+}
+
+.uni-icon-compose:before {
+ content: '\e400';
+}
+
+.uni-icon-trash:before {
+ content: '\e401';
+}
+
+.uni-icon-upload:before {
+ content: '\e402';
+}
+
+.uni-icon-download:before {
+ content: '\e403';
+}
+
+.uni-icon-close:before {
+ content: '\e404';
+}
+
+.uni-icon-redo:before {
+ content: '\e405';
+}
+
+.uni-icon-undo:before {
+ content: '\e406';
+}
+
+.uni-icon-refresh:before {
+ content: '\e407';
+}
+
+.uni-icon-star:before {
+ content: '\e408';
+}
+
+.uni-icon-plus:before {
+ content: '\e409';
+}
+
+.uni-icon-minus:before {
+ content: '\e410';
+}
+
+.uni-icon-circle:before,
+.uni-icon-checkbox:before {
+ content: '\e411';
+}
+
+.uni-icon-close-filled:before,
+.uni-icon-clear:before {
+ content: '\e434';
+}
+
+.uni-icon-refresh-filled:before {
+ content: '\e437';
+}
+
+.uni-icon-star-filled:before {
+ content: '\e438';
+}
+
+.uni-icon-plus-filled:before {
+ content: '\e439';
+}
+
+.uni-icon-minus-filled:before {
+ content: '\e440';
+}
+
+.uni-icon-circle-filled:before {
+ content: '\e441';
+}
+
+.uni-icon-checkbox-filled:before {
+ content: '\e442';
+}
+
+.uni-icon-closeempty:before {
+ content: '\e460';
+}
+
+.uni-icon-refreshempty:before {
+ content: '\e461';
+}
+
+.uni-icon-reload:before {
+ content: '\e462';
+}
+
+.uni-icon-starhalf:before {
+ content: '\e463';
+}
+
+.uni-icon-spinner:before {
+ content: '\e464';
+}
+
+.uni-icon-spinner-cycle:before {
+ content: '\e465';
+}
+
+.uni-icon-search:before {
+ content: '\e466';
+}
+
+.uni-icon-plusempty:before {
+ content: '\e468';
+}
+
+.uni-icon-forward:before {
+ content: '\e470';
+}
+
+.uni-icon-back:before,
+.uni-icon-left-nav:before {
+ content: '\e471';
+}
+
+.uni-icon-checkmarkempty:before {
+ content: '\e472';
+}
+
+.uni-icon-home:before {
+ content: '\e500';
+}
+
+.uni-icon-navigate:before {
+ content: '\e501';
+}
+
+.uni-icon-gear:before {
+ content: '\e502';
+}
+
+.uni-icon-paperplane:before {
+ content: '\e503';
+}
+
+.uni-icon-info:before {
+ content: '\e504';
+}
+
+.uni-icon-help:before {
+ content: '\e505';
+}
+
+.uni-icon-locked:before {
+ content: '\e506';
+}
+
+.uni-icon-more:before {
+ content: '\e507';
+}
+
+.uni-icon-flag:before {
+ content: '\e508';
+}
+
+.uni-icon-home-filled:before {
+ content: '\e530';
+}
+
+.uni-icon-gear-filled:before {
+ content: '\e532';
+}
+
+.uni-icon-info-filled:before {
+ content: '\e534';
+}
+
+.uni-icon-help-filled:before {
+ content: '\e535';
+}
+
+.uni-icon-more-filled:before {
+ content: '\e537';
+}
+
+.uni-icon-settings:before {
+ content: '\e560';
+}
+
+.uni-icon-list:before {
+ content: '\e562';
+}
+
+.uni-icon-bars:before {
+ content: '\e563';
+}
+
+.uni-icon-loop:before {
+ content: '\e565';
+}
+
+.uni-icon-paperclip:before {
+ content: '\e567';
+}
+
+.uni-icon-eye:before {
+ content: '\e568';
+}
+
+.uni-icon-arrowup:before {
+ content: '\e580';
+}
+
+.uni-icon-arrowdown:before {
+ content: '\e581';
+}
+
+.uni-icon-arrowleft:before {
+ content: '\e582';
+}
+
+.uni-icon-arrowright:before {
+ content: '\e583';
+}
+
+.uni-icon-arrowthinup:before {
+ content: '\e584';
+}
+
+.uni-icon-arrowthindown:before {
+ content: '\e585';
+}
+
+.uni-icon-arrowthinleft:before {
+ content: '\e586';
+}
+
+.uni-icon-arrowthinright:before {
+ content: '\e587';
+}
+
+.uni-icon-pulldown:before {
+ content: '\e588';
+}
+
+.uni-icon-scan:before {
+ content: "\e612";
+}
+
+/* 分界线 */
+.uni-divider {
+ height: 110rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+
+.uni-divider__content {
+ font-size: 28rpx;
+ color: #999;
+ padding: 0 20rpx;
+ position: relative;
+ z-index: 101;
+ background: #F4F5F6;
+}
+
+.uni-divider__line {
+ background-color: #CCCCCC;
+ height: 1px;
+ width: 100%;
+ position: absolute;
+ z-index: 100;
+ top: 50%;
+ left: 0;
+ transform: translateY(50%);
+}
+
+.left-win-active text {
+ color: #007AFF !important;
+}
diff --git a/common/uni-nvue.css b/common/uni-nvue.css
new file mode 100644
index 00000000..6863ac99
--- /dev/null
+++ b/common/uni-nvue.css
@@ -0,0 +1,136 @@
+/* #ifndef APP-PLUS-NVUE */
+page {
+ min-height: 100%;
+ height: auto;
+}
+/* #endif */
+
+/* 解决头条小程序字体图标不显示问题,因为头条运行时自动插入了span标签,且有全局字体 */
+/* #ifdef MP-TOUTIAO */
+/* text :not(view) {
+ font-family: uniicons;
+} */
+/* #endif */
+
+.uni-icon {
+ font-family: uniicons;
+ font-weight: normal;
+}
+
+.uni-container {
+ padding: 15px;
+ background-color: #f8f8f8;
+}
+
+.uni-header-logo {
+ /* #ifdef H5 */
+ display: flex;
+ /* #endif */
+ padding: 15px 15px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-top: 10rpx;
+}
+
+.uni-header-image {
+ width: 80px;
+ height: 80px;
+}
+
+.uni-hello-text {
+ margin-bottom: 20px;
+}
+
+.hello-text {
+ color: #7A7E83;
+ font-size: 14px;
+ line-height: 20px;
+}
+
+.hello-link {
+ color: #7A7E83;
+ font-size: 14px;
+ line-height: 20px;
+}
+
+.uni-panel {
+ margin-bottom: 12px;
+}
+
+.uni-panel-h {
+ /* #ifdef H5 */
+ display: flex;
+ /* #endif */
+ background-color: #ffffff;
+ flex-direction: row !important;
+ /* justify-content: space-between !important; */
+ align-items: center !important;
+ padding: 12px;
+ /* #ifdef H5 */
+ cursor: pointer;
+ /* #endif */
+}
+/*
+.uni-panel-h:active {
+ background-color: #f8f8f8;
+}
+ */
+.uni-panel-h-on {
+ background-color: #f0f0f0;
+}
+
+.uni-panel-text {
+ flex: 1;
+ color: #000000;
+ font-size: 14px;
+ font-weight: normal;
+}
+
+.uni-panel-icon {
+ margin-left: 15px;
+ color: #999999;
+ font-size: 14px;
+ font-weight: normal;
+ transform: rotate(0deg);
+ transition-duration: 0s;
+ transition-property: transform;
+}
+
+.uni-panel-icon-on {
+ transform: rotate(180deg);
+}
+
+.uni-navigate-item {
+ /* #ifdef H5 */
+ display: flex;
+ /* #endif */
+ flex-direction: row;
+ align-items: center;
+ background-color: #FFFFFF;
+ border-top-style: solid;
+ border-top-color: #f0f0f0;
+ border-top-width: 1px;
+ padding: 12px;
+ /* #ifdef H5 */
+ cursor: pointer;
+ /* #endif */
+}
+
+.uni-navigate-item:active {
+ background-color: #f8f8f8;
+}
+
+.uni-navigate-text {
+ flex: 1;
+ color: #000000;
+ font-size: 14px;
+ font-weight: normal;
+}
+
+.uni-navigate-icon {
+ margin-left: 15px;
+ color: #999999;
+ font-size: 14px;
+ font-weight: normal;
+}
diff --git a/utils/auth.js b/common/utils/auth.js
similarity index 99%
rename from utils/auth.js
rename to common/utils/auth.js
index cf27e275..57eeb284 100644
--- a/utils/auth.js
+++ b/common/utils/auth.js
@@ -2,7 +2,6 @@ const AccessTokenKey = 'ACCESS_TOKEN'
const RefreshTokenKey = 'REFRESH_TOKEN'
// ========== Token 相关 ==========
-
export function getAccessToken() {
return uni.getStorageSync(AccessTokenKey)
}
diff --git a/utils/common.js b/common/utils/common.js
similarity index 100%
rename from utils/common.js
rename to common/utils/common.js
diff --git a/utils/constant.js b/common/utils/constant.js
similarity index 65%
rename from utils/constant.js
rename to common/utils/constant.js
index 8becd84f..89e54ca4 100644
--- a/utils/constant.js
+++ b/common/utils/constant.js
@@ -2,7 +2,8 @@ const constant = {
avatar: 'vuex_avatar',
name: 'vuex_name',
roles: 'vuex_roles',
- permissions: 'vuex_permissions'
+ permissions: 'vuex_permissions',
+ tenantId:'vuex_tenantId'
}
export default constant
diff --git a/utils/errorCode.js b/common/utils/errorCode.js
similarity index 100%
rename from utils/errorCode.js
rename to common/utils/errorCode.js
diff --git a/utils/permission.js b/common/utils/permission.js
similarity index 100%
rename from utils/permission.js
rename to common/utils/permission.js
diff --git a/utils/ruoyi.js b/common/utils/ruoyi.js
similarity index 100%
rename from utils/ruoyi.js
rename to common/utils/ruoyi.js
diff --git a/common/utils/storage.js b/common/utils/storage.js
new file mode 100644
index 00000000..515d413a
--- /dev/null
+++ b/common/utils/storage.js
@@ -0,0 +1,37 @@
+// 获取本地存储对应key
+const getStorage = (key)=>{
+ return uni.getStorageSync( key );
+}
+
+// 设置本地存储对应key
+const setStorage = (key,value)=>{
+ return uni.setStorageSync( key,value );
+}
+
+// 清除全部本地存储
+const clearStorage = ()=>{
+ uni.clearStorageSync();
+}
+
+// 清除指定key本地存储
+const removeStorage = ( key )=>{
+ uni.removeStorageSync( key );
+}
+
+const constant = {
+ id:"id",
+ token:"token",
+ avatar: 'avatar',
+ name: 'name',
+ roles: 'roles',
+ permissions: 'permissions'
+ }
+
+
+export default {
+ getStorage,
+ setStorage,
+ clearStorage,
+ removeStorage,
+ constant
+}
\ No newline at end of file
diff --git a/components/amap-wx/js/util.js b/components/amap-wx/js/util.js
new file mode 100644
index 00000000..65779df2
--- /dev/null
+++ b/components/amap-wx/js/util.js
@@ -0,0 +1,181 @@
+import amap from '@/components/amap-wx/lib/amap-wx.js';
+// 地铁颜色图
+const line = {
+ '1号线': '#C43B33',
+ '2号线': '#016299',
+ '4号线/大兴线': '#008E9C',
+ '5号线': '#A42380',
+ '6号线': '#D09900',
+ '7号线': '#F2C172',
+ '8号线': '#009D6A',
+ '9号线': '#8FC41E',
+ '10号线': '#009DBE',
+ '13号线': '#F9E701',
+ '14号线东段': '#D4A7A2',
+ '14号线西段': '#D4A7A2',
+ '15号线': '#5D2D69',
+ '八通线': '#C33A32',
+ '昌平线': '#DE82B1',
+ '亦庄线': '#E40177',
+ '房山线': '#E66021',
+ '机场线': '#A29BBC',
+}
+
+// 150500:地铁站 ,150700:公交站 , 190700:地名地址
+const typecode = [{
+ id: '150500',
+ icon: 'icon-ditie'
+}, {
+ id: '150700',
+ icon: 'icon-gongjiao'
+}, {
+ id: '190700',
+ icon: 'icon-gonglu'
+}];
+
+const util = {
+ key:'b526b09b86cd2996e7732be8ab8c4430',
+ /**
+ * 初始化高德地图api
+ */
+ mapInit() {
+ return new amap.AMapWX({
+ key: this.key
+ });
+ },
+ // 服务状态吗
+ typecode,
+ /**
+ * 获取地图颜色
+ */
+ lineColor(name) {
+ if (line[name]) {
+ return line[name];
+ } else {
+ return '#ccc';
+ }
+ },
+ /**
+ * 关键字颜色变化
+ */
+ serachNmme(val, name) {
+ let namestr = new RegExp(val);
+ let nameresult =
+ `
+ ${name.replace(namestr, "" + val + '')}
+
`
+ .trim();
+
+ return nameresult;
+ },
+ /**
+ * 地址转地铁线路
+ */
+ addressToLine(address, type) {
+ let addr = address.split(';');
+ let dt = '';
+ addr.forEach(elm => {
+ let color = '#cccccc';
+ if (type === typecode[0].id) {
+ color = this.lineColor(elm)
+ } else if (type === typecode[1].id) {
+ color = '#4075cb'
+ }
+ let style = 'margin:5px 0;margin-right:5px;padding:0 5px;background:' + color +
+ ';font-size:12px;color:#fff;border-radius:3px;';
+ dt += `${elm}
`;
+
+ });
+ return `${dt}
`;
+ },
+ /**
+ * 数据处理
+ */
+ dataHandle(item, val) {
+ // 改变字体颜色
+ if (val) {
+ item.nameNodes = util.serachNmme(val, item.name);
+ } else {
+ item.nameNodes = `${item.name}
`;
+
+ }
+ // 地址解析 地铁
+ if (
+ item.typecode === util.typecode[0].id ||
+ item.typecode === util.typecode[1].id
+ ) {
+ item.addressNodes = util.addressToLine(item.address, item.typecode);
+ if (item.typecode === util.typecode[0].id) {
+ item.icon = util.typecode[0].icon;
+ } else if (item.typecode === util.typecode[1].id) {
+ item.icon = util.typecode[1].icon;
+ }
+ } else {
+ item.addressNodes = `${item.district}${
+ item.address.length > 0 ? '·' + item.address : ''
+ }`.trim();
+ item.icon = 'icon-weizhi';
+ }
+
+ if (item.location && item.location.length === 0) {
+ item.icon = 'icon-sousuo';
+ }
+
+ return item;
+ },
+ /**
+ * 存储历史数据
+ * val [string | object]需要存储的内容
+ */
+ setHistory(val) {
+ let searchHistory = uni.getStorageSync('search:history');
+ if (!searchHistory) searchHistory = [];
+ let serachData = {};
+ if (typeof(val) === 'string') {
+ serachData = {
+ adcode: [],
+ address: [],
+ city: [],
+ district: [],
+ id: [],
+ location: [],
+ name: val,
+ typecode: []
+ };
+ } else {
+ serachData = val
+ }
+
+ // 判断数组是否存在,如果存在,那么将放到最前面
+ for (var i = 0; i < searchHistory.length; i++) {
+ if (searchHistory[i].name === serachData.name) {
+ searchHistory.splice(i, 1);
+ break;
+ }
+ }
+
+ searchHistory.unshift(util.dataHandle(serachData));
+ uni.setStorage({
+ key: 'search:history',
+ data: searchHistory,
+ success: function() {
+ // console.log('success');
+ }
+ });
+ },
+ getHistory() {
+
+ },
+ removeHistory() {
+ uni.removeStorage({
+ key: 'search:history',
+ success: function(res) {
+ console.log('success');
+ }
+ });
+ return []
+ }
+
+}
+
+export default util;
diff --git a/components/amap-wx/lib/amap-wx.js b/components/amap-wx/lib/amap-wx.js
new file mode 100644
index 00000000..e1ef2b20
--- /dev/null
+++ b/components/amap-wx/lib/amap-wx.js
@@ -0,0 +1 @@
+function AMapWX(a){this.key=a.key,this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"}}AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(a){var c=a.longitude+","+a.latitude;wx.setStorage({key:"userLocation",data:c}),b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(a){a.data&&b(a.data)}}),a.fail({errCode:"0",errMsg:c.errMsg||""})}})},AMapWX.prototype.getRegeo=function(a){function c(c){var d=b.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:c,extensions:"all",s:d.s,platform:d.platform,appname:b.key,sdkversion:d.sdkversion,logversion:d.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var d,e,f,g,h,i,j,k,l;b.data.status&&"1"==b.data.status?(d=b.data.regeocode,e=d.addressComponent,f=[],g="",d&&d.roads[0]&&d.roads[0].name&&(g=d.roads[0].name+"附近"),h=c.split(",")[0],i=c.split(",")[1],d.pois&&d.pois[0]&&(g=d.pois[0].name+"附近",j=d.pois[0].location,j&&(h=parseFloat(j.split(",")[0]),i=parseFloat(j.split(",")[1]))),e.provice&&f.push(e.provice),e.city&&f.push(e.city),e.district&&f.push(e.district),e.streetNumber&&e.streetNumber.street&&e.streetNumber.number?(f.push(e.streetNumber.street),f.push(e.streetNumber.number)):(k="",d&&d.roads[0]&&d.roads[0].name&&(k=d.roads[0].name),f.push(k)),f=f.join(""),l=[{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:g,longitude:h,latitude:i,id:0,regeocodeData:d}],a.success(l)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this;a.location?c(a.location):b.getWxLocation(a,function(a){c(a)})},AMapWX.prototype.getWeather=function(a){function d(d){var e="base";a.type&&"forecast"==a.type&&(e="all"),wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:b.key,city:d,extensions:e,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){function c(a){var b={city:{text:"城市",data:a.city},weather:{text:"天气",data:a.weather},temperature:{text:"温度",data:a.temperature},winddirection:{text:"风向",data:a.winddirection+"风"},windpower:{text:"风力",data:a.windpower+"级"},humidity:{text:"湿度",data:a.humidity+"%"}};return b}var d,e;b.data.status&&"1"==b.data.status?b.data.lives?(d=b.data.lives,d&&d.length>0&&(d=d[0],e=c(d),e["liveData"]=d,a.success(e))):b.data.forecasts&&b.data.forecasts[0]&&a.success({forecast:b.data.forecasts[0]}):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}function e(e){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:e,extensions:"all",s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var c,e;b.data.status&&"1"==b.data.status?(e=b.data.regeocode,e.addressComponent?c=e.addressComponent.adcode:e.aois&&e.aois.length>0&&(c=e.aois[0].adcode),d(c)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this,c=b.requestConfig;a.city?d(a.city):b.getWxLocation(a,function(a){e(a)})},AMapWX.prototype.getPoiAround=function(a){function d(d){var e={key:b.key,location:d,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.querytypes&&(e["types"]=a.querytypes),a.querykeywords&&(e["keywords"]=a.querykeywords),wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(b){var c,d,e,f;if(b.data.status&&"1"==b.data.status){if(b=b.data,b&&b.pois){for(c=[],d=0;d
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/custom-nomore/custom-nomore.vue b/components/custom-nomore/custom-nomore.vue
new file mode 100644
index 00000000..17c2cff0
--- /dev/null
+++ b/components/custom-nomore/custom-nomore.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+ 已经到达宇宙尽头啦~
+
+
+
+
+
+
diff --git a/components/custom-refresher/custom-refresher.vue b/components/custom-refresher/custom-refresher.vue
new file mode 100644
index 00000000..1a7f6f1e
--- /dev/null
+++ b/components/custom-refresher/custom-refresher.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+ {{statusText}}
+
+
+
+
+
+
diff --git a/components/invite.vue b/components/invite.vue
new file mode 100644
index 00000000..93b1236d
--- /dev/null
+++ b/components/invite.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+ 邀请函
+ 您好!您的朋友xxx邀请您对“为什么小朋友到了一定年龄需要打疫苗?”进行专家答疑,您是否接受?
+
+ 邀请专家
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/marked/index.js b/components/marked/index.js
new file mode 100644
index 00000000..33e56c3a
--- /dev/null
+++ b/components/marked/index.js
@@ -0,0 +1 @@
+export default './lib/marked'
diff --git a/components/marked/lib/marked.js b/components/marked/lib/marked.js
new file mode 100644
index 00000000..6a71e920
--- /dev/null
+++ b/components/marked/lib/marked.js
@@ -0,0 +1,1573 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/markedjs/marked
+ */
+
+;(function(root) {
+'use strict';
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: noop,
+ hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ nptable: noop,
+ blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: '^ {0,3}(?:' // optional indentation
+ + '<(script|pre|style)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)' // (1)
+ + '|comment[^\\n]*(\\n+|$)' // (2)
+ + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
+ + '|\\n*' // (4)
+ + '|\\n*' // (5)
+ + '|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
+ + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
+ + '|(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
+ + ')',
+ def: /^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+ table: noop,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+ text: /^[^\n]+/
+};
+
+block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
+block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
+block.def = edit(block.def)
+ .replace('label', block._label)
+ .replace('title', block._title)
+ .getRegex();
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = edit(block.item, 'gm')
+ .replace(/bull/g, block.bullet)
+ .getRegex();
+
+block.list = edit(block.list)
+ .replace(/bull/g, block.bullet)
+ .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
+ .replace('def', '\\n+(?=' + block.def.source + ')')
+ .getRegex();
+
+block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
+ + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
+ + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
+ + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
+ + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
+ + '|track|ul';
+block._comment = //;
+block.html = edit(block.html, 'i')
+ .replace('comment', block._comment)
+ .replace('tag', block._tag)
+ .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
+ .getRegex();
+
+block.paragraph = edit(block.paragraph)
+ .replace('hr', block.hr)
+ .replace('heading', block.heading)
+ .replace('lheading', block.lheading)
+ .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
+ .getRegex();
+
+block.blockquote = edit(block.blockquote)
+ .replace('paragraph', block.paragraph)
+ .getRegex();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+ fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
+ paragraph: /^/,
+ heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
+});
+
+block.gfm.paragraph = edit(block.paragraph)
+ .replace('(?!', '(?!'
+ + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+ + block.list.source.replace('\\1', '\\3') + '|')
+ .getRegex();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+ nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+ table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
+});
+
+/**
+ * Pedantic grammar
+ */
+
+block.pedantic = merge({}, block.normal, {
+ html: edit(
+ '^ *(?:comment *(?:\\n|\\s*$)'
+ + '|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)' // closed tag
+ + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
+ .replace('comment', block._comment)
+ .replace(/tag/g, '(?!(?:'
+ + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
+ + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
+ + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
+ .getRegex(),
+ def: /^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+ this.tokens = [];
+ this.tokens.links = Object.create(null);
+ this.options = options || marked.defaults;
+ this.rules = block.normal;
+
+ if (this.options.pedantic) {
+ this.rules = block.pedantic;
+ } else if (this.options.gfm) {
+ if (this.options.tables) {
+ this.rules = block.tables;
+ } else {
+ this.rules = block.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+ var lexer = new Lexer(options);
+ return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+ src = src
+ .replace(/\r\n|\r/g, '\n')
+ .replace(/\t/g, ' ')
+ .replace(/\u00a0/g, ' ')
+ .replace(/\u2424/g, '\n');
+
+ return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top) {
+ src = src.replace(/^ +$/gm, '');
+ var next,
+ loose,
+ cap,
+ bull,
+ b,
+ item,
+ listStart,
+ listItems,
+ t,
+ space,
+ i,
+ tag,
+ l,
+ isordered,
+ istask,
+ ischecked;
+
+ while (src) {
+ // newline
+ if (cap = this.rules.newline.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[0].length > 1) {
+ this.tokens.push({
+ type: 'space'
+ });
+ }
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ cap = cap[0].replace(/^ {4}/gm, '');
+ this.tokens.push({
+ type: 'code',
+ text: !this.options.pedantic
+ ? rtrim(cap, '\n')
+ : cap
+ });
+ continue;
+ }
+
+ // fences (gfm)
+ if (cap = this.rules.fences.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'code',
+ lang: cap[2],
+ text: cap[3] || ''
+ });
+ continue;
+ }
+
+ // heading
+ if (cap = this.rules.heading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[1].length,
+ text: cap[2]
+ });
+ continue;
+ }
+
+ // table no leading pipe (gfm)
+ if (top && (cap = this.rules.nptable.exec(src))) {
+ item = {
+ type: 'table',
+ header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
+ };
+
+ if (item.header.length === item.align.length) {
+ src = src.substring(cap[0].length);
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = splitCells(item.cells[i], item.header.length);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+ }
+
+ // hr
+ if (cap = this.rules.hr.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'hr'
+ });
+ continue;
+ }
+
+ // blockquote
+ if (cap = this.rules.blockquote.exec(src)) {
+ src = src.substring(cap[0].length);
+
+ this.tokens.push({
+ type: 'blockquote_start'
+ });
+
+ cap = cap[0].replace(/^ *> ?/gm, '');
+
+ // Pass `top` to keep the current
+ // "toplevel" state. This is exactly
+ // how markdown.pl works.
+ this.token(cap, top);
+
+ this.tokens.push({
+ type: 'blockquote_end'
+ });
+
+ continue;
+ }
+
+ // list
+ if (cap = this.rules.list.exec(src)) {
+ src = src.substring(cap[0].length);
+ bull = cap[2];
+ isordered = bull.length > 1;
+
+ listStart = {
+ type: 'list_start',
+ ordered: isordered,
+ start: isordered ? +bull : '',
+ loose: false
+ };
+
+ this.tokens.push(listStart);
+
+ // Get each top-level item.
+ cap = cap[0].match(this.rules.item);
+
+ listItems = [];
+ next = false;
+ l = cap.length;
+ i = 0;
+
+ for (; i < l; i++) {
+ item = cap[i];
+
+ // Remove the list item's bullet
+ // so it is seen as the next token.
+ space = item.length;
+ item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+ // Outdent whatever the
+ // list item contains. Hacky.
+ if (~item.indexOf('\n ')) {
+ space -= item.length;
+ item = !this.options.pedantic
+ ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+ : item.replace(/^ {1,4}/gm, '');
+ }
+
+ // Determine whether the next list item belongs here.
+ // Backpedal if it does not belong in this list.
+ if (this.options.smartLists && i !== l - 1) {
+ b = block.bullet.exec(cap[i + 1])[0];
+ if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+ src = cap.slice(i + 1).join('\n') + src;
+ i = l - 1;
+ }
+ }
+
+ // Determine whether item is loose or not.
+ // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+ // for discount behavior.
+ loose = next || /\n\n(?!\s*$)/.test(item);
+ if (i !== l - 1) {
+ next = item.charAt(item.length - 1) === '\n';
+ if (!loose) loose = next;
+ }
+
+ if (loose) {
+ listStart.loose = true;
+ }
+
+ // Check for task list items
+ istask = /^\[[ xX]\] /.test(item);
+ ischecked = undefined;
+ if (istask) {
+ ischecked = item[1] !== ' ';
+ item = item.replace(/^\[[ xX]\] +/, '');
+ }
+
+ t = {
+ type: 'list_item_start',
+ task: istask,
+ checked: ischecked,
+ loose: loose
+ };
+
+ listItems.push(t);
+ this.tokens.push(t);
+
+ // Recurse.
+ this.token(item, false);
+
+ this.tokens.push({
+ type: 'list_item_end'
+ });
+ }
+
+ if (listStart.loose) {
+ l = listItems.length;
+ i = 0;
+ for (; i < l; i++) {
+ listItems[i].loose = true;
+ }
+ }
+
+ this.tokens.push({
+ type: 'list_end'
+ });
+
+ continue;
+ }
+
+ // html
+ if (cap = this.rules.html.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: this.options.sanitize
+ ? 'paragraph'
+ : 'html',
+ pre: !this.options.sanitizer
+ && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
+ text: cap[0]
+ });
+ continue;
+ }
+
+ // def
+ if (top && (cap = this.rules.def.exec(src))) {
+ src = src.substring(cap[0].length);
+ if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
+ tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
+ if (!this.tokens.links[tag]) {
+ this.tokens.links[tag] = {
+ href: cap[2],
+ title: cap[3]
+ };
+ }
+ continue;
+ }
+
+ // table (gfm)
+ if (top && (cap = this.rules.table.exec(src))) {
+ item = {
+ type: 'table',
+ header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
+ };
+
+ if (item.header.length === item.align.length) {
+ src = src.substring(cap[0].length);
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = splitCells(
+ item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
+ item.header.length);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+ }
+
+ // lheading
+ if (cap = this.rules.lheading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[2] === '=' ? 1 : 2,
+ text: cap[1]
+ });
+ continue;
+ }
+
+ // top-level paragraph
+ if (top && (cap = this.rules.paragraph.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'paragraph',
+ text: cap[1].charAt(cap[1].length - 1) === '\n'
+ ? cap[1].slice(0, -1)
+ : cap[1]
+ });
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ // Top-level should never reach here.
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'text',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ if (src) {
+ throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+ escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
+ autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+ url: noop,
+ tag: '^comment'
+ + '|^[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
+ + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
+ + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g.
+ + '|^' // declaration, e.g.
+ + '|^', // CDATA section
+ link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+ reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+ nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+ strong: /^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
+ em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
+ code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
+ br: /^( {2,}|\\)\n(?!\s*$)/,
+ del: noop,
+ text: /^[\s\S]+?(?=[\\?@\[\]\\^_`{|}~])/g;
+
+inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
+inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
+inline.autolink = edit(inline.autolink)
+ .replace('scheme', inline._scheme)
+ .replace('email', inline._email)
+ .getRegex();
+
+inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
+
+inline.tag = edit(inline.tag)
+ .replace('comment', block._comment)
+ .replace('attribute', inline._attribute)
+ .getRegex();
+
+inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
+inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/;
+inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
+
+inline.link = edit(inline.link)
+ .replace('label', inline._label)
+ .replace('href', inline._href)
+ .replace('title', inline._title)
+ .getRegex();
+
+inline.reflink = edit(inline.reflink)
+ .replace('label', inline._label)
+ .getRegex();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+ link: edit(/^!?\[(label)\]\((.*?)\)/)
+ .replace('label', inline._label)
+ .getRegex(),
+ reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+ .replace('label', inline._label)
+ .getRegex()
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+ escape: edit(inline.escape).replace('])', '~|])').getRegex(),
+ url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/)
+ .replace('email', inline._email)
+ .getRegex(),
+ _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+ del: /^~+(?=\S)([\s\S]*?\S)~+/,
+ text: edit(inline.text)
+ .replace(']|', '~]|')
+ .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|')
+ .getRegex()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+ br: edit(inline.br).replace('{2,}', '*').getRegex(),
+ text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+ this.options = options || marked.defaults;
+ this.links = links;
+ this.rules = inline.normal;
+ this.renderer = this.options.renderer || new Renderer();
+ this.renderer.options = this.options;
+
+ if (!this.links) {
+ throw new Error('Tokens array requires a `links` property.');
+ }
+
+ if (this.options.pedantic) {
+ this.rules = inline.pedantic;
+ } else if (this.options.gfm) {
+ if (this.options.breaks) {
+ this.rules = inline.breaks;
+ } else {
+ this.rules = inline.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+ var inline = new InlineLexer(links, options);
+ return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+ var out = '',
+ link,
+ text,
+ href,
+ title,
+ cap,
+ prevCapZero;
+
+ while (src) {
+ // escape
+ if (cap = this.rules.escape.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += cap[1];
+ continue;
+ }
+
+ // autolink
+ if (cap = this.rules.autolink.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = escape(this.mangle(cap[1]));
+ href = 'mailto:' + text;
+ } else {
+ text = escape(cap[1]);
+ href = text;
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // url (gfm)
+ if (!this.inLink && (cap = this.rules.url.exec(src))) {
+ do {
+ prevCapZero = cap[0];
+ cap[0] = this.rules._backpedal.exec(cap[0])[0];
+ } while (prevCapZero !== cap[0]);
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = escape(cap[0]);
+ href = 'mailto:' + text;
+ } else {
+ text = escape(cap[0]);
+ if (cap[1] === 'www.') {
+ href = 'http://' + text;
+ } else {
+ href = text;
+ }
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // tag
+ if (cap = this.rules.tag.exec(src)) {
+ if (!this.inLink && /^/i.test(cap[0])) {
+ this.inLink = false;
+ }
+ src = src.substring(cap[0].length);
+ out += this.options.sanitize
+ ? this.options.sanitizer
+ ? this.options.sanitizer(cap[0])
+ : escape(cap[0])
+ : cap[0]
+ continue;
+ }
+
+ // link
+ if (cap = this.rules.link.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.inLink = true;
+ href = cap[2];
+ if (this.options.pedantic) {
+ link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
+
+ if (link) {
+ href = link[1];
+ title = link[3];
+ } else {
+ title = '';
+ }
+ } else {
+ title = cap[3] ? cap[3].slice(1, -1) : '';
+ }
+ href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
+ out += this.outputLink(cap, {
+ href: InlineLexer.escapes(href),
+ title: InlineLexer.escapes(title)
+ });
+ this.inLink = false;
+ continue;
+ }
+
+ // reflink, nolink
+ if ((cap = this.rules.reflink.exec(src))
+ || (cap = this.rules.nolink.exec(src))) {
+ src = src.substring(cap[0].length);
+ link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+ link = this.links[link.toLowerCase()];
+ if (!link || !link.href) {
+ out += cap[0].charAt(0);
+ src = cap[0].substring(1) + src;
+ continue;
+ }
+ this.inLink = true;
+ out += this.outputLink(cap, link);
+ this.inLink = false;
+ continue;
+ }
+
+ // strong
+ if (cap = this.rules.strong.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
+ continue;
+ }
+
+ // em
+ if (cap = this.rules.em.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
+ continue;
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.codespan(escape(cap[2].trim(), true));
+ continue;
+ }
+
+ // br
+ if (cap = this.rules.br.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.br();
+ continue;
+ }
+
+ // del (gfm)
+ if (cap = this.rules.del.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.del(this.output(cap[1]));
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.text(escape(this.smartypants(cap[0])));
+ continue;
+ }
+
+ if (src) {
+ throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return out;
+};
+
+InlineLexer.escapes = function(text) {
+ return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
+}
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+ var href = link.href,
+ title = link.title ? escape(link.title) : null;
+
+ return cap[0].charAt(0) !== '!'
+ ? this.renderer.link(href, title, this.output(cap[1]))
+ : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+ if (!this.options.smartypants) return text;
+ return text
+ // em-dashes
+ .replace(/---/g, '\u2014')
+ // en-dashes
+ .replace(/--/g, '\u2013')
+ // opening singles
+ .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+ // closing singles & apostrophes
+ .replace(/'/g, '\u2019')
+ // opening doubles
+ .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+ // closing doubles
+ .replace(/"/g, '\u201d')
+ // ellipses
+ .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+ if (!this.options.mangle) return text;
+ var out = '',
+ l = text.length,
+ i = 0,
+ ch;
+
+ for (; i < l; i++) {
+ ch = text.charCodeAt(i);
+ if (Math.random() > 0.5) {
+ ch = 'x' + ch.toString(16);
+ }
+ out += '' + ch + ';';
+ }
+
+ return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+ this.options = options || marked.defaults;
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+ if (this.options.highlight) {
+ var out = this.options.highlight(code, lang);
+ if (out != null && out !== code) {
+ escaped = true;
+ code = out;
+ }
+ }
+
+ if (!lang) {
+ return ''
+ + (escaped ? code : escape(code, true))
+ + '
';
+ }
+
+ return ''
+ + (escaped ? code : escape(code, true))
+ + '
\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+ return '\n' + quote + '
\n';
+};
+
+Renderer.prototype.html = function(html) {
+ return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+ if (this.options.headerIds) {
+ return '\n';
+ }
+ // ignore IDs
+ return '' + text + '\n';
+};
+
+Renderer.prototype.hr = function() {
+ return this.options.xhtml ? '
\n' : '
\n';
+};
+
+Renderer.prototype.list = function(body, ordered, start) {
+ var type = ordered ? 'ol' : 'ul',
+ startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
+ return '<' + type + startatt + '>\n' + body + '' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+ return '' + text + '\n';
+};
+
+Renderer.prototype.checkbox = function(checked) {
+ return ' ';
+}
+
+Renderer.prototype.paragraph = function(text) {
+ return '' + text + '
\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+ if (body) body = '' + body + '';
+
+ return '\n'
+ + '\n'
+ + header
+ + '\n'
+ + body
+ + '
\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+ return '\n' + content + '
\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+ var type = flags.header ? 'th' : 'td';
+ var tag = flags.align
+ ? '<' + type + ' align="' + flags.align + '">'
+ : '<' + type + '>';
+ return tag + content + '' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+ return '' + text + '';
+};
+
+Renderer.prototype.em = function(text) {
+ return '' + text + '';
+};
+
+Renderer.prototype.codespan = function(text) {
+ return '' + text + '
';
+};
+
+Renderer.prototype.br = function() {
+ return this.options.xhtml ? '
' : '
';
+};
+
+Renderer.prototype.del = function(text) {
+ return '' + text + '';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+ if (this.options.sanitize) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return text;
+ }
+ if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
+ return text;
+ }
+ }
+ if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+ href = resolveUrl(this.options.baseUrl, href);
+ }
+ try {
+ href = encodeURI(href).replace(/%25/g, '%');
+ } catch (e) {
+ return text;
+ }
+ var out = '' + text + '';
+ return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+ if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+ href = resolveUrl(this.options.baseUrl, href);
+ }
+ var out = '' : '>';
+ return out;
+};
+
+Renderer.prototype.text = function(text) {
+ return text;
+};
+
+/**
+ * TextRenderer
+ * returns only the textual part of the token
+ */
+
+function TextRenderer() {}
+
+// no need for block level renderers
+
+TextRenderer.prototype.strong =
+TextRenderer.prototype.em =
+TextRenderer.prototype.codespan =
+TextRenderer.prototype.del =
+TextRenderer.prototype.text = function (text) {
+ return text;
+}
+
+TextRenderer.prototype.link =
+TextRenderer.prototype.image = function(href, title, text) {
+ return '' + text;
+}
+
+TextRenderer.prototype.br = function() {
+ return '';
+}
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+ this.tokens = [];
+ this.token = null;
+ this.options = options || marked.defaults;
+ this.options.renderer = this.options.renderer || new Renderer();
+ this.renderer = this.options.renderer;
+ this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options) {
+ var parser = new Parser(options);
+ return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+ this.inline = new InlineLexer(src.links, this.options);
+ // use an InlineLexer with a TextRenderer to extract pure text
+ this.inlineText = new InlineLexer(
+ src.links,
+ merge({}, this.options, {renderer: new TextRenderer()})
+ );
+ this.tokens = src.reverse();
+
+ var out = '';
+ while (this.next()) {
+ out += this.tok();
+ }
+
+ return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+ return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+ var body = this.token.text;
+
+ while (this.peek().type === 'text') {
+ body += '\n' + this.next().text;
+ }
+
+ return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+ switch (this.token.type) {
+ case 'space': {
+ return '';
+ }
+ case 'hr': {
+ return this.renderer.hr();
+ }
+ case 'heading': {
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ unescape(this.inlineText.output(this.token.text)));
+ }
+ case 'code': {
+ return this.renderer.code(this.token.text,
+ this.token.lang,
+ this.token.escaped);
+ }
+ case 'table': {
+ var header = '',
+ body = '',
+ i,
+ row,
+ cell,
+ j;
+
+ // header
+ cell = '';
+ for (i = 0; i < this.token.header.length; i++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(this.token.header[i]),
+ { header: true, align: this.token.align[i] }
+ );
+ }
+ header += this.renderer.tablerow(cell);
+
+ for (i = 0; i < this.token.cells.length; i++) {
+ row = this.token.cells[i];
+
+ cell = '';
+ for (j = 0; j < row.length; j++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(row[j]),
+ { header: false, align: this.token.align[j] }
+ );
+ }
+
+ body += this.renderer.tablerow(cell);
+ }
+ return this.renderer.table(header, body);
+ }
+ case 'blockquote_start': {
+ body = '';
+
+ while (this.next().type !== 'blockquote_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.blockquote(body);
+ }
+ case 'list_start': {
+ body = '';
+ var ordered = this.token.ordered,
+ start = this.token.start;
+
+ while (this.next().type !== 'list_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.list(body, ordered, start);
+ }
+ case 'list_item_start': {
+ body = '';
+ var loose = this.token.loose;
+
+ if (this.token.task) {
+ body += this.renderer.checkbox(this.token.checked);
+ }
+
+ while (this.next().type !== 'list_item_end') {
+ body += !loose && this.token.type === 'text'
+ ? this.parseText()
+ : this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'html': {
+ // TODO parse inline content if parameter markdown=1
+ return this.renderer.html(this.token.text);
+ }
+ case 'paragraph': {
+ return this.renderer.paragraph(this.inline.output(this.token.text));
+ }
+ case 'text': {
+ return this.renderer.paragraph(this.parseText());
+ }
+ }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+ return html
+ .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
+
+function unescape(html) {
+ // explicitly match decimal, hex, and named HTML entities
+ return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
+ n = n.toLowerCase();
+ if (n === 'colon') return ':';
+ if (n.charAt(0) === '#') {
+ return n.charAt(1) === 'x'
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
+ : String.fromCharCode(+n.substring(1));
+ }
+ return '';
+ });
+}
+
+function edit(regex, opt) {
+ regex = regex.source || regex;
+ opt = opt || '';
+ return {
+ replace: function(name, val) {
+ val = val.source || val;
+ val = val.replace(/(^|[^\[])\^/g, '$1');
+ regex = regex.replace(name, val);
+ return this;
+ },
+ getRegex: function() {
+ return new RegExp(regex, opt);
+ }
+ };
+}
+
+function resolveUrl(base, href) {
+ if (!baseUrls[' ' + base]) {
+ // we can ignore everything in base after the last slash of its path component,
+ // but we might need to add _that_
+ // https://tools.ietf.org/html/rfc3986#section-3
+ if (/^[^:]+:\/*[^/]*$/.test(base)) {
+ baseUrls[' ' + base] = base + '/';
+ } else {
+ baseUrls[' ' + base] = rtrim(base, '/', true);
+ }
+ }
+ base = baseUrls[' ' + base];
+
+ if (href.slice(0, 2) === '//') {
+ return base.replace(/:[\s\S]*/, ':') + href;
+ } else if (href.charAt(0) === '/') {
+ return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
+ } else {
+ return base + href;
+ }
+}
+var baseUrls = {};
+var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+ var i = 1,
+ target,
+ key;
+
+ for (; i < arguments.length; i++) {
+ target = arguments[i];
+ for (key in target) {
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
+ obj[key] = target[key];
+ }
+ }
+ }
+
+ return obj;
+}
+
+function splitCells(tableRow, count) {
+ // ensure that every cell-delimiting pipe has a space
+ // before it to distinguish it from an escaped pipe
+ var row = tableRow.replace(/\|/g, function (match, offset, str) {
+ var escaped = false,
+ curr = offset;
+ while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
+ if (escaped) {
+ // odd number of slashes means | is escaped
+ // so we leave it alone
+ return '|';
+ } else {
+ // add space before unescaped |
+ return ' |';
+ }
+ }),
+ cells = row.split(/ \|/),
+ i = 0;
+
+ if (cells.length > count) {
+ cells.splice(count);
+ } else {
+ while (cells.length < count) cells.push('');
+ }
+
+ for (; i < cells.length; i++) {
+ // leading or trailing whitespace is ignored per the gfm spec
+ cells[i] = cells[i].trim().replace(/\\\|/g, '|');
+ }
+ return cells;
+}
+
+// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
+// /c*$/ is vulnerable to REDOS.
+// invert: Remove suffix of non-c chars instead. Default falsey.
+function rtrim(str, c, invert) {
+ if (str.length === 0) {
+ return '';
+ }
+
+ // Length of suffix matching the invert condition.
+ var suffLen = 0;
+
+ // Step left until we fail to match the invert condition.
+ while (suffLen < str.length) {
+ var currChar = str.charAt(str.length - suffLen - 1);
+ if (currChar === c && !invert) {
+ suffLen++;
+ } else if (currChar !== c && invert) {
+ suffLen++;
+ } else {
+ break;
+ }
+ }
+
+ return str.substr(0, str.length - suffLen);
+}
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+ // throw error in case of non string input
+ if (typeof src === 'undefined' || src === null) {
+ throw new Error('marked(): input parameter is undefined or null');
+ }
+ if (typeof src !== 'string') {
+ throw new Error('marked(): input parameter is of type '
+ + Object.prototype.toString.call(src) + ', string expected');
+ }
+
+ if (callback || typeof opt === 'function') {
+ if (!callback) {
+ callback = opt;
+ opt = null;
+ }
+
+ opt = merge({}, marked.defaults, opt || {});
+
+ var highlight = opt.highlight,
+ tokens,
+ pending,
+ i = 0;
+
+ try {
+ tokens = Lexer.lex(src, opt)
+ } catch (e) {
+ return callback(e);
+ }
+
+ pending = tokens.length;
+
+ var done = function(err) {
+ if (err) {
+ opt.highlight = highlight;
+ return callback(err);
+ }
+
+ var out;
+
+ try {
+ out = Parser.parse(tokens, opt);
+ } catch (e) {
+ err = e;
+ }
+
+ opt.highlight = highlight;
+
+ return err
+ ? callback(err)
+ : callback(null, out);
+ };
+
+ if (!highlight || highlight.length < 3) {
+ return done();
+ }
+
+ delete opt.highlight;
+
+ if (!pending) return done();
+
+ for (; i < tokens.length; i++) {
+ (function(token) {
+ if (token.type !== 'code') {
+ return --pending || done();
+ }
+ return highlight(token.text, token.lang, function(err, code) {
+ if (err) return done(err);
+ if (code == null || code === token.text) {
+ return --pending || done();
+ }
+ token.text = code;
+ token.escaped = true;
+ --pending || done();
+ });
+ })(tokens[i]);
+ }
+
+ return;
+ }
+ try {
+ if (opt) opt = merge({}, marked.defaults, opt);
+ return Parser.parse(Lexer.lex(src, opt), opt);
+ } catch (e) {
+ e.message += '\nPlease report this to https://github.com/markedjs/marked.';
+ if ((opt || marked.defaults).silent) {
+ return 'An error occurred:
'
+ + escape(e.message + '', true)
+ + '
';
+ }
+ throw e;
+ }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+ merge(marked.defaults, opt);
+ return marked;
+};
+
+marked.getDefaults = function () {
+ return {
+ baseUrl: null,
+ breaks: false,
+ gfm: true,
+ headerIds: true,
+ headerPrefix: '',
+ highlight: null,
+ langPrefix: 'language-',
+ mangle: true,
+ pedantic: false,
+ renderer: new Renderer(),
+ sanitize: false,
+ sanitizer: null,
+ silent: false,
+ smartLists: false,
+ smartypants: false,
+ tables: true,
+ xhtml: false
+ };
+}
+
+marked.defaults = marked.getDefaults();
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+marked.TextRenderer = TextRenderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof module !== 'undefined' && typeof exports === 'object') {
+ module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+ define(function() { return marked; });
+} else {
+ root.marked = marked;
+}
+})(this || (typeof window !== 'undefined' ? window : global));
diff --git a/components/mpvue-citypicker/city-data/area.js b/components/mpvue-citypicker/city-data/area.js
new file mode 100644
index 00000000..92dfc30a
--- /dev/null
+++ b/components/mpvue-citypicker/city-data/area.js
@@ -0,0 +1,12542 @@
+/* eslint-disable */
+var areaData = [
+ [
+ [{
+ "label": "东城区",
+ "value": "110101"
+ },
+ {
+ "label": "西城区",
+ "value": "110102"
+ },
+ {
+ "label": "朝阳区",
+ "value": "110105"
+ },
+ {
+ "label": "丰台区",
+ "value": "110106"
+ },
+ {
+ "label": "石景山区",
+ "value": "110107"
+ },
+ {
+ "label": "海淀区",
+ "value": "110108"
+ },
+ {
+ "label": "门头沟区",
+ "value": "110109"
+ },
+ {
+ "label": "房山区",
+ "value": "110111"
+ },
+ {
+ "label": "通州区",
+ "value": "110112"
+ },
+ {
+ "label": "顺义区",
+ "value": "110113"
+ },
+ {
+ "label": "昌平区",
+ "value": "110114"
+ },
+ {
+ "label": "大兴区",
+ "value": "110115"
+ },
+ {
+ "label": "怀柔区",
+ "value": "110116"
+ },
+ {
+ "label": "平谷区",
+ "value": "110117"
+ },
+ {
+ "label": "密云区",
+ "value": "110118"
+ },
+ {
+ "label": "延庆区",
+ "value": "110119"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "和平区",
+ "value": "120101"
+ },
+ {
+ "label": "河东区",
+ "value": "120102"
+ },
+ {
+ "label": "河西区",
+ "value": "120103"
+ },
+ {
+ "label": "南开区",
+ "value": "120104"
+ },
+ {
+ "label": "河北区",
+ "value": "120105"
+ },
+ {
+ "label": "红桥区",
+ "value": "120106"
+ },
+ {
+ "label": "东丽区",
+ "value": "120110"
+ },
+ {
+ "label": "西青区",
+ "value": "120111"
+ },
+ {
+ "label": "津南区",
+ "value": "120112"
+ },
+ {
+ "label": "北辰区",
+ "value": "120113"
+ },
+ {
+ "label": "武清区",
+ "value": "120114"
+ },
+ {
+ "label": "宝坻区",
+ "value": "120115"
+ },
+ {
+ "label": "滨海新区",
+ "value": "120116"
+ },
+ {
+ "label": "宁河区",
+ "value": "120117"
+ },
+ {
+ "label": "静海区",
+ "value": "120118"
+ },
+ {
+ "label": "蓟州区",
+ "value": "120119"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "长安区",
+ "value": "130102"
+ },
+ {
+ "label": "桥西区",
+ "value": "130104"
+ },
+ {
+ "label": "新华区",
+ "value": "130105"
+ },
+ {
+ "label": "井陉矿区",
+ "value": "130107"
+ },
+ {
+ "label": "裕华区",
+ "value": "130108"
+ },
+ {
+ "label": "藁城区",
+ "value": "130109"
+ },
+ {
+ "label": "鹿泉区",
+ "value": "130110"
+ },
+ {
+ "label": "栾城区",
+ "value": "130111"
+ },
+ {
+ "label": "井陉县",
+ "value": "130121"
+ },
+ {
+ "label": "正定县",
+ "value": "130123"
+ },
+ {
+ "label": "行唐县",
+ "value": "130125"
+ },
+ {
+ "label": "灵寿县",
+ "value": "130126"
+ },
+ {
+ "label": "高邑县",
+ "value": "130127"
+ },
+ {
+ "label": "深泽县",
+ "value": "130128"
+ },
+ {
+ "label": "赞皇县",
+ "value": "130129"
+ },
+ {
+ "label": "无极县",
+ "value": "130130"
+ },
+ {
+ "label": "平山县",
+ "value": "130131"
+ },
+ {
+ "label": "元氏县",
+ "value": "130132"
+ },
+ {
+ "label": "赵县",
+ "value": "130133"
+ },
+ {
+ "label": "石家庄高新技术产业开发区",
+ "value": "130171"
+ },
+ {
+ "label": "石家庄循环化工园区",
+ "value": "130172"
+ },
+ {
+ "label": "辛集市",
+ "value": "130181"
+ },
+ {
+ "label": "晋州市",
+ "value": "130183"
+ },
+ {
+ "label": "新乐市",
+ "value": "130184"
+ }
+ ],
+ [{
+ "label": "路南区",
+ "value": "130202"
+ },
+ {
+ "label": "路北区",
+ "value": "130203"
+ },
+ {
+ "label": "古冶区",
+ "value": "130204"
+ },
+ {
+ "label": "开平区",
+ "value": "130205"
+ },
+ {
+ "label": "丰南区",
+ "value": "130207"
+ },
+ {
+ "label": "丰润区",
+ "value": "130208"
+ },
+ {
+ "label": "曹妃甸区",
+ "value": "130209"
+ },
+ {
+ "label": "滦县",
+ "value": "130223"
+ },
+ {
+ "label": "滦南县",
+ "value": "130224"
+ },
+ {
+ "label": "乐亭县",
+ "value": "130225"
+ },
+ {
+ "label": "迁西县",
+ "value": "130227"
+ },
+ {
+ "label": "玉田县",
+ "value": "130229"
+ },
+ {
+ "label": "唐山市芦台经济技术开发区",
+ "value": "130271"
+ },
+ {
+ "label": "唐山市汉沽管理区",
+ "value": "130272"
+ },
+ {
+ "label": "唐山高新技术产业开发区",
+ "value": "130273"
+ },
+ {
+ "label": "河北唐山海港经济开发区",
+ "value": "130274"
+ },
+ {
+ "label": "遵化市",
+ "value": "130281"
+ },
+ {
+ "label": "迁安市",
+ "value": "130283"
+ }
+ ],
+ [{
+ "label": "海港区",
+ "value": "130302"
+ },
+ {
+ "label": "山海关区",
+ "value": "130303"
+ },
+ {
+ "label": "北戴河区",
+ "value": "130304"
+ },
+ {
+ "label": "抚宁区",
+ "value": "130306"
+ },
+ {
+ "label": "青龙满族自治县",
+ "value": "130321"
+ },
+ {
+ "label": "昌黎县",
+ "value": "130322"
+ },
+ {
+ "label": "卢龙县",
+ "value": "130324"
+ },
+ {
+ "label": "秦皇岛市经济技术开发区",
+ "value": "130371"
+ },
+ {
+ "label": "北戴河新区",
+ "value": "130372"
+ }
+ ],
+ [{
+ "label": "邯山区",
+ "value": "130402"
+ },
+ {
+ "label": "丛台区",
+ "value": "130403"
+ },
+ {
+ "label": "复兴区",
+ "value": "130404"
+ },
+ {
+ "label": "峰峰矿区",
+ "value": "130406"
+ },
+ {
+ "label": "肥乡区",
+ "value": "130407"
+ },
+ {
+ "label": "永年区",
+ "value": "130408"
+ },
+ {
+ "label": "临漳县",
+ "value": "130423"
+ },
+ {
+ "label": "成安县",
+ "value": "130424"
+ },
+ {
+ "label": "大名县",
+ "value": "130425"
+ },
+ {
+ "label": "涉县",
+ "value": "130426"
+ },
+ {
+ "label": "磁县",
+ "value": "130427"
+ },
+ {
+ "label": "邱县",
+ "value": "130430"
+ },
+ {
+ "label": "鸡泽县",
+ "value": "130431"
+ },
+ {
+ "label": "广平县",
+ "value": "130432"
+ },
+ {
+ "label": "馆陶县",
+ "value": "130433"
+ },
+ {
+ "label": "魏县",
+ "value": "130434"
+ },
+ {
+ "label": "曲周县",
+ "value": "130435"
+ },
+ {
+ "label": "邯郸经济技术开发区",
+ "value": "130471"
+ },
+ {
+ "label": "邯郸冀南新区",
+ "value": "130473"
+ },
+ {
+ "label": "武安市",
+ "value": "130481"
+ }
+ ],
+ [{
+ "label": "桥东区",
+ "value": "130502"
+ },
+ {
+ "label": "桥西区",
+ "value": "130503"
+ },
+ {
+ "label": "邢台县",
+ "value": "130521"
+ },
+ {
+ "label": "临城县",
+ "value": "130522"
+ },
+ {
+ "label": "内丘县",
+ "value": "130523"
+ },
+ {
+ "label": "柏乡县",
+ "value": "130524"
+ },
+ {
+ "label": "隆尧县",
+ "value": "130525"
+ },
+ {
+ "label": "任县",
+ "value": "130526"
+ },
+ {
+ "label": "南和县",
+ "value": "130527"
+ },
+ {
+ "label": "宁晋县",
+ "value": "130528"
+ },
+ {
+ "label": "巨鹿县",
+ "value": "130529"
+ },
+ {
+ "label": "新河县",
+ "value": "130530"
+ },
+ {
+ "label": "广宗县",
+ "value": "130531"
+ },
+ {
+ "label": "平乡县",
+ "value": "130532"
+ },
+ {
+ "label": "威县",
+ "value": "130533"
+ },
+ {
+ "label": "清河县",
+ "value": "130534"
+ },
+ {
+ "label": "临西县",
+ "value": "130535"
+ },
+ {
+ "label": "河北邢台经济开发区",
+ "value": "130571"
+ },
+ {
+ "label": "南宫市",
+ "value": "130581"
+ },
+ {
+ "label": "沙河市",
+ "value": "130582"
+ }
+ ],
+ [{
+ "label": "竞秀区",
+ "value": "130602"
+ },
+ {
+ "label": "莲池区",
+ "value": "130606"
+ },
+ {
+ "label": "满城区",
+ "value": "130607"
+ },
+ {
+ "label": "清苑区",
+ "value": "130608"
+ },
+ {
+ "label": "徐水区",
+ "value": "130609"
+ },
+ {
+ "label": "涞水县",
+ "value": "130623"
+ },
+ {
+ "label": "阜平县",
+ "value": "130624"
+ },
+ {
+ "label": "定兴县",
+ "value": "130626"
+ },
+ {
+ "label": "唐县",
+ "value": "130627"
+ },
+ {
+ "label": "高阳县",
+ "value": "130628"
+ },
+ {
+ "label": "容城县",
+ "value": "130629"
+ },
+ {
+ "label": "涞源县",
+ "value": "130630"
+ },
+ {
+ "label": "望都县",
+ "value": "130631"
+ },
+ {
+ "label": "安新县",
+ "value": "130632"
+ },
+ {
+ "label": "易县",
+ "value": "130633"
+ },
+ {
+ "label": "曲阳县",
+ "value": "130634"
+ },
+ {
+ "label": "蠡县",
+ "value": "130635"
+ },
+ {
+ "label": "顺平县",
+ "value": "130636"
+ },
+ {
+ "label": "博野县",
+ "value": "130637"
+ },
+ {
+ "label": "雄县",
+ "value": "130638"
+ },
+ {
+ "label": "保定高新技术产业开发区",
+ "value": "130671"
+ },
+ {
+ "label": "保定白沟新城",
+ "value": "130672"
+ },
+ {
+ "label": "涿州市",
+ "value": "130681"
+ },
+ {
+ "label": "定州市",
+ "value": "130682"
+ },
+ {
+ "label": "安国市",
+ "value": "130683"
+ },
+ {
+ "label": "高碑店市",
+ "value": "130684"
+ }
+ ],
+ [{
+ "label": "桥东区",
+ "value": "130702"
+ },
+ {
+ "label": "桥西区",
+ "value": "130703"
+ },
+ {
+ "label": "宣化区",
+ "value": "130705"
+ },
+ {
+ "label": "下花园区",
+ "value": "130706"
+ },
+ {
+ "label": "万全区",
+ "value": "130708"
+ },
+ {
+ "label": "崇礼区",
+ "value": "130709"
+ },
+ {
+ "label": "张北县",
+ "value": "130722"
+ },
+ {
+ "label": "康保县",
+ "value": "130723"
+ },
+ {
+ "label": "沽源县",
+ "value": "130724"
+ },
+ {
+ "label": "尚义县",
+ "value": "130725"
+ },
+ {
+ "label": "蔚县",
+ "value": "130726"
+ },
+ {
+ "label": "阳原县",
+ "value": "130727"
+ },
+ {
+ "label": "怀安县",
+ "value": "130728"
+ },
+ {
+ "label": "怀来县",
+ "value": "130730"
+ },
+ {
+ "label": "涿鹿县",
+ "value": "130731"
+ },
+ {
+ "label": "赤城县",
+ "value": "130732"
+ },
+ {
+ "label": "张家口市高新技术产业开发区",
+ "value": "130771"
+ },
+ {
+ "label": "张家口市察北管理区",
+ "value": "130772"
+ },
+ {
+ "label": "张家口市塞北管理区",
+ "value": "130773"
+ }
+ ],
+ [{
+ "label": "双桥区",
+ "value": "130802"
+ },
+ {
+ "label": "双滦区",
+ "value": "130803"
+ },
+ {
+ "label": "鹰手营子矿区",
+ "value": "130804"
+ },
+ {
+ "label": "承德县",
+ "value": "130821"
+ },
+ {
+ "label": "兴隆县",
+ "value": "130822"
+ },
+ {
+ "label": "滦平县",
+ "value": "130824"
+ },
+ {
+ "label": "隆化县",
+ "value": "130825"
+ },
+ {
+ "label": "丰宁满族自治县",
+ "value": "130826"
+ },
+ {
+ "label": "宽城满族自治县",
+ "value": "130827"
+ },
+ {
+ "label": "围场满族蒙古族自治县",
+ "value": "130828"
+ },
+ {
+ "label": "承德高新技术产业开发区",
+ "value": "130871"
+ },
+ {
+ "label": "平泉市",
+ "value": "130881"
+ }
+ ],
+ [{
+ "label": "新华区",
+ "value": "130902"
+ },
+ {
+ "label": "运河区",
+ "value": "130903"
+ },
+ {
+ "label": "沧县",
+ "value": "130921"
+ },
+ {
+ "label": "青县",
+ "value": "130922"
+ },
+ {
+ "label": "东光县",
+ "value": "130923"
+ },
+ {
+ "label": "海兴县",
+ "value": "130924"
+ },
+ {
+ "label": "盐山县",
+ "value": "130925"
+ },
+ {
+ "label": "肃宁县",
+ "value": "130926"
+ },
+ {
+ "label": "南皮县",
+ "value": "130927"
+ },
+ {
+ "label": "吴桥县",
+ "value": "130928"
+ },
+ {
+ "label": "献县",
+ "value": "130929"
+ },
+ {
+ "label": "孟村回族自治县",
+ "value": "130930"
+ },
+ {
+ "label": "河北沧州经济开发区",
+ "value": "130971"
+ },
+ {
+ "label": "沧州高新技术产业开发区",
+ "value": "130972"
+ },
+ {
+ "label": "沧州渤海新区",
+ "value": "130973"
+ },
+ {
+ "label": "泊头市",
+ "value": "130981"
+ },
+ {
+ "label": "任丘市",
+ "value": "130982"
+ },
+ {
+ "label": "黄骅市",
+ "value": "130983"
+ },
+ {
+ "label": "河间市",
+ "value": "130984"
+ }
+ ],
+ [{
+ "label": "安次区",
+ "value": "131002"
+ },
+ {
+ "label": "广阳区",
+ "value": "131003"
+ },
+ {
+ "label": "固安县",
+ "value": "131022"
+ },
+ {
+ "label": "永清县",
+ "value": "131023"
+ },
+ {
+ "label": "香河县",
+ "value": "131024"
+ },
+ {
+ "label": "大城县",
+ "value": "131025"
+ },
+ {
+ "label": "文安县",
+ "value": "131026"
+ },
+ {
+ "label": "大厂回族自治县",
+ "value": "131028"
+ },
+ {
+ "label": "廊坊经济技术开发区",
+ "value": "131071"
+ },
+ {
+ "label": "霸州市",
+ "value": "131081"
+ },
+ {
+ "label": "三河市",
+ "value": "131082"
+ }
+ ],
+ [{
+ "label": "桃城区",
+ "value": "131102"
+ },
+ {
+ "label": "冀州区",
+ "value": "131103"
+ },
+ {
+ "label": "枣强县",
+ "value": "131121"
+ },
+ {
+ "label": "武邑县",
+ "value": "131122"
+ },
+ {
+ "label": "武强县",
+ "value": "131123"
+ },
+ {
+ "label": "饶阳县",
+ "value": "131124"
+ },
+ {
+ "label": "安平县",
+ "value": "131125"
+ },
+ {
+ "label": "故城县",
+ "value": "131126"
+ },
+ {
+ "label": "景县",
+ "value": "131127"
+ },
+ {
+ "label": "阜城县",
+ "value": "131128"
+ },
+ {
+ "label": "河北衡水经济开发区",
+ "value": "131171"
+ },
+ {
+ "label": "衡水滨湖新区",
+ "value": "131172"
+ },
+ {
+ "label": "深州市",
+ "value": "131182"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "小店区",
+ "value": "140105"
+ },
+ {
+ "label": "迎泽区",
+ "value": "140106"
+ },
+ {
+ "label": "杏花岭区",
+ "value": "140107"
+ },
+ {
+ "label": "尖草坪区",
+ "value": "140108"
+ },
+ {
+ "label": "万柏林区",
+ "value": "140109"
+ },
+ {
+ "label": "晋源区",
+ "value": "140110"
+ },
+ {
+ "label": "清徐县",
+ "value": "140121"
+ },
+ {
+ "label": "阳曲县",
+ "value": "140122"
+ },
+ {
+ "label": "娄烦县",
+ "value": "140123"
+ },
+ {
+ "label": "山西转型综合改革示范区",
+ "value": "140171"
+ },
+ {
+ "label": "古交市",
+ "value": "140181"
+ }
+ ],
+ [{
+ "label": "城区",
+ "value": "140202"
+ },
+ {
+ "label": "矿区",
+ "value": "140203"
+ },
+ {
+ "label": "南郊区",
+ "value": "140211"
+ },
+ {
+ "label": "新荣区",
+ "value": "140212"
+ },
+ {
+ "label": "阳高县",
+ "value": "140221"
+ },
+ {
+ "label": "天镇县",
+ "value": "140222"
+ },
+ {
+ "label": "广灵县",
+ "value": "140223"
+ },
+ {
+ "label": "灵丘县",
+ "value": "140224"
+ },
+ {
+ "label": "浑源县",
+ "value": "140225"
+ },
+ {
+ "label": "左云县",
+ "value": "140226"
+ },
+ {
+ "label": "大同县",
+ "value": "140227"
+ },
+ {
+ "label": "山西大同经济开发区",
+ "value": "140271"
+ }
+ ],
+ [{
+ "label": "城区",
+ "value": "140302"
+ },
+ {
+ "label": "矿区",
+ "value": "140303"
+ },
+ {
+ "label": "郊区",
+ "value": "140311"
+ },
+ {
+ "label": "平定县",
+ "value": "140321"
+ },
+ {
+ "label": "盂县",
+ "value": "140322"
+ },
+ {
+ "label": "山西阳泉经济开发区",
+ "value": "140371"
+ }
+ ],
+ [{
+ "label": "城区",
+ "value": "140402"
+ },
+ {
+ "label": "郊区",
+ "value": "140411"
+ },
+ {
+ "label": "长治县",
+ "value": "140421"
+ },
+ {
+ "label": "襄垣县",
+ "value": "140423"
+ },
+ {
+ "label": "屯留县",
+ "value": "140424"
+ },
+ {
+ "label": "平顺县",
+ "value": "140425"
+ },
+ {
+ "label": "黎城县",
+ "value": "140426"
+ },
+ {
+ "label": "壶关县",
+ "value": "140427"
+ },
+ {
+ "label": "长子县",
+ "value": "140428"
+ },
+ {
+ "label": "武乡县",
+ "value": "140429"
+ },
+ {
+ "label": "沁县",
+ "value": "140430"
+ },
+ {
+ "label": "沁源县",
+ "value": "140431"
+ },
+ {
+ "label": "山西长治高新技术产业园区",
+ "value": "140471"
+ },
+ {
+ "label": "潞城市",
+ "value": "140481"
+ }
+ ],
+ [{
+ "label": "城区",
+ "value": "140502"
+ },
+ {
+ "label": "沁水县",
+ "value": "140521"
+ },
+ {
+ "label": "阳城县",
+ "value": "140522"
+ },
+ {
+ "label": "陵川县",
+ "value": "140524"
+ },
+ {
+ "label": "泽州县",
+ "value": "140525"
+ },
+ {
+ "label": "高平市",
+ "value": "140581"
+ }
+ ],
+ [{
+ "label": "朔城区",
+ "value": "140602"
+ },
+ {
+ "label": "平鲁区",
+ "value": "140603"
+ },
+ {
+ "label": "山阴县",
+ "value": "140621"
+ },
+ {
+ "label": "应县",
+ "value": "140622"
+ },
+ {
+ "label": "右玉县",
+ "value": "140623"
+ },
+ {
+ "label": "怀仁县",
+ "value": "140624"
+ },
+ {
+ "label": "山西朔州经济开发区",
+ "value": "140671"
+ }
+ ],
+ [{
+ "label": "榆次区",
+ "value": "140702"
+ },
+ {
+ "label": "榆社县",
+ "value": "140721"
+ },
+ {
+ "label": "左权县",
+ "value": "140722"
+ },
+ {
+ "label": "和顺县",
+ "value": "140723"
+ },
+ {
+ "label": "昔阳县",
+ "value": "140724"
+ },
+ {
+ "label": "寿阳县",
+ "value": "140725"
+ },
+ {
+ "label": "太谷县",
+ "value": "140726"
+ },
+ {
+ "label": "祁县",
+ "value": "140727"
+ },
+ {
+ "label": "平遥县",
+ "value": "140728"
+ },
+ {
+ "label": "灵石县",
+ "value": "140729"
+ },
+ {
+ "label": "介休市",
+ "value": "140781"
+ }
+ ],
+ [{
+ "label": "盐湖区",
+ "value": "140802"
+ },
+ {
+ "label": "临猗县",
+ "value": "140821"
+ },
+ {
+ "label": "万荣县",
+ "value": "140822"
+ },
+ {
+ "label": "闻喜县",
+ "value": "140823"
+ },
+ {
+ "label": "稷山县",
+ "value": "140824"
+ },
+ {
+ "label": "新绛县",
+ "value": "140825"
+ },
+ {
+ "label": "绛县",
+ "value": "140826"
+ },
+ {
+ "label": "垣曲县",
+ "value": "140827"
+ },
+ {
+ "label": "夏县",
+ "value": "140828"
+ },
+ {
+ "label": "平陆县",
+ "value": "140829"
+ },
+ {
+ "label": "芮城县",
+ "value": "140830"
+ },
+ {
+ "label": "永济市",
+ "value": "140881"
+ },
+ {
+ "label": "河津市",
+ "value": "140882"
+ }
+ ],
+ [{
+ "label": "忻府区",
+ "value": "140902"
+ },
+ {
+ "label": "定襄县",
+ "value": "140921"
+ },
+ {
+ "label": "五台县",
+ "value": "140922"
+ },
+ {
+ "label": "代县",
+ "value": "140923"
+ },
+ {
+ "label": "繁峙县",
+ "value": "140924"
+ },
+ {
+ "label": "宁武县",
+ "value": "140925"
+ },
+ {
+ "label": "静乐县",
+ "value": "140926"
+ },
+ {
+ "label": "神池县",
+ "value": "140927"
+ },
+ {
+ "label": "五寨县",
+ "value": "140928"
+ },
+ {
+ "label": "岢岚县",
+ "value": "140929"
+ },
+ {
+ "label": "河曲县",
+ "value": "140930"
+ },
+ {
+ "label": "保德县",
+ "value": "140931"
+ },
+ {
+ "label": "偏关县",
+ "value": "140932"
+ },
+ {
+ "label": "五台山风景名胜区",
+ "value": "140971"
+ },
+ {
+ "label": "原平市",
+ "value": "140981"
+ }
+ ],
+ [{
+ "label": "尧都区",
+ "value": "141002"
+ },
+ {
+ "label": "曲沃县",
+ "value": "141021"
+ },
+ {
+ "label": "翼城县",
+ "value": "141022"
+ },
+ {
+ "label": "襄汾县",
+ "value": "141023"
+ },
+ {
+ "label": "洪洞县",
+ "value": "141024"
+ },
+ {
+ "label": "古县",
+ "value": "141025"
+ },
+ {
+ "label": "安泽县",
+ "value": "141026"
+ },
+ {
+ "label": "浮山县",
+ "value": "141027"
+ },
+ {
+ "label": "吉县",
+ "value": "141028"
+ },
+ {
+ "label": "乡宁县",
+ "value": "141029"
+ },
+ {
+ "label": "大宁县",
+ "value": "141030"
+ },
+ {
+ "label": "隰县",
+ "value": "141031"
+ },
+ {
+ "label": "永和县",
+ "value": "141032"
+ },
+ {
+ "label": "蒲县",
+ "value": "141033"
+ },
+ {
+ "label": "汾西县",
+ "value": "141034"
+ },
+ {
+ "label": "侯马市",
+ "value": "141081"
+ },
+ {
+ "label": "霍州市",
+ "value": "141082"
+ }
+ ],
+ [{
+ "label": "离石区",
+ "value": "141102"
+ },
+ {
+ "label": "文水县",
+ "value": "141121"
+ },
+ {
+ "label": "交城县",
+ "value": "141122"
+ },
+ {
+ "label": "兴县",
+ "value": "141123"
+ },
+ {
+ "label": "临县",
+ "value": "141124"
+ },
+ {
+ "label": "柳林县",
+ "value": "141125"
+ },
+ {
+ "label": "石楼县",
+ "value": "141126"
+ },
+ {
+ "label": "岚县",
+ "value": "141127"
+ },
+ {
+ "label": "方山县",
+ "value": "141128"
+ },
+ {
+ "label": "中阳县",
+ "value": "141129"
+ },
+ {
+ "label": "交口县",
+ "value": "141130"
+ },
+ {
+ "label": "孝义市",
+ "value": "141181"
+ },
+ {
+ "label": "汾阳市",
+ "value": "141182"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "新城区",
+ "value": "150102"
+ },
+ {
+ "label": "回民区",
+ "value": "150103"
+ },
+ {
+ "label": "玉泉区",
+ "value": "150104"
+ },
+ {
+ "label": "赛罕区",
+ "value": "150105"
+ },
+ {
+ "label": "土默特左旗",
+ "value": "150121"
+ },
+ {
+ "label": "托克托县",
+ "value": "150122"
+ },
+ {
+ "label": "和林格尔县",
+ "value": "150123"
+ },
+ {
+ "label": "清水河县",
+ "value": "150124"
+ },
+ {
+ "label": "武川县",
+ "value": "150125"
+ },
+ {
+ "label": "呼和浩特金海工业园区",
+ "value": "150171"
+ },
+ {
+ "label": "呼和浩特经济技术开发区",
+ "value": "150172"
+ }
+ ],
+ [{
+ "label": "东河区",
+ "value": "150202"
+ },
+ {
+ "label": "昆都仑区",
+ "value": "150203"
+ },
+ {
+ "label": "青山区",
+ "value": "150204"
+ },
+ {
+ "label": "石拐区",
+ "value": "150205"
+ },
+ {
+ "label": "白云鄂博矿区",
+ "value": "150206"
+ },
+ {
+ "label": "九原区",
+ "value": "150207"
+ },
+ {
+ "label": "土默特右旗",
+ "value": "150221"
+ },
+ {
+ "label": "固阳县",
+ "value": "150222"
+ },
+ {
+ "label": "达尔罕茂明安联合旗",
+ "value": "150223"
+ },
+ {
+ "label": "包头稀土高新技术产业开发区",
+ "value": "150271"
+ }
+ ],
+ [{
+ "label": "海勃湾区",
+ "value": "150302"
+ },
+ {
+ "label": "海南区",
+ "value": "150303"
+ },
+ {
+ "label": "乌达区",
+ "value": "150304"
+ }
+ ],
+ [{
+ "label": "红山区",
+ "value": "150402"
+ },
+ {
+ "label": "元宝山区",
+ "value": "150403"
+ },
+ {
+ "label": "松山区",
+ "value": "150404"
+ },
+ {
+ "label": "阿鲁科尔沁旗",
+ "value": "150421"
+ },
+ {
+ "label": "巴林左旗",
+ "value": "150422"
+ },
+ {
+ "label": "巴林右旗",
+ "value": "150423"
+ },
+ {
+ "label": "林西县",
+ "value": "150424"
+ },
+ {
+ "label": "克什克腾旗",
+ "value": "150425"
+ },
+ {
+ "label": "翁牛特旗",
+ "value": "150426"
+ },
+ {
+ "label": "喀喇沁旗",
+ "value": "150428"
+ },
+ {
+ "label": "宁城县",
+ "value": "150429"
+ },
+ {
+ "label": "敖汉旗",
+ "value": "150430"
+ }
+ ],
+ [{
+ "label": "科尔沁区",
+ "value": "150502"
+ },
+ {
+ "label": "科尔沁左翼中旗",
+ "value": "150521"
+ },
+ {
+ "label": "科尔沁左翼后旗",
+ "value": "150522"
+ },
+ {
+ "label": "开鲁县",
+ "value": "150523"
+ },
+ {
+ "label": "库伦旗",
+ "value": "150524"
+ },
+ {
+ "label": "奈曼旗",
+ "value": "150525"
+ },
+ {
+ "label": "扎鲁特旗",
+ "value": "150526"
+ },
+ {
+ "label": "通辽经济技术开发区",
+ "value": "150571"
+ },
+ {
+ "label": "霍林郭勒市",
+ "value": "150581"
+ }
+ ],
+ [{
+ "label": "东胜区",
+ "value": "150602"
+ },
+ {
+ "label": "康巴什区",
+ "value": "150603"
+ },
+ {
+ "label": "达拉特旗",
+ "value": "150621"
+ },
+ {
+ "label": "准格尔旗",
+ "value": "150622"
+ },
+ {
+ "label": "鄂托克前旗",
+ "value": "150623"
+ },
+ {
+ "label": "鄂托克旗",
+ "value": "150624"
+ },
+ {
+ "label": "杭锦旗",
+ "value": "150625"
+ },
+ {
+ "label": "乌审旗",
+ "value": "150626"
+ },
+ {
+ "label": "伊金霍洛旗",
+ "value": "150627"
+ }
+ ],
+ [{
+ "label": "海拉尔区",
+ "value": "150702"
+ },
+ {
+ "label": "扎赉诺尔区",
+ "value": "150703"
+ },
+ {
+ "label": "阿荣旗",
+ "value": "150721"
+ },
+ {
+ "label": "莫力达瓦达斡尔族自治旗",
+ "value": "150722"
+ },
+ {
+ "label": "鄂伦春自治旗",
+ "value": "150723"
+ },
+ {
+ "label": "鄂温克族自治旗",
+ "value": "150724"
+ },
+ {
+ "label": "陈巴尔虎旗",
+ "value": "150725"
+ },
+ {
+ "label": "新巴尔虎左旗",
+ "value": "150726"
+ },
+ {
+ "label": "新巴尔虎右旗",
+ "value": "150727"
+ },
+ {
+ "label": "满洲里市",
+ "value": "150781"
+ },
+ {
+ "label": "牙克石市",
+ "value": "150782"
+ },
+ {
+ "label": "扎兰屯市",
+ "value": "150783"
+ },
+ {
+ "label": "额尔古纳市",
+ "value": "150784"
+ },
+ {
+ "label": "根河市",
+ "value": "150785"
+ }
+ ],
+ [{
+ "label": "临河区",
+ "value": "150802"
+ },
+ {
+ "label": "五原县",
+ "value": "150821"
+ },
+ {
+ "label": "磴口县",
+ "value": "150822"
+ },
+ {
+ "label": "乌拉特前旗",
+ "value": "150823"
+ },
+ {
+ "label": "乌拉特中旗",
+ "value": "150824"
+ },
+ {
+ "label": "乌拉特后旗",
+ "value": "150825"
+ },
+ {
+ "label": "杭锦后旗",
+ "value": "150826"
+ }
+ ],
+ [{
+ "label": "集宁区",
+ "value": "150902"
+ },
+ {
+ "label": "卓资县",
+ "value": "150921"
+ },
+ {
+ "label": "化德县",
+ "value": "150922"
+ },
+ {
+ "label": "商都县",
+ "value": "150923"
+ },
+ {
+ "label": "兴和县",
+ "value": "150924"
+ },
+ {
+ "label": "凉城县",
+ "value": "150925"
+ },
+ {
+ "label": "察哈尔右翼前旗",
+ "value": "150926"
+ },
+ {
+ "label": "察哈尔右翼中旗",
+ "value": "150927"
+ },
+ {
+ "label": "察哈尔右翼后旗",
+ "value": "150928"
+ },
+ {
+ "label": "四子王旗",
+ "value": "150929"
+ },
+ {
+ "label": "丰镇市",
+ "value": "150981"
+ }
+ ],
+ [{
+ "label": "乌兰浩特市",
+ "value": "152201"
+ },
+ {
+ "label": "阿尔山市",
+ "value": "152202"
+ },
+ {
+ "label": "科尔沁右翼前旗",
+ "value": "152221"
+ },
+ {
+ "label": "科尔沁右翼中旗",
+ "value": "152222"
+ },
+ {
+ "label": "扎赉特旗",
+ "value": "152223"
+ },
+ {
+ "label": "突泉县",
+ "value": "152224"
+ }
+ ],
+ [{
+ "label": "二连浩特市",
+ "value": "152501"
+ },
+ {
+ "label": "锡林浩特市",
+ "value": "152502"
+ },
+ {
+ "label": "阿巴嘎旗",
+ "value": "152522"
+ },
+ {
+ "label": "苏尼特左旗",
+ "value": "152523"
+ },
+ {
+ "label": "苏尼特右旗",
+ "value": "152524"
+ },
+ {
+ "label": "东乌珠穆沁旗",
+ "value": "152525"
+ },
+ {
+ "label": "西乌珠穆沁旗",
+ "value": "152526"
+ },
+ {
+ "label": "太仆寺旗",
+ "value": "152527"
+ },
+ {
+ "label": "镶黄旗",
+ "value": "152528"
+ },
+ {
+ "label": "正镶白旗",
+ "value": "152529"
+ },
+ {
+ "label": "正蓝旗",
+ "value": "152530"
+ },
+ {
+ "label": "多伦县",
+ "value": "152531"
+ },
+ {
+ "label": "乌拉盖管委会",
+ "value": "152571"
+ }
+ ],
+ [{
+ "label": "阿拉善左旗",
+ "value": "152921"
+ },
+ {
+ "label": "阿拉善右旗",
+ "value": "152922"
+ },
+ {
+ "label": "额济纳旗",
+ "value": "152923"
+ },
+ {
+ "label": "内蒙古阿拉善经济开发区",
+ "value": "152971"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "和平区",
+ "value": "210102"
+ },
+ {
+ "label": "沈河区",
+ "value": "210103"
+ },
+ {
+ "label": "大东区",
+ "value": "210104"
+ },
+ {
+ "label": "皇姑区",
+ "value": "210105"
+ },
+ {
+ "label": "铁西区",
+ "value": "210106"
+ },
+ {
+ "label": "苏家屯区",
+ "value": "210111"
+ },
+ {
+ "label": "浑南区",
+ "value": "210112"
+ },
+ {
+ "label": "沈北新区",
+ "value": "210113"
+ },
+ {
+ "label": "于洪区",
+ "value": "210114"
+ },
+ {
+ "label": "辽中区",
+ "value": "210115"
+ },
+ {
+ "label": "康平县",
+ "value": "210123"
+ },
+ {
+ "label": "法库县",
+ "value": "210124"
+ },
+ {
+ "label": "新民市",
+ "value": "210181"
+ }
+ ],
+ [{
+ "label": "中山区",
+ "value": "210202"
+ },
+ {
+ "label": "西岗区",
+ "value": "210203"
+ },
+ {
+ "label": "沙河口区",
+ "value": "210204"
+ },
+ {
+ "label": "甘井子区",
+ "value": "210211"
+ },
+ {
+ "label": "旅顺口区",
+ "value": "210212"
+ },
+ {
+ "label": "金州区",
+ "value": "210213"
+ },
+ {
+ "label": "普兰店区",
+ "value": "210214"
+ },
+ {
+ "label": "长海县",
+ "value": "210224"
+ },
+ {
+ "label": "瓦房店市",
+ "value": "210281"
+ },
+ {
+ "label": "庄河市",
+ "value": "210283"
+ }
+ ],
+ [{
+ "label": "铁东区",
+ "value": "210302"
+ },
+ {
+ "label": "铁西区",
+ "value": "210303"
+ },
+ {
+ "label": "立山区",
+ "value": "210304"
+ },
+ {
+ "label": "千山区",
+ "value": "210311"
+ },
+ {
+ "label": "台安县",
+ "value": "210321"
+ },
+ {
+ "label": "岫岩满族自治县",
+ "value": "210323"
+ },
+ {
+ "label": "海城市",
+ "value": "210381"
+ }
+ ],
+ [{
+ "label": "新抚区",
+ "value": "210402"
+ },
+ {
+ "label": "东洲区",
+ "value": "210403"
+ },
+ {
+ "label": "望花区",
+ "value": "210404"
+ },
+ {
+ "label": "顺城区",
+ "value": "210411"
+ },
+ {
+ "label": "抚顺县",
+ "value": "210421"
+ },
+ {
+ "label": "新宾满族自治县",
+ "value": "210422"
+ },
+ {
+ "label": "清原满族自治县",
+ "value": "210423"
+ }
+ ],
+ [{
+ "label": "平山区",
+ "value": "210502"
+ },
+ {
+ "label": "溪湖区",
+ "value": "210503"
+ },
+ {
+ "label": "明山区",
+ "value": "210504"
+ },
+ {
+ "label": "南芬区",
+ "value": "210505"
+ },
+ {
+ "label": "本溪满族自治县",
+ "value": "210521"
+ },
+ {
+ "label": "桓仁满族自治县",
+ "value": "210522"
+ }
+ ],
+ [{
+ "label": "元宝区",
+ "value": "210602"
+ },
+ {
+ "label": "振兴区",
+ "value": "210603"
+ },
+ {
+ "label": "振安区",
+ "value": "210604"
+ },
+ {
+ "label": "宽甸满族自治县",
+ "value": "210624"
+ },
+ {
+ "label": "东港市",
+ "value": "210681"
+ },
+ {
+ "label": "凤城市",
+ "value": "210682"
+ }
+ ],
+ [{
+ "label": "古塔区",
+ "value": "210702"
+ },
+ {
+ "label": "凌河区",
+ "value": "210703"
+ },
+ {
+ "label": "太和区",
+ "value": "210711"
+ },
+ {
+ "label": "黑山县",
+ "value": "210726"
+ },
+ {
+ "label": "义县",
+ "value": "210727"
+ },
+ {
+ "label": "凌海市",
+ "value": "210781"
+ },
+ {
+ "label": "北镇市",
+ "value": "210782"
+ }
+ ],
+ [{
+ "label": "站前区",
+ "value": "210802"
+ },
+ {
+ "label": "西市区",
+ "value": "210803"
+ },
+ {
+ "label": "鲅鱼圈区",
+ "value": "210804"
+ },
+ {
+ "label": "老边区",
+ "value": "210811"
+ },
+ {
+ "label": "盖州市",
+ "value": "210881"
+ },
+ {
+ "label": "大石桥市",
+ "value": "210882"
+ }
+ ],
+ [{
+ "label": "海州区",
+ "value": "210902"
+ },
+ {
+ "label": "新邱区",
+ "value": "210903"
+ },
+ {
+ "label": "太平区",
+ "value": "210904"
+ },
+ {
+ "label": "清河门区",
+ "value": "210905"
+ },
+ {
+ "label": "细河区",
+ "value": "210911"
+ },
+ {
+ "label": "阜新蒙古族自治县",
+ "value": "210921"
+ },
+ {
+ "label": "彰武县",
+ "value": "210922"
+ }
+ ],
+ [{
+ "label": "白塔区",
+ "value": "211002"
+ },
+ {
+ "label": "文圣区",
+ "value": "211003"
+ },
+ {
+ "label": "宏伟区",
+ "value": "211004"
+ },
+ {
+ "label": "弓长岭区",
+ "value": "211005"
+ },
+ {
+ "label": "太子河区",
+ "value": "211011"
+ },
+ {
+ "label": "辽阳县",
+ "value": "211021"
+ },
+ {
+ "label": "灯塔市",
+ "value": "211081"
+ }
+ ],
+ [{
+ "label": "双台子区",
+ "value": "211102"
+ },
+ {
+ "label": "兴隆台区",
+ "value": "211103"
+ },
+ {
+ "label": "大洼区",
+ "value": "211104"
+ },
+ {
+ "label": "盘山县",
+ "value": "211122"
+ }
+ ],
+ [{
+ "label": "银州区",
+ "value": "211202"
+ },
+ {
+ "label": "清河区",
+ "value": "211204"
+ },
+ {
+ "label": "铁岭县",
+ "value": "211221"
+ },
+ {
+ "label": "西丰县",
+ "value": "211223"
+ },
+ {
+ "label": "昌图县",
+ "value": "211224"
+ },
+ {
+ "label": "调兵山市",
+ "value": "211281"
+ },
+ {
+ "label": "开原市",
+ "value": "211282"
+ }
+ ],
+ [{
+ "label": "双塔区",
+ "value": "211302"
+ },
+ {
+ "label": "龙城区",
+ "value": "211303"
+ },
+ {
+ "label": "朝阳县",
+ "value": "211321"
+ },
+ {
+ "label": "建平县",
+ "value": "211322"
+ },
+ {
+ "label": "喀喇沁左翼蒙古族自治县",
+ "value": "211324"
+ },
+ {
+ "label": "北票市",
+ "value": "211381"
+ },
+ {
+ "label": "凌源市",
+ "value": "211382"
+ }
+ ],
+ [{
+ "label": "连山区",
+ "value": "211402"
+ },
+ {
+ "label": "龙港区",
+ "value": "211403"
+ },
+ {
+ "label": "南票区",
+ "value": "211404"
+ },
+ {
+ "label": "绥中县",
+ "value": "211421"
+ },
+ {
+ "label": "建昌县",
+ "value": "211422"
+ },
+ {
+ "label": "兴城市",
+ "value": "211481"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "南关区",
+ "value": "220102"
+ },
+ {
+ "label": "宽城区",
+ "value": "220103"
+ },
+ {
+ "label": "朝阳区",
+ "value": "220104"
+ },
+ {
+ "label": "二道区",
+ "value": "220105"
+ },
+ {
+ "label": "绿园区",
+ "value": "220106"
+ },
+ {
+ "label": "双阳区",
+ "value": "220112"
+ },
+ {
+ "label": "九台区",
+ "value": "220113"
+ },
+ {
+ "label": "农安县",
+ "value": "220122"
+ },
+ {
+ "label": "长春经济技术开发区",
+ "value": "220171"
+ },
+ {
+ "label": "长春净月高新技术产业开发区",
+ "value": "220172"
+ },
+ {
+ "label": "长春高新技术产业开发区",
+ "value": "220173"
+ },
+ {
+ "label": "长春汽车经济技术开发区",
+ "value": "220174"
+ },
+ {
+ "label": "榆树市",
+ "value": "220182"
+ },
+ {
+ "label": "德惠市",
+ "value": "220183"
+ }
+ ],
+ [{
+ "label": "昌邑区",
+ "value": "220202"
+ },
+ {
+ "label": "龙潭区",
+ "value": "220203"
+ },
+ {
+ "label": "船营区",
+ "value": "220204"
+ },
+ {
+ "label": "丰满区",
+ "value": "220211"
+ },
+ {
+ "label": "永吉县",
+ "value": "220221"
+ },
+ {
+ "label": "吉林经济开发区",
+ "value": "220271"
+ },
+ {
+ "label": "吉林高新技术产业开发区",
+ "value": "220272"
+ },
+ {
+ "label": "吉林中国新加坡食品区",
+ "value": "220273"
+ },
+ {
+ "label": "蛟河市",
+ "value": "220281"
+ },
+ {
+ "label": "桦甸市",
+ "value": "220282"
+ },
+ {
+ "label": "舒兰市",
+ "value": "220283"
+ },
+ {
+ "label": "磐石市",
+ "value": "220284"
+ }
+ ],
+ [{
+ "label": "铁西区",
+ "value": "220302"
+ },
+ {
+ "label": "铁东区",
+ "value": "220303"
+ },
+ {
+ "label": "梨树县",
+ "value": "220322"
+ },
+ {
+ "label": "伊通满族自治县",
+ "value": "220323"
+ },
+ {
+ "label": "公主岭市",
+ "value": "220381"
+ },
+ {
+ "label": "双辽市",
+ "value": "220382"
+ }
+ ],
+ [{
+ "label": "龙山区",
+ "value": "220402"
+ },
+ {
+ "label": "西安区",
+ "value": "220403"
+ },
+ {
+ "label": "东丰县",
+ "value": "220421"
+ },
+ {
+ "label": "东辽县",
+ "value": "220422"
+ }
+ ],
+ [{
+ "label": "东昌区",
+ "value": "220502"
+ },
+ {
+ "label": "二道江区",
+ "value": "220503"
+ },
+ {
+ "label": "通化县",
+ "value": "220521"
+ },
+ {
+ "label": "辉南县",
+ "value": "220523"
+ },
+ {
+ "label": "柳河县",
+ "value": "220524"
+ },
+ {
+ "label": "梅河口市",
+ "value": "220581"
+ },
+ {
+ "label": "集安市",
+ "value": "220582"
+ }
+ ],
+ [{
+ "label": "浑江区",
+ "value": "220602"
+ },
+ {
+ "label": "江源区",
+ "value": "220605"
+ },
+ {
+ "label": "抚松县",
+ "value": "220621"
+ },
+ {
+ "label": "靖宇县",
+ "value": "220622"
+ },
+ {
+ "label": "长白朝鲜族自治县",
+ "value": "220623"
+ },
+ {
+ "label": "临江市",
+ "value": "220681"
+ }
+ ],
+ [{
+ "label": "宁江区",
+ "value": "220702"
+ },
+ {
+ "label": "前郭尔罗斯蒙古族自治县",
+ "value": "220721"
+ },
+ {
+ "label": "长岭县",
+ "value": "220722"
+ },
+ {
+ "label": "乾安县",
+ "value": "220723"
+ },
+ {
+ "label": "吉林松原经济开发区",
+ "value": "220771"
+ },
+ {
+ "label": "扶余市",
+ "value": "220781"
+ }
+ ],
+ [{
+ "label": "洮北区",
+ "value": "220802"
+ },
+ {
+ "label": "镇赉县",
+ "value": "220821"
+ },
+ {
+ "label": "通榆县",
+ "value": "220822"
+ },
+ {
+ "label": "吉林白城经济开发区",
+ "value": "220871"
+ },
+ {
+ "label": "洮南市",
+ "value": "220881"
+ },
+ {
+ "label": "大安市",
+ "value": "220882"
+ }
+ ],
+ [{
+ "label": "延吉市",
+ "value": "222401"
+ },
+ {
+ "label": "图们市",
+ "value": "222402"
+ },
+ {
+ "label": "敦化市",
+ "value": "222403"
+ },
+ {
+ "label": "珲春市",
+ "value": "222404"
+ },
+ {
+ "label": "龙井市",
+ "value": "222405"
+ },
+ {
+ "label": "和龙市",
+ "value": "222406"
+ },
+ {
+ "label": "汪清县",
+ "value": "222424"
+ },
+ {
+ "label": "安图县",
+ "value": "222426"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "道里区",
+ "value": "230102"
+ },
+ {
+ "label": "南岗区",
+ "value": "230103"
+ },
+ {
+ "label": "道外区",
+ "value": "230104"
+ },
+ {
+ "label": "平房区",
+ "value": "230108"
+ },
+ {
+ "label": "松北区",
+ "value": "230109"
+ },
+ {
+ "label": "香坊区",
+ "value": "230110"
+ },
+ {
+ "label": "呼兰区",
+ "value": "230111"
+ },
+ {
+ "label": "阿城区",
+ "value": "230112"
+ },
+ {
+ "label": "双城区",
+ "value": "230113"
+ },
+ {
+ "label": "依兰县",
+ "value": "230123"
+ },
+ {
+ "label": "方正县",
+ "value": "230124"
+ },
+ {
+ "label": "宾县",
+ "value": "230125"
+ },
+ {
+ "label": "巴彦县",
+ "value": "230126"
+ },
+ {
+ "label": "木兰县",
+ "value": "230127"
+ },
+ {
+ "label": "通河县",
+ "value": "230128"
+ },
+ {
+ "label": "延寿县",
+ "value": "230129"
+ },
+ {
+ "label": "尚志市",
+ "value": "230183"
+ },
+ {
+ "label": "五常市",
+ "value": "230184"
+ }
+ ],
+ [{
+ "label": "龙沙区",
+ "value": "230202"
+ },
+ {
+ "label": "建华区",
+ "value": "230203"
+ },
+ {
+ "label": "铁锋区",
+ "value": "230204"
+ },
+ {
+ "label": "昂昂溪区",
+ "value": "230205"
+ },
+ {
+ "label": "富拉尔基区",
+ "value": "230206"
+ },
+ {
+ "label": "碾子山区",
+ "value": "230207"
+ },
+ {
+ "label": "梅里斯达斡尔族区",
+ "value": "230208"
+ },
+ {
+ "label": "龙江县",
+ "value": "230221"
+ },
+ {
+ "label": "依安县",
+ "value": "230223"
+ },
+ {
+ "label": "泰来县",
+ "value": "230224"
+ },
+ {
+ "label": "甘南县",
+ "value": "230225"
+ },
+ {
+ "label": "富裕县",
+ "value": "230227"
+ },
+ {
+ "label": "克山县",
+ "value": "230229"
+ },
+ {
+ "label": "克东县",
+ "value": "230230"
+ },
+ {
+ "label": "拜泉县",
+ "value": "230231"
+ },
+ {
+ "label": "讷河市",
+ "value": "230281"
+ }
+ ],
+ [{
+ "label": "鸡冠区",
+ "value": "230302"
+ },
+ {
+ "label": "恒山区",
+ "value": "230303"
+ },
+ {
+ "label": "滴道区",
+ "value": "230304"
+ },
+ {
+ "label": "梨树区",
+ "value": "230305"
+ },
+ {
+ "label": "城子河区",
+ "value": "230306"
+ },
+ {
+ "label": "麻山区",
+ "value": "230307"
+ },
+ {
+ "label": "鸡东县",
+ "value": "230321"
+ },
+ {
+ "label": "虎林市",
+ "value": "230381"
+ },
+ {
+ "label": "密山市",
+ "value": "230382"
+ }
+ ],
+ [{
+ "label": "向阳区",
+ "value": "230402"
+ },
+ {
+ "label": "工农区",
+ "value": "230403"
+ },
+ {
+ "label": "南山区",
+ "value": "230404"
+ },
+ {
+ "label": "兴安区",
+ "value": "230405"
+ },
+ {
+ "label": "东山区",
+ "value": "230406"
+ },
+ {
+ "label": "兴山区",
+ "value": "230407"
+ },
+ {
+ "label": "萝北县",
+ "value": "230421"
+ },
+ {
+ "label": "绥滨县",
+ "value": "230422"
+ }
+ ],
+ [{
+ "label": "尖山区",
+ "value": "230502"
+ },
+ {
+ "label": "岭东区",
+ "value": "230503"
+ },
+ {
+ "label": "四方台区",
+ "value": "230505"
+ },
+ {
+ "label": "宝山区",
+ "value": "230506"
+ },
+ {
+ "label": "集贤县",
+ "value": "230521"
+ },
+ {
+ "label": "友谊县",
+ "value": "230522"
+ },
+ {
+ "label": "宝清县",
+ "value": "230523"
+ },
+ {
+ "label": "饶河县",
+ "value": "230524"
+ }
+ ],
+ [{
+ "label": "萨尔图区",
+ "value": "230602"
+ },
+ {
+ "label": "龙凤区",
+ "value": "230603"
+ },
+ {
+ "label": "让胡路区",
+ "value": "230604"
+ },
+ {
+ "label": "红岗区",
+ "value": "230605"
+ },
+ {
+ "label": "大同区",
+ "value": "230606"
+ },
+ {
+ "label": "肇州县",
+ "value": "230621"
+ },
+ {
+ "label": "肇源县",
+ "value": "230622"
+ },
+ {
+ "label": "林甸县",
+ "value": "230623"
+ },
+ {
+ "label": "杜尔伯特蒙古族自治县",
+ "value": "230624"
+ },
+ {
+ "label": "大庆高新技术产业开发区",
+ "value": "230671"
+ }
+ ],
+ [{
+ "label": "伊春区",
+ "value": "230702"
+ },
+ {
+ "label": "南岔区",
+ "value": "230703"
+ },
+ {
+ "label": "友好区",
+ "value": "230704"
+ },
+ {
+ "label": "西林区",
+ "value": "230705"
+ },
+ {
+ "label": "翠峦区",
+ "value": "230706"
+ },
+ {
+ "label": "新青区",
+ "value": "230707"
+ },
+ {
+ "label": "美溪区",
+ "value": "230708"
+ },
+ {
+ "label": "金山屯区",
+ "value": "230709"
+ },
+ {
+ "label": "五营区",
+ "value": "230710"
+ },
+ {
+ "label": "乌马河区",
+ "value": "230711"
+ },
+ {
+ "label": "汤旺河区",
+ "value": "230712"
+ },
+ {
+ "label": "带岭区",
+ "value": "230713"
+ },
+ {
+ "label": "乌伊岭区",
+ "value": "230714"
+ },
+ {
+ "label": "红星区",
+ "value": "230715"
+ },
+ {
+ "label": "上甘岭区",
+ "value": "230716"
+ },
+ {
+ "label": "嘉荫县",
+ "value": "230722"
+ },
+ {
+ "label": "铁力市",
+ "value": "230781"
+ }
+ ],
+ [{
+ "label": "向阳区",
+ "value": "230803"
+ },
+ {
+ "label": "前进区",
+ "value": "230804"
+ },
+ {
+ "label": "东风区",
+ "value": "230805"
+ },
+ {
+ "label": "郊区",
+ "value": "230811"
+ },
+ {
+ "label": "桦南县",
+ "value": "230822"
+ },
+ {
+ "label": "桦川县",
+ "value": "230826"
+ },
+ {
+ "label": "汤原县",
+ "value": "230828"
+ },
+ {
+ "label": "同江市",
+ "value": "230881"
+ },
+ {
+ "label": "富锦市",
+ "value": "230882"
+ },
+ {
+ "label": "抚远市",
+ "value": "230883"
+ }
+ ],
+ [{
+ "label": "新兴区",
+ "value": "230902"
+ },
+ {
+ "label": "桃山区",
+ "value": "230903"
+ },
+ {
+ "label": "茄子河区",
+ "value": "230904"
+ },
+ {
+ "label": "勃利县",
+ "value": "230921"
+ }
+ ],
+ [{
+ "label": "东安区",
+ "value": "231002"
+ },
+ {
+ "label": "阳明区",
+ "value": "231003"
+ },
+ {
+ "label": "爱民区",
+ "value": "231004"
+ },
+ {
+ "label": "西安区",
+ "value": "231005"
+ },
+ {
+ "label": "林口县",
+ "value": "231025"
+ },
+ {
+ "label": "牡丹江经济技术开发区",
+ "value": "231071"
+ },
+ {
+ "label": "绥芬河市",
+ "value": "231081"
+ },
+ {
+ "label": "海林市",
+ "value": "231083"
+ },
+ {
+ "label": "宁安市",
+ "value": "231084"
+ },
+ {
+ "label": "穆棱市",
+ "value": "231085"
+ },
+ {
+ "label": "东宁市",
+ "value": "231086"
+ }
+ ],
+ [{
+ "label": "爱辉区",
+ "value": "231102"
+ },
+ {
+ "label": "嫩江县",
+ "value": "231121"
+ },
+ {
+ "label": "逊克县",
+ "value": "231123"
+ },
+ {
+ "label": "孙吴县",
+ "value": "231124"
+ },
+ {
+ "label": "北安市",
+ "value": "231181"
+ },
+ {
+ "label": "五大连池市",
+ "value": "231182"
+ }
+ ],
+ [{
+ "label": "北林区",
+ "value": "231202"
+ },
+ {
+ "label": "望奎县",
+ "value": "231221"
+ },
+ {
+ "label": "兰西县",
+ "value": "231222"
+ },
+ {
+ "label": "青冈县",
+ "value": "231223"
+ },
+ {
+ "label": "庆安县",
+ "value": "231224"
+ },
+ {
+ "label": "明水县",
+ "value": "231225"
+ },
+ {
+ "label": "绥棱县",
+ "value": "231226"
+ },
+ {
+ "label": "安达市",
+ "value": "231281"
+ },
+ {
+ "label": "肇东市",
+ "value": "231282"
+ },
+ {
+ "label": "海伦市",
+ "value": "231283"
+ }
+ ],
+ [{
+ "label": "加格达奇区",
+ "value": "232701"
+ },
+ {
+ "label": "松岭区",
+ "value": "232702"
+ },
+ {
+ "label": "新林区",
+ "value": "232703"
+ },
+ {
+ "label": "呼中区",
+ "value": "232704"
+ },
+ {
+ "label": "呼玛县",
+ "value": "232721"
+ },
+ {
+ "label": "塔河县",
+ "value": "232722"
+ },
+ {
+ "label": "漠河县",
+ "value": "232723"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "黄浦区",
+ "value": "310101"
+ },
+ {
+ "label": "徐汇区",
+ "value": "310104"
+ },
+ {
+ "label": "长宁区",
+ "value": "310105"
+ },
+ {
+ "label": "静安区",
+ "value": "310106"
+ },
+ {
+ "label": "普陀区",
+ "value": "310107"
+ },
+ {
+ "label": "虹口区",
+ "value": "310109"
+ },
+ {
+ "label": "杨浦区",
+ "value": "310110"
+ },
+ {
+ "label": "闵行区",
+ "value": "310112"
+ },
+ {
+ "label": "宝山区",
+ "value": "310113"
+ },
+ {
+ "label": "嘉定区",
+ "value": "310114"
+ },
+ {
+ "label": "浦东新区",
+ "value": "310115"
+ },
+ {
+ "label": "金山区",
+ "value": "310116"
+ },
+ {
+ "label": "松江区",
+ "value": "310117"
+ },
+ {
+ "label": "青浦区",
+ "value": "310118"
+ },
+ {
+ "label": "奉贤区",
+ "value": "310120"
+ },
+ {
+ "label": "崇明区",
+ "value": "310151"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "玄武区",
+ "value": "320102"
+ },
+ {
+ "label": "秦淮区",
+ "value": "320104"
+ },
+ {
+ "label": "建邺区",
+ "value": "320105"
+ },
+ {
+ "label": "鼓楼区",
+ "value": "320106"
+ },
+ {
+ "label": "浦口区",
+ "value": "320111"
+ },
+ {
+ "label": "栖霞区",
+ "value": "320113"
+ },
+ {
+ "label": "雨花台区",
+ "value": "320114"
+ },
+ {
+ "label": "江宁区",
+ "value": "320115"
+ },
+ {
+ "label": "六合区",
+ "value": "320116"
+ },
+ {
+ "label": "溧水区",
+ "value": "320117"
+ },
+ {
+ "label": "高淳区",
+ "value": "320118"
+ }
+ ],
+ [{
+ "label": "锡山区",
+ "value": "320205"
+ },
+ {
+ "label": "惠山区",
+ "value": "320206"
+ },
+ {
+ "label": "滨湖区",
+ "value": "320211"
+ },
+ {
+ "label": "梁溪区",
+ "value": "320213"
+ },
+ {
+ "label": "新吴区",
+ "value": "320214"
+ },
+ {
+ "label": "江阴市",
+ "value": "320281"
+ },
+ {
+ "label": "宜兴市",
+ "value": "320282"
+ }
+ ],
+ [{
+ "label": "鼓楼区",
+ "value": "320302"
+ },
+ {
+ "label": "云龙区",
+ "value": "320303"
+ },
+ {
+ "label": "贾汪区",
+ "value": "320305"
+ },
+ {
+ "label": "泉山区",
+ "value": "320311"
+ },
+ {
+ "label": "铜山区",
+ "value": "320312"
+ },
+ {
+ "label": "丰县",
+ "value": "320321"
+ },
+ {
+ "label": "沛县",
+ "value": "320322"
+ },
+ {
+ "label": "睢宁县",
+ "value": "320324"
+ },
+ {
+ "label": "徐州经济技术开发区",
+ "value": "320371"
+ },
+ {
+ "label": "新沂市",
+ "value": "320381"
+ },
+ {
+ "label": "邳州市",
+ "value": "320382"
+ }
+ ],
+ [{
+ "label": "天宁区",
+ "value": "320402"
+ },
+ {
+ "label": "钟楼区",
+ "value": "320404"
+ },
+ {
+ "label": "新北区",
+ "value": "320411"
+ },
+ {
+ "label": "武进区",
+ "value": "320412"
+ },
+ {
+ "label": "金坛区",
+ "value": "320413"
+ },
+ {
+ "label": "溧阳市",
+ "value": "320481"
+ }
+ ],
+ [{
+ "label": "虎丘区",
+ "value": "320505"
+ },
+ {
+ "label": "吴中区",
+ "value": "320506"
+ },
+ {
+ "label": "相城区",
+ "value": "320507"
+ },
+ {
+ "label": "姑苏区",
+ "value": "320508"
+ },
+ {
+ "label": "吴江区",
+ "value": "320509"
+ },
+ {
+ "label": "苏州工业园区",
+ "value": "320571"
+ },
+ {
+ "label": "常熟市",
+ "value": "320581"
+ },
+ {
+ "label": "张家港市",
+ "value": "320582"
+ },
+ {
+ "label": "昆山市",
+ "value": "320583"
+ },
+ {
+ "label": "太仓市",
+ "value": "320585"
+ }
+ ],
+ [{
+ "label": "崇川区",
+ "value": "320602"
+ },
+ {
+ "label": "港闸区",
+ "value": "320611"
+ },
+ {
+ "label": "通州区",
+ "value": "320612"
+ },
+ {
+ "label": "海安县",
+ "value": "320621"
+ },
+ {
+ "label": "如东县",
+ "value": "320623"
+ },
+ {
+ "label": "南通经济技术开发区",
+ "value": "320671"
+ },
+ {
+ "label": "启东市",
+ "value": "320681"
+ },
+ {
+ "label": "如皋市",
+ "value": "320682"
+ },
+ {
+ "label": "海门市",
+ "value": "320684"
+ }
+ ],
+ [{
+ "label": "连云区",
+ "value": "320703"
+ },
+ {
+ "label": "海州区",
+ "value": "320706"
+ },
+ {
+ "label": "赣榆区",
+ "value": "320707"
+ },
+ {
+ "label": "东海县",
+ "value": "320722"
+ },
+ {
+ "label": "灌云县",
+ "value": "320723"
+ },
+ {
+ "label": "灌南县",
+ "value": "320724"
+ },
+ {
+ "label": "连云港经济技术开发区",
+ "value": "320771"
+ },
+ {
+ "label": "连云港高新技术产业开发区",
+ "value": "320772"
+ }
+ ],
+ [{
+ "label": "淮安区",
+ "value": "320803"
+ },
+ {
+ "label": "淮阴区",
+ "value": "320804"
+ },
+ {
+ "label": "清江浦区",
+ "value": "320812"
+ },
+ {
+ "label": "洪泽区",
+ "value": "320813"
+ },
+ {
+ "label": "涟水县",
+ "value": "320826"
+ },
+ {
+ "label": "盱眙县",
+ "value": "320830"
+ },
+ {
+ "label": "金湖县",
+ "value": "320831"
+ },
+ {
+ "label": "淮安经济技术开发区",
+ "value": "320871"
+ }
+ ],
+ [{
+ "label": "亭湖区",
+ "value": "320902"
+ },
+ {
+ "label": "盐都区",
+ "value": "320903"
+ },
+ {
+ "label": "大丰区",
+ "value": "320904"
+ },
+ {
+ "label": "响水县",
+ "value": "320921"
+ },
+ {
+ "label": "滨海县",
+ "value": "320922"
+ },
+ {
+ "label": "阜宁县",
+ "value": "320923"
+ },
+ {
+ "label": "射阳县",
+ "value": "320924"
+ },
+ {
+ "label": "建湖县",
+ "value": "320925"
+ },
+ {
+ "label": "盐城经济技术开发区",
+ "value": "320971"
+ },
+ {
+ "label": "东台市",
+ "value": "320981"
+ }
+ ],
+ [{
+ "label": "广陵区",
+ "value": "321002"
+ },
+ {
+ "label": "邗江区",
+ "value": "321003"
+ },
+ {
+ "label": "江都区",
+ "value": "321012"
+ },
+ {
+ "label": "宝应县",
+ "value": "321023"
+ },
+ {
+ "label": "扬州经济技术开发区",
+ "value": "321071"
+ },
+ {
+ "label": "仪征市",
+ "value": "321081"
+ },
+ {
+ "label": "高邮市",
+ "value": "321084"
+ }
+ ],
+ [{
+ "label": "京口区",
+ "value": "321102"
+ },
+ {
+ "label": "润州区",
+ "value": "321111"
+ },
+ {
+ "label": "丹徒区",
+ "value": "321112"
+ },
+ {
+ "label": "镇江新区",
+ "value": "321171"
+ },
+ {
+ "label": "丹阳市",
+ "value": "321181"
+ },
+ {
+ "label": "扬中市",
+ "value": "321182"
+ },
+ {
+ "label": "句容市",
+ "value": "321183"
+ }
+ ],
+ [{
+ "label": "海陵区",
+ "value": "321202"
+ },
+ {
+ "label": "高港区",
+ "value": "321203"
+ },
+ {
+ "label": "姜堰区",
+ "value": "321204"
+ },
+ {
+ "label": "泰州医药高新技术产业开发区",
+ "value": "321271"
+ },
+ {
+ "label": "兴化市",
+ "value": "321281"
+ },
+ {
+ "label": "靖江市",
+ "value": "321282"
+ },
+ {
+ "label": "泰兴市",
+ "value": "321283"
+ }
+ ],
+ [{
+ "label": "宿城区",
+ "value": "321302"
+ },
+ {
+ "label": "宿豫区",
+ "value": "321311"
+ },
+ {
+ "label": "沭阳县",
+ "value": "321322"
+ },
+ {
+ "label": "泗阳县",
+ "value": "321323"
+ },
+ {
+ "label": "泗洪县",
+ "value": "321324"
+ },
+ {
+ "label": "宿迁经济技术开发区",
+ "value": "321371"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "上城区",
+ "value": "330102"
+ },
+ {
+ "label": "下城区",
+ "value": "330103"
+ },
+ {
+ "label": "江干区",
+ "value": "330104"
+ },
+ {
+ "label": "拱墅区",
+ "value": "330105"
+ },
+ {
+ "label": "西湖区",
+ "value": "330106"
+ },
+ {
+ "label": "滨江区",
+ "value": "330108"
+ },
+ {
+ "label": "萧山区",
+ "value": "330109"
+ },
+ {
+ "label": "余杭区",
+ "value": "330110"
+ },
+ {
+ "label": "富阳区",
+ "value": "330111"
+ },
+ {
+ "label": "临安区",
+ "value": "330112"
+ },
+ {
+ "label": "桐庐县",
+ "value": "330122"
+ },
+ {
+ "label": "淳安县",
+ "value": "330127"
+ },
+ {
+ "label": "建德市",
+ "value": "330182"
+ }
+ ],
+ [{
+ "label": "海曙区",
+ "value": "330203"
+ },
+ {
+ "label": "江北区",
+ "value": "330205"
+ },
+ {
+ "label": "北仑区",
+ "value": "330206"
+ },
+ {
+ "label": "镇海区",
+ "value": "330211"
+ },
+ {
+ "label": "鄞州区",
+ "value": "330212"
+ },
+ {
+ "label": "奉化区",
+ "value": "330213"
+ },
+ {
+ "label": "象山县",
+ "value": "330225"
+ },
+ {
+ "label": "宁海县",
+ "value": "330226"
+ },
+ {
+ "label": "余姚市",
+ "value": "330281"
+ },
+ {
+ "label": "慈溪市",
+ "value": "330282"
+ }
+ ],
+ [{
+ "label": "鹿城区",
+ "value": "330302"
+ },
+ {
+ "label": "龙湾区",
+ "value": "330303"
+ },
+ {
+ "label": "瓯海区",
+ "value": "330304"
+ },
+ {
+ "label": "洞头区",
+ "value": "330305"
+ },
+ {
+ "label": "永嘉县",
+ "value": "330324"
+ },
+ {
+ "label": "平阳县",
+ "value": "330326"
+ },
+ {
+ "label": "苍南县",
+ "value": "330327"
+ },
+ {
+ "label": "文成县",
+ "value": "330328"
+ },
+ {
+ "label": "泰顺县",
+ "value": "330329"
+ },
+ {
+ "label": "温州经济技术开发区",
+ "value": "330371"
+ },
+ {
+ "label": "瑞安市",
+ "value": "330381"
+ },
+ {
+ "label": "乐清市",
+ "value": "330382"
+ }
+ ],
+ [{
+ "label": "南湖区",
+ "value": "330402"
+ },
+ {
+ "label": "秀洲区",
+ "value": "330411"
+ },
+ {
+ "label": "嘉善县",
+ "value": "330421"
+ },
+ {
+ "label": "海盐县",
+ "value": "330424"
+ },
+ {
+ "label": "海宁市",
+ "value": "330481"
+ },
+ {
+ "label": "平湖市",
+ "value": "330482"
+ },
+ {
+ "label": "桐乡市",
+ "value": "330483"
+ }
+ ],
+ [{
+ "label": "吴兴区",
+ "value": "330502"
+ },
+ {
+ "label": "南浔区",
+ "value": "330503"
+ },
+ {
+ "label": "德清县",
+ "value": "330521"
+ },
+ {
+ "label": "长兴县",
+ "value": "330522"
+ },
+ {
+ "label": "安吉县",
+ "value": "330523"
+ }
+ ],
+ [{
+ "label": "越城区",
+ "value": "330602"
+ },
+ {
+ "label": "柯桥区",
+ "value": "330603"
+ },
+ {
+ "label": "上虞区",
+ "value": "330604"
+ },
+ {
+ "label": "新昌县",
+ "value": "330624"
+ },
+ {
+ "label": "诸暨市",
+ "value": "330681"
+ },
+ {
+ "label": "嵊州市",
+ "value": "330683"
+ }
+ ],
+ [{
+ "label": "婺城区",
+ "value": "330702"
+ },
+ {
+ "label": "金东区",
+ "value": "330703"
+ },
+ {
+ "label": "武义县",
+ "value": "330723"
+ },
+ {
+ "label": "浦江县",
+ "value": "330726"
+ },
+ {
+ "label": "磐安县",
+ "value": "330727"
+ },
+ {
+ "label": "兰溪市",
+ "value": "330781"
+ },
+ {
+ "label": "义乌市",
+ "value": "330782"
+ },
+ {
+ "label": "东阳市",
+ "value": "330783"
+ },
+ {
+ "label": "永康市",
+ "value": "330784"
+ }
+ ],
+ [{
+ "label": "柯城区",
+ "value": "330802"
+ },
+ {
+ "label": "衢江区",
+ "value": "330803"
+ },
+ {
+ "label": "常山县",
+ "value": "330822"
+ },
+ {
+ "label": "开化县",
+ "value": "330824"
+ },
+ {
+ "label": "龙游县",
+ "value": "330825"
+ },
+ {
+ "label": "江山市",
+ "value": "330881"
+ }
+ ],
+ [{
+ "label": "定海区",
+ "value": "330902"
+ },
+ {
+ "label": "普陀区",
+ "value": "330903"
+ },
+ {
+ "label": "岱山县",
+ "value": "330921"
+ },
+ {
+ "label": "嵊泗县",
+ "value": "330922"
+ }
+ ],
+ [{
+ "label": "椒江区",
+ "value": "331002"
+ },
+ {
+ "label": "黄岩区",
+ "value": "331003"
+ },
+ {
+ "label": "路桥区",
+ "value": "331004"
+ },
+ {
+ "label": "三门县",
+ "value": "331022"
+ },
+ {
+ "label": "天台县",
+ "value": "331023"
+ },
+ {
+ "label": "仙居县",
+ "value": "331024"
+ },
+ {
+ "label": "温岭市",
+ "value": "331081"
+ },
+ {
+ "label": "临海市",
+ "value": "331082"
+ },
+ {
+ "label": "玉环市",
+ "value": "331083"
+ }
+ ],
+ [{
+ "label": "莲都区",
+ "value": "331102"
+ },
+ {
+ "label": "青田县",
+ "value": "331121"
+ },
+ {
+ "label": "缙云县",
+ "value": "331122"
+ },
+ {
+ "label": "遂昌县",
+ "value": "331123"
+ },
+ {
+ "label": "松阳县",
+ "value": "331124"
+ },
+ {
+ "label": "云和县",
+ "value": "331125"
+ },
+ {
+ "label": "庆元县",
+ "value": "331126"
+ },
+ {
+ "label": "景宁畲族自治县",
+ "value": "331127"
+ },
+ {
+ "label": "龙泉市",
+ "value": "331181"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "瑶海区",
+ "value": "340102"
+ },
+ {
+ "label": "庐阳区",
+ "value": "340103"
+ },
+ {
+ "label": "蜀山区",
+ "value": "340104"
+ },
+ {
+ "label": "包河区",
+ "value": "340111"
+ },
+ {
+ "label": "长丰县",
+ "value": "340121"
+ },
+ {
+ "label": "肥东县",
+ "value": "340122"
+ },
+ {
+ "label": "肥西县",
+ "value": "340123"
+ },
+ {
+ "label": "庐江县",
+ "value": "340124"
+ },
+ {
+ "label": "合肥高新技术产业开发区",
+ "value": "340171"
+ },
+ {
+ "label": "合肥经济技术开发区",
+ "value": "340172"
+ },
+ {
+ "label": "合肥新站高新技术产业开发区",
+ "value": "340173"
+ },
+ {
+ "label": "巢湖市",
+ "value": "340181"
+ }
+ ],
+ [{
+ "label": "镜湖区",
+ "value": "340202"
+ },
+ {
+ "label": "弋江区",
+ "value": "340203"
+ },
+ {
+ "label": "鸠江区",
+ "value": "340207"
+ },
+ {
+ "label": "三山区",
+ "value": "340208"
+ },
+ {
+ "label": "芜湖县",
+ "value": "340221"
+ },
+ {
+ "label": "繁昌县",
+ "value": "340222"
+ },
+ {
+ "label": "南陵县",
+ "value": "340223"
+ },
+ {
+ "label": "无为县",
+ "value": "340225"
+ },
+ {
+ "label": "芜湖经济技术开发区",
+ "value": "340271"
+ },
+ {
+ "label": "安徽芜湖长江大桥经济开发区",
+ "value": "340272"
+ }
+ ],
+ [{
+ "label": "龙子湖区",
+ "value": "340302"
+ },
+ {
+ "label": "蚌山区",
+ "value": "340303"
+ },
+ {
+ "label": "禹会区",
+ "value": "340304"
+ },
+ {
+ "label": "淮上区",
+ "value": "340311"
+ },
+ {
+ "label": "怀远县",
+ "value": "340321"
+ },
+ {
+ "label": "五河县",
+ "value": "340322"
+ },
+ {
+ "label": "固镇县",
+ "value": "340323"
+ },
+ {
+ "label": "蚌埠市高新技术开发区",
+ "value": "340371"
+ },
+ {
+ "label": "蚌埠市经济开发区",
+ "value": "340372"
+ }
+ ],
+ [{
+ "label": "大通区",
+ "value": "340402"
+ },
+ {
+ "label": "田家庵区",
+ "value": "340403"
+ },
+ {
+ "label": "谢家集区",
+ "value": "340404"
+ },
+ {
+ "label": "八公山区",
+ "value": "340405"
+ },
+ {
+ "label": "潘集区",
+ "value": "340406"
+ },
+ {
+ "label": "凤台县",
+ "value": "340421"
+ },
+ {
+ "label": "寿县",
+ "value": "340422"
+ }
+ ],
+ [{
+ "label": "花山区",
+ "value": "340503"
+ },
+ {
+ "label": "雨山区",
+ "value": "340504"
+ },
+ {
+ "label": "博望区",
+ "value": "340506"
+ },
+ {
+ "label": "当涂县",
+ "value": "340521"
+ },
+ {
+ "label": "含山县",
+ "value": "340522"
+ },
+ {
+ "label": "和县",
+ "value": "340523"
+ }
+ ],
+ [{
+ "label": "杜集区",
+ "value": "340602"
+ },
+ {
+ "label": "相山区",
+ "value": "340603"
+ },
+ {
+ "label": "烈山区",
+ "value": "340604"
+ },
+ {
+ "label": "濉溪县",
+ "value": "340621"
+ }
+ ],
+ [{
+ "label": "铜官区",
+ "value": "340705"
+ },
+ {
+ "label": "义安区",
+ "value": "340706"
+ },
+ {
+ "label": "郊区",
+ "value": "340711"
+ },
+ {
+ "label": "枞阳县",
+ "value": "340722"
+ }
+ ],
+ [{
+ "label": "迎江区",
+ "value": "340802"
+ },
+ {
+ "label": "大观区",
+ "value": "340803"
+ },
+ {
+ "label": "宜秀区",
+ "value": "340811"
+ },
+ {
+ "label": "怀宁县",
+ "value": "340822"
+ },
+ {
+ "label": "潜山县",
+ "value": "340824"
+ },
+ {
+ "label": "太湖县",
+ "value": "340825"
+ },
+ {
+ "label": "宿松县",
+ "value": "340826"
+ },
+ {
+ "label": "望江县",
+ "value": "340827"
+ },
+ {
+ "label": "岳西县",
+ "value": "340828"
+ },
+ {
+ "label": "安徽安庆经济开发区",
+ "value": "340871"
+ },
+ {
+ "label": "桐城市",
+ "value": "340881"
+ }
+ ],
+ [{
+ "label": "屯溪区",
+ "value": "341002"
+ },
+ {
+ "label": "黄山区",
+ "value": "341003"
+ },
+ {
+ "label": "徽州区",
+ "value": "341004"
+ },
+ {
+ "label": "歙县",
+ "value": "341021"
+ },
+ {
+ "label": "休宁县",
+ "value": "341022"
+ },
+ {
+ "label": "黟县",
+ "value": "341023"
+ },
+ {
+ "label": "祁门县",
+ "value": "341024"
+ }
+ ],
+ [{
+ "label": "琅琊区",
+ "value": "341102"
+ },
+ {
+ "label": "南谯区",
+ "value": "341103"
+ },
+ {
+ "label": "来安县",
+ "value": "341122"
+ },
+ {
+ "label": "全椒县",
+ "value": "341124"
+ },
+ {
+ "label": "定远县",
+ "value": "341125"
+ },
+ {
+ "label": "凤阳县",
+ "value": "341126"
+ },
+ {
+ "label": "苏滁现代产业园",
+ "value": "341171"
+ },
+ {
+ "label": "滁州经济技术开发区",
+ "value": "341172"
+ },
+ {
+ "label": "天长市",
+ "value": "341181"
+ },
+ {
+ "label": "明光市",
+ "value": "341182"
+ }
+ ],
+ [{
+ "label": "颍州区",
+ "value": "341202"
+ },
+ {
+ "label": "颍东区",
+ "value": "341203"
+ },
+ {
+ "label": "颍泉区",
+ "value": "341204"
+ },
+ {
+ "label": "临泉县",
+ "value": "341221"
+ },
+ {
+ "label": "太和县",
+ "value": "341222"
+ },
+ {
+ "label": "阜南县",
+ "value": "341225"
+ },
+ {
+ "label": "颍上县",
+ "value": "341226"
+ },
+ {
+ "label": "阜阳合肥现代产业园区",
+ "value": "341271"
+ },
+ {
+ "label": "阜阳经济技术开发区",
+ "value": "341272"
+ },
+ {
+ "label": "界首市",
+ "value": "341282"
+ }
+ ],
+ [{
+ "label": "埇桥区",
+ "value": "341302"
+ },
+ {
+ "label": "砀山县",
+ "value": "341321"
+ },
+ {
+ "label": "萧县",
+ "value": "341322"
+ },
+ {
+ "label": "灵璧县",
+ "value": "341323"
+ },
+ {
+ "label": "泗县",
+ "value": "341324"
+ },
+ {
+ "label": "宿州马鞍山现代产业园区",
+ "value": "341371"
+ },
+ {
+ "label": "宿州经济技术开发区",
+ "value": "341372"
+ }
+ ],
+ [{
+ "label": "金安区",
+ "value": "341502"
+ },
+ {
+ "label": "裕安区",
+ "value": "341503"
+ },
+ {
+ "label": "叶集区",
+ "value": "341504"
+ },
+ {
+ "label": "霍邱县",
+ "value": "341522"
+ },
+ {
+ "label": "舒城县",
+ "value": "341523"
+ },
+ {
+ "label": "金寨县",
+ "value": "341524"
+ },
+ {
+ "label": "霍山县",
+ "value": "341525"
+ }
+ ],
+ [{
+ "label": "谯城区",
+ "value": "341602"
+ },
+ {
+ "label": "涡阳县",
+ "value": "341621"
+ },
+ {
+ "label": "蒙城县",
+ "value": "341622"
+ },
+ {
+ "label": "利辛县",
+ "value": "341623"
+ }
+ ],
+ [{
+ "label": "贵池区",
+ "value": "341702"
+ },
+ {
+ "label": "东至县",
+ "value": "341721"
+ },
+ {
+ "label": "石台县",
+ "value": "341722"
+ },
+ {
+ "label": "青阳县",
+ "value": "341723"
+ }
+ ],
+ [{
+ "label": "宣州区",
+ "value": "341802"
+ },
+ {
+ "label": "郎溪县",
+ "value": "341821"
+ },
+ {
+ "label": "广德县",
+ "value": "341822"
+ },
+ {
+ "label": "泾县",
+ "value": "341823"
+ },
+ {
+ "label": "绩溪县",
+ "value": "341824"
+ },
+ {
+ "label": "旌德县",
+ "value": "341825"
+ },
+ {
+ "label": "宣城市经济开发区",
+ "value": "341871"
+ },
+ {
+ "label": "宁国市",
+ "value": "341881"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "鼓楼区",
+ "value": "350102"
+ },
+ {
+ "label": "台江区",
+ "value": "350103"
+ },
+ {
+ "label": "仓山区",
+ "value": "350104"
+ },
+ {
+ "label": "马尾区",
+ "value": "350105"
+ },
+ {
+ "label": "晋安区",
+ "value": "350111"
+ },
+ {
+ "label": "闽侯县",
+ "value": "350121"
+ },
+ {
+ "label": "连江县",
+ "value": "350122"
+ },
+ {
+ "label": "罗源县",
+ "value": "350123"
+ },
+ {
+ "label": "闽清县",
+ "value": "350124"
+ },
+ {
+ "label": "永泰县",
+ "value": "350125"
+ },
+ {
+ "label": "平潭县",
+ "value": "350128"
+ },
+ {
+ "label": "福清市",
+ "value": "350181"
+ },
+ {
+ "label": "长乐市",
+ "value": "350182"
+ }
+ ],
+ [{
+ "label": "思明区",
+ "value": "350203"
+ },
+ {
+ "label": "海沧区",
+ "value": "350205"
+ },
+ {
+ "label": "湖里区",
+ "value": "350206"
+ },
+ {
+ "label": "集美区",
+ "value": "350211"
+ },
+ {
+ "label": "同安区",
+ "value": "350212"
+ },
+ {
+ "label": "翔安区",
+ "value": "350213"
+ }
+ ],
+ [{
+ "label": "城厢区",
+ "value": "350302"
+ },
+ {
+ "label": "涵江区",
+ "value": "350303"
+ },
+ {
+ "label": "荔城区",
+ "value": "350304"
+ },
+ {
+ "label": "秀屿区",
+ "value": "350305"
+ },
+ {
+ "label": "仙游县",
+ "value": "350322"
+ }
+ ],
+ [{
+ "label": "梅列区",
+ "value": "350402"
+ },
+ {
+ "label": "三元区",
+ "value": "350403"
+ },
+ {
+ "label": "明溪县",
+ "value": "350421"
+ },
+ {
+ "label": "清流县",
+ "value": "350423"
+ },
+ {
+ "label": "宁化县",
+ "value": "350424"
+ },
+ {
+ "label": "大田县",
+ "value": "350425"
+ },
+ {
+ "label": "尤溪县",
+ "value": "350426"
+ },
+ {
+ "label": "沙县",
+ "value": "350427"
+ },
+ {
+ "label": "将乐县",
+ "value": "350428"
+ },
+ {
+ "label": "泰宁县",
+ "value": "350429"
+ },
+ {
+ "label": "建宁县",
+ "value": "350430"
+ },
+ {
+ "label": "永安市",
+ "value": "350481"
+ }
+ ],
+ [{
+ "label": "鲤城区",
+ "value": "350502"
+ },
+ {
+ "label": "丰泽区",
+ "value": "350503"
+ },
+ {
+ "label": "洛江区",
+ "value": "350504"
+ },
+ {
+ "label": "泉港区",
+ "value": "350505"
+ },
+ {
+ "label": "惠安县",
+ "value": "350521"
+ },
+ {
+ "label": "安溪县",
+ "value": "350524"
+ },
+ {
+ "label": "永春县",
+ "value": "350525"
+ },
+ {
+ "label": "德化县",
+ "value": "350526"
+ },
+ {
+ "label": "金门县",
+ "value": "350527"
+ },
+ {
+ "label": "石狮市",
+ "value": "350581"
+ },
+ {
+ "label": "晋江市",
+ "value": "350582"
+ },
+ {
+ "label": "南安市",
+ "value": "350583"
+ }
+ ],
+ [{
+ "label": "芗城区",
+ "value": "350602"
+ },
+ {
+ "label": "龙文区",
+ "value": "350603"
+ },
+ {
+ "label": "云霄县",
+ "value": "350622"
+ },
+ {
+ "label": "漳浦县",
+ "value": "350623"
+ },
+ {
+ "label": "诏安县",
+ "value": "350624"
+ },
+ {
+ "label": "长泰县",
+ "value": "350625"
+ },
+ {
+ "label": "东山县",
+ "value": "350626"
+ },
+ {
+ "label": "南靖县",
+ "value": "350627"
+ },
+ {
+ "label": "平和县",
+ "value": "350628"
+ },
+ {
+ "label": "华安县",
+ "value": "350629"
+ },
+ {
+ "label": "龙海市",
+ "value": "350681"
+ }
+ ],
+ [{
+ "label": "延平区",
+ "value": "350702"
+ },
+ {
+ "label": "建阳区",
+ "value": "350703"
+ },
+ {
+ "label": "顺昌县",
+ "value": "350721"
+ },
+ {
+ "label": "浦城县",
+ "value": "350722"
+ },
+ {
+ "label": "光泽县",
+ "value": "350723"
+ },
+ {
+ "label": "松溪县",
+ "value": "350724"
+ },
+ {
+ "label": "政和县",
+ "value": "350725"
+ },
+ {
+ "label": "邵武市",
+ "value": "350781"
+ },
+ {
+ "label": "武夷山市",
+ "value": "350782"
+ },
+ {
+ "label": "建瓯市",
+ "value": "350783"
+ }
+ ],
+ [{
+ "label": "新罗区",
+ "value": "350802"
+ },
+ {
+ "label": "永定区",
+ "value": "350803"
+ },
+ {
+ "label": "长汀县",
+ "value": "350821"
+ },
+ {
+ "label": "上杭县",
+ "value": "350823"
+ },
+ {
+ "label": "武平县",
+ "value": "350824"
+ },
+ {
+ "label": "连城县",
+ "value": "350825"
+ },
+ {
+ "label": "漳平市",
+ "value": "350881"
+ }
+ ],
+ [{
+ "label": "蕉城区",
+ "value": "350902"
+ },
+ {
+ "label": "霞浦县",
+ "value": "350921"
+ },
+ {
+ "label": "古田县",
+ "value": "350922"
+ },
+ {
+ "label": "屏南县",
+ "value": "350923"
+ },
+ {
+ "label": "寿宁县",
+ "value": "350924"
+ },
+ {
+ "label": "周宁县",
+ "value": "350925"
+ },
+ {
+ "label": "柘荣县",
+ "value": "350926"
+ },
+ {
+ "label": "福安市",
+ "value": "350981"
+ },
+ {
+ "label": "福鼎市",
+ "value": "350982"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "东湖区",
+ "value": "360102"
+ },
+ {
+ "label": "西湖区",
+ "value": "360103"
+ },
+ {
+ "label": "青云谱区",
+ "value": "360104"
+ },
+ {
+ "label": "湾里区",
+ "value": "360105"
+ },
+ {
+ "label": "青山湖区",
+ "value": "360111"
+ },
+ {
+ "label": "新建区",
+ "value": "360112"
+ },
+ {
+ "label": "南昌县",
+ "value": "360121"
+ },
+ {
+ "label": "安义县",
+ "value": "360123"
+ },
+ {
+ "label": "进贤县",
+ "value": "360124"
+ }
+ ],
+ [{
+ "label": "昌江区",
+ "value": "360202"
+ },
+ {
+ "label": "珠山区",
+ "value": "360203"
+ },
+ {
+ "label": "浮梁县",
+ "value": "360222"
+ },
+ {
+ "label": "乐平市",
+ "value": "360281"
+ }
+ ],
+ [{
+ "label": "安源区",
+ "value": "360302"
+ },
+ {
+ "label": "湘东区",
+ "value": "360313"
+ },
+ {
+ "label": "莲花县",
+ "value": "360321"
+ },
+ {
+ "label": "上栗县",
+ "value": "360322"
+ },
+ {
+ "label": "芦溪县",
+ "value": "360323"
+ }
+ ],
+ [{
+ "label": "濂溪区",
+ "value": "360402"
+ },
+ {
+ "label": "浔阳区",
+ "value": "360403"
+ },
+ {
+ "label": "柴桑区",
+ "value": "360404"
+ },
+ {
+ "label": "武宁县",
+ "value": "360423"
+ },
+ {
+ "label": "修水县",
+ "value": "360424"
+ },
+ {
+ "label": "永修县",
+ "value": "360425"
+ },
+ {
+ "label": "德安县",
+ "value": "360426"
+ },
+ {
+ "label": "都昌县",
+ "value": "360428"
+ },
+ {
+ "label": "湖口县",
+ "value": "360429"
+ },
+ {
+ "label": "彭泽县",
+ "value": "360430"
+ },
+ {
+ "label": "瑞昌市",
+ "value": "360481"
+ },
+ {
+ "label": "共青城市",
+ "value": "360482"
+ },
+ {
+ "label": "庐山市",
+ "value": "360483"
+ }
+ ],
+ [{
+ "label": "渝水区",
+ "value": "360502"
+ },
+ {
+ "label": "分宜县",
+ "value": "360521"
+ }
+ ],
+ [{
+ "label": "月湖区",
+ "value": "360602"
+ },
+ {
+ "label": "余江县",
+ "value": "360622"
+ },
+ {
+ "label": "贵溪市",
+ "value": "360681"
+ }
+ ],
+ [{
+ "label": "章贡区",
+ "value": "360702"
+ },
+ {
+ "label": "南康区",
+ "value": "360703"
+ },
+ {
+ "label": "赣县区",
+ "value": "360704"
+ },
+ {
+ "label": "信丰县",
+ "value": "360722"
+ },
+ {
+ "label": "大余县",
+ "value": "360723"
+ },
+ {
+ "label": "上犹县",
+ "value": "360724"
+ },
+ {
+ "label": "崇义县",
+ "value": "360725"
+ },
+ {
+ "label": "安远县",
+ "value": "360726"
+ },
+ {
+ "label": "龙南县",
+ "value": "360727"
+ },
+ {
+ "label": "定南县",
+ "value": "360728"
+ },
+ {
+ "label": "全南县",
+ "value": "360729"
+ },
+ {
+ "label": "宁都县",
+ "value": "360730"
+ },
+ {
+ "label": "于都县",
+ "value": "360731"
+ },
+ {
+ "label": "兴国县",
+ "value": "360732"
+ },
+ {
+ "label": "会昌县",
+ "value": "360733"
+ },
+ {
+ "label": "寻乌县",
+ "value": "360734"
+ },
+ {
+ "label": "石城县",
+ "value": "360735"
+ },
+ {
+ "label": "瑞金市",
+ "value": "360781"
+ }
+ ],
+ [{
+ "label": "吉州区",
+ "value": "360802"
+ },
+ {
+ "label": "青原区",
+ "value": "360803"
+ },
+ {
+ "label": "吉安县",
+ "value": "360821"
+ },
+ {
+ "label": "吉水县",
+ "value": "360822"
+ },
+ {
+ "label": "峡江县",
+ "value": "360823"
+ },
+ {
+ "label": "新干县",
+ "value": "360824"
+ },
+ {
+ "label": "永丰县",
+ "value": "360825"
+ },
+ {
+ "label": "泰和县",
+ "value": "360826"
+ },
+ {
+ "label": "遂川县",
+ "value": "360827"
+ },
+ {
+ "label": "万安县",
+ "value": "360828"
+ },
+ {
+ "label": "安福县",
+ "value": "360829"
+ },
+ {
+ "label": "永新县",
+ "value": "360830"
+ },
+ {
+ "label": "井冈山市",
+ "value": "360881"
+ }
+ ],
+ [{
+ "label": "袁州区",
+ "value": "360902"
+ },
+ {
+ "label": "奉新县",
+ "value": "360921"
+ },
+ {
+ "label": "万载县",
+ "value": "360922"
+ },
+ {
+ "label": "上高县",
+ "value": "360923"
+ },
+ {
+ "label": "宜丰县",
+ "value": "360924"
+ },
+ {
+ "label": "靖安县",
+ "value": "360925"
+ },
+ {
+ "label": "铜鼓县",
+ "value": "360926"
+ },
+ {
+ "label": "丰城市",
+ "value": "360981"
+ },
+ {
+ "label": "樟树市",
+ "value": "360982"
+ },
+ {
+ "label": "高安市",
+ "value": "360983"
+ }
+ ],
+ [{
+ "label": "临川区",
+ "value": "361002"
+ },
+ {
+ "label": "东乡区",
+ "value": "361003"
+ },
+ {
+ "label": "南城县",
+ "value": "361021"
+ },
+ {
+ "label": "黎川县",
+ "value": "361022"
+ },
+ {
+ "label": "南丰县",
+ "value": "361023"
+ },
+ {
+ "label": "崇仁县",
+ "value": "361024"
+ },
+ {
+ "label": "乐安县",
+ "value": "361025"
+ },
+ {
+ "label": "宜黄县",
+ "value": "361026"
+ },
+ {
+ "label": "金溪县",
+ "value": "361027"
+ },
+ {
+ "label": "资溪县",
+ "value": "361028"
+ },
+ {
+ "label": "广昌县",
+ "value": "361030"
+ }
+ ],
+ [{
+ "label": "信州区",
+ "value": "361102"
+ },
+ {
+ "label": "广丰区",
+ "value": "361103"
+ },
+ {
+ "label": "上饶县",
+ "value": "361121"
+ },
+ {
+ "label": "玉山县",
+ "value": "361123"
+ },
+ {
+ "label": "铅山县",
+ "value": "361124"
+ },
+ {
+ "label": "横峰县",
+ "value": "361125"
+ },
+ {
+ "label": "弋阳县",
+ "value": "361126"
+ },
+ {
+ "label": "余干县",
+ "value": "361127"
+ },
+ {
+ "label": "鄱阳县",
+ "value": "361128"
+ },
+ {
+ "label": "万年县",
+ "value": "361129"
+ },
+ {
+ "label": "婺源县",
+ "value": "361130"
+ },
+ {
+ "label": "德兴市",
+ "value": "361181"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "历下区",
+ "value": "370102"
+ },
+ {
+ "label": "市中区",
+ "value": "370103"
+ },
+ {
+ "label": "槐荫区",
+ "value": "370104"
+ },
+ {
+ "label": "天桥区",
+ "value": "370105"
+ },
+ {
+ "label": "历城区",
+ "value": "370112"
+ },
+ {
+ "label": "长清区",
+ "value": "370113"
+ },
+ {
+ "label": "章丘区",
+ "value": "370114"
+ },
+ {
+ "label": "平阴县",
+ "value": "370124"
+ },
+ {
+ "label": "济阳县",
+ "value": "370125"
+ },
+ {
+ "label": "商河县",
+ "value": "370126"
+ },
+ {
+ "label": "济南高新技术产业开发区",
+ "value": "370171"
+ }
+ ],
+ [{
+ "label": "市南区",
+ "value": "370202"
+ },
+ {
+ "label": "市北区",
+ "value": "370203"
+ },
+ {
+ "label": "黄岛区",
+ "value": "370211"
+ },
+ {
+ "label": "崂山区",
+ "value": "370212"
+ },
+ {
+ "label": "李沧区",
+ "value": "370213"
+ },
+ {
+ "label": "城阳区",
+ "value": "370214"
+ },
+ {
+ "label": "即墨区",
+ "value": "370215"
+ },
+ {
+ "label": "青岛高新技术产业开发区",
+ "value": "370271"
+ },
+ {
+ "label": "胶州市",
+ "value": "370281"
+ },
+ {
+ "label": "平度市",
+ "value": "370283"
+ },
+ {
+ "label": "莱西市",
+ "value": "370285"
+ }
+ ],
+ [{
+ "label": "淄川区",
+ "value": "370302"
+ },
+ {
+ "label": "张店区",
+ "value": "370303"
+ },
+ {
+ "label": "博山区",
+ "value": "370304"
+ },
+ {
+ "label": "临淄区",
+ "value": "370305"
+ },
+ {
+ "label": "周村区",
+ "value": "370306"
+ },
+ {
+ "label": "桓台县",
+ "value": "370321"
+ },
+ {
+ "label": "高青县",
+ "value": "370322"
+ },
+ {
+ "label": "沂源县",
+ "value": "370323"
+ }
+ ],
+ [{
+ "label": "市中区",
+ "value": "370402"
+ },
+ {
+ "label": "薛城区",
+ "value": "370403"
+ },
+ {
+ "label": "峄城区",
+ "value": "370404"
+ },
+ {
+ "label": "台儿庄区",
+ "value": "370405"
+ },
+ {
+ "label": "山亭区",
+ "value": "370406"
+ },
+ {
+ "label": "滕州市",
+ "value": "370481"
+ }
+ ],
+ [{
+ "label": "东营区",
+ "value": "370502"
+ },
+ {
+ "label": "河口区",
+ "value": "370503"
+ },
+ {
+ "label": "垦利区",
+ "value": "370505"
+ },
+ {
+ "label": "利津县",
+ "value": "370522"
+ },
+ {
+ "label": "广饶县",
+ "value": "370523"
+ },
+ {
+ "label": "东营经济技术开发区",
+ "value": "370571"
+ },
+ {
+ "label": "东营港经济开发区",
+ "value": "370572"
+ }
+ ],
+ [{
+ "label": "芝罘区",
+ "value": "370602"
+ },
+ {
+ "label": "福山区",
+ "value": "370611"
+ },
+ {
+ "label": "牟平区",
+ "value": "370612"
+ },
+ {
+ "label": "莱山区",
+ "value": "370613"
+ },
+ {
+ "label": "长岛县",
+ "value": "370634"
+ },
+ {
+ "label": "烟台高新技术产业开发区",
+ "value": "370671"
+ },
+ {
+ "label": "烟台经济技术开发区",
+ "value": "370672"
+ },
+ {
+ "label": "龙口市",
+ "value": "370681"
+ },
+ {
+ "label": "莱阳市",
+ "value": "370682"
+ },
+ {
+ "label": "莱州市",
+ "value": "370683"
+ },
+ {
+ "label": "蓬莱市",
+ "value": "370684"
+ },
+ {
+ "label": "招远市",
+ "value": "370685"
+ },
+ {
+ "label": "栖霞市",
+ "value": "370686"
+ },
+ {
+ "label": "海阳市",
+ "value": "370687"
+ }
+ ],
+ [{
+ "label": "潍城区",
+ "value": "370702"
+ },
+ {
+ "label": "寒亭区",
+ "value": "370703"
+ },
+ {
+ "label": "坊子区",
+ "value": "370704"
+ },
+ {
+ "label": "奎文区",
+ "value": "370705"
+ },
+ {
+ "label": "临朐县",
+ "value": "370724"
+ },
+ {
+ "label": "昌乐县",
+ "value": "370725"
+ },
+ {
+ "label": "潍坊滨海经济技术开发区",
+ "value": "370772"
+ },
+ {
+ "label": "青州市",
+ "value": "370781"
+ },
+ {
+ "label": "诸城市",
+ "value": "370782"
+ },
+ {
+ "label": "寿光市",
+ "value": "370783"
+ },
+ {
+ "label": "安丘市",
+ "value": "370784"
+ },
+ {
+ "label": "高密市",
+ "value": "370785"
+ },
+ {
+ "label": "昌邑市",
+ "value": "370786"
+ }
+ ],
+ [{
+ "label": "任城区",
+ "value": "370811"
+ },
+ {
+ "label": "兖州区",
+ "value": "370812"
+ },
+ {
+ "label": "微山县",
+ "value": "370826"
+ },
+ {
+ "label": "鱼台县",
+ "value": "370827"
+ },
+ {
+ "label": "金乡县",
+ "value": "370828"
+ },
+ {
+ "label": "嘉祥县",
+ "value": "370829"
+ },
+ {
+ "label": "汶上县",
+ "value": "370830"
+ },
+ {
+ "label": "泗水县",
+ "value": "370831"
+ },
+ {
+ "label": "梁山县",
+ "value": "370832"
+ },
+ {
+ "label": "济宁高新技术产业开发区",
+ "value": "370871"
+ },
+ {
+ "label": "曲阜市",
+ "value": "370881"
+ },
+ {
+ "label": "邹城市",
+ "value": "370883"
+ }
+ ],
+ [{
+ "label": "泰山区",
+ "value": "370902"
+ },
+ {
+ "label": "岱岳区",
+ "value": "370911"
+ },
+ {
+ "label": "宁阳县",
+ "value": "370921"
+ },
+ {
+ "label": "东平县",
+ "value": "370923"
+ },
+ {
+ "label": "新泰市",
+ "value": "370982"
+ },
+ {
+ "label": "肥城市",
+ "value": "370983"
+ }
+ ],
+ [{
+ "label": "环翠区",
+ "value": "371002"
+ },
+ {
+ "label": "文登区",
+ "value": "371003"
+ },
+ {
+ "label": "威海火炬高技术产业开发区",
+ "value": "371071"
+ },
+ {
+ "label": "威海经济技术开发区",
+ "value": "371072"
+ },
+ {
+ "label": "威海临港经济技术开发区",
+ "value": "371073"
+ },
+ {
+ "label": "荣成市",
+ "value": "371082"
+ },
+ {
+ "label": "乳山市",
+ "value": "371083"
+ }
+ ],
+ [{
+ "label": "东港区",
+ "value": "371102"
+ },
+ {
+ "label": "岚山区",
+ "value": "371103"
+ },
+ {
+ "label": "五莲县",
+ "value": "371121"
+ },
+ {
+ "label": "莒县",
+ "value": "371122"
+ },
+ {
+ "label": "日照经济技术开发区",
+ "value": "371171"
+ },
+ {
+ "label": "日照国际海洋城",
+ "value": "371172"
+ }
+ ],
+ [{
+ "label": "莱城区",
+ "value": "371202"
+ },
+ {
+ "label": "钢城区",
+ "value": "371203"
+ }
+ ],
+ [{
+ "label": "兰山区",
+ "value": "371302"
+ },
+ {
+ "label": "罗庄区",
+ "value": "371311"
+ },
+ {
+ "label": "河东区",
+ "value": "371312"
+ },
+ {
+ "label": "沂南县",
+ "value": "371321"
+ },
+ {
+ "label": "郯城县",
+ "value": "371322"
+ },
+ {
+ "label": "沂水县",
+ "value": "371323"
+ },
+ {
+ "label": "兰陵县",
+ "value": "371324"
+ },
+ {
+ "label": "费县",
+ "value": "371325"
+ },
+ {
+ "label": "平邑县",
+ "value": "371326"
+ },
+ {
+ "label": "莒南县",
+ "value": "371327"
+ },
+ {
+ "label": "蒙阴县",
+ "value": "371328"
+ },
+ {
+ "label": "临沭县",
+ "value": "371329"
+ },
+ {
+ "label": "临沂高新技术产业开发区",
+ "value": "371371"
+ },
+ {
+ "label": "临沂经济技术开发区",
+ "value": "371372"
+ },
+ {
+ "label": "临沂临港经济开发区",
+ "value": "371373"
+ }
+ ],
+ [{
+ "label": "德城区",
+ "value": "371402"
+ },
+ {
+ "label": "陵城区",
+ "value": "371403"
+ },
+ {
+ "label": "宁津县",
+ "value": "371422"
+ },
+ {
+ "label": "庆云县",
+ "value": "371423"
+ },
+ {
+ "label": "临邑县",
+ "value": "371424"
+ },
+ {
+ "label": "齐河县",
+ "value": "371425"
+ },
+ {
+ "label": "平原县",
+ "value": "371426"
+ },
+ {
+ "label": "夏津县",
+ "value": "371427"
+ },
+ {
+ "label": "武城县",
+ "value": "371428"
+ },
+ {
+ "label": "德州经济技术开发区",
+ "value": "371471"
+ },
+ {
+ "label": "德州运河经济开发区",
+ "value": "371472"
+ },
+ {
+ "label": "乐陵市",
+ "value": "371481"
+ },
+ {
+ "label": "禹城市",
+ "value": "371482"
+ }
+ ],
+ [{
+ "label": "东昌府区",
+ "value": "371502"
+ },
+ {
+ "label": "阳谷县",
+ "value": "371521"
+ },
+ {
+ "label": "莘县",
+ "value": "371522"
+ },
+ {
+ "label": "茌平县",
+ "value": "371523"
+ },
+ {
+ "label": "东阿县",
+ "value": "371524"
+ },
+ {
+ "label": "冠县",
+ "value": "371525"
+ },
+ {
+ "label": "高唐县",
+ "value": "371526"
+ },
+ {
+ "label": "临清市",
+ "value": "371581"
+ }
+ ],
+ [{
+ "label": "滨城区",
+ "value": "371602"
+ },
+ {
+ "label": "沾化区",
+ "value": "371603"
+ },
+ {
+ "label": "惠民县",
+ "value": "371621"
+ },
+ {
+ "label": "阳信县",
+ "value": "371622"
+ },
+ {
+ "label": "无棣县",
+ "value": "371623"
+ },
+ {
+ "label": "博兴县",
+ "value": "371625"
+ },
+ {
+ "label": "邹平县",
+ "value": "371626"
+ }
+ ],
+ [{
+ "label": "牡丹区",
+ "value": "371702"
+ },
+ {
+ "label": "定陶区",
+ "value": "371703"
+ },
+ {
+ "label": "曹县",
+ "value": "371721"
+ },
+ {
+ "label": "单县",
+ "value": "371722"
+ },
+ {
+ "label": "成武县",
+ "value": "371723"
+ },
+ {
+ "label": "巨野县",
+ "value": "371724"
+ },
+ {
+ "label": "郓城县",
+ "value": "371725"
+ },
+ {
+ "label": "鄄城县",
+ "value": "371726"
+ },
+ {
+ "label": "东明县",
+ "value": "371728"
+ },
+ {
+ "label": "菏泽经济技术开发区",
+ "value": "371771"
+ },
+ {
+ "label": "菏泽高新技术开发区",
+ "value": "371772"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "中原区",
+ "value": "410102"
+ },
+ {
+ "label": "二七区",
+ "value": "410103"
+ },
+ {
+ "label": "管城回族区",
+ "value": "410104"
+ },
+ {
+ "label": "金水区",
+ "value": "410105"
+ },
+ {
+ "label": "上街区",
+ "value": "410106"
+ },
+ {
+ "label": "惠济区",
+ "value": "410108"
+ },
+ {
+ "label": "中牟县",
+ "value": "410122"
+ },
+ {
+ "label": "郑州经济技术开发区",
+ "value": "410171"
+ },
+ {
+ "label": "郑州高新技术产业开发区",
+ "value": "410172"
+ },
+ {
+ "label": "郑州航空港经济综合实验区",
+ "value": "410173"
+ },
+ {
+ "label": "巩义市",
+ "value": "410181"
+ },
+ {
+ "label": "荥阳市",
+ "value": "410182"
+ },
+ {
+ "label": "新密市",
+ "value": "410183"
+ },
+ {
+ "label": "新郑市",
+ "value": "410184"
+ },
+ {
+ "label": "登封市",
+ "value": "410185"
+ }
+ ],
+ [{
+ "label": "龙亭区",
+ "value": "410202"
+ },
+ {
+ "label": "顺河回族区",
+ "value": "410203"
+ },
+ {
+ "label": "鼓楼区",
+ "value": "410204"
+ },
+ {
+ "label": "禹王台区",
+ "value": "410205"
+ },
+ {
+ "label": "祥符区",
+ "value": "410212"
+ },
+ {
+ "label": "杞县",
+ "value": "410221"
+ },
+ {
+ "label": "通许县",
+ "value": "410222"
+ },
+ {
+ "label": "尉氏县",
+ "value": "410223"
+ },
+ {
+ "label": "兰考县",
+ "value": "410225"
+ }
+ ],
+ [{
+ "label": "老城区",
+ "value": "410302"
+ },
+ {
+ "label": "西工区",
+ "value": "410303"
+ },
+ {
+ "label": "瀍河回族区",
+ "value": "410304"
+ },
+ {
+ "label": "涧西区",
+ "value": "410305"
+ },
+ {
+ "label": "吉利区",
+ "value": "410306"
+ },
+ {
+ "label": "洛龙区",
+ "value": "410311"
+ },
+ {
+ "label": "孟津县",
+ "value": "410322"
+ },
+ {
+ "label": "新安县",
+ "value": "410323"
+ },
+ {
+ "label": "栾川县",
+ "value": "410324"
+ },
+ {
+ "label": "嵩县",
+ "value": "410325"
+ },
+ {
+ "label": "汝阳县",
+ "value": "410326"
+ },
+ {
+ "label": "宜阳县",
+ "value": "410327"
+ },
+ {
+ "label": "洛宁县",
+ "value": "410328"
+ },
+ {
+ "label": "伊川县",
+ "value": "410329"
+ },
+ {
+ "label": "洛阳高新技术产业开发区",
+ "value": "410371"
+ },
+ {
+ "label": "偃师市",
+ "value": "410381"
+ }
+ ],
+ [{
+ "label": "新华区",
+ "value": "410402"
+ },
+ {
+ "label": "卫东区",
+ "value": "410403"
+ },
+ {
+ "label": "石龙区",
+ "value": "410404"
+ },
+ {
+ "label": "湛河区",
+ "value": "410411"
+ },
+ {
+ "label": "宝丰县",
+ "value": "410421"
+ },
+ {
+ "label": "叶县",
+ "value": "410422"
+ },
+ {
+ "label": "鲁山县",
+ "value": "410423"
+ },
+ {
+ "label": "郏县",
+ "value": "410425"
+ },
+ {
+ "label": "平顶山高新技术产业开发区",
+ "value": "410471"
+ },
+ {
+ "label": "平顶山市新城区",
+ "value": "410472"
+ },
+ {
+ "label": "舞钢市",
+ "value": "410481"
+ },
+ {
+ "label": "汝州市",
+ "value": "410482"
+ }
+ ],
+ [{
+ "label": "文峰区",
+ "value": "410502"
+ },
+ {
+ "label": "北关区",
+ "value": "410503"
+ },
+ {
+ "label": "殷都区",
+ "value": "410505"
+ },
+ {
+ "label": "龙安区",
+ "value": "410506"
+ },
+ {
+ "label": "安阳县",
+ "value": "410522"
+ },
+ {
+ "label": "汤阴县",
+ "value": "410523"
+ },
+ {
+ "label": "滑县",
+ "value": "410526"
+ },
+ {
+ "label": "内黄县",
+ "value": "410527"
+ },
+ {
+ "label": "安阳高新技术产业开发区",
+ "value": "410571"
+ },
+ {
+ "label": "林州市",
+ "value": "410581"
+ }
+ ],
+ [{
+ "label": "鹤山区",
+ "value": "410602"
+ },
+ {
+ "label": "山城区",
+ "value": "410603"
+ },
+ {
+ "label": "淇滨区",
+ "value": "410611"
+ },
+ {
+ "label": "浚县",
+ "value": "410621"
+ },
+ {
+ "label": "淇县",
+ "value": "410622"
+ },
+ {
+ "label": "鹤壁经济技术开发区",
+ "value": "410671"
+ }
+ ],
+ [{
+ "label": "红旗区",
+ "value": "410702"
+ },
+ {
+ "label": "卫滨区",
+ "value": "410703"
+ },
+ {
+ "label": "凤泉区",
+ "value": "410704"
+ },
+ {
+ "label": "牧野区",
+ "value": "410711"
+ },
+ {
+ "label": "新乡县",
+ "value": "410721"
+ },
+ {
+ "label": "获嘉县",
+ "value": "410724"
+ },
+ {
+ "label": "原阳县",
+ "value": "410725"
+ },
+ {
+ "label": "延津县",
+ "value": "410726"
+ },
+ {
+ "label": "封丘县",
+ "value": "410727"
+ },
+ {
+ "label": "长垣县",
+ "value": "410728"
+ },
+ {
+ "label": "新乡高新技术产业开发区",
+ "value": "410771"
+ },
+ {
+ "label": "新乡经济技术开发区",
+ "value": "410772"
+ },
+ {
+ "label": "新乡市平原城乡一体化示范区",
+ "value": "410773"
+ },
+ {
+ "label": "卫辉市",
+ "value": "410781"
+ },
+ {
+ "label": "辉县市",
+ "value": "410782"
+ }
+ ],
+ [{
+ "label": "解放区",
+ "value": "410802"
+ },
+ {
+ "label": "中站区",
+ "value": "410803"
+ },
+ {
+ "label": "马村区",
+ "value": "410804"
+ },
+ {
+ "label": "山阳区",
+ "value": "410811"
+ },
+ {
+ "label": "修武县",
+ "value": "410821"
+ },
+ {
+ "label": "博爱县",
+ "value": "410822"
+ },
+ {
+ "label": "武陟县",
+ "value": "410823"
+ },
+ {
+ "label": "温县",
+ "value": "410825"
+ },
+ {
+ "label": "焦作城乡一体化示范区",
+ "value": "410871"
+ },
+ {
+ "label": "沁阳市",
+ "value": "410882"
+ },
+ {
+ "label": "孟州市",
+ "value": "410883"
+ }
+ ],
+ [{
+ "label": "华龙区",
+ "value": "410902"
+ },
+ {
+ "label": "清丰县",
+ "value": "410922"
+ },
+ {
+ "label": "南乐县",
+ "value": "410923"
+ },
+ {
+ "label": "范县",
+ "value": "410926"
+ },
+ {
+ "label": "台前县",
+ "value": "410927"
+ },
+ {
+ "label": "濮阳县",
+ "value": "410928"
+ },
+ {
+ "label": "河南濮阳工业园区",
+ "value": "410971"
+ },
+ {
+ "label": "濮阳经济技术开发区",
+ "value": "410972"
+ }
+ ],
+ [{
+ "label": "魏都区",
+ "value": "411002"
+ },
+ {
+ "label": "建安区",
+ "value": "411003"
+ },
+ {
+ "label": "鄢陵县",
+ "value": "411024"
+ },
+ {
+ "label": "襄城县",
+ "value": "411025"
+ },
+ {
+ "label": "许昌经济技术开发区",
+ "value": "411071"
+ },
+ {
+ "label": "禹州市",
+ "value": "411081"
+ },
+ {
+ "label": "长葛市",
+ "value": "411082"
+ }
+ ],
+ [{
+ "label": "源汇区",
+ "value": "411102"
+ },
+ {
+ "label": "郾城区",
+ "value": "411103"
+ },
+ {
+ "label": "召陵区",
+ "value": "411104"
+ },
+ {
+ "label": "舞阳县",
+ "value": "411121"
+ },
+ {
+ "label": "临颍县",
+ "value": "411122"
+ },
+ {
+ "label": "漯河经济技术开发区",
+ "value": "411171"
+ }
+ ],
+ [{
+ "label": "湖滨区",
+ "value": "411202"
+ },
+ {
+ "label": "陕州区",
+ "value": "411203"
+ },
+ {
+ "label": "渑池县",
+ "value": "411221"
+ },
+ {
+ "label": "卢氏县",
+ "value": "411224"
+ },
+ {
+ "label": "河南三门峡经济开发区",
+ "value": "411271"
+ },
+ {
+ "label": "义马市",
+ "value": "411281"
+ },
+ {
+ "label": "灵宝市",
+ "value": "411282"
+ }
+ ],
+ [{
+ "label": "宛城区",
+ "value": "411302"
+ },
+ {
+ "label": "卧龙区",
+ "value": "411303"
+ },
+ {
+ "label": "南召县",
+ "value": "411321"
+ },
+ {
+ "label": "方城县",
+ "value": "411322"
+ },
+ {
+ "label": "西峡县",
+ "value": "411323"
+ },
+ {
+ "label": "镇平县",
+ "value": "411324"
+ },
+ {
+ "label": "内乡县",
+ "value": "411325"
+ },
+ {
+ "label": "淅川县",
+ "value": "411326"
+ },
+ {
+ "label": "社旗县",
+ "value": "411327"
+ },
+ {
+ "label": "唐河县",
+ "value": "411328"
+ },
+ {
+ "label": "新野县",
+ "value": "411329"
+ },
+ {
+ "label": "桐柏县",
+ "value": "411330"
+ },
+ {
+ "label": "南阳高新技术产业开发区",
+ "value": "411371"
+ },
+ {
+ "label": "南阳市城乡一体化示范区",
+ "value": "411372"
+ },
+ {
+ "label": "邓州市",
+ "value": "411381"
+ }
+ ],
+ [{
+ "label": "梁园区",
+ "value": "411402"
+ },
+ {
+ "label": "睢阳区",
+ "value": "411403"
+ },
+ {
+ "label": "民权县",
+ "value": "411421"
+ },
+ {
+ "label": "睢县",
+ "value": "411422"
+ },
+ {
+ "label": "宁陵县",
+ "value": "411423"
+ },
+ {
+ "label": "柘城县",
+ "value": "411424"
+ },
+ {
+ "label": "虞城县",
+ "value": "411425"
+ },
+ {
+ "label": "夏邑县",
+ "value": "411426"
+ },
+ {
+ "label": "豫东综合物流产业聚集区",
+ "value": "411471"
+ },
+ {
+ "label": "河南商丘经济开发区",
+ "value": "411472"
+ },
+ {
+ "label": "永城市",
+ "value": "411481"
+ }
+ ],
+ [{
+ "label": "浉河区",
+ "value": "411502"
+ },
+ {
+ "label": "平桥区",
+ "value": "411503"
+ },
+ {
+ "label": "罗山县",
+ "value": "411521"
+ },
+ {
+ "label": "光山县",
+ "value": "411522"
+ },
+ {
+ "label": "新县",
+ "value": "411523"
+ },
+ {
+ "label": "商城县",
+ "value": "411524"
+ },
+ {
+ "label": "固始县",
+ "value": "411525"
+ },
+ {
+ "label": "潢川县",
+ "value": "411526"
+ },
+ {
+ "label": "淮滨县",
+ "value": "411527"
+ },
+ {
+ "label": "息县",
+ "value": "411528"
+ },
+ {
+ "label": "信阳高新技术产业开发区",
+ "value": "411571"
+ }
+ ],
+ [{
+ "label": "川汇区",
+ "value": "411602"
+ },
+ {
+ "label": "扶沟县",
+ "value": "411621"
+ },
+ {
+ "label": "西华县",
+ "value": "411622"
+ },
+ {
+ "label": "商水县",
+ "value": "411623"
+ },
+ {
+ "label": "沈丘县",
+ "value": "411624"
+ },
+ {
+ "label": "郸城县",
+ "value": "411625"
+ },
+ {
+ "label": "淮阳县",
+ "value": "411626"
+ },
+ {
+ "label": "太康县",
+ "value": "411627"
+ },
+ {
+ "label": "鹿邑县",
+ "value": "411628"
+ },
+ {
+ "label": "河南周口经济开发区",
+ "value": "411671"
+ },
+ {
+ "label": "项城市",
+ "value": "411681"
+ }
+ ],
+ [{
+ "label": "驿城区",
+ "value": "411702"
+ },
+ {
+ "label": "西平县",
+ "value": "411721"
+ },
+ {
+ "label": "上蔡县",
+ "value": "411722"
+ },
+ {
+ "label": "平舆县",
+ "value": "411723"
+ },
+ {
+ "label": "正阳县",
+ "value": "411724"
+ },
+ {
+ "label": "确山县",
+ "value": "411725"
+ },
+ {
+ "label": "泌阳县",
+ "value": "411726"
+ },
+ {
+ "label": "汝南县",
+ "value": "411727"
+ },
+ {
+ "label": "遂平县",
+ "value": "411728"
+ },
+ {
+ "label": "新蔡县",
+ "value": "411729"
+ },
+ {
+ "label": "河南驻马店经济开发区",
+ "value": "411771"
+ }
+ ],
+ [{
+ "label": "济源市",
+ "value": "419001"
+ }]
+ ],
+ [
+ [{
+ "label": "江岸区",
+ "value": "420102"
+ },
+ {
+ "label": "江汉区",
+ "value": "420103"
+ },
+ {
+ "label": "硚口区",
+ "value": "420104"
+ },
+ {
+ "label": "汉阳区",
+ "value": "420105"
+ },
+ {
+ "label": "武昌区",
+ "value": "420106"
+ },
+ {
+ "label": "青山区",
+ "value": "420107"
+ },
+ {
+ "label": "洪山区",
+ "value": "420111"
+ },
+ {
+ "label": "东西湖区",
+ "value": "420112"
+ },
+ {
+ "label": "汉南区",
+ "value": "420113"
+ },
+ {
+ "label": "蔡甸区",
+ "value": "420114"
+ },
+ {
+ "label": "江夏区",
+ "value": "420115"
+ },
+ {
+ "label": "黄陂区",
+ "value": "420116"
+ },
+ {
+ "label": "新洲区",
+ "value": "420117"
+ }
+ ],
+ [{
+ "label": "黄石港区",
+ "value": "420202"
+ },
+ {
+ "label": "西塞山区",
+ "value": "420203"
+ },
+ {
+ "label": "下陆区",
+ "value": "420204"
+ },
+ {
+ "label": "铁山区",
+ "value": "420205"
+ },
+ {
+ "label": "阳新县",
+ "value": "420222"
+ },
+ {
+ "label": "大冶市",
+ "value": "420281"
+ }
+ ],
+ [{
+ "label": "茅箭区",
+ "value": "420302"
+ },
+ {
+ "label": "张湾区",
+ "value": "420303"
+ },
+ {
+ "label": "郧阳区",
+ "value": "420304"
+ },
+ {
+ "label": "郧西县",
+ "value": "420322"
+ },
+ {
+ "label": "竹山县",
+ "value": "420323"
+ },
+ {
+ "label": "竹溪县",
+ "value": "420324"
+ },
+ {
+ "label": "房县",
+ "value": "420325"
+ },
+ {
+ "label": "丹江口市",
+ "value": "420381"
+ }
+ ],
+ [{
+ "label": "西陵区",
+ "value": "420502"
+ },
+ {
+ "label": "伍家岗区",
+ "value": "420503"
+ },
+ {
+ "label": "点军区",
+ "value": "420504"
+ },
+ {
+ "label": "猇亭区",
+ "value": "420505"
+ },
+ {
+ "label": "夷陵区",
+ "value": "420506"
+ },
+ {
+ "label": "远安县",
+ "value": "420525"
+ },
+ {
+ "label": "兴山县",
+ "value": "420526"
+ },
+ {
+ "label": "秭归县",
+ "value": "420527"
+ },
+ {
+ "label": "长阳土家族自治县",
+ "value": "420528"
+ },
+ {
+ "label": "五峰土家族自治县",
+ "value": "420529"
+ },
+ {
+ "label": "宜都市",
+ "value": "420581"
+ },
+ {
+ "label": "当阳市",
+ "value": "420582"
+ },
+ {
+ "label": "枝江市",
+ "value": "420583"
+ }
+ ],
+ [{
+ "label": "襄城区",
+ "value": "420602"
+ },
+ {
+ "label": "樊城区",
+ "value": "420606"
+ },
+ {
+ "label": "襄州区",
+ "value": "420607"
+ },
+ {
+ "label": "南漳县",
+ "value": "420624"
+ },
+ {
+ "label": "谷城县",
+ "value": "420625"
+ },
+ {
+ "label": "保康县",
+ "value": "420626"
+ },
+ {
+ "label": "老河口市",
+ "value": "420682"
+ },
+ {
+ "label": "枣阳市",
+ "value": "420683"
+ },
+ {
+ "label": "宜城市",
+ "value": "420684"
+ }
+ ],
+ [{
+ "label": "梁子湖区",
+ "value": "420702"
+ },
+ {
+ "label": "华容区",
+ "value": "420703"
+ },
+ {
+ "label": "鄂城区",
+ "value": "420704"
+ }
+ ],
+ [{
+ "label": "东宝区",
+ "value": "420802"
+ },
+ {
+ "label": "掇刀区",
+ "value": "420804"
+ },
+ {
+ "label": "京山县",
+ "value": "420821"
+ },
+ {
+ "label": "沙洋县",
+ "value": "420822"
+ },
+ {
+ "label": "钟祥市",
+ "value": "420881"
+ }
+ ],
+ [{
+ "label": "孝南区",
+ "value": "420902"
+ },
+ {
+ "label": "孝昌县",
+ "value": "420921"
+ },
+ {
+ "label": "大悟县",
+ "value": "420922"
+ },
+ {
+ "label": "云梦县",
+ "value": "420923"
+ },
+ {
+ "label": "应城市",
+ "value": "420981"
+ },
+ {
+ "label": "安陆市",
+ "value": "420982"
+ },
+ {
+ "label": "汉川市",
+ "value": "420984"
+ }
+ ],
+ [{
+ "label": "沙市区",
+ "value": "421002"
+ },
+ {
+ "label": "荆州区",
+ "value": "421003"
+ },
+ {
+ "label": "公安县",
+ "value": "421022"
+ },
+ {
+ "label": "监利县",
+ "value": "421023"
+ },
+ {
+ "label": "江陵县",
+ "value": "421024"
+ },
+ {
+ "label": "荆州经济技术开发区",
+ "value": "421071"
+ },
+ {
+ "label": "石首市",
+ "value": "421081"
+ },
+ {
+ "label": "洪湖市",
+ "value": "421083"
+ },
+ {
+ "label": "松滋市",
+ "value": "421087"
+ }
+ ],
+ [{
+ "label": "黄州区",
+ "value": "421102"
+ },
+ {
+ "label": "团风县",
+ "value": "421121"
+ },
+ {
+ "label": "红安县",
+ "value": "421122"
+ },
+ {
+ "label": "罗田县",
+ "value": "421123"
+ },
+ {
+ "label": "英山县",
+ "value": "421124"
+ },
+ {
+ "label": "浠水县",
+ "value": "421125"
+ },
+ {
+ "label": "蕲春县",
+ "value": "421126"
+ },
+ {
+ "label": "黄梅县",
+ "value": "421127"
+ },
+ {
+ "label": "龙感湖管理区",
+ "value": "421171"
+ },
+ {
+ "label": "麻城市",
+ "value": "421181"
+ },
+ {
+ "label": "武穴市",
+ "value": "421182"
+ }
+ ],
+ [{
+ "label": "咸安区",
+ "value": "421202"
+ },
+ {
+ "label": "嘉鱼县",
+ "value": "421221"
+ },
+ {
+ "label": "通城县",
+ "value": "421222"
+ },
+ {
+ "label": "崇阳县",
+ "value": "421223"
+ },
+ {
+ "label": "通山县",
+ "value": "421224"
+ },
+ {
+ "label": "赤壁市",
+ "value": "421281"
+ }
+ ],
+ [{
+ "label": "曾都区",
+ "value": "421303"
+ },
+ {
+ "label": "随县",
+ "value": "421321"
+ },
+ {
+ "label": "广水市",
+ "value": "421381"
+ }
+ ],
+ [{
+ "label": "恩施市",
+ "value": "422801"
+ },
+ {
+ "label": "利川市",
+ "value": "422802"
+ },
+ {
+ "label": "建始县",
+ "value": "422822"
+ },
+ {
+ "label": "巴东县",
+ "value": "422823"
+ },
+ {
+ "label": "宣恩县",
+ "value": "422825"
+ },
+ {
+ "label": "咸丰县",
+ "value": "422826"
+ },
+ {
+ "label": "来凤县",
+ "value": "422827"
+ },
+ {
+ "label": "鹤峰县",
+ "value": "422828"
+ }
+ ],
+ [{
+ "label": "仙桃市",
+ "value": "429004"
+ },
+ {
+ "label": "潜江市",
+ "value": "429005"
+ },
+ {
+ "label": "天门市",
+ "value": "429006"
+ },
+ {
+ "label": "神农架林区",
+ "value": "429021"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "芙蓉区",
+ "value": "430102"
+ },
+ {
+ "label": "天心区",
+ "value": "430103"
+ },
+ {
+ "label": "岳麓区",
+ "value": "430104"
+ },
+ {
+ "label": "开福区",
+ "value": "430105"
+ },
+ {
+ "label": "雨花区",
+ "value": "430111"
+ },
+ {
+ "label": "望城区",
+ "value": "430112"
+ },
+ {
+ "label": "长沙县",
+ "value": "430121"
+ },
+ {
+ "label": "浏阳市",
+ "value": "430181"
+ },
+ {
+ "label": "宁乡市",
+ "value": "430182"
+ }
+ ],
+ [{
+ "label": "荷塘区",
+ "value": "430202"
+ },
+ {
+ "label": "芦淞区",
+ "value": "430203"
+ },
+ {
+ "label": "石峰区",
+ "value": "430204"
+ },
+ {
+ "label": "天元区",
+ "value": "430211"
+ },
+ {
+ "label": "株洲县",
+ "value": "430221"
+ },
+ {
+ "label": "攸县",
+ "value": "430223"
+ },
+ {
+ "label": "茶陵县",
+ "value": "430224"
+ },
+ {
+ "label": "炎陵县",
+ "value": "430225"
+ },
+ {
+ "label": "云龙示范区",
+ "value": "430271"
+ },
+ {
+ "label": "醴陵市",
+ "value": "430281"
+ }
+ ],
+ [{
+ "label": "雨湖区",
+ "value": "430302"
+ },
+ {
+ "label": "岳塘区",
+ "value": "430304"
+ },
+ {
+ "label": "湘潭县",
+ "value": "430321"
+ },
+ {
+ "label": "湖南湘潭高新技术产业园区",
+ "value": "430371"
+ },
+ {
+ "label": "湘潭昭山示范区",
+ "value": "430372"
+ },
+ {
+ "label": "湘潭九华示范区",
+ "value": "430373"
+ },
+ {
+ "label": "湘乡市",
+ "value": "430381"
+ },
+ {
+ "label": "韶山市",
+ "value": "430382"
+ }
+ ],
+ [{
+ "label": "珠晖区",
+ "value": "430405"
+ },
+ {
+ "label": "雁峰区",
+ "value": "430406"
+ },
+ {
+ "label": "石鼓区",
+ "value": "430407"
+ },
+ {
+ "label": "蒸湘区",
+ "value": "430408"
+ },
+ {
+ "label": "南岳区",
+ "value": "430412"
+ },
+ {
+ "label": "衡阳县",
+ "value": "430421"
+ },
+ {
+ "label": "衡南县",
+ "value": "430422"
+ },
+ {
+ "label": "衡山县",
+ "value": "430423"
+ },
+ {
+ "label": "衡东县",
+ "value": "430424"
+ },
+ {
+ "label": "祁东县",
+ "value": "430426"
+ },
+ {
+ "label": "衡阳综合保税区",
+ "value": "430471"
+ },
+ {
+ "label": "湖南衡阳高新技术产业园区",
+ "value": "430472"
+ },
+ {
+ "label": "湖南衡阳松木经济开发区",
+ "value": "430473"
+ },
+ {
+ "label": "耒阳市",
+ "value": "430481"
+ },
+ {
+ "label": "常宁市",
+ "value": "430482"
+ }
+ ],
+ [{
+ "label": "双清区",
+ "value": "430502"
+ },
+ {
+ "label": "大祥区",
+ "value": "430503"
+ },
+ {
+ "label": "北塔区",
+ "value": "430511"
+ },
+ {
+ "label": "邵东县",
+ "value": "430521"
+ },
+ {
+ "label": "新邵县",
+ "value": "430522"
+ },
+ {
+ "label": "邵阳县",
+ "value": "430523"
+ },
+ {
+ "label": "隆回县",
+ "value": "430524"
+ },
+ {
+ "label": "洞口县",
+ "value": "430525"
+ },
+ {
+ "label": "绥宁县",
+ "value": "430527"
+ },
+ {
+ "label": "新宁县",
+ "value": "430528"
+ },
+ {
+ "label": "城步苗族自治县",
+ "value": "430529"
+ },
+ {
+ "label": "武冈市",
+ "value": "430581"
+ }
+ ],
+ [{
+ "label": "岳阳楼区",
+ "value": "430602"
+ },
+ {
+ "label": "云溪区",
+ "value": "430603"
+ },
+ {
+ "label": "君山区",
+ "value": "430611"
+ },
+ {
+ "label": "岳阳县",
+ "value": "430621"
+ },
+ {
+ "label": "华容县",
+ "value": "430623"
+ },
+ {
+ "label": "湘阴县",
+ "value": "430624"
+ },
+ {
+ "label": "平江县",
+ "value": "430626"
+ },
+ {
+ "label": "岳阳市屈原管理区",
+ "value": "430671"
+ },
+ {
+ "label": "汨罗市",
+ "value": "430681"
+ },
+ {
+ "label": "临湘市",
+ "value": "430682"
+ }
+ ],
+ [{
+ "label": "武陵区",
+ "value": "430702"
+ },
+ {
+ "label": "鼎城区",
+ "value": "430703"
+ },
+ {
+ "label": "安乡县",
+ "value": "430721"
+ },
+ {
+ "label": "汉寿县",
+ "value": "430722"
+ },
+ {
+ "label": "澧县",
+ "value": "430723"
+ },
+ {
+ "label": "临澧县",
+ "value": "430724"
+ },
+ {
+ "label": "桃源县",
+ "value": "430725"
+ },
+ {
+ "label": "石门县",
+ "value": "430726"
+ },
+ {
+ "label": "常德市西洞庭管理区",
+ "value": "430771"
+ },
+ {
+ "label": "津市市",
+ "value": "430781"
+ }
+ ],
+ [{
+ "label": "永定区",
+ "value": "430802"
+ },
+ {
+ "label": "武陵源区",
+ "value": "430811"
+ },
+ {
+ "label": "慈利县",
+ "value": "430821"
+ },
+ {
+ "label": "桑植县",
+ "value": "430822"
+ }
+ ],
+ [{
+ "label": "资阳区",
+ "value": "430902"
+ },
+ {
+ "label": "赫山区",
+ "value": "430903"
+ },
+ {
+ "label": "南县",
+ "value": "430921"
+ },
+ {
+ "label": "桃江县",
+ "value": "430922"
+ },
+ {
+ "label": "安化县",
+ "value": "430923"
+ },
+ {
+ "label": "益阳市大通湖管理区",
+ "value": "430971"
+ },
+ {
+ "label": "湖南益阳高新技术产业园区",
+ "value": "430972"
+ },
+ {
+ "label": "沅江市",
+ "value": "430981"
+ }
+ ],
+ [{
+ "label": "北湖区",
+ "value": "431002"
+ },
+ {
+ "label": "苏仙区",
+ "value": "431003"
+ },
+ {
+ "label": "桂阳县",
+ "value": "431021"
+ },
+ {
+ "label": "宜章县",
+ "value": "431022"
+ },
+ {
+ "label": "永兴县",
+ "value": "431023"
+ },
+ {
+ "label": "嘉禾县",
+ "value": "431024"
+ },
+ {
+ "label": "临武县",
+ "value": "431025"
+ },
+ {
+ "label": "汝城县",
+ "value": "431026"
+ },
+ {
+ "label": "桂东县",
+ "value": "431027"
+ },
+ {
+ "label": "安仁县",
+ "value": "431028"
+ },
+ {
+ "label": "资兴市",
+ "value": "431081"
+ }
+ ],
+ [{
+ "label": "零陵区",
+ "value": "431102"
+ },
+ {
+ "label": "冷水滩区",
+ "value": "431103"
+ },
+ {
+ "label": "祁阳县",
+ "value": "431121"
+ },
+ {
+ "label": "东安县",
+ "value": "431122"
+ },
+ {
+ "label": "双牌县",
+ "value": "431123"
+ },
+ {
+ "label": "道县",
+ "value": "431124"
+ },
+ {
+ "label": "江永县",
+ "value": "431125"
+ },
+ {
+ "label": "宁远县",
+ "value": "431126"
+ },
+ {
+ "label": "蓝山县",
+ "value": "431127"
+ },
+ {
+ "label": "新田县",
+ "value": "431128"
+ },
+ {
+ "label": "江华瑶族自治县",
+ "value": "431129"
+ },
+ {
+ "label": "永州经济技术开发区",
+ "value": "431171"
+ },
+ {
+ "label": "永州市金洞管理区",
+ "value": "431172"
+ },
+ {
+ "label": "永州市回龙圩管理区",
+ "value": "431173"
+ }
+ ],
+ [{
+ "label": "鹤城区",
+ "value": "431202"
+ },
+ {
+ "label": "中方县",
+ "value": "431221"
+ },
+ {
+ "label": "沅陵县",
+ "value": "431222"
+ },
+ {
+ "label": "辰溪县",
+ "value": "431223"
+ },
+ {
+ "label": "溆浦县",
+ "value": "431224"
+ },
+ {
+ "label": "会同县",
+ "value": "431225"
+ },
+ {
+ "label": "麻阳苗族自治县",
+ "value": "431226"
+ },
+ {
+ "label": "新晃侗族自治县",
+ "value": "431227"
+ },
+ {
+ "label": "芷江侗族自治县",
+ "value": "431228"
+ },
+ {
+ "label": "靖州苗族侗族自治县",
+ "value": "431229"
+ },
+ {
+ "label": "通道侗族自治县",
+ "value": "431230"
+ },
+ {
+ "label": "怀化市洪江管理区",
+ "value": "431271"
+ },
+ {
+ "label": "洪江市",
+ "value": "431281"
+ }
+ ],
+ [{
+ "label": "娄星区",
+ "value": "431302"
+ },
+ {
+ "label": "双峰县",
+ "value": "431321"
+ },
+ {
+ "label": "新化县",
+ "value": "431322"
+ },
+ {
+ "label": "冷水江市",
+ "value": "431381"
+ },
+ {
+ "label": "涟源市",
+ "value": "431382"
+ }
+ ],
+ [{
+ "label": "吉首市",
+ "value": "433101"
+ },
+ {
+ "label": "泸溪县",
+ "value": "433122"
+ },
+ {
+ "label": "凤凰县",
+ "value": "433123"
+ },
+ {
+ "label": "花垣县",
+ "value": "433124"
+ },
+ {
+ "label": "保靖县",
+ "value": "433125"
+ },
+ {
+ "label": "古丈县",
+ "value": "433126"
+ },
+ {
+ "label": "永顺县",
+ "value": "433127"
+ },
+ {
+ "label": "龙山县",
+ "value": "433130"
+ },
+ {
+ "label": "湖南吉首经济开发区",
+ "value": "433172"
+ },
+ {
+ "label": "湖南永顺经济开发区",
+ "value": "433173"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "荔湾区",
+ "value": "440103"
+ },
+ {
+ "label": "越秀区",
+ "value": "440104"
+ },
+ {
+ "label": "海珠区",
+ "value": "440105"
+ },
+ {
+ "label": "天河区",
+ "value": "440106"
+ },
+ {
+ "label": "白云区",
+ "value": "440111"
+ },
+ {
+ "label": "黄埔区",
+ "value": "440112"
+ },
+ {
+ "label": "番禺区",
+ "value": "440113"
+ },
+ {
+ "label": "花都区",
+ "value": "440114"
+ },
+ {
+ "label": "南沙区",
+ "value": "440115"
+ },
+ {
+ "label": "从化区",
+ "value": "440117"
+ },
+ {
+ "label": "增城区",
+ "value": "440118"
+ }
+ ],
+ [{
+ "label": "武江区",
+ "value": "440203"
+ },
+ {
+ "label": "浈江区",
+ "value": "440204"
+ },
+ {
+ "label": "曲江区",
+ "value": "440205"
+ },
+ {
+ "label": "始兴县",
+ "value": "440222"
+ },
+ {
+ "label": "仁化县",
+ "value": "440224"
+ },
+ {
+ "label": "翁源县",
+ "value": "440229"
+ },
+ {
+ "label": "乳源瑶族自治县",
+ "value": "440232"
+ },
+ {
+ "label": "新丰县",
+ "value": "440233"
+ },
+ {
+ "label": "乐昌市",
+ "value": "440281"
+ },
+ {
+ "label": "南雄市",
+ "value": "440282"
+ }
+ ],
+ [{
+ "label": "罗湖区",
+ "value": "440303"
+ },
+ {
+ "label": "福田区",
+ "value": "440304"
+ },
+ {
+ "label": "南山区",
+ "value": "440305"
+ },
+ {
+ "label": "宝安区",
+ "value": "440306"
+ },
+ {
+ "label": "龙岗区",
+ "value": "440307"
+ },
+ {
+ "label": "盐田区",
+ "value": "440308"
+ },
+ {
+ "label": "龙华区",
+ "value": "440309"
+ },
+ {
+ "label": "坪山区",
+ "value": "440310"
+ }
+ ],
+ [{
+ "label": "香洲区",
+ "value": "440402"
+ },
+ {
+ "label": "斗门区",
+ "value": "440403"
+ },
+ {
+ "label": "金湾区",
+ "value": "440404"
+ }
+ ],
+ [{
+ "label": "龙湖区",
+ "value": "440507"
+ },
+ {
+ "label": "金平区",
+ "value": "440511"
+ },
+ {
+ "label": "濠江区",
+ "value": "440512"
+ },
+ {
+ "label": "潮阳区",
+ "value": "440513"
+ },
+ {
+ "label": "潮南区",
+ "value": "440514"
+ },
+ {
+ "label": "澄海区",
+ "value": "440515"
+ },
+ {
+ "label": "南澳县",
+ "value": "440523"
+ }
+ ],
+ [{
+ "label": "禅城区",
+ "value": "440604"
+ },
+ {
+ "label": "南海区",
+ "value": "440605"
+ },
+ {
+ "label": "顺德区",
+ "value": "440606"
+ },
+ {
+ "label": "三水区",
+ "value": "440607"
+ },
+ {
+ "label": "高明区",
+ "value": "440608"
+ }
+ ],
+ [{
+ "label": "蓬江区",
+ "value": "440703"
+ },
+ {
+ "label": "江海区",
+ "value": "440704"
+ },
+ {
+ "label": "新会区",
+ "value": "440705"
+ },
+ {
+ "label": "台山市",
+ "value": "440781"
+ },
+ {
+ "label": "开平市",
+ "value": "440783"
+ },
+ {
+ "label": "鹤山市",
+ "value": "440784"
+ },
+ {
+ "label": "恩平市",
+ "value": "440785"
+ }
+ ],
+ [{
+ "label": "赤坎区",
+ "value": "440802"
+ },
+ {
+ "label": "霞山区",
+ "value": "440803"
+ },
+ {
+ "label": "坡头区",
+ "value": "440804"
+ },
+ {
+ "label": "麻章区",
+ "value": "440811"
+ },
+ {
+ "label": "遂溪县",
+ "value": "440823"
+ },
+ {
+ "label": "徐闻县",
+ "value": "440825"
+ },
+ {
+ "label": "廉江市",
+ "value": "440881"
+ },
+ {
+ "label": "雷州市",
+ "value": "440882"
+ },
+ {
+ "label": "吴川市",
+ "value": "440883"
+ }
+ ],
+ [{
+ "label": "茂南区",
+ "value": "440902"
+ },
+ {
+ "label": "电白区",
+ "value": "440904"
+ },
+ {
+ "label": "高州市",
+ "value": "440981"
+ },
+ {
+ "label": "化州市",
+ "value": "440982"
+ },
+ {
+ "label": "信宜市",
+ "value": "440983"
+ }
+ ],
+ [{
+ "label": "端州区",
+ "value": "441202"
+ },
+ {
+ "label": "鼎湖区",
+ "value": "441203"
+ },
+ {
+ "label": "高要区",
+ "value": "441204"
+ },
+ {
+ "label": "广宁县",
+ "value": "441223"
+ },
+ {
+ "label": "怀集县",
+ "value": "441224"
+ },
+ {
+ "label": "封开县",
+ "value": "441225"
+ },
+ {
+ "label": "德庆县",
+ "value": "441226"
+ },
+ {
+ "label": "四会市",
+ "value": "441284"
+ }
+ ],
+ [{
+ "label": "惠城区",
+ "value": "441302"
+ },
+ {
+ "label": "惠阳区",
+ "value": "441303"
+ },
+ {
+ "label": "博罗县",
+ "value": "441322"
+ },
+ {
+ "label": "惠东县",
+ "value": "441323"
+ },
+ {
+ "label": "龙门县",
+ "value": "441324"
+ }
+ ],
+ [{
+ "label": "梅江区",
+ "value": "441402"
+ },
+ {
+ "label": "梅县区",
+ "value": "441403"
+ },
+ {
+ "label": "大埔县",
+ "value": "441422"
+ },
+ {
+ "label": "丰顺县",
+ "value": "441423"
+ },
+ {
+ "label": "五华县",
+ "value": "441424"
+ },
+ {
+ "label": "平远县",
+ "value": "441426"
+ },
+ {
+ "label": "蕉岭县",
+ "value": "441427"
+ },
+ {
+ "label": "兴宁市",
+ "value": "441481"
+ }
+ ],
+ [{
+ "label": "城区",
+ "value": "441502"
+ },
+ {
+ "label": "海丰县",
+ "value": "441521"
+ },
+ {
+ "label": "陆河县",
+ "value": "441523"
+ },
+ {
+ "label": "陆丰市",
+ "value": "441581"
+ }
+ ],
+ [{
+ "label": "源城区",
+ "value": "441602"
+ },
+ {
+ "label": "紫金县",
+ "value": "441621"
+ },
+ {
+ "label": "龙川县",
+ "value": "441622"
+ },
+ {
+ "label": "连平县",
+ "value": "441623"
+ },
+ {
+ "label": "和平县",
+ "value": "441624"
+ },
+ {
+ "label": "东源县",
+ "value": "441625"
+ }
+ ],
+ [{
+ "label": "江城区",
+ "value": "441702"
+ },
+ {
+ "label": "阳东区",
+ "value": "441704"
+ },
+ {
+ "label": "阳西县",
+ "value": "441721"
+ },
+ {
+ "label": "阳春市",
+ "value": "441781"
+ }
+ ],
+ [{
+ "label": "清城区",
+ "value": "441802"
+ },
+ {
+ "label": "清新区",
+ "value": "441803"
+ },
+ {
+ "label": "佛冈县",
+ "value": "441821"
+ },
+ {
+ "label": "阳山县",
+ "value": "441823"
+ },
+ {
+ "label": "连山壮族瑶族自治县",
+ "value": "441825"
+ },
+ {
+ "label": "连南瑶族自治县",
+ "value": "441826"
+ },
+ {
+ "label": "英德市",
+ "value": "441881"
+ },
+ {
+ "label": "连州市",
+ "value": "441882"
+ }
+ ],
+ [{
+ "label": "东莞市",
+ "value": "441900"
+ }],
+ [{
+ "label": "中山市",
+ "value": "442000"
+ }],
+ [{
+ "label": "湘桥区",
+ "value": "445102"
+ },
+ {
+ "label": "潮安区",
+ "value": "445103"
+ },
+ {
+ "label": "饶平县",
+ "value": "445122"
+ }
+ ],
+ [{
+ "label": "榕城区",
+ "value": "445202"
+ },
+ {
+ "label": "揭东区",
+ "value": "445203"
+ },
+ {
+ "label": "揭西县",
+ "value": "445222"
+ },
+ {
+ "label": "惠来县",
+ "value": "445224"
+ },
+ {
+ "label": "普宁市",
+ "value": "445281"
+ }
+ ],
+ [{
+ "label": "云城区",
+ "value": "445302"
+ },
+ {
+ "label": "云安区",
+ "value": "445303"
+ },
+ {
+ "label": "新兴县",
+ "value": "445321"
+ },
+ {
+ "label": "郁南县",
+ "value": "445322"
+ },
+ {
+ "label": "罗定市",
+ "value": "445381"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "兴宁区",
+ "value": "450102"
+ },
+ {
+ "label": "青秀区",
+ "value": "450103"
+ },
+ {
+ "label": "江南区",
+ "value": "450105"
+ },
+ {
+ "label": "西乡塘区",
+ "value": "450107"
+ },
+ {
+ "label": "良庆区",
+ "value": "450108"
+ },
+ {
+ "label": "邕宁区",
+ "value": "450109"
+ },
+ {
+ "label": "武鸣区",
+ "value": "450110"
+ },
+ {
+ "label": "隆安县",
+ "value": "450123"
+ },
+ {
+ "label": "马山县",
+ "value": "450124"
+ },
+ {
+ "label": "上林县",
+ "value": "450125"
+ },
+ {
+ "label": "宾阳县",
+ "value": "450126"
+ },
+ {
+ "label": "横县",
+ "value": "450127"
+ }
+ ],
+ [{
+ "label": "城中区",
+ "value": "450202"
+ },
+ {
+ "label": "鱼峰区",
+ "value": "450203"
+ },
+ {
+ "label": "柳南区",
+ "value": "450204"
+ },
+ {
+ "label": "柳北区",
+ "value": "450205"
+ },
+ {
+ "label": "柳江区",
+ "value": "450206"
+ },
+ {
+ "label": "柳城县",
+ "value": "450222"
+ },
+ {
+ "label": "鹿寨县",
+ "value": "450223"
+ },
+ {
+ "label": "融安县",
+ "value": "450224"
+ },
+ {
+ "label": "融水苗族自治县",
+ "value": "450225"
+ },
+ {
+ "label": "三江侗族自治县",
+ "value": "450226"
+ }
+ ],
+ [{
+ "label": "秀峰区",
+ "value": "450302"
+ },
+ {
+ "label": "叠彩区",
+ "value": "450303"
+ },
+ {
+ "label": "象山区",
+ "value": "450304"
+ },
+ {
+ "label": "七星区",
+ "value": "450305"
+ },
+ {
+ "label": "雁山区",
+ "value": "450311"
+ },
+ {
+ "label": "临桂区",
+ "value": "450312"
+ },
+ {
+ "label": "阳朔县",
+ "value": "450321"
+ },
+ {
+ "label": "灵川县",
+ "value": "450323"
+ },
+ {
+ "label": "全州县",
+ "value": "450324"
+ },
+ {
+ "label": "兴安县",
+ "value": "450325"
+ },
+ {
+ "label": "永福县",
+ "value": "450326"
+ },
+ {
+ "label": "灌阳县",
+ "value": "450327"
+ },
+ {
+ "label": "龙胜各族自治县",
+ "value": "450328"
+ },
+ {
+ "label": "资源县",
+ "value": "450329"
+ },
+ {
+ "label": "平乐县",
+ "value": "450330"
+ },
+ {
+ "label": "荔浦县",
+ "value": "450331"
+ },
+ {
+ "label": "恭城瑶族自治县",
+ "value": "450332"
+ }
+ ],
+ [{
+ "label": "万秀区",
+ "value": "450403"
+ },
+ {
+ "label": "长洲区",
+ "value": "450405"
+ },
+ {
+ "label": "龙圩区",
+ "value": "450406"
+ },
+ {
+ "label": "苍梧县",
+ "value": "450421"
+ },
+ {
+ "label": "藤县",
+ "value": "450422"
+ },
+ {
+ "label": "蒙山县",
+ "value": "450423"
+ },
+ {
+ "label": "岑溪市",
+ "value": "450481"
+ }
+ ],
+ [{
+ "label": "海城区",
+ "value": "450502"
+ },
+ {
+ "label": "银海区",
+ "value": "450503"
+ },
+ {
+ "label": "铁山港区",
+ "value": "450512"
+ },
+ {
+ "label": "合浦县",
+ "value": "450521"
+ }
+ ],
+ [{
+ "label": "港口区",
+ "value": "450602"
+ },
+ {
+ "label": "防城区",
+ "value": "450603"
+ },
+ {
+ "label": "上思县",
+ "value": "450621"
+ },
+ {
+ "label": "东兴市",
+ "value": "450681"
+ }
+ ],
+ [{
+ "label": "钦南区",
+ "value": "450702"
+ },
+ {
+ "label": "钦北区",
+ "value": "450703"
+ },
+ {
+ "label": "灵山县",
+ "value": "450721"
+ },
+ {
+ "label": "浦北县",
+ "value": "450722"
+ }
+ ],
+ [{
+ "label": "港北区",
+ "value": "450802"
+ },
+ {
+ "label": "港南区",
+ "value": "450803"
+ },
+ {
+ "label": "覃塘区",
+ "value": "450804"
+ },
+ {
+ "label": "平南县",
+ "value": "450821"
+ },
+ {
+ "label": "桂平市",
+ "value": "450881"
+ }
+ ],
+ [{
+ "label": "玉州区",
+ "value": "450902"
+ },
+ {
+ "label": "福绵区",
+ "value": "450903"
+ },
+ {
+ "label": "容县",
+ "value": "450921"
+ },
+ {
+ "label": "陆川县",
+ "value": "450922"
+ },
+ {
+ "label": "博白县",
+ "value": "450923"
+ },
+ {
+ "label": "兴业县",
+ "value": "450924"
+ },
+ {
+ "label": "北流市",
+ "value": "450981"
+ }
+ ],
+ [{
+ "label": "右江区",
+ "value": "451002"
+ },
+ {
+ "label": "田阳县",
+ "value": "451021"
+ },
+ {
+ "label": "田东县",
+ "value": "451022"
+ },
+ {
+ "label": "平果县",
+ "value": "451023"
+ },
+ {
+ "label": "德保县",
+ "value": "451024"
+ },
+ {
+ "label": "那坡县",
+ "value": "451026"
+ },
+ {
+ "label": "凌云县",
+ "value": "451027"
+ },
+ {
+ "label": "乐业县",
+ "value": "451028"
+ },
+ {
+ "label": "田林县",
+ "value": "451029"
+ },
+ {
+ "label": "西林县",
+ "value": "451030"
+ },
+ {
+ "label": "隆林各族自治县",
+ "value": "451031"
+ },
+ {
+ "label": "靖西市",
+ "value": "451081"
+ }
+ ],
+ [{
+ "label": "八步区",
+ "value": "451102"
+ },
+ {
+ "label": "平桂区",
+ "value": "451103"
+ },
+ {
+ "label": "昭平县",
+ "value": "451121"
+ },
+ {
+ "label": "钟山县",
+ "value": "451122"
+ },
+ {
+ "label": "富川瑶族自治县",
+ "value": "451123"
+ }
+ ],
+ [{
+ "label": "金城江区",
+ "value": "451202"
+ },
+ {
+ "label": "宜州区",
+ "value": "451203"
+ },
+ {
+ "label": "南丹县",
+ "value": "451221"
+ },
+ {
+ "label": "天峨县",
+ "value": "451222"
+ },
+ {
+ "label": "凤山县",
+ "value": "451223"
+ },
+ {
+ "label": "东兰县",
+ "value": "451224"
+ },
+ {
+ "label": "罗城仫佬族自治县",
+ "value": "451225"
+ },
+ {
+ "label": "环江毛南族自治县",
+ "value": "451226"
+ },
+ {
+ "label": "巴马瑶族自治县",
+ "value": "451227"
+ },
+ {
+ "label": "都安瑶族自治县",
+ "value": "451228"
+ },
+ {
+ "label": "大化瑶族自治县",
+ "value": "451229"
+ }
+ ],
+ [{
+ "label": "兴宾区",
+ "value": "451302"
+ },
+ {
+ "label": "忻城县",
+ "value": "451321"
+ },
+ {
+ "label": "象州县",
+ "value": "451322"
+ },
+ {
+ "label": "武宣县",
+ "value": "451323"
+ },
+ {
+ "label": "金秀瑶族自治县",
+ "value": "451324"
+ },
+ {
+ "label": "合山市",
+ "value": "451381"
+ }
+ ],
+ [{
+ "label": "江州区",
+ "value": "451402"
+ },
+ {
+ "label": "扶绥县",
+ "value": "451421"
+ },
+ {
+ "label": "宁明县",
+ "value": "451422"
+ },
+ {
+ "label": "龙州县",
+ "value": "451423"
+ },
+ {
+ "label": "大新县",
+ "value": "451424"
+ },
+ {
+ "label": "天等县",
+ "value": "451425"
+ },
+ {
+ "label": "凭祥市",
+ "value": "451481"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "秀英区",
+ "value": "460105"
+ },
+ {
+ "label": "龙华区",
+ "value": "460106"
+ },
+ {
+ "label": "琼山区",
+ "value": "460107"
+ },
+ {
+ "label": "美兰区",
+ "value": "460108"
+ }
+ ],
+ [{
+ "label": "海棠区",
+ "value": "460202"
+ },
+ {
+ "label": "吉阳区",
+ "value": "460203"
+ },
+ {
+ "label": "天涯区",
+ "value": "460204"
+ },
+ {
+ "label": "崖州区",
+ "value": "460205"
+ }
+ ],
+ [{
+ "label": "西沙群岛",
+ "value": "460321"
+ },
+ {
+ "label": "南沙群岛",
+ "value": "460322"
+ },
+ {
+ "label": "中沙群岛的岛礁及其海域",
+ "value": "460323"
+ }
+ ],
+ [{
+ "label": "儋州市",
+ "value": "460400"
+ }],
+ [{
+ "label": "五指山市",
+ "value": "469001"
+ },
+ {
+ "label": "琼海市",
+ "value": "469002"
+ },
+ {
+ "label": "文昌市",
+ "value": "469005"
+ },
+ {
+ "label": "万宁市",
+ "value": "469006"
+ },
+ {
+ "label": "东方市",
+ "value": "469007"
+ },
+ {
+ "label": "定安县",
+ "value": "469021"
+ },
+ {
+ "label": "屯昌县",
+ "value": "469022"
+ },
+ {
+ "label": "澄迈县",
+ "value": "469023"
+ },
+ {
+ "label": "临高县",
+ "value": "469024"
+ },
+ {
+ "label": "白沙黎族自治县",
+ "value": "469025"
+ },
+ {
+ "label": "昌江黎族自治县",
+ "value": "469026"
+ },
+ {
+ "label": "乐东黎族自治县",
+ "value": "469027"
+ },
+ {
+ "label": "陵水黎族自治县",
+ "value": "469028"
+ },
+ {
+ "label": "保亭黎族苗族自治县",
+ "value": "469029"
+ },
+ {
+ "label": "琼中黎族苗族自治县",
+ "value": "469030"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "万州区",
+ "value": "500101"
+ },
+ {
+ "label": "涪陵区",
+ "value": "500102"
+ },
+ {
+ "label": "渝中区",
+ "value": "500103"
+ },
+ {
+ "label": "大渡口区",
+ "value": "500104"
+ },
+ {
+ "label": "江北区",
+ "value": "500105"
+ },
+ {
+ "label": "沙坪坝区",
+ "value": "500106"
+ },
+ {
+ "label": "九龙坡区",
+ "value": "500107"
+ },
+ {
+ "label": "南岸区",
+ "value": "500108"
+ },
+ {
+ "label": "北碚区",
+ "value": "500109"
+ },
+ {
+ "label": "綦江区",
+ "value": "500110"
+ },
+ {
+ "label": "大足区",
+ "value": "500111"
+ },
+ {
+ "label": "渝北区",
+ "value": "500112"
+ },
+ {
+ "label": "巴南区",
+ "value": "500113"
+ },
+ {
+ "label": "黔江区",
+ "value": "500114"
+ },
+ {
+ "label": "长寿区",
+ "value": "500115"
+ },
+ {
+ "label": "江津区",
+ "value": "500116"
+ },
+ {
+ "label": "合川区",
+ "value": "500117"
+ },
+ {
+ "label": "永川区",
+ "value": "500118"
+ },
+ {
+ "label": "南川区",
+ "value": "500119"
+ },
+ {
+ "label": "璧山区",
+ "value": "500120"
+ },
+ {
+ "label": "铜梁区",
+ "value": "500151"
+ },
+ {
+ "label": "潼南区",
+ "value": "500152"
+ },
+ {
+ "label": "荣昌区",
+ "value": "500153"
+ },
+ {
+ "label": "开州区",
+ "value": "500154"
+ },
+ {
+ "label": "梁平区",
+ "value": "500155"
+ },
+ {
+ "label": "武隆区",
+ "value": "500156"
+ }
+ ],
+ [{
+ "label": "城口县",
+ "value": "500229"
+ },
+ {
+ "label": "丰都县",
+ "value": "500230"
+ },
+ {
+ "label": "垫江县",
+ "value": "500231"
+ },
+ {
+ "label": "忠县",
+ "value": "500233"
+ },
+ {
+ "label": "云阳县",
+ "value": "500235"
+ },
+ {
+ "label": "奉节县",
+ "value": "500236"
+ },
+ {
+ "label": "巫山县",
+ "value": "500237"
+ },
+ {
+ "label": "巫溪县",
+ "value": "500238"
+ },
+ {
+ "label": "石柱土家族自治县",
+ "value": "500240"
+ },
+ {
+ "label": "秀山土家族苗族自治县",
+ "value": "500241"
+ },
+ {
+ "label": "酉阳土家族苗族自治县",
+ "value": "500242"
+ },
+ {
+ "label": "彭水苗族土家族自治县",
+ "value": "500243"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "锦江区",
+ "value": "510104"
+ },
+ {
+ "label": "青羊区",
+ "value": "510105"
+ },
+ {
+ "label": "金牛区",
+ "value": "510106"
+ },
+ {
+ "label": "武侯区",
+ "value": "510107"
+ },
+ {
+ "label": "成华区",
+ "value": "510108"
+ },
+ {
+ "label": "龙泉驿区",
+ "value": "510112"
+ },
+ {
+ "label": "青白江区",
+ "value": "510113"
+ },
+ {
+ "label": "新都区",
+ "value": "510114"
+ },
+ {
+ "label": "温江区",
+ "value": "510115"
+ },
+ {
+ "label": "双流区",
+ "value": "510116"
+ },
+ {
+ "label": "郫都区",
+ "value": "510117"
+ },
+ {
+ "label": "金堂县",
+ "value": "510121"
+ },
+ {
+ "label": "大邑县",
+ "value": "510129"
+ },
+ {
+ "label": "蒲江县",
+ "value": "510131"
+ },
+ {
+ "label": "新津县",
+ "value": "510132"
+ },
+ {
+ "label": "都江堰市",
+ "value": "510181"
+ },
+ {
+ "label": "彭州市",
+ "value": "510182"
+ },
+ {
+ "label": "邛崃市",
+ "value": "510183"
+ },
+ {
+ "label": "崇州市",
+ "value": "510184"
+ },
+ {
+ "label": "简阳市",
+ "value": "510185"
+ }
+ ],
+ [{
+ "label": "自流井区",
+ "value": "510302"
+ },
+ {
+ "label": "贡井区",
+ "value": "510303"
+ },
+ {
+ "label": "大安区",
+ "value": "510304"
+ },
+ {
+ "label": "沿滩区",
+ "value": "510311"
+ },
+ {
+ "label": "荣县",
+ "value": "510321"
+ },
+ {
+ "label": "富顺县",
+ "value": "510322"
+ }
+ ],
+ [{
+ "label": "东区",
+ "value": "510402"
+ },
+ {
+ "label": "西区",
+ "value": "510403"
+ },
+ {
+ "label": "仁和区",
+ "value": "510411"
+ },
+ {
+ "label": "米易县",
+ "value": "510421"
+ },
+ {
+ "label": "盐边县",
+ "value": "510422"
+ }
+ ],
+ [{
+ "label": "江阳区",
+ "value": "510502"
+ },
+ {
+ "label": "纳溪区",
+ "value": "510503"
+ },
+ {
+ "label": "龙马潭区",
+ "value": "510504"
+ },
+ {
+ "label": "泸县",
+ "value": "510521"
+ },
+ {
+ "label": "合江县",
+ "value": "510522"
+ },
+ {
+ "label": "叙永县",
+ "value": "510524"
+ },
+ {
+ "label": "古蔺县",
+ "value": "510525"
+ }
+ ],
+ [{
+ "label": "旌阳区",
+ "value": "510603"
+ },
+ {
+ "label": "罗江区",
+ "value": "510604"
+ },
+ {
+ "label": "中江县",
+ "value": "510623"
+ },
+ {
+ "label": "广汉市",
+ "value": "510681"
+ },
+ {
+ "label": "什邡市",
+ "value": "510682"
+ },
+ {
+ "label": "绵竹市",
+ "value": "510683"
+ }
+ ],
+ [{
+ "label": "涪城区",
+ "value": "510703"
+ },
+ {
+ "label": "游仙区",
+ "value": "510704"
+ },
+ {
+ "label": "安州区",
+ "value": "510705"
+ },
+ {
+ "label": "三台县",
+ "value": "510722"
+ },
+ {
+ "label": "盐亭县",
+ "value": "510723"
+ },
+ {
+ "label": "梓潼县",
+ "value": "510725"
+ },
+ {
+ "label": "北川羌族自治县",
+ "value": "510726"
+ },
+ {
+ "label": "平武县",
+ "value": "510727"
+ },
+ {
+ "label": "江油市",
+ "value": "510781"
+ }
+ ],
+ [{
+ "label": "利州区",
+ "value": "510802"
+ },
+ {
+ "label": "昭化区",
+ "value": "510811"
+ },
+ {
+ "label": "朝天区",
+ "value": "510812"
+ },
+ {
+ "label": "旺苍县",
+ "value": "510821"
+ },
+ {
+ "label": "青川县",
+ "value": "510822"
+ },
+ {
+ "label": "剑阁县",
+ "value": "510823"
+ },
+ {
+ "label": "苍溪县",
+ "value": "510824"
+ }
+ ],
+ [{
+ "label": "船山区",
+ "value": "510903"
+ },
+ {
+ "label": "安居区",
+ "value": "510904"
+ },
+ {
+ "label": "蓬溪县",
+ "value": "510921"
+ },
+ {
+ "label": "射洪县",
+ "value": "510922"
+ },
+ {
+ "label": "大英县",
+ "value": "510923"
+ }
+ ],
+ [{
+ "label": "市中区",
+ "value": "511002"
+ },
+ {
+ "label": "东兴区",
+ "value": "511011"
+ },
+ {
+ "label": "威远县",
+ "value": "511024"
+ },
+ {
+ "label": "资中县",
+ "value": "511025"
+ },
+ {
+ "label": "内江经济开发区",
+ "value": "511071"
+ },
+ {
+ "label": "隆昌市",
+ "value": "511083"
+ }
+ ],
+ [{
+ "label": "市中区",
+ "value": "511102"
+ },
+ {
+ "label": "沙湾区",
+ "value": "511111"
+ },
+ {
+ "label": "五通桥区",
+ "value": "511112"
+ },
+ {
+ "label": "金口河区",
+ "value": "511113"
+ },
+ {
+ "label": "犍为县",
+ "value": "511123"
+ },
+ {
+ "label": "井研县",
+ "value": "511124"
+ },
+ {
+ "label": "夹江县",
+ "value": "511126"
+ },
+ {
+ "label": "沐川县",
+ "value": "511129"
+ },
+ {
+ "label": "峨边彝族自治县",
+ "value": "511132"
+ },
+ {
+ "label": "马边彝族自治县",
+ "value": "511133"
+ },
+ {
+ "label": "峨眉山市",
+ "value": "511181"
+ }
+ ],
+ [{
+ "label": "顺庆区",
+ "value": "511302"
+ },
+ {
+ "label": "高坪区",
+ "value": "511303"
+ },
+ {
+ "label": "嘉陵区",
+ "value": "511304"
+ },
+ {
+ "label": "南部县",
+ "value": "511321"
+ },
+ {
+ "label": "营山县",
+ "value": "511322"
+ },
+ {
+ "label": "蓬安县",
+ "value": "511323"
+ },
+ {
+ "label": "仪陇县",
+ "value": "511324"
+ },
+ {
+ "label": "西充县",
+ "value": "511325"
+ },
+ {
+ "label": "阆中市",
+ "value": "511381"
+ }
+ ],
+ [{
+ "label": "东坡区",
+ "value": "511402"
+ },
+ {
+ "label": "彭山区",
+ "value": "511403"
+ },
+ {
+ "label": "仁寿县",
+ "value": "511421"
+ },
+ {
+ "label": "洪雅县",
+ "value": "511423"
+ },
+ {
+ "label": "丹棱县",
+ "value": "511424"
+ },
+ {
+ "label": "青神县",
+ "value": "511425"
+ }
+ ],
+ [{
+ "label": "翠屏区",
+ "value": "511502"
+ },
+ {
+ "label": "南溪区",
+ "value": "511503"
+ },
+ {
+ "label": "宜宾县",
+ "value": "511521"
+ },
+ {
+ "label": "江安县",
+ "value": "511523"
+ },
+ {
+ "label": "长宁县",
+ "value": "511524"
+ },
+ {
+ "label": "高县",
+ "value": "511525"
+ },
+ {
+ "label": "珙县",
+ "value": "511526"
+ },
+ {
+ "label": "筠连县",
+ "value": "511527"
+ },
+ {
+ "label": "兴文县",
+ "value": "511528"
+ },
+ {
+ "label": "屏山县",
+ "value": "511529"
+ }
+ ],
+ [{
+ "label": "广安区",
+ "value": "511602"
+ },
+ {
+ "label": "前锋区",
+ "value": "511603"
+ },
+ {
+ "label": "岳池县",
+ "value": "511621"
+ },
+ {
+ "label": "武胜县",
+ "value": "511622"
+ },
+ {
+ "label": "邻水县",
+ "value": "511623"
+ },
+ {
+ "label": "华蓥市",
+ "value": "511681"
+ }
+ ],
+ [{
+ "label": "通川区",
+ "value": "511702"
+ },
+ {
+ "label": "达川区",
+ "value": "511703"
+ },
+ {
+ "label": "宣汉县",
+ "value": "511722"
+ },
+ {
+ "label": "开江县",
+ "value": "511723"
+ },
+ {
+ "label": "大竹县",
+ "value": "511724"
+ },
+ {
+ "label": "渠县",
+ "value": "511725"
+ },
+ {
+ "label": "达州经济开发区",
+ "value": "511771"
+ },
+ {
+ "label": "万源市",
+ "value": "511781"
+ }
+ ],
+ [{
+ "label": "雨城区",
+ "value": "511802"
+ },
+ {
+ "label": "名山区",
+ "value": "511803"
+ },
+ {
+ "label": "荥经县",
+ "value": "511822"
+ },
+ {
+ "label": "汉源县",
+ "value": "511823"
+ },
+ {
+ "label": "石棉县",
+ "value": "511824"
+ },
+ {
+ "label": "天全县",
+ "value": "511825"
+ },
+ {
+ "label": "芦山县",
+ "value": "511826"
+ },
+ {
+ "label": "宝兴县",
+ "value": "511827"
+ }
+ ],
+ [{
+ "label": "巴州区",
+ "value": "511902"
+ },
+ {
+ "label": "恩阳区",
+ "value": "511903"
+ },
+ {
+ "label": "通江县",
+ "value": "511921"
+ },
+ {
+ "label": "南江县",
+ "value": "511922"
+ },
+ {
+ "label": "平昌县",
+ "value": "511923"
+ },
+ {
+ "label": "巴中经济开发区",
+ "value": "511971"
+ }
+ ],
+ [{
+ "label": "雁江区",
+ "value": "512002"
+ },
+ {
+ "label": "安岳县",
+ "value": "512021"
+ },
+ {
+ "label": "乐至县",
+ "value": "512022"
+ }
+ ],
+ [{
+ "label": "马尔康市",
+ "value": "513201"
+ },
+ {
+ "label": "汶川县",
+ "value": "513221"
+ },
+ {
+ "label": "理县",
+ "value": "513222"
+ },
+ {
+ "label": "茂县",
+ "value": "513223"
+ },
+ {
+ "label": "松潘县",
+ "value": "513224"
+ },
+ {
+ "label": "九寨沟县",
+ "value": "513225"
+ },
+ {
+ "label": "金川县",
+ "value": "513226"
+ },
+ {
+ "label": "小金县",
+ "value": "513227"
+ },
+ {
+ "label": "黑水县",
+ "value": "513228"
+ },
+ {
+ "label": "壤塘县",
+ "value": "513230"
+ },
+ {
+ "label": "阿坝县",
+ "value": "513231"
+ },
+ {
+ "label": "若尔盖县",
+ "value": "513232"
+ },
+ {
+ "label": "红原县",
+ "value": "513233"
+ }
+ ],
+ [{
+ "label": "康定市",
+ "value": "513301"
+ },
+ {
+ "label": "泸定县",
+ "value": "513322"
+ },
+ {
+ "label": "丹巴县",
+ "value": "513323"
+ },
+ {
+ "label": "九龙县",
+ "value": "513324"
+ },
+ {
+ "label": "雅江县",
+ "value": "513325"
+ },
+ {
+ "label": "道孚县",
+ "value": "513326"
+ },
+ {
+ "label": "炉霍县",
+ "value": "513327"
+ },
+ {
+ "label": "甘孜县",
+ "value": "513328"
+ },
+ {
+ "label": "新龙县",
+ "value": "513329"
+ },
+ {
+ "label": "德格县",
+ "value": "513330"
+ },
+ {
+ "label": "白玉县",
+ "value": "513331"
+ },
+ {
+ "label": "石渠县",
+ "value": "513332"
+ },
+ {
+ "label": "色达县",
+ "value": "513333"
+ },
+ {
+ "label": "理塘县",
+ "value": "513334"
+ },
+ {
+ "label": "巴塘县",
+ "value": "513335"
+ },
+ {
+ "label": "乡城县",
+ "value": "513336"
+ },
+ {
+ "label": "稻城县",
+ "value": "513337"
+ },
+ {
+ "label": "得荣县",
+ "value": "513338"
+ }
+ ],
+ [{
+ "label": "西昌市",
+ "value": "513401"
+ },
+ {
+ "label": "木里藏族自治县",
+ "value": "513422"
+ },
+ {
+ "label": "盐源县",
+ "value": "513423"
+ },
+ {
+ "label": "德昌县",
+ "value": "513424"
+ },
+ {
+ "label": "会理县",
+ "value": "513425"
+ },
+ {
+ "label": "会东县",
+ "value": "513426"
+ },
+ {
+ "label": "宁南县",
+ "value": "513427"
+ },
+ {
+ "label": "普格县",
+ "value": "513428"
+ },
+ {
+ "label": "布拖县",
+ "value": "513429"
+ },
+ {
+ "label": "金阳县",
+ "value": "513430"
+ },
+ {
+ "label": "昭觉县",
+ "value": "513431"
+ },
+ {
+ "label": "喜德县",
+ "value": "513432"
+ },
+ {
+ "label": "冕宁县",
+ "value": "513433"
+ },
+ {
+ "label": "越西县",
+ "value": "513434"
+ },
+ {
+ "label": "甘洛县",
+ "value": "513435"
+ },
+ {
+ "label": "美姑县",
+ "value": "513436"
+ },
+ {
+ "label": "雷波县",
+ "value": "513437"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "南明区",
+ "value": "520102"
+ },
+ {
+ "label": "云岩区",
+ "value": "520103"
+ },
+ {
+ "label": "花溪区",
+ "value": "520111"
+ },
+ {
+ "label": "乌当区",
+ "value": "520112"
+ },
+ {
+ "label": "白云区",
+ "value": "520113"
+ },
+ {
+ "label": "观山湖区",
+ "value": "520115"
+ },
+ {
+ "label": "开阳县",
+ "value": "520121"
+ },
+ {
+ "label": "息烽县",
+ "value": "520122"
+ },
+ {
+ "label": "修文县",
+ "value": "520123"
+ },
+ {
+ "label": "清镇市",
+ "value": "520181"
+ }
+ ],
+ [{
+ "label": "钟山区",
+ "value": "520201"
+ },
+ {
+ "label": "六枝特区",
+ "value": "520203"
+ },
+ {
+ "label": "水城县",
+ "value": "520221"
+ },
+ {
+ "label": "盘州市",
+ "value": "520281"
+ }
+ ],
+ [{
+ "label": "红花岗区",
+ "value": "520302"
+ },
+ {
+ "label": "汇川区",
+ "value": "520303"
+ },
+ {
+ "label": "播州区",
+ "value": "520304"
+ },
+ {
+ "label": "桐梓县",
+ "value": "520322"
+ },
+ {
+ "label": "绥阳县",
+ "value": "520323"
+ },
+ {
+ "label": "正安县",
+ "value": "520324"
+ },
+ {
+ "label": "道真仡佬族苗族自治县",
+ "value": "520325"
+ },
+ {
+ "label": "务川仡佬族苗族自治县",
+ "value": "520326"
+ },
+ {
+ "label": "凤冈县",
+ "value": "520327"
+ },
+ {
+ "label": "湄潭县",
+ "value": "520328"
+ },
+ {
+ "label": "余庆县",
+ "value": "520329"
+ },
+ {
+ "label": "习水县",
+ "value": "520330"
+ },
+ {
+ "label": "赤水市",
+ "value": "520381"
+ },
+ {
+ "label": "仁怀市",
+ "value": "520382"
+ }
+ ],
+ [{
+ "label": "西秀区",
+ "value": "520402"
+ },
+ {
+ "label": "平坝区",
+ "value": "520403"
+ },
+ {
+ "label": "普定县",
+ "value": "520422"
+ },
+ {
+ "label": "镇宁布依族苗族自治县",
+ "value": "520423"
+ },
+ {
+ "label": "关岭布依族苗族自治县",
+ "value": "520424"
+ },
+ {
+ "label": "紫云苗族布依族自治县",
+ "value": "520425"
+ }
+ ],
+ [{
+ "label": "七星关区",
+ "value": "520502"
+ },
+ {
+ "label": "大方县",
+ "value": "520521"
+ },
+ {
+ "label": "黔西县",
+ "value": "520522"
+ },
+ {
+ "label": "金沙县",
+ "value": "520523"
+ },
+ {
+ "label": "织金县",
+ "value": "520524"
+ },
+ {
+ "label": "纳雍县",
+ "value": "520525"
+ },
+ {
+ "label": "威宁彝族回族苗族自治县",
+ "value": "520526"
+ },
+ {
+ "label": "赫章县",
+ "value": "520527"
+ }
+ ],
+ [{
+ "label": "碧江区",
+ "value": "520602"
+ },
+ {
+ "label": "万山区",
+ "value": "520603"
+ },
+ {
+ "label": "江口县",
+ "value": "520621"
+ },
+ {
+ "label": "玉屏侗族自治县",
+ "value": "520622"
+ },
+ {
+ "label": "石阡县",
+ "value": "520623"
+ },
+ {
+ "label": "思南县",
+ "value": "520624"
+ },
+ {
+ "label": "印江土家族苗族自治县",
+ "value": "520625"
+ },
+ {
+ "label": "德江县",
+ "value": "520626"
+ },
+ {
+ "label": "沿河土家族自治县",
+ "value": "520627"
+ },
+ {
+ "label": "松桃苗族自治县",
+ "value": "520628"
+ }
+ ],
+ [{
+ "label": "兴义市",
+ "value": "522301"
+ },
+ {
+ "label": "兴仁县",
+ "value": "522322"
+ },
+ {
+ "label": "普安县",
+ "value": "522323"
+ },
+ {
+ "label": "晴隆县",
+ "value": "522324"
+ },
+ {
+ "label": "贞丰县",
+ "value": "522325"
+ },
+ {
+ "label": "望谟县",
+ "value": "522326"
+ },
+ {
+ "label": "册亨县",
+ "value": "522327"
+ },
+ {
+ "label": "安龙县",
+ "value": "522328"
+ }
+ ],
+ [{
+ "label": "凯里市",
+ "value": "522601"
+ },
+ {
+ "label": "黄平县",
+ "value": "522622"
+ },
+ {
+ "label": "施秉县",
+ "value": "522623"
+ },
+ {
+ "label": "三穗县",
+ "value": "522624"
+ },
+ {
+ "label": "镇远县",
+ "value": "522625"
+ },
+ {
+ "label": "岑巩县",
+ "value": "522626"
+ },
+ {
+ "label": "天柱县",
+ "value": "522627"
+ },
+ {
+ "label": "锦屏县",
+ "value": "522628"
+ },
+ {
+ "label": "剑河县",
+ "value": "522629"
+ },
+ {
+ "label": "台江县",
+ "value": "522630"
+ },
+ {
+ "label": "黎平县",
+ "value": "522631"
+ },
+ {
+ "label": "榕江县",
+ "value": "522632"
+ },
+ {
+ "label": "从江县",
+ "value": "522633"
+ },
+ {
+ "label": "雷山县",
+ "value": "522634"
+ },
+ {
+ "label": "麻江县",
+ "value": "522635"
+ },
+ {
+ "label": "丹寨县",
+ "value": "522636"
+ }
+ ],
+ [{
+ "label": "都匀市",
+ "value": "522701"
+ },
+ {
+ "label": "福泉市",
+ "value": "522702"
+ },
+ {
+ "label": "荔波县",
+ "value": "522722"
+ },
+ {
+ "label": "贵定县",
+ "value": "522723"
+ },
+ {
+ "label": "瓮安县",
+ "value": "522725"
+ },
+ {
+ "label": "独山县",
+ "value": "522726"
+ },
+ {
+ "label": "平塘县",
+ "value": "522727"
+ },
+ {
+ "label": "罗甸县",
+ "value": "522728"
+ },
+ {
+ "label": "长顺县",
+ "value": "522729"
+ },
+ {
+ "label": "龙里县",
+ "value": "522730"
+ },
+ {
+ "label": "惠水县",
+ "value": "522731"
+ },
+ {
+ "label": "三都水族自治县",
+ "value": "522732"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "五华区",
+ "value": "530102"
+ },
+ {
+ "label": "盘龙区",
+ "value": "530103"
+ },
+ {
+ "label": "官渡区",
+ "value": "530111"
+ },
+ {
+ "label": "西山区",
+ "value": "530112"
+ },
+ {
+ "label": "东川区",
+ "value": "530113"
+ },
+ {
+ "label": "呈贡区",
+ "value": "530114"
+ },
+ {
+ "label": "晋宁区",
+ "value": "530115"
+ },
+ {
+ "label": "富民县",
+ "value": "530124"
+ },
+ {
+ "label": "宜良县",
+ "value": "530125"
+ },
+ {
+ "label": "石林彝族自治县",
+ "value": "530126"
+ },
+ {
+ "label": "嵩明县",
+ "value": "530127"
+ },
+ {
+ "label": "禄劝彝族苗族自治县",
+ "value": "530128"
+ },
+ {
+ "label": "寻甸回族彝族自治县",
+ "value": "530129"
+ },
+ {
+ "label": "安宁市",
+ "value": "530181"
+ }
+ ],
+ [{
+ "label": "麒麟区",
+ "value": "530302"
+ },
+ {
+ "label": "沾益区",
+ "value": "530303"
+ },
+ {
+ "label": "马龙县",
+ "value": "530321"
+ },
+ {
+ "label": "陆良县",
+ "value": "530322"
+ },
+ {
+ "label": "师宗县",
+ "value": "530323"
+ },
+ {
+ "label": "罗平县",
+ "value": "530324"
+ },
+ {
+ "label": "富源县",
+ "value": "530325"
+ },
+ {
+ "label": "会泽县",
+ "value": "530326"
+ },
+ {
+ "label": "宣威市",
+ "value": "530381"
+ }
+ ],
+ [{
+ "label": "红塔区",
+ "value": "530402"
+ },
+ {
+ "label": "江川区",
+ "value": "530403"
+ },
+ {
+ "label": "澄江县",
+ "value": "530422"
+ },
+ {
+ "label": "通海县",
+ "value": "530423"
+ },
+ {
+ "label": "华宁县",
+ "value": "530424"
+ },
+ {
+ "label": "易门县",
+ "value": "530425"
+ },
+ {
+ "label": "峨山彝族自治县",
+ "value": "530426"
+ },
+ {
+ "label": "新平彝族傣族自治县",
+ "value": "530427"
+ },
+ {
+ "label": "元江哈尼族彝族傣族自治县",
+ "value": "530428"
+ }
+ ],
+ [{
+ "label": "隆阳区",
+ "value": "530502"
+ },
+ {
+ "label": "施甸县",
+ "value": "530521"
+ },
+ {
+ "label": "龙陵县",
+ "value": "530523"
+ },
+ {
+ "label": "昌宁县",
+ "value": "530524"
+ },
+ {
+ "label": "腾冲市",
+ "value": "530581"
+ }
+ ],
+ [{
+ "label": "昭阳区",
+ "value": "530602"
+ },
+ {
+ "label": "鲁甸县",
+ "value": "530621"
+ },
+ {
+ "label": "巧家县",
+ "value": "530622"
+ },
+ {
+ "label": "盐津县",
+ "value": "530623"
+ },
+ {
+ "label": "大关县",
+ "value": "530624"
+ },
+ {
+ "label": "永善县",
+ "value": "530625"
+ },
+ {
+ "label": "绥江县",
+ "value": "530626"
+ },
+ {
+ "label": "镇雄县",
+ "value": "530627"
+ },
+ {
+ "label": "彝良县",
+ "value": "530628"
+ },
+ {
+ "label": "威信县",
+ "value": "530629"
+ },
+ {
+ "label": "水富县",
+ "value": "530630"
+ }
+ ],
+ [{
+ "label": "古城区",
+ "value": "530702"
+ },
+ {
+ "label": "玉龙纳西族自治县",
+ "value": "530721"
+ },
+ {
+ "label": "永胜县",
+ "value": "530722"
+ },
+ {
+ "label": "华坪县",
+ "value": "530723"
+ },
+ {
+ "label": "宁蒗彝族自治县",
+ "value": "530724"
+ }
+ ],
+ [{
+ "label": "思茅区",
+ "value": "530802"
+ },
+ {
+ "label": "宁洱哈尼族彝族自治县",
+ "value": "530821"
+ },
+ {
+ "label": "墨江哈尼族自治县",
+ "value": "530822"
+ },
+ {
+ "label": "景东彝族自治县",
+ "value": "530823"
+ },
+ {
+ "label": "景谷傣族彝族自治县",
+ "value": "530824"
+ },
+ {
+ "label": "镇沅彝族哈尼族拉祜族自治县",
+ "value": "530825"
+ },
+ {
+ "label": "江城哈尼族彝族自治县",
+ "value": "530826"
+ },
+ {
+ "label": "孟连傣族拉祜族佤族自治县",
+ "value": "530827"
+ },
+ {
+ "label": "澜沧拉祜族自治县",
+ "value": "530828"
+ },
+ {
+ "label": "西盟佤族自治县",
+ "value": "530829"
+ }
+ ],
+ [{
+ "label": "临翔区",
+ "value": "530902"
+ },
+ {
+ "label": "凤庆县",
+ "value": "530921"
+ },
+ {
+ "label": "云县",
+ "value": "530922"
+ },
+ {
+ "label": "永德县",
+ "value": "530923"
+ },
+ {
+ "label": "镇康县",
+ "value": "530924"
+ },
+ {
+ "label": "双江拉祜族佤族布朗族傣族自治县",
+ "value": "530925"
+ },
+ {
+ "label": "耿马傣族佤族自治县",
+ "value": "530926"
+ },
+ {
+ "label": "沧源佤族自治县",
+ "value": "530927"
+ }
+ ],
+ [{
+ "label": "楚雄市",
+ "value": "532301"
+ },
+ {
+ "label": "双柏县",
+ "value": "532322"
+ },
+ {
+ "label": "牟定县",
+ "value": "532323"
+ },
+ {
+ "label": "南华县",
+ "value": "532324"
+ },
+ {
+ "label": "姚安县",
+ "value": "532325"
+ },
+ {
+ "label": "大姚县",
+ "value": "532326"
+ },
+ {
+ "label": "永仁县",
+ "value": "532327"
+ },
+ {
+ "label": "元谋县",
+ "value": "532328"
+ },
+ {
+ "label": "武定县",
+ "value": "532329"
+ },
+ {
+ "label": "禄丰县",
+ "value": "532331"
+ }
+ ],
+ [{
+ "label": "个旧市",
+ "value": "532501"
+ },
+ {
+ "label": "开远市",
+ "value": "532502"
+ },
+ {
+ "label": "蒙自市",
+ "value": "532503"
+ },
+ {
+ "label": "弥勒市",
+ "value": "532504"
+ },
+ {
+ "label": "屏边苗族自治县",
+ "value": "532523"
+ },
+ {
+ "label": "建水县",
+ "value": "532524"
+ },
+ {
+ "label": "石屏县",
+ "value": "532525"
+ },
+ {
+ "label": "泸西县",
+ "value": "532527"
+ },
+ {
+ "label": "元阳县",
+ "value": "532528"
+ },
+ {
+ "label": "红河县",
+ "value": "532529"
+ },
+ {
+ "label": "金平苗族瑶族傣族自治县",
+ "value": "532530"
+ },
+ {
+ "label": "绿春县",
+ "value": "532531"
+ },
+ {
+ "label": "河口瑶族自治县",
+ "value": "532532"
+ }
+ ],
+ [{
+ "label": "文山市",
+ "value": "532601"
+ },
+ {
+ "label": "砚山县",
+ "value": "532622"
+ },
+ {
+ "label": "西畴县",
+ "value": "532623"
+ },
+ {
+ "label": "麻栗坡县",
+ "value": "532624"
+ },
+ {
+ "label": "马关县",
+ "value": "532625"
+ },
+ {
+ "label": "丘北县",
+ "value": "532626"
+ },
+ {
+ "label": "广南县",
+ "value": "532627"
+ },
+ {
+ "label": "富宁县",
+ "value": "532628"
+ }
+ ],
+ [{
+ "label": "景洪市",
+ "value": "532801"
+ },
+ {
+ "label": "勐海县",
+ "value": "532822"
+ },
+ {
+ "label": "勐腊县",
+ "value": "532823"
+ }
+ ],
+ [{
+ "label": "大理市",
+ "value": "532901"
+ },
+ {
+ "label": "漾濞彝族自治县",
+ "value": "532922"
+ },
+ {
+ "label": "祥云县",
+ "value": "532923"
+ },
+ {
+ "label": "宾川县",
+ "value": "532924"
+ },
+ {
+ "label": "弥渡县",
+ "value": "532925"
+ },
+ {
+ "label": "南涧彝族自治县",
+ "value": "532926"
+ },
+ {
+ "label": "巍山彝族回族自治县",
+ "value": "532927"
+ },
+ {
+ "label": "永平县",
+ "value": "532928"
+ },
+ {
+ "label": "云龙县",
+ "value": "532929"
+ },
+ {
+ "label": "洱源县",
+ "value": "532930"
+ },
+ {
+ "label": "剑川县",
+ "value": "532931"
+ },
+ {
+ "label": "鹤庆县",
+ "value": "532932"
+ }
+ ],
+ [{
+ "label": "瑞丽市",
+ "value": "533102"
+ },
+ {
+ "label": "芒市",
+ "value": "533103"
+ },
+ {
+ "label": "梁河县",
+ "value": "533122"
+ },
+ {
+ "label": "盈江县",
+ "value": "533123"
+ },
+ {
+ "label": "陇川县",
+ "value": "533124"
+ }
+ ],
+ [{
+ "label": "泸水市",
+ "value": "533301"
+ },
+ {
+ "label": "福贡县",
+ "value": "533323"
+ },
+ {
+ "label": "贡山独龙族怒族自治县",
+ "value": "533324"
+ },
+ {
+ "label": "兰坪白族普米族自治县",
+ "value": "533325"
+ }
+ ],
+ [{
+ "label": "香格里拉市",
+ "value": "533401"
+ },
+ {
+ "label": "德钦县",
+ "value": "533422"
+ },
+ {
+ "label": "维西傈僳族自治县",
+ "value": "533423"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "城关区",
+ "value": "540102"
+ },
+ {
+ "label": "堆龙德庆区",
+ "value": "540103"
+ },
+ {
+ "label": "林周县",
+ "value": "540121"
+ },
+ {
+ "label": "当雄县",
+ "value": "540122"
+ },
+ {
+ "label": "尼木县",
+ "value": "540123"
+ },
+ {
+ "label": "曲水县",
+ "value": "540124"
+ },
+ {
+ "label": "达孜县",
+ "value": "540126"
+ },
+ {
+ "label": "墨竹工卡县",
+ "value": "540127"
+ },
+ {
+ "label": "格尔木藏青工业园区",
+ "value": "540171"
+ },
+ {
+ "label": "拉萨经济技术开发区",
+ "value": "540172"
+ },
+ {
+ "label": "西藏文化旅游创意园区",
+ "value": "540173"
+ },
+ {
+ "label": "达孜工业园区",
+ "value": "540174"
+ }
+ ],
+ [{
+ "label": "桑珠孜区",
+ "value": "540202"
+ },
+ {
+ "label": "南木林县",
+ "value": "540221"
+ },
+ {
+ "label": "江孜县",
+ "value": "540222"
+ },
+ {
+ "label": "定日县",
+ "value": "540223"
+ },
+ {
+ "label": "萨迦县",
+ "value": "540224"
+ },
+ {
+ "label": "拉孜县",
+ "value": "540225"
+ },
+ {
+ "label": "昂仁县",
+ "value": "540226"
+ },
+ {
+ "label": "谢通门县",
+ "value": "540227"
+ },
+ {
+ "label": "白朗县",
+ "value": "540228"
+ },
+ {
+ "label": "仁布县",
+ "value": "540229"
+ },
+ {
+ "label": "康马县",
+ "value": "540230"
+ },
+ {
+ "label": "定结县",
+ "value": "540231"
+ },
+ {
+ "label": "仲巴县",
+ "value": "540232"
+ },
+ {
+ "label": "亚东县",
+ "value": "540233"
+ },
+ {
+ "label": "吉隆县",
+ "value": "540234"
+ },
+ {
+ "label": "聂拉木县",
+ "value": "540235"
+ },
+ {
+ "label": "萨嘎县",
+ "value": "540236"
+ },
+ {
+ "label": "岗巴县",
+ "value": "540237"
+ }
+ ],
+ [{
+ "label": "卡若区",
+ "value": "540302"
+ },
+ {
+ "label": "江达县",
+ "value": "540321"
+ },
+ {
+ "label": "贡觉县",
+ "value": "540322"
+ },
+ {
+ "label": "类乌齐县",
+ "value": "540323"
+ },
+ {
+ "label": "丁青县",
+ "value": "540324"
+ },
+ {
+ "label": "察雅县",
+ "value": "540325"
+ },
+ {
+ "label": "八宿县",
+ "value": "540326"
+ },
+ {
+ "label": "左贡县",
+ "value": "540327"
+ },
+ {
+ "label": "芒康县",
+ "value": "540328"
+ },
+ {
+ "label": "洛隆县",
+ "value": "540329"
+ },
+ {
+ "label": "边坝县",
+ "value": "540330"
+ }
+ ],
+ [{
+ "label": "巴宜区",
+ "value": "540402"
+ },
+ {
+ "label": "工布江达县",
+ "value": "540421"
+ },
+ {
+ "label": "米林县",
+ "value": "540422"
+ },
+ {
+ "label": "墨脱县",
+ "value": "540423"
+ },
+ {
+ "label": "波密县",
+ "value": "540424"
+ },
+ {
+ "label": "察隅县",
+ "value": "540425"
+ },
+ {
+ "label": "朗县",
+ "value": "540426"
+ }
+ ],
+ [{
+ "label": "乃东区",
+ "value": "540502"
+ },
+ {
+ "label": "扎囊县",
+ "value": "540521"
+ },
+ {
+ "label": "贡嘎县",
+ "value": "540522"
+ },
+ {
+ "label": "桑日县",
+ "value": "540523"
+ },
+ {
+ "label": "琼结县",
+ "value": "540524"
+ },
+ {
+ "label": "曲松县",
+ "value": "540525"
+ },
+ {
+ "label": "措美县",
+ "value": "540526"
+ },
+ {
+ "label": "洛扎县",
+ "value": "540527"
+ },
+ {
+ "label": "加查县",
+ "value": "540528"
+ },
+ {
+ "label": "隆子县",
+ "value": "540529"
+ },
+ {
+ "label": "错那县",
+ "value": "540530"
+ },
+ {
+ "label": "浪卡子县",
+ "value": "540531"
+ }
+ ],
+ [{
+ "label": "那曲县",
+ "value": "542421"
+ },
+ {
+ "label": "嘉黎县",
+ "value": "542422"
+ },
+ {
+ "label": "比如县",
+ "value": "542423"
+ },
+ {
+ "label": "聂荣县",
+ "value": "542424"
+ },
+ {
+ "label": "安多县",
+ "value": "542425"
+ },
+ {
+ "label": "申扎县",
+ "value": "542426"
+ },
+ {
+ "label": "索县",
+ "value": "542427"
+ },
+ {
+ "label": "班戈县",
+ "value": "542428"
+ },
+ {
+ "label": "巴青县",
+ "value": "542429"
+ },
+ {
+ "label": "尼玛县",
+ "value": "542430"
+ },
+ {
+ "label": "双湖县",
+ "value": "542431"
+ }
+ ],
+ [{
+ "label": "普兰县",
+ "value": "542521"
+ },
+ {
+ "label": "札达县",
+ "value": "542522"
+ },
+ {
+ "label": "噶尔县",
+ "value": "542523"
+ },
+ {
+ "label": "日土县",
+ "value": "542524"
+ },
+ {
+ "label": "革吉县",
+ "value": "542525"
+ },
+ {
+ "label": "改则县",
+ "value": "542526"
+ },
+ {
+ "label": "措勤县",
+ "value": "542527"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "新城区",
+ "value": "610102"
+ },
+ {
+ "label": "碑林区",
+ "value": "610103"
+ },
+ {
+ "label": "莲湖区",
+ "value": "610104"
+ },
+ {
+ "label": "灞桥区",
+ "value": "610111"
+ },
+ {
+ "label": "未央区",
+ "value": "610112"
+ },
+ {
+ "label": "雁塔区",
+ "value": "610113"
+ },
+ {
+ "label": "阎良区",
+ "value": "610114"
+ },
+ {
+ "label": "临潼区",
+ "value": "610115"
+ },
+ {
+ "label": "长安区",
+ "value": "610116"
+ },
+ {
+ "label": "高陵区",
+ "value": "610117"
+ },
+ {
+ "label": "鄠邑区",
+ "value": "610118"
+ },
+ {
+ "label": "蓝田县",
+ "value": "610122"
+ },
+ {
+ "label": "周至县",
+ "value": "610124"
+ }
+ ],
+ [{
+ "label": "王益区",
+ "value": "610202"
+ },
+ {
+ "label": "印台区",
+ "value": "610203"
+ },
+ {
+ "label": "耀州区",
+ "value": "610204"
+ },
+ {
+ "label": "宜君县",
+ "value": "610222"
+ }
+ ],
+ [{
+ "label": "渭滨区",
+ "value": "610302"
+ },
+ {
+ "label": "金台区",
+ "value": "610303"
+ },
+ {
+ "label": "陈仓区",
+ "value": "610304"
+ },
+ {
+ "label": "凤翔县",
+ "value": "610322"
+ },
+ {
+ "label": "岐山县",
+ "value": "610323"
+ },
+ {
+ "label": "扶风县",
+ "value": "610324"
+ },
+ {
+ "label": "眉县",
+ "value": "610326"
+ },
+ {
+ "label": "陇县",
+ "value": "610327"
+ },
+ {
+ "label": "千阳县",
+ "value": "610328"
+ },
+ {
+ "label": "麟游县",
+ "value": "610329"
+ },
+ {
+ "label": "凤县",
+ "value": "610330"
+ },
+ {
+ "label": "太白县",
+ "value": "610331"
+ }
+ ],
+ [{
+ "label": "秦都区",
+ "value": "610402"
+ },
+ {
+ "label": "杨陵区",
+ "value": "610403"
+ },
+ {
+ "label": "渭城区",
+ "value": "610404"
+ },
+ {
+ "label": "三原县",
+ "value": "610422"
+ },
+ {
+ "label": "泾阳县",
+ "value": "610423"
+ },
+ {
+ "label": "乾县",
+ "value": "610424"
+ },
+ {
+ "label": "礼泉县",
+ "value": "610425"
+ },
+ {
+ "label": "永寿县",
+ "value": "610426"
+ },
+ {
+ "label": "彬县",
+ "value": "610427"
+ },
+ {
+ "label": "长武县",
+ "value": "610428"
+ },
+ {
+ "label": "旬邑县",
+ "value": "610429"
+ },
+ {
+ "label": "淳化县",
+ "value": "610430"
+ },
+ {
+ "label": "武功县",
+ "value": "610431"
+ },
+ {
+ "label": "兴平市",
+ "value": "610481"
+ }
+ ],
+ [{
+ "label": "临渭区",
+ "value": "610502"
+ },
+ {
+ "label": "华州区",
+ "value": "610503"
+ },
+ {
+ "label": "潼关县",
+ "value": "610522"
+ },
+ {
+ "label": "大荔县",
+ "value": "610523"
+ },
+ {
+ "label": "合阳县",
+ "value": "610524"
+ },
+ {
+ "label": "澄城县",
+ "value": "610525"
+ },
+ {
+ "label": "蒲城县",
+ "value": "610526"
+ },
+ {
+ "label": "白水县",
+ "value": "610527"
+ },
+ {
+ "label": "富平县",
+ "value": "610528"
+ },
+ {
+ "label": "韩城市",
+ "value": "610581"
+ },
+ {
+ "label": "华阴市",
+ "value": "610582"
+ }
+ ],
+ [{
+ "label": "宝塔区",
+ "value": "610602"
+ },
+ {
+ "label": "安塞区",
+ "value": "610603"
+ },
+ {
+ "label": "延长县",
+ "value": "610621"
+ },
+ {
+ "label": "延川县",
+ "value": "610622"
+ },
+ {
+ "label": "子长县",
+ "value": "610623"
+ },
+ {
+ "label": "志丹县",
+ "value": "610625"
+ },
+ {
+ "label": "吴起县",
+ "value": "610626"
+ },
+ {
+ "label": "甘泉县",
+ "value": "610627"
+ },
+ {
+ "label": "富县",
+ "value": "610628"
+ },
+ {
+ "label": "洛川县",
+ "value": "610629"
+ },
+ {
+ "label": "宜川县",
+ "value": "610630"
+ },
+ {
+ "label": "黄龙县",
+ "value": "610631"
+ },
+ {
+ "label": "黄陵县",
+ "value": "610632"
+ }
+ ],
+ [{
+ "label": "汉台区",
+ "value": "610702"
+ },
+ {
+ "label": "南郑区",
+ "value": "610703"
+ },
+ {
+ "label": "城固县",
+ "value": "610722"
+ },
+ {
+ "label": "洋县",
+ "value": "610723"
+ },
+ {
+ "label": "西乡县",
+ "value": "610724"
+ },
+ {
+ "label": "勉县",
+ "value": "610725"
+ },
+ {
+ "label": "宁强县",
+ "value": "610726"
+ },
+ {
+ "label": "略阳县",
+ "value": "610727"
+ },
+ {
+ "label": "镇巴县",
+ "value": "610728"
+ },
+ {
+ "label": "留坝县",
+ "value": "610729"
+ },
+ {
+ "label": "佛坪县",
+ "value": "610730"
+ }
+ ],
+ [{
+ "label": "榆阳区",
+ "value": "610802"
+ },
+ {
+ "label": "横山区",
+ "value": "610803"
+ },
+ {
+ "label": "府谷县",
+ "value": "610822"
+ },
+ {
+ "label": "靖边县",
+ "value": "610824"
+ },
+ {
+ "label": "定边县",
+ "value": "610825"
+ },
+ {
+ "label": "绥德县",
+ "value": "610826"
+ },
+ {
+ "label": "米脂县",
+ "value": "610827"
+ },
+ {
+ "label": "佳县",
+ "value": "610828"
+ },
+ {
+ "label": "吴堡县",
+ "value": "610829"
+ },
+ {
+ "label": "清涧县",
+ "value": "610830"
+ },
+ {
+ "label": "子洲县",
+ "value": "610831"
+ },
+ {
+ "label": "神木市",
+ "value": "610881"
+ }
+ ],
+ [{
+ "label": "汉滨区",
+ "value": "610902"
+ },
+ {
+ "label": "汉阴县",
+ "value": "610921"
+ },
+ {
+ "label": "石泉县",
+ "value": "610922"
+ },
+ {
+ "label": "宁陕县",
+ "value": "610923"
+ },
+ {
+ "label": "紫阳县",
+ "value": "610924"
+ },
+ {
+ "label": "岚皋县",
+ "value": "610925"
+ },
+ {
+ "label": "平利县",
+ "value": "610926"
+ },
+ {
+ "label": "镇坪县",
+ "value": "610927"
+ },
+ {
+ "label": "旬阳县",
+ "value": "610928"
+ },
+ {
+ "label": "白河县",
+ "value": "610929"
+ }
+ ],
+ [{
+ "label": "商州区",
+ "value": "611002"
+ },
+ {
+ "label": "洛南县",
+ "value": "611021"
+ },
+ {
+ "label": "丹凤县",
+ "value": "611022"
+ },
+ {
+ "label": "商南县",
+ "value": "611023"
+ },
+ {
+ "label": "山阳县",
+ "value": "611024"
+ },
+ {
+ "label": "镇安县",
+ "value": "611025"
+ },
+ {
+ "label": "柞水县",
+ "value": "611026"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "城关区",
+ "value": "620102"
+ },
+ {
+ "label": "七里河区",
+ "value": "620103"
+ },
+ {
+ "label": "西固区",
+ "value": "620104"
+ },
+ {
+ "label": "安宁区",
+ "value": "620105"
+ },
+ {
+ "label": "红古区",
+ "value": "620111"
+ },
+ {
+ "label": "永登县",
+ "value": "620121"
+ },
+ {
+ "label": "皋兰县",
+ "value": "620122"
+ },
+ {
+ "label": "榆中县",
+ "value": "620123"
+ },
+ {
+ "label": "兰州新区",
+ "value": "620171"
+ }
+ ],
+ [{
+ "label": "嘉峪关市",
+ "value": "620201"
+ }],
+ [{
+ "label": "金川区",
+ "value": "620302"
+ },
+ {
+ "label": "永昌县",
+ "value": "620321"
+ }
+ ],
+ [{
+ "label": "白银区",
+ "value": "620402"
+ },
+ {
+ "label": "平川区",
+ "value": "620403"
+ },
+ {
+ "label": "靖远县",
+ "value": "620421"
+ },
+ {
+ "label": "会宁县",
+ "value": "620422"
+ },
+ {
+ "label": "景泰县",
+ "value": "620423"
+ }
+ ],
+ [{
+ "label": "秦州区",
+ "value": "620502"
+ },
+ {
+ "label": "麦积区",
+ "value": "620503"
+ },
+ {
+ "label": "清水县",
+ "value": "620521"
+ },
+ {
+ "label": "秦安县",
+ "value": "620522"
+ },
+ {
+ "label": "甘谷县",
+ "value": "620523"
+ },
+ {
+ "label": "武山县",
+ "value": "620524"
+ },
+ {
+ "label": "张家川回族自治县",
+ "value": "620525"
+ }
+ ],
+ [{
+ "label": "凉州区",
+ "value": "620602"
+ },
+ {
+ "label": "民勤县",
+ "value": "620621"
+ },
+ {
+ "label": "古浪县",
+ "value": "620622"
+ },
+ {
+ "label": "天祝藏族自治县",
+ "value": "620623"
+ }
+ ],
+ [{
+ "label": "甘州区",
+ "value": "620702"
+ },
+ {
+ "label": "肃南裕固族自治县",
+ "value": "620721"
+ },
+ {
+ "label": "民乐县",
+ "value": "620722"
+ },
+ {
+ "label": "临泽县",
+ "value": "620723"
+ },
+ {
+ "label": "高台县",
+ "value": "620724"
+ },
+ {
+ "label": "山丹县",
+ "value": "620725"
+ }
+ ],
+ [{
+ "label": "崆峒区",
+ "value": "620802"
+ },
+ {
+ "label": "泾川县",
+ "value": "620821"
+ },
+ {
+ "label": "灵台县",
+ "value": "620822"
+ },
+ {
+ "label": "崇信县",
+ "value": "620823"
+ },
+ {
+ "label": "华亭县",
+ "value": "620824"
+ },
+ {
+ "label": "庄浪县",
+ "value": "620825"
+ },
+ {
+ "label": "静宁县",
+ "value": "620826"
+ },
+ {
+ "label": "平凉工业园区",
+ "value": "620871"
+ }
+ ],
+ [{
+ "label": "肃州区",
+ "value": "620902"
+ },
+ {
+ "label": "金塔县",
+ "value": "620921"
+ },
+ {
+ "label": "瓜州县",
+ "value": "620922"
+ },
+ {
+ "label": "肃北蒙古族自治县",
+ "value": "620923"
+ },
+ {
+ "label": "阿克塞哈萨克族自治县",
+ "value": "620924"
+ },
+ {
+ "label": "玉门市",
+ "value": "620981"
+ },
+ {
+ "label": "敦煌市",
+ "value": "620982"
+ }
+ ],
+ [{
+ "label": "西峰区",
+ "value": "621002"
+ },
+ {
+ "label": "庆城县",
+ "value": "621021"
+ },
+ {
+ "label": "环县",
+ "value": "621022"
+ },
+ {
+ "label": "华池县",
+ "value": "621023"
+ },
+ {
+ "label": "合水县",
+ "value": "621024"
+ },
+ {
+ "label": "正宁县",
+ "value": "621025"
+ },
+ {
+ "label": "宁县",
+ "value": "621026"
+ },
+ {
+ "label": "镇原县",
+ "value": "621027"
+ }
+ ],
+ [{
+ "label": "安定区",
+ "value": "621102"
+ },
+ {
+ "label": "通渭县",
+ "value": "621121"
+ },
+ {
+ "label": "陇西县",
+ "value": "621122"
+ },
+ {
+ "label": "渭源县",
+ "value": "621123"
+ },
+ {
+ "label": "临洮县",
+ "value": "621124"
+ },
+ {
+ "label": "漳县",
+ "value": "621125"
+ },
+ {
+ "label": "岷县",
+ "value": "621126"
+ }
+ ],
+ [{
+ "label": "武都区",
+ "value": "621202"
+ },
+ {
+ "label": "成县",
+ "value": "621221"
+ },
+ {
+ "label": "文县",
+ "value": "621222"
+ },
+ {
+ "label": "宕昌县",
+ "value": "621223"
+ },
+ {
+ "label": "康县",
+ "value": "621224"
+ },
+ {
+ "label": "西和县",
+ "value": "621225"
+ },
+ {
+ "label": "礼县",
+ "value": "621226"
+ },
+ {
+ "label": "徽县",
+ "value": "621227"
+ },
+ {
+ "label": "两当县",
+ "value": "621228"
+ }
+ ],
+ [{
+ "label": "临夏市",
+ "value": "622901"
+ },
+ {
+ "label": "临夏县",
+ "value": "622921"
+ },
+ {
+ "label": "康乐县",
+ "value": "622922"
+ },
+ {
+ "label": "永靖县",
+ "value": "622923"
+ },
+ {
+ "label": "广河县",
+ "value": "622924"
+ },
+ {
+ "label": "和政县",
+ "value": "622925"
+ },
+ {
+ "label": "东乡族自治县",
+ "value": "622926"
+ },
+ {
+ "label": "积石山保安族东乡族撒拉族自治县",
+ "value": "622927"
+ }
+ ],
+ [{
+ "label": "合作市",
+ "value": "623001"
+ },
+ {
+ "label": "临潭县",
+ "value": "623021"
+ },
+ {
+ "label": "卓尼县",
+ "value": "623022"
+ },
+ {
+ "label": "舟曲县",
+ "value": "623023"
+ },
+ {
+ "label": "迭部县",
+ "value": "623024"
+ },
+ {
+ "label": "玛曲县",
+ "value": "623025"
+ },
+ {
+ "label": "碌曲县",
+ "value": "623026"
+ },
+ {
+ "label": "夏河县",
+ "value": "623027"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "城东区",
+ "value": "630102"
+ },
+ {
+ "label": "城中区",
+ "value": "630103"
+ },
+ {
+ "label": "城西区",
+ "value": "630104"
+ },
+ {
+ "label": "城北区",
+ "value": "630105"
+ },
+ {
+ "label": "大通回族土族自治县",
+ "value": "630121"
+ },
+ {
+ "label": "湟中县",
+ "value": "630122"
+ },
+ {
+ "label": "湟源县",
+ "value": "630123"
+ }
+ ],
+ [{
+ "label": "乐都区",
+ "value": "630202"
+ },
+ {
+ "label": "平安区",
+ "value": "630203"
+ },
+ {
+ "label": "民和回族土族自治县",
+ "value": "630222"
+ },
+ {
+ "label": "互助土族自治县",
+ "value": "630223"
+ },
+ {
+ "label": "化隆回族自治县",
+ "value": "630224"
+ },
+ {
+ "label": "循化撒拉族自治县",
+ "value": "630225"
+ }
+ ],
+ [{
+ "label": "门源回族自治县",
+ "value": "632221"
+ },
+ {
+ "label": "祁连县",
+ "value": "632222"
+ },
+ {
+ "label": "海晏县",
+ "value": "632223"
+ },
+ {
+ "label": "刚察县",
+ "value": "632224"
+ }
+ ],
+ [{
+ "label": "同仁县",
+ "value": "632321"
+ },
+ {
+ "label": "尖扎县",
+ "value": "632322"
+ },
+ {
+ "label": "泽库县",
+ "value": "632323"
+ },
+ {
+ "label": "河南蒙古族自治县",
+ "value": "632324"
+ }
+ ],
+ [{
+ "label": "共和县",
+ "value": "632521"
+ },
+ {
+ "label": "同德县",
+ "value": "632522"
+ },
+ {
+ "label": "贵德县",
+ "value": "632523"
+ },
+ {
+ "label": "兴海县",
+ "value": "632524"
+ },
+ {
+ "label": "贵南县",
+ "value": "632525"
+ }
+ ],
+ [{
+ "label": "玛沁县",
+ "value": "632621"
+ },
+ {
+ "label": "班玛县",
+ "value": "632622"
+ },
+ {
+ "label": "甘德县",
+ "value": "632623"
+ },
+ {
+ "label": "达日县",
+ "value": "632624"
+ },
+ {
+ "label": "久治县",
+ "value": "632625"
+ },
+ {
+ "label": "玛多县",
+ "value": "632626"
+ }
+ ],
+ [{
+ "label": "玉树市",
+ "value": "632701"
+ },
+ {
+ "label": "杂多县",
+ "value": "632722"
+ },
+ {
+ "label": "称多县",
+ "value": "632723"
+ },
+ {
+ "label": "治多县",
+ "value": "632724"
+ },
+ {
+ "label": "囊谦县",
+ "value": "632725"
+ },
+ {
+ "label": "曲麻莱县",
+ "value": "632726"
+ }
+ ],
+ [{
+ "label": "格尔木市",
+ "value": "632801"
+ },
+ {
+ "label": "德令哈市",
+ "value": "632802"
+ },
+ {
+ "label": "乌兰县",
+ "value": "632821"
+ },
+ {
+ "label": "都兰县",
+ "value": "632822"
+ },
+ {
+ "label": "天峻县",
+ "value": "632823"
+ },
+ {
+ "label": "大柴旦行政委员会",
+ "value": "632857"
+ },
+ {
+ "label": "冷湖行政委员会",
+ "value": "632858"
+ },
+ {
+ "label": "茫崖行政委员会",
+ "value": "632859"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "兴庆区",
+ "value": "640104"
+ },
+ {
+ "label": "西夏区",
+ "value": "640105"
+ },
+ {
+ "label": "金凤区",
+ "value": "640106"
+ },
+ {
+ "label": "永宁县",
+ "value": "640121"
+ },
+ {
+ "label": "贺兰县",
+ "value": "640122"
+ },
+ {
+ "label": "灵武市",
+ "value": "640181"
+ }
+ ],
+ [{
+ "label": "大武口区",
+ "value": "640202"
+ },
+ {
+ "label": "惠农区",
+ "value": "640205"
+ },
+ {
+ "label": "平罗县",
+ "value": "640221"
+ }
+ ],
+ [{
+ "label": "利通区",
+ "value": "640302"
+ },
+ {
+ "label": "红寺堡区",
+ "value": "640303"
+ },
+ {
+ "label": "盐池县",
+ "value": "640323"
+ },
+ {
+ "label": "同心县",
+ "value": "640324"
+ },
+ {
+ "label": "青铜峡市",
+ "value": "640381"
+ }
+ ],
+ [{
+ "label": "原州区",
+ "value": "640402"
+ },
+ {
+ "label": "西吉县",
+ "value": "640422"
+ },
+ {
+ "label": "隆德县",
+ "value": "640423"
+ },
+ {
+ "label": "泾源县",
+ "value": "640424"
+ },
+ {
+ "label": "彭阳县",
+ "value": "640425"
+ }
+ ],
+ [{
+ "label": "沙坡头区",
+ "value": "640502"
+ },
+ {
+ "label": "中宁县",
+ "value": "640521"
+ },
+ {
+ "label": "海原县",
+ "value": "640522"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "天山区",
+ "value": "650102"
+ },
+ {
+ "label": "沙依巴克区",
+ "value": "650103"
+ },
+ {
+ "label": "新市区",
+ "value": "650104"
+ },
+ {
+ "label": "水磨沟区",
+ "value": "650105"
+ },
+ {
+ "label": "头屯河区",
+ "value": "650106"
+ },
+ {
+ "label": "达坂城区",
+ "value": "650107"
+ },
+ {
+ "label": "米东区",
+ "value": "650109"
+ },
+ {
+ "label": "乌鲁木齐县",
+ "value": "650121"
+ },
+ {
+ "label": "乌鲁木齐经济技术开发区",
+ "value": "650171"
+ },
+ {
+ "label": "乌鲁木齐高新技术产业开发区",
+ "value": "650172"
+ }
+ ],
+ [{
+ "label": "独山子区",
+ "value": "650202"
+ },
+ {
+ "label": "克拉玛依区",
+ "value": "650203"
+ },
+ {
+ "label": "白碱滩区",
+ "value": "650204"
+ },
+ {
+ "label": "乌尔禾区",
+ "value": "650205"
+ }
+ ],
+ [{
+ "label": "高昌区",
+ "value": "650402"
+ },
+ {
+ "label": "鄯善县",
+ "value": "650421"
+ },
+ {
+ "label": "托克逊县",
+ "value": "650422"
+ }
+ ],
+ [{
+ "label": "伊州区",
+ "value": "650502"
+ },
+ {
+ "label": "巴里坤哈萨克自治县",
+ "value": "650521"
+ },
+ {
+ "label": "伊吾县",
+ "value": "650522"
+ }
+ ],
+ [{
+ "label": "昌吉市",
+ "value": "652301"
+ },
+ {
+ "label": "阜康市",
+ "value": "652302"
+ },
+ {
+ "label": "呼图壁县",
+ "value": "652323"
+ },
+ {
+ "label": "玛纳斯县",
+ "value": "652324"
+ },
+ {
+ "label": "奇台县",
+ "value": "652325"
+ },
+ {
+ "label": "吉木萨尔县",
+ "value": "652327"
+ },
+ {
+ "label": "木垒哈萨克自治县",
+ "value": "652328"
+ }
+ ],
+ [{
+ "label": "博乐市",
+ "value": "652701"
+ },
+ {
+ "label": "阿拉山口市",
+ "value": "652702"
+ },
+ {
+ "label": "精河县",
+ "value": "652722"
+ },
+ {
+ "label": "温泉县",
+ "value": "652723"
+ }
+ ],
+ [{
+ "label": "库尔勒市",
+ "value": "652801"
+ },
+ {
+ "label": "轮台县",
+ "value": "652822"
+ },
+ {
+ "label": "尉犁县",
+ "value": "652823"
+ },
+ {
+ "label": "若羌县",
+ "value": "652824"
+ },
+ {
+ "label": "且末县",
+ "value": "652825"
+ },
+ {
+ "label": "焉耆回族自治县",
+ "value": "652826"
+ },
+ {
+ "label": "和静县",
+ "value": "652827"
+ },
+ {
+ "label": "和硕县",
+ "value": "652828"
+ },
+ {
+ "label": "博湖县",
+ "value": "652829"
+ },
+ {
+ "label": "库尔勒经济技术开发区",
+ "value": "652871"
+ }
+ ],
+ [{
+ "label": "阿克苏市",
+ "value": "652901"
+ },
+ {
+ "label": "温宿县",
+ "value": "652922"
+ },
+ {
+ "label": "库车县",
+ "value": "652923"
+ },
+ {
+ "label": "沙雅县",
+ "value": "652924"
+ },
+ {
+ "label": "新和县",
+ "value": "652925"
+ },
+ {
+ "label": "拜城县",
+ "value": "652926"
+ },
+ {
+ "label": "乌什县",
+ "value": "652927"
+ },
+ {
+ "label": "阿瓦提县",
+ "value": "652928"
+ },
+ {
+ "label": "柯坪县",
+ "value": "652929"
+ }
+ ],
+ [{
+ "label": "阿图什市",
+ "value": "653001"
+ },
+ {
+ "label": "阿克陶县",
+ "value": "653022"
+ },
+ {
+ "label": "阿合奇县",
+ "value": "653023"
+ },
+ {
+ "label": "乌恰县",
+ "value": "653024"
+ }
+ ],
+ [{
+ "label": "喀什市",
+ "value": "653101"
+ },
+ {
+ "label": "疏附县",
+ "value": "653121"
+ },
+ {
+ "label": "疏勒县",
+ "value": "653122"
+ },
+ {
+ "label": "英吉沙县",
+ "value": "653123"
+ },
+ {
+ "label": "泽普县",
+ "value": "653124"
+ },
+ {
+ "label": "莎车县",
+ "value": "653125"
+ },
+ {
+ "label": "叶城县",
+ "value": "653126"
+ },
+ {
+ "label": "麦盖提县",
+ "value": "653127"
+ },
+ {
+ "label": "岳普湖县",
+ "value": "653128"
+ },
+ {
+ "label": "伽师县",
+ "value": "653129"
+ },
+ {
+ "label": "巴楚县",
+ "value": "653130"
+ },
+ {
+ "label": "塔什库尔干塔吉克自治县",
+ "value": "653131"
+ }
+ ],
+ [{
+ "label": "和田市",
+ "value": "653201"
+ },
+ {
+ "label": "和田县",
+ "value": "653221"
+ },
+ {
+ "label": "墨玉县",
+ "value": "653222"
+ },
+ {
+ "label": "皮山县",
+ "value": "653223"
+ },
+ {
+ "label": "洛浦县",
+ "value": "653224"
+ },
+ {
+ "label": "策勒县",
+ "value": "653225"
+ },
+ {
+ "label": "于田县",
+ "value": "653226"
+ },
+ {
+ "label": "民丰县",
+ "value": "653227"
+ }
+ ],
+ [{
+ "label": "伊宁市",
+ "value": "654002"
+ },
+ {
+ "label": "奎屯市",
+ "value": "654003"
+ },
+ {
+ "label": "霍尔果斯市",
+ "value": "654004"
+ },
+ {
+ "label": "伊宁县",
+ "value": "654021"
+ },
+ {
+ "label": "察布查尔锡伯自治县",
+ "value": "654022"
+ },
+ {
+ "label": "霍城县",
+ "value": "654023"
+ },
+ {
+ "label": "巩留县",
+ "value": "654024"
+ },
+ {
+ "label": "新源县",
+ "value": "654025"
+ },
+ {
+ "label": "昭苏县",
+ "value": "654026"
+ },
+ {
+ "label": "特克斯县",
+ "value": "654027"
+ },
+ {
+ "label": "尼勒克县",
+ "value": "654028"
+ }
+ ],
+ [{
+ "label": "塔城市",
+ "value": "654201"
+ },
+ {
+ "label": "乌苏市",
+ "value": "654202"
+ },
+ {
+ "label": "额敏县",
+ "value": "654221"
+ },
+ {
+ "label": "沙湾县",
+ "value": "654223"
+ },
+ {
+ "label": "托里县",
+ "value": "654224"
+ },
+ {
+ "label": "裕民县",
+ "value": "654225"
+ },
+ {
+ "label": "和布克赛尔蒙古自治县",
+ "value": "654226"
+ }
+ ],
+ [{
+ "label": "阿勒泰市",
+ "value": "654301"
+ },
+ {
+ "label": "布尔津县",
+ "value": "654321"
+ },
+ {
+ "label": "富蕴县",
+ "value": "654322"
+ },
+ {
+ "label": "福海县",
+ "value": "654323"
+ },
+ {
+ "label": "哈巴河县",
+ "value": "654324"
+ },
+ {
+ "label": "青河县",
+ "value": "654325"
+ },
+ {
+ "label": "吉木乃县",
+ "value": "654326"
+ }
+ ],
+ [{
+ "label": "石河子市",
+ "value": "659001"
+ },
+ {
+ "label": "阿拉尔市",
+ "value": "659002"
+ },
+ {
+ "label": "图木舒克市",
+ "value": "659003"
+ },
+ {
+ "label": "五家渠市",
+ "value": "659004"
+ },
+ {
+ "label": "铁门关市",
+ "value": "659006"
+ }
+ ]
+ ],
+ [
+ [{
+ "label": "台北",
+ "value": "660101"
+ }],
+ [{
+ "label": "高雄",
+ "value": "660201"
+ }],
+ [{
+ "label": "基隆",
+ "value": "660301"
+ }],
+ [{
+ "label": "台中",
+ "value": "660401"
+ }],
+ [{
+ "label": "台南",
+ "value": "660501"
+ }],
+ [{
+ "label": "新竹",
+ "value": "660601"
+ }],
+ [{
+ "label": "嘉义",
+ "value": "660701"
+ }],
+ [{
+ "label": "宜兰",
+ "value": "660801"
+ }],
+ [{
+ "label": "桃园",
+ "value": "660901"
+ }],
+ [{
+ "label": "苗栗",
+ "value": "661001"
+ }],
+ [{
+ "label": "彰化",
+ "value": "661101"
+ }],
+ [{
+ "label": "南投",
+ "value": "661201"
+ }],
+ [{
+ "label": "云林",
+ "value": "661301"
+ }],
+ [{
+ "label": "屏东",
+ "value": "661401"
+ }],
+ [{
+ "label": "台东",
+ "value": "661501"
+ }],
+ [{
+ "label": "花莲",
+ "value": "661601"
+ }],
+ [{
+ "label": "澎湖",
+ "value": "661701"
+ }]
+ ],
+ [
+ [{
+ "label": "香港岛",
+ "value": "670101"
+ }],
+ [{
+ "label": "九龙",
+ "value": "670201"
+ }],
+ [{
+ "label": "新界",
+ "value": "670301"
+ }]
+ ],
+ [
+ [{
+ "label": "澳门半岛",
+ "value": "680101"
+ }],
+ [{
+ "label": "氹仔岛",
+ "value": "680201"
+ }],
+ [{
+ "label": "路环岛",
+ "value": "680301"
+ }],
+ [{
+ "label": "路氹城",
+ "value": "680401"
+ }]
+ ]
+]
+export default areaData;
diff --git a/components/mpvue-citypicker/city-data/city.js b/components/mpvue-citypicker/city-data/city.js
new file mode 100644
index 00000000..8c1dc262
--- /dev/null
+++ b/components/mpvue-citypicker/city-data/city.js
@@ -0,0 +1,1503 @@
+/* eslint-disable */
+var cityData = [
+ [{
+ "label": "市辖区",
+ "value": "1101"
+ }],
+ [{
+ "label": "市辖区",
+ "value": "1201"
+ }],
+ [{
+ "label": "石家庄市",
+ "value": "1301"
+ },
+ {
+ "label": "唐山市",
+ "value": "1302"
+ },
+ {
+ "label": "秦皇岛市",
+ "value": "1303"
+ },
+ {
+ "label": "邯郸市",
+ "value": "1304"
+ },
+ {
+ "label": "邢台市",
+ "value": "1305"
+ },
+ {
+ "label": "保定市",
+ "value": "1306"
+ },
+ {
+ "label": "张家口市",
+ "value": "1307"
+ },
+ {
+ "label": "承德市",
+ "value": "1308"
+ },
+ {
+ "label": "沧州市",
+ "value": "1309"
+ },
+ {
+ "label": "廊坊市",
+ "value": "1310"
+ },
+ {
+ "label": "衡水市",
+ "value": "1311"
+ }
+ ],
+ [{
+ "label": "太原市",
+ "value": "1401"
+ },
+ {
+ "label": "大同市",
+ "value": "1402"
+ },
+ {
+ "label": "阳泉市",
+ "value": "1403"
+ },
+ {
+ "label": "长治市",
+ "value": "1404"
+ },
+ {
+ "label": "晋城市",
+ "value": "1405"
+ },
+ {
+ "label": "朔州市",
+ "value": "1406"
+ },
+ {
+ "label": "晋中市",
+ "value": "1407"
+ },
+ {
+ "label": "运城市",
+ "value": "1408"
+ },
+ {
+ "label": "忻州市",
+ "value": "1409"
+ },
+ {
+ "label": "临汾市",
+ "value": "1410"
+ },
+ {
+ "label": "吕梁市",
+ "value": "1411"
+ }
+ ],
+ [{
+ "label": "呼和浩特市",
+ "value": "1501"
+ },
+ {
+ "label": "包头市",
+ "value": "1502"
+ },
+ {
+ "label": "乌海市",
+ "value": "1503"
+ },
+ {
+ "label": "赤峰市",
+ "value": "1504"
+ },
+ {
+ "label": "通辽市",
+ "value": "1505"
+ },
+ {
+ "label": "鄂尔多斯市",
+ "value": "1506"
+ },
+ {
+ "label": "呼伦贝尔市",
+ "value": "1507"
+ },
+ {
+ "label": "巴彦淖尔市",
+ "value": "1508"
+ },
+ {
+ "label": "乌兰察布市",
+ "value": "1509"
+ },
+ {
+ "label": "兴安盟",
+ "value": "1522"
+ },
+ {
+ "label": "锡林郭勒盟",
+ "value": "1525"
+ },
+ {
+ "label": "阿拉善盟",
+ "value": "1529"
+ }
+ ],
+ [{
+ "label": "沈阳市",
+ "value": "2101"
+ },
+ {
+ "label": "大连市",
+ "value": "2102"
+ },
+ {
+ "label": "鞍山市",
+ "value": "2103"
+ },
+ {
+ "label": "抚顺市",
+ "value": "2104"
+ },
+ {
+ "label": "本溪市",
+ "value": "2105"
+ },
+ {
+ "label": "丹东市",
+ "value": "2106"
+ },
+ {
+ "label": "锦州市",
+ "value": "2107"
+ },
+ {
+ "label": "营口市",
+ "value": "2108"
+ },
+ {
+ "label": "阜新市",
+ "value": "2109"
+ },
+ {
+ "label": "辽阳市",
+ "value": "2110"
+ },
+ {
+ "label": "盘锦市",
+ "value": "2111"
+ },
+ {
+ "label": "铁岭市",
+ "value": "2112"
+ },
+ {
+ "label": "朝阳市",
+ "value": "2113"
+ },
+ {
+ "label": "葫芦岛市",
+ "value": "2114"
+ }
+ ],
+ [{
+ "label": "长春市",
+ "value": "2201"
+ },
+ {
+ "label": "吉林市",
+ "value": "2202"
+ },
+ {
+ "label": "四平市",
+ "value": "2203"
+ },
+ {
+ "label": "辽源市",
+ "value": "2204"
+ },
+ {
+ "label": "通化市",
+ "value": "2205"
+ },
+ {
+ "label": "白山市",
+ "value": "2206"
+ },
+ {
+ "label": "松原市",
+ "value": "2207"
+ },
+ {
+ "label": "白城市",
+ "value": "2208"
+ },
+ {
+ "label": "延边朝鲜族自治州",
+ "value": "2224"
+ }
+ ],
+ [{
+ "label": "哈尔滨市",
+ "value": "2301"
+ },
+ {
+ "label": "齐齐哈尔市",
+ "value": "2302"
+ },
+ {
+ "label": "鸡西市",
+ "value": "2303"
+ },
+ {
+ "label": "鹤岗市",
+ "value": "2304"
+ },
+ {
+ "label": "双鸭山市",
+ "value": "2305"
+ },
+ {
+ "label": "大庆市",
+ "value": "2306"
+ },
+ {
+ "label": "伊春市",
+ "value": "2307"
+ },
+ {
+ "label": "佳木斯市",
+ "value": "2308"
+ },
+ {
+ "label": "七台河市",
+ "value": "2309"
+ },
+ {
+ "label": "牡丹江市",
+ "value": "2310"
+ },
+ {
+ "label": "黑河市",
+ "value": "2311"
+ },
+ {
+ "label": "绥化市",
+ "value": "2312"
+ },
+ {
+ "label": "大兴安岭地区",
+ "value": "2327"
+ }
+ ],
+ [{
+ "label": "市辖区",
+ "value": "3101"
+ }],
+ [{
+ "label": "南京市",
+ "value": "3201"
+ },
+ {
+ "label": "无锡市",
+ "value": "3202"
+ },
+ {
+ "label": "徐州市",
+ "value": "3203"
+ },
+ {
+ "label": "常州市",
+ "value": "3204"
+ },
+ {
+ "label": "苏州市",
+ "value": "3205"
+ },
+ {
+ "label": "南通市",
+ "value": "3206"
+ },
+ {
+ "label": "连云港市",
+ "value": "3207"
+ },
+ {
+ "label": "淮安市",
+ "value": "3208"
+ },
+ {
+ "label": "盐城市",
+ "value": "3209"
+ },
+ {
+ "label": "扬州市",
+ "value": "3210"
+ },
+ {
+ "label": "镇江市",
+ "value": "3211"
+ },
+ {
+ "label": "泰州市",
+ "value": "3212"
+ },
+ {
+ "label": "宿迁市",
+ "value": "3213"
+ }
+ ],
+ [{
+ "label": "杭州市",
+ "value": "3301"
+ },
+ {
+ "label": "宁波市",
+ "value": "3302"
+ },
+ {
+ "label": "温州市",
+ "value": "3303"
+ },
+ {
+ "label": "嘉兴市",
+ "value": "3304"
+ },
+ {
+ "label": "湖州市",
+ "value": "3305"
+ },
+ {
+ "label": "绍兴市",
+ "value": "3306"
+ },
+ {
+ "label": "金华市",
+ "value": "3307"
+ },
+ {
+ "label": "衢州市",
+ "value": "3308"
+ },
+ {
+ "label": "舟山市",
+ "value": "3309"
+ },
+ {
+ "label": "台州市",
+ "value": "3310"
+ },
+ {
+ "label": "丽水市",
+ "value": "3311"
+ }
+ ],
+ [{
+ "label": "合肥市",
+ "value": "3401"
+ },
+ {
+ "label": "芜湖市",
+ "value": "3402"
+ },
+ {
+ "label": "蚌埠市",
+ "value": "3403"
+ },
+ {
+ "label": "淮南市",
+ "value": "3404"
+ },
+ {
+ "label": "马鞍山市",
+ "value": "3405"
+ },
+ {
+ "label": "淮北市",
+ "value": "3406"
+ },
+ {
+ "label": "铜陵市",
+ "value": "3407"
+ },
+ {
+ "label": "安庆市",
+ "value": "3408"
+ },
+ {
+ "label": "黄山市",
+ "value": "3410"
+ },
+ {
+ "label": "滁州市",
+ "value": "3411"
+ },
+ {
+ "label": "阜阳市",
+ "value": "3412"
+ },
+ {
+ "label": "宿州市",
+ "value": "3413"
+ },
+ {
+ "label": "六安市",
+ "value": "3415"
+ },
+ {
+ "label": "亳州市",
+ "value": "3416"
+ },
+ {
+ "label": "池州市",
+ "value": "3417"
+ },
+ {
+ "label": "宣城市",
+ "value": "3418"
+ }
+ ],
+ [{
+ "label": "福州市",
+ "value": "3501"
+ },
+ {
+ "label": "厦门市",
+ "value": "3502"
+ },
+ {
+ "label": "莆田市",
+ "value": "3503"
+ },
+ {
+ "label": "三明市",
+ "value": "3504"
+ },
+ {
+ "label": "泉州市",
+ "value": "3505"
+ },
+ {
+ "label": "漳州市",
+ "value": "3506"
+ },
+ {
+ "label": "南平市",
+ "value": "3507"
+ },
+ {
+ "label": "龙岩市",
+ "value": "3508"
+ },
+ {
+ "label": "宁德市",
+ "value": "3509"
+ }
+ ],
+ [{
+ "label": "南昌市",
+ "value": "3601"
+ },
+ {
+ "label": "景德镇市",
+ "value": "3602"
+ },
+ {
+ "label": "萍乡市",
+ "value": "3603"
+ },
+ {
+ "label": "九江市",
+ "value": "3604"
+ },
+ {
+ "label": "新余市",
+ "value": "3605"
+ },
+ {
+ "label": "鹰潭市",
+ "value": "3606"
+ },
+ {
+ "label": "赣州市",
+ "value": "3607"
+ },
+ {
+ "label": "吉安市",
+ "value": "3608"
+ },
+ {
+ "label": "宜春市",
+ "value": "3609"
+ },
+ {
+ "label": "抚州市",
+ "value": "3610"
+ },
+ {
+ "label": "上饶市",
+ "value": "3611"
+ }
+ ],
+ [{
+ "label": "济南市",
+ "value": "3701"
+ },
+ {
+ "label": "青岛市",
+ "value": "3702"
+ },
+ {
+ "label": "淄博市",
+ "value": "3703"
+ },
+ {
+ "label": "枣庄市",
+ "value": "3704"
+ },
+ {
+ "label": "东营市",
+ "value": "3705"
+ },
+ {
+ "label": "烟台市",
+ "value": "3706"
+ },
+ {
+ "label": "潍坊市",
+ "value": "3707"
+ },
+ {
+ "label": "济宁市",
+ "value": "3708"
+ },
+ {
+ "label": "泰安市",
+ "value": "3709"
+ },
+ {
+ "label": "威海市",
+ "value": "3710"
+ },
+ {
+ "label": "日照市",
+ "value": "3711"
+ },
+ {
+ "label": "莱芜市",
+ "value": "3712"
+ },
+ {
+ "label": "临沂市",
+ "value": "3713"
+ },
+ {
+ "label": "德州市",
+ "value": "3714"
+ },
+ {
+ "label": "聊城市",
+ "value": "3715"
+ },
+ {
+ "label": "滨州市",
+ "value": "3716"
+ },
+ {
+ "label": "菏泽市",
+ "value": "3717"
+ }
+ ],
+ [{
+ "label": "郑州市",
+ "value": "4101"
+ },
+ {
+ "label": "开封市",
+ "value": "4102"
+ },
+ {
+ "label": "洛阳市",
+ "value": "4103"
+ },
+ {
+ "label": "平顶山市",
+ "value": "4104"
+ },
+ {
+ "label": "安阳市",
+ "value": "4105"
+ },
+ {
+ "label": "鹤壁市",
+ "value": "4106"
+ },
+ {
+ "label": "新乡市",
+ "value": "4107"
+ },
+ {
+ "label": "焦作市",
+ "value": "4108"
+ },
+ {
+ "label": "濮阳市",
+ "value": "4109"
+ },
+ {
+ "label": "许昌市",
+ "value": "4110"
+ },
+ {
+ "label": "漯河市",
+ "value": "4111"
+ },
+ {
+ "label": "三门峡市",
+ "value": "4112"
+ },
+ {
+ "label": "南阳市",
+ "value": "4113"
+ },
+ {
+ "label": "商丘市",
+ "value": "4114"
+ },
+ {
+ "label": "信阳市",
+ "value": "4115"
+ },
+ {
+ "label": "周口市",
+ "value": "4116"
+ },
+ {
+ "label": "驻马店市",
+ "value": "4117"
+ },
+ {
+ "label": "省直辖县级行政区划",
+ "value": "4190"
+ }
+ ],
+ [{
+ "label": "武汉市",
+ "value": "4201"
+ },
+ {
+ "label": "黄石市",
+ "value": "4202"
+ },
+ {
+ "label": "十堰市",
+ "value": "4203"
+ },
+ {
+ "label": "宜昌市",
+ "value": "4205"
+ },
+ {
+ "label": "襄阳市",
+ "value": "4206"
+ },
+ {
+ "label": "鄂州市",
+ "value": "4207"
+ },
+ {
+ "label": "荆门市",
+ "value": "4208"
+ },
+ {
+ "label": "孝感市",
+ "value": "4209"
+ },
+ {
+ "label": "荆州市",
+ "value": "4210"
+ },
+ {
+ "label": "黄冈市",
+ "value": "4211"
+ },
+ {
+ "label": "咸宁市",
+ "value": "4212"
+ },
+ {
+ "label": "随州市",
+ "value": "4213"
+ },
+ {
+ "label": "恩施土家族苗族自治州",
+ "value": "4228"
+ },
+ {
+ "label": "省直辖县级行政区划",
+ "value": "4290"
+ }
+ ],
+ [{
+ "label": "长沙市",
+ "value": "4301"
+ },
+ {
+ "label": "株洲市",
+ "value": "4302"
+ },
+ {
+ "label": "湘潭市",
+ "value": "4303"
+ },
+ {
+ "label": "衡阳市",
+ "value": "4304"
+ },
+ {
+ "label": "邵阳市",
+ "value": "4305"
+ },
+ {
+ "label": "岳阳市",
+ "value": "4306"
+ },
+ {
+ "label": "常德市",
+ "value": "4307"
+ },
+ {
+ "label": "张家界市",
+ "value": "4308"
+ },
+ {
+ "label": "益阳市",
+ "value": "4309"
+ },
+ {
+ "label": "郴州市",
+ "value": "4310"
+ },
+ {
+ "label": "永州市",
+ "value": "4311"
+ },
+ {
+ "label": "怀化市",
+ "value": "4312"
+ },
+ {
+ "label": "娄底市",
+ "value": "4313"
+ },
+ {
+ "label": "湘西土家族苗族自治州",
+ "value": "4331"
+ }
+ ],
+ [{
+ "label": "广州市",
+ "value": "4401"
+ },
+ {
+ "label": "韶关市",
+ "value": "4402"
+ },
+ {
+ "label": "深圳市",
+ "value": "4403"
+ },
+ {
+ "label": "珠海市",
+ "value": "4404"
+ },
+ {
+ "label": "汕头市",
+ "value": "4405"
+ },
+ {
+ "label": "佛山市",
+ "value": "4406"
+ },
+ {
+ "label": "江门市",
+ "value": "4407"
+ },
+ {
+ "label": "湛江市",
+ "value": "4408"
+ },
+ {
+ "label": "茂名市",
+ "value": "4409"
+ },
+ {
+ "label": "肇庆市",
+ "value": "4412"
+ },
+ {
+ "label": "惠州市",
+ "value": "4413"
+ },
+ {
+ "label": "梅州市",
+ "value": "4414"
+ },
+ {
+ "label": "汕尾市",
+ "value": "4415"
+ },
+ {
+ "label": "河源市",
+ "value": "4416"
+ },
+ {
+ "label": "阳江市",
+ "value": "4417"
+ },
+ {
+ "label": "清远市",
+ "value": "4418"
+ },
+ {
+ "label": "东莞市",
+ "value": "4419"
+ },
+ {
+ "label": "中山市",
+ "value": "4420"
+ },
+ {
+ "label": "潮州市",
+ "value": "4451"
+ },
+ {
+ "label": "揭阳市",
+ "value": "4452"
+ },
+ {
+ "label": "云浮市",
+ "value": "4453"
+ }
+ ],
+ [{
+ "label": "南宁市",
+ "value": "4501"
+ },
+ {
+ "label": "柳州市",
+ "value": "4502"
+ },
+ {
+ "label": "桂林市",
+ "value": "4503"
+ },
+ {
+ "label": "梧州市",
+ "value": "4504"
+ },
+ {
+ "label": "北海市",
+ "value": "4505"
+ },
+ {
+ "label": "防城港市",
+ "value": "4506"
+ },
+ {
+ "label": "钦州市",
+ "value": "4507"
+ },
+ {
+ "label": "贵港市",
+ "value": "4508"
+ },
+ {
+ "label": "玉林市",
+ "value": "4509"
+ },
+ {
+ "label": "百色市",
+ "value": "4510"
+ },
+ {
+ "label": "贺州市",
+ "value": "4511"
+ },
+ {
+ "label": "河池市",
+ "value": "4512"
+ },
+ {
+ "label": "来宾市",
+ "value": "4513"
+ },
+ {
+ "label": "崇左市",
+ "value": "4514"
+ }
+ ],
+ [{
+ "label": "海口市",
+ "value": "4601"
+ },
+ {
+ "label": "三亚市",
+ "value": "4602"
+ },
+ {
+ "label": "三沙市",
+ "value": "4603"
+ },
+ {
+ "label": "儋州市",
+ "value": "4604"
+ },
+ {
+ "label": "省直辖县级行政区划",
+ "value": "4690"
+ }
+ ],
+ [{
+ "label": "市辖区",
+ "value": "5001"
+ },
+ {
+ "label": "县",
+ "value": "5002"
+ }
+ ],
+ [{
+ "label": "成都市",
+ "value": "5101"
+ },
+ {
+ "label": "自贡市",
+ "value": "5103"
+ },
+ {
+ "label": "攀枝花市",
+ "value": "5104"
+ },
+ {
+ "label": "泸州市",
+ "value": "5105"
+ },
+ {
+ "label": "德阳市",
+ "value": "5106"
+ },
+ {
+ "label": "绵阳市",
+ "value": "5107"
+ },
+ {
+ "label": "广元市",
+ "value": "5108"
+ },
+ {
+ "label": "遂宁市",
+ "value": "5109"
+ },
+ {
+ "label": "内江市",
+ "value": "5110"
+ },
+ {
+ "label": "乐山市",
+ "value": "5111"
+ },
+ {
+ "label": "南充市",
+ "value": "5113"
+ },
+ {
+ "label": "眉山市",
+ "value": "5114"
+ },
+ {
+ "label": "宜宾市",
+ "value": "5115"
+ },
+ {
+ "label": "广安市",
+ "value": "5116"
+ },
+ {
+ "label": "达州市",
+ "value": "5117"
+ },
+ {
+ "label": "雅安市",
+ "value": "5118"
+ },
+ {
+ "label": "巴中市",
+ "value": "5119"
+ },
+ {
+ "label": "资阳市",
+ "value": "5120"
+ },
+ {
+ "label": "阿坝藏族羌族自治州",
+ "value": "5132"
+ },
+ {
+ "label": "甘孜藏族自治州",
+ "value": "5133"
+ },
+ {
+ "label": "凉山彝族自治州",
+ "value": "5134"
+ }
+ ],
+ [{
+ "label": "贵阳市",
+ "value": "5201"
+ },
+ {
+ "label": "六盘水市",
+ "value": "5202"
+ },
+ {
+ "label": "遵义市",
+ "value": "5203"
+ },
+ {
+ "label": "安顺市",
+ "value": "5204"
+ },
+ {
+ "label": "毕节市",
+ "value": "5205"
+ },
+ {
+ "label": "铜仁市",
+ "value": "5206"
+ },
+ {
+ "label": "黔西南布依族苗族自治州",
+ "value": "5223"
+ },
+ {
+ "label": "黔东南苗族侗族自治州",
+ "value": "5226"
+ },
+ {
+ "label": "黔南布依族苗族自治州",
+ "value": "5227"
+ }
+ ],
+ [{
+ "label": "昆明市",
+ "value": "5301"
+ },
+ {
+ "label": "曲靖市",
+ "value": "5303"
+ },
+ {
+ "label": "玉溪市",
+ "value": "5304"
+ },
+ {
+ "label": "保山市",
+ "value": "5305"
+ },
+ {
+ "label": "昭通市",
+ "value": "5306"
+ },
+ {
+ "label": "丽江市",
+ "value": "5307"
+ },
+ {
+ "label": "普洱市",
+ "value": "5308"
+ },
+ {
+ "label": "临沧市",
+ "value": "5309"
+ },
+ {
+ "label": "楚雄彝族自治州",
+ "value": "5323"
+ },
+ {
+ "label": "红河哈尼族彝族自治州",
+ "value": "5325"
+ },
+ {
+ "label": "文山壮族苗族自治州",
+ "value": "5326"
+ },
+ {
+ "label": "西双版纳傣族自治州",
+ "value": "5328"
+ },
+ {
+ "label": "大理白族自治州",
+ "value": "5329"
+ },
+ {
+ "label": "德宏傣族景颇族自治州",
+ "value": "5331"
+ },
+ {
+ "label": "怒江傈僳族自治州",
+ "value": "5333"
+ },
+ {
+ "label": "迪庆藏族自治州",
+ "value": "5334"
+ }
+ ],
+ [{
+ "label": "拉萨市",
+ "value": "5401"
+ },
+ {
+ "label": "日喀则市",
+ "value": "5402"
+ },
+ {
+ "label": "昌都市",
+ "value": "5403"
+ },
+ {
+ "label": "林芝市",
+ "value": "5404"
+ },
+ {
+ "label": "山南市",
+ "value": "5405"
+ },
+ {
+ "label": "那曲地区",
+ "value": "5424"
+ },
+ {
+ "label": "阿里地区",
+ "value": "5425"
+ }
+ ],
+ [{
+ "label": "西安市",
+ "value": "6101"
+ },
+ {
+ "label": "铜川市",
+ "value": "6102"
+ },
+ {
+ "label": "宝鸡市",
+ "value": "6103"
+ },
+ {
+ "label": "咸阳市",
+ "value": "6104"
+ },
+ {
+ "label": "渭南市",
+ "value": "6105"
+ },
+ {
+ "label": "延安市",
+ "value": "6106"
+ },
+ {
+ "label": "汉中市",
+ "value": "6107"
+ },
+ {
+ "label": "榆林市",
+ "value": "6108"
+ },
+ {
+ "label": "安康市",
+ "value": "6109"
+ },
+ {
+ "label": "商洛市",
+ "value": "6110"
+ }
+ ],
+ [{
+ "label": "兰州市",
+ "value": "6201"
+ },
+ {
+ "label": "嘉峪关市",
+ "value": "6202"
+ },
+ {
+ "label": "金昌市",
+ "value": "6203"
+ },
+ {
+ "label": "白银市",
+ "value": "6204"
+ },
+ {
+ "label": "天水市",
+ "value": "6205"
+ },
+ {
+ "label": "武威市",
+ "value": "6206"
+ },
+ {
+ "label": "张掖市",
+ "value": "6207"
+ },
+ {
+ "label": "平凉市",
+ "value": "6208"
+ },
+ {
+ "label": "酒泉市",
+ "value": "6209"
+ },
+ {
+ "label": "庆阳市",
+ "value": "6210"
+ },
+ {
+ "label": "定西市",
+ "value": "6211"
+ },
+ {
+ "label": "陇南市",
+ "value": "6212"
+ },
+ {
+ "label": "临夏回族自治州",
+ "value": "6229"
+ },
+ {
+ "label": "甘南藏族自治州",
+ "value": "6230"
+ }
+ ],
+ [{
+ "label": "西宁市",
+ "value": "6301"
+ },
+ {
+ "label": "海东市",
+ "value": "6302"
+ },
+ {
+ "label": "海北藏族自治州",
+ "value": "6322"
+ },
+ {
+ "label": "黄南藏族自治州",
+ "value": "6323"
+ },
+ {
+ "label": "海南藏族自治州",
+ "value": "6325"
+ },
+ {
+ "label": "果洛藏族自治州",
+ "value": "6326"
+ },
+ {
+ "label": "玉树藏族自治州",
+ "value": "6327"
+ },
+ {
+ "label": "海西蒙古族藏族自治州",
+ "value": "6328"
+ }
+ ],
+ [{
+ "label": "银川市",
+ "value": "6401"
+ },
+ {
+ "label": "石嘴山市",
+ "value": "6402"
+ },
+ {
+ "label": "吴忠市",
+ "value": "6403"
+ },
+ {
+ "label": "固原市",
+ "value": "6404"
+ },
+ {
+ "label": "中卫市",
+ "value": "6405"
+ }
+ ],
+ [{
+ "label": "乌鲁木齐市",
+ "value": "6501"
+ },
+ {
+ "label": "克拉玛依市",
+ "value": "6502"
+ },
+ {
+ "label": "吐鲁番市",
+ "value": "6504"
+ },
+ {
+ "label": "哈密市",
+ "value": "6505"
+ },
+ {
+ "label": "昌吉回族自治州",
+ "value": "6523"
+ },
+ {
+ "label": "博尔塔拉蒙古自治州",
+ "value": "6527"
+ },
+ {
+ "label": "巴音郭楞蒙古自治州",
+ "value": "6528"
+ },
+ {
+ "label": "阿克苏地区",
+ "value": "6529"
+ },
+ {
+ "label": "克孜勒苏柯尔克孜自治州",
+ "value": "6530"
+ },
+ {
+ "label": "喀什地区",
+ "value": "6531"
+ },
+ {
+ "label": "和田地区",
+ "value": "6532"
+ },
+ {
+ "label": "伊犁哈萨克自治州",
+ "value": "6540"
+ },
+ {
+ "label": "塔城地区",
+ "value": "6542"
+ },
+ {
+ "label": "阿勒泰地区",
+ "value": "6543"
+ },
+ {
+ "label": "自治区直辖县级行政区划",
+ "value": "6590"
+ }
+ ],
+ [{
+ "label": "台北",
+ "value": "6601"
+ },
+ {
+ "label": "高雄",
+ "value": "6602"
+ },
+ {
+ "label": "基隆",
+ "value": "6603"
+ },
+ {
+ "label": "台中",
+ "value": "6604"
+ },
+ {
+ "label": "台南",
+ "value": "6605"
+ },
+ {
+ "label": "新竹",
+ "value": "6606"
+ },
+ {
+ "label": "嘉义",
+ "value": "6607"
+ },
+ {
+ "label": "宜兰",
+ "value": "6608"
+ },
+ {
+ "label": "桃园",
+ "value": "6609"
+ },
+ {
+ "label": "苗栗",
+ "value": "6610"
+ },
+ {
+ "label": "彰化",
+ "value": "6611"
+ },
+ {
+ "label": "南投",
+ "value": "6612"
+ },
+ {
+ "label": "云林",
+ "value": "6613"
+ },
+ {
+ "label": "屏东",
+ "value": "6614"
+ },
+ {
+ "label": "台东",
+ "value": "6615"
+ },
+ {
+ "label": "花莲",
+ "value": "6616"
+ },
+ {
+ "label": "澎湖",
+ "value": "6617"
+ }
+ ],
+ [{
+ "label": "香港岛",
+ "value": "6701"
+ },
+ {
+ "label": "九龙",
+ "value": "6702"
+ },
+ {
+ "label": "新界",
+ "value": "6703"
+ }
+ ],
+ [{
+ "label": "澳门半岛",
+ "value": "6801"
+ },
+ {
+ "label": "氹仔岛",
+ "value": "6802"
+ },
+ {
+ "label": "路环岛",
+ "value": "6803"
+ },
+ {
+ "label": "路氹城",
+ "value": "6804"
+ }
+ ]
+]
+export default cityData;
diff --git a/components/mpvue-citypicker/city-data/province.js b/components/mpvue-citypicker/city-data/province.js
new file mode 100644
index 00000000..1bd680e8
--- /dev/null
+++ b/components/mpvue-citypicker/city-data/province.js
@@ -0,0 +1,139 @@
+/* eslint-disable */
+var provinceData = [{
+ "label": "北京市",
+ "value": "11"
+ },
+ {
+ "label": "天津市",
+ "value": "12"
+ },
+ {
+ "label": "河北省",
+ "value": "13"
+ },
+ {
+ "label": "山西省",
+ "value": "14"
+ },
+ {
+ "label": "内蒙古自治区",
+ "value": "15"
+ },
+ {
+ "label": "辽宁省",
+ "value": "21"
+ },
+ {
+ "label": "吉林省",
+ "value": "22"
+ },
+ {
+ "label": "黑龙江省",
+ "value": "23"
+ },
+ {
+ "label": "上海市",
+ "value": "31"
+ },
+ {
+ "label": "江苏省",
+ "value": "32"
+ },
+ {
+ "label": "浙江省",
+ "value": "33"
+ },
+ {
+ "label": "安徽省",
+ "value": "34"
+ },
+ {
+ "label": "福建省",
+ "value": "35"
+ },
+ {
+ "label": "江西省",
+ "value": "36"
+ },
+ {
+ "label": "山东省",
+ "value": "37"
+ },
+ {
+ "label": "河南省",
+ "value": "41"
+ },
+ {
+ "label": "湖北省",
+ "value": "42"
+ },
+ {
+ "label": "湖南省",
+ "value": "43"
+ },
+ {
+ "label": "广东省",
+ "value": "44"
+ },
+ {
+ "label": "广西壮族自治区",
+ "value": "45"
+ },
+ {
+ "label": "海南省",
+ "value": "46"
+ },
+ {
+ "label": "重庆市",
+ "value": "50"
+ },
+ {
+ "label": "四川省",
+ "value": "51"
+ },
+ {
+ "label": "贵州省",
+ "value": "52"
+ },
+ {
+ "label": "云南省",
+ "value": "53"
+ },
+ {
+ "label": "西藏自治区",
+ "value": "54"
+ },
+ {
+ "label": "陕西省",
+ "value": "61"
+ },
+ {
+ "label": "甘肃省",
+ "value": "62"
+ },
+ {
+ "label": "青海省",
+ "value": "63"
+ },
+ {
+ "label": "宁夏回族自治区",
+ "value": "64"
+ },
+ {
+ "label": "新疆维吾尔自治区",
+ "value": "65"
+ },
+ {
+ "label": "台湾",
+ "value": "66"
+ },
+ {
+ "label": "香港",
+ "value": "67"
+ },
+ {
+ "label": "澳门",
+ "value": "68"
+ }
+]
+export default provinceData;
diff --git a/components/mpvue-citypicker/mpvueCityPicker.vue b/components/mpvue-citypicker/mpvueCityPicker.vue
new file mode 100644
index 00000000..ec02c8bc
--- /dev/null
+++ b/components/mpvue-citypicker/mpvueCityPicker.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+ {{item.label}}
+
+
+ {{item.label}}
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+
diff --git a/components/mpvue-echarts/src/echarts.vue b/components/mpvue-echarts/src/echarts.vue
new file mode 100644
index 00000000..e1cbb661
--- /dev/null
+++ b/components/mpvue-echarts/src/echarts.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
diff --git a/components/mpvue-echarts/src/wx-canvas.js b/components/mpvue-echarts/src/wx-canvas.js
new file mode 100644
index 00000000..ef588931
--- /dev/null
+++ b/components/mpvue-echarts/src/wx-canvas.js
@@ -0,0 +1,73 @@
+export default class WxCanvas {
+ constructor(ctx, canvasId) {
+ this.ctx = ctx;
+ this.canvasId = canvasId;
+ this.chart = null;
+
+ WxCanvas.initStyle(ctx);
+ this.initEvent();
+ }
+
+ getContext(contextType) {
+ return contextType === '2d' ? this.ctx : null;
+ }
+
+ setChart(chart) {
+ this.chart = chart;
+ }
+
+ attachEvent() {
+ // noop
+ }
+
+ detachEvent() {
+ // noop
+ }
+
+ static initStyle(ctx) {
+ const styles = ['fillStyle', 'strokeStyle', 'globalAlpha',
+ 'textAlign', 'textBaseAlign', 'shadow', 'lineWidth',
+ 'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize'];
+
+ styles.forEach((style) => {
+ Object.defineProperty(ctx, style, {
+ set: (value) => {
+ if ((style !== 'fillStyle' && style !== 'strokeStyle')
+ || (value !== 'none' && value !== null)
+ ) {
+ ctx[`set${style.charAt(0).toUpperCase()}${style.slice(1)}`](value);
+ }
+ },
+ });
+ });
+
+ ctx.createRadialGradient = () => ctx.createCircularGradient(arguments);
+ }
+
+ initEvent() {
+ this.event = {};
+ const eventNames = [{
+ wxName: 'touchStart',
+ ecName: 'mousedown',
+ }, {
+ wxName: 'touchMove',
+ ecName: 'mousemove',
+ }, {
+ wxName: 'touchEnd',
+ ecName: 'mouseup',
+ }, {
+ wxName: 'touchEnd',
+ ecName: 'click',
+ }];
+
+ eventNames.forEach((name) => {
+ this.event[name.wxName] = (e) => {
+ const touch = e.mp.touches[0];
+ this.chart._zr.handler.dispatch(name.ecName, {
+ zrX: name.wxName === 'tap' ? touch.clientX : touch.x,
+ zrY: name.wxName === 'tap' ? touch.clientY : touch.y,
+ });
+ };
+ });
+ }
+}
diff --git a/components/mpvue-picker/mpvuePicker.vue b/components/mpvue-picker/mpvuePicker.vue
new file mode 100644
index 00000000..93397ee8
--- /dev/null
+++ b/components/mpvue-picker/mpvuePicker.vue
@@ -0,0 +1,484 @@
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+ {{item.label}}
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+ {{item.label}}
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+ {{item.label}}
+
+
+
+ {{item.label}}
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+
diff --git a/components/mpvueGestureLock/gestureLock.js b/components/mpvueGestureLock/gestureLock.js
new file mode 100644
index 00000000..21cf4594
--- /dev/null
+++ b/components/mpvueGestureLock/gestureLock.js
@@ -0,0 +1,175 @@
+class GestureLock {
+
+ constructor(containerWidth, cycleRadius) {
+ this.containerWidth = containerWidth; // 容器宽度
+ this.cycleRadius = cycleRadius; // 圆的半径
+
+ this.circleArray = []; // 全部圆的对象数组
+ this.checkPoints = []; // 选中的圆的对象数组
+ this.lineArray = []; // 已激活锁之间的线段数组
+ this.lastCheckPoint = 0; // 最后一个激活的锁
+ this.offsetX = 0; // 容器的 X 偏移
+ this.offsetY = 0; // 容器的 Y 偏移
+ this.activeLine = {}; // 最后一个激活的锁与当前位置之间的线段
+
+ this.windowWidth = wx.getSystemInfoSync().windowWidth; // 窗口大小(用于rpx 和 px 转换)
+
+ this.initCircleArray();
+ }
+
+ // 初始化 画布上的 9个圆
+ initCircleArray() {
+ const cycleMargin = (this.containerWidth - 6 * this.cycleRadius) / 6;
+ let count = 0;
+ for (let i = 0; i < 3; i++) {
+ for (let j = 0; j < 3; j++) {
+ count++;
+ this.circleArray.push({
+ count: count,
+ x: this.rpxTopx((cycleMargin + this.cycleRadius) * (j * 2 + 1)),
+ y: this.rpxTopx((cycleMargin + this.cycleRadius) * (i * 2 + 1)),
+ radius: this.rpxTopx(this.cycleRadius),
+ check: false,
+ style: {
+ left: (cycleMargin + this.cycleRadius) * (j * 2 + 1) - this.cycleRadius + 'rpx',
+ top: (cycleMargin + this.cycleRadius) * (i * 2 + 1) - this.cycleRadius + 'rpx',
+ width: this.cycleRadius * 2 + 'rpx',
+ }
+ });
+ }
+ }
+ }
+
+ onTouchStart(e) {
+ this.setOffset(e);
+ this.checkTouch({
+ x: e.touches[0].pageX - this.offsetX,
+ y: e.touches[0].pageY - this.offsetY
+ });
+ }
+
+ onTouchMove(e) {
+ this.moveDraw(e)
+ }
+
+ onTouchEnd(e) {
+ const checkPoints = this.checkPoints;
+ this.reset();
+ return checkPoints;
+ }
+
+ // 初始化 偏移量
+ setOffset(e) {
+ this.offsetX = e.currentTarget.offsetLeft;
+ this.offsetY = e.currentTarget.offsetTop;
+ }
+
+ // 检测当时 触摸位置是否位于 锁上
+ checkTouch({
+ x,
+ y
+ }) {
+ for (let i = 0; i < this.circleArray.length; i++) {
+ let point = this.circleArray[i];
+ if (this.isPointInCycle(x, y, point.x, point.y, point.radius)) {
+ if (!point.check) {
+ this.checkPoints.push(point.count);
+ if (this.lastCheckPoint != 0) {
+ // 已激活锁之间的线段
+ const line = this.drawLine(this.lastCheckPoint, point);
+ this.lineArray.push(line);
+ }
+ this.lastCheckPoint = point;
+ }
+ point.check = true;
+ return;
+ }
+ }
+ }
+
+ // 画线 - 返回 样式 对象
+ drawLine(start, end) {
+ const width = this.getPointDis(start.x, start.y, end.x, end.y);
+ const rotate = this.getAngle(start, end);
+
+ return {
+ activeLeft: start.x + 'px',
+ activeTop: start.y + 'px',
+ activeWidth: width + 'px',
+ activeRotate: rotate + 'deg'
+ }
+
+ }
+
+ // 获取 画线的 角度
+ getAngle(start, end) {
+ var diff_x = end.x - start.x,
+ diff_y = end.y - start.y;
+ if (diff_x >= 0) {
+ return 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI);
+ } else {
+ return 180 + 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI);
+ }
+ }
+
+ // 判断 当前点是否位于 锁内
+ isPointInCycle(x, y, circleX, circleY, radius) {
+ return (this.getPointDis(x, y, circleX, circleY) < radius) ? true : false;
+ }
+
+ // 获取两点之间距离
+ getPointDis(ax, ay, bx, by) {
+ return Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));
+ }
+
+ // 移动 绘制
+ moveDraw(e) {
+ // 画经过的圆
+ const x = e.touches[0].pageX - this.offsetX;
+ const y = e.touches[0].pageY - this.offsetY;
+ this.checkTouch({
+ x,
+ y
+ });
+
+ // 画 最后一个激活的锁与当前位置之间的线段
+ this.activeLine = this.drawLine(this.lastCheckPoint, {
+ x,
+ y
+ });
+ }
+
+ // 使 画布 恢复初始状态
+ reset() {
+ this.circleArray.forEach((item) => {
+ item.check = false;
+ });
+ this.checkPoints = [];
+ this.lineArray = [];
+ this.activeLine = {};
+ this.lastCheckPoint = 0;
+ }
+
+
+ // 获取 最后一个激活的锁与当前位置之间的线段
+ getActiveLine() {
+ return this.activeLine;
+ }
+
+ // 获取 圆对象数组
+ getCycleArray() {
+ return this.circleArray;
+ }
+
+ // 获取 已激活锁之间的线段
+ getLineArray() {
+ return this.lineArray;
+ }
+
+ // 将 RPX 转换成 PX
+ rpxTopx(rpx) {
+ return rpx / 750 * this.windowWidth;
+ }
+}
+
+export default GestureLock;
diff --git a/components/mpvueGestureLock/index.vue b/components/mpvueGestureLock/index.vue
new file mode 100644
index 00000000..a2cefdd3
--- /dev/null
+++ b/components/mpvueGestureLock/index.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/my-paging/my-paging.vue b/components/my-paging/my-paging.vue
new file mode 100644
index 00000000..7c049290
--- /dev/null
+++ b/components/my-paging/my-paging.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/page-foot/page-foot.vue b/components/page-foot/page-foot.vue
new file mode 100644
index 00000000..1154dbe7
--- /dev/null
+++ b/components/page-foot/page-foot.vue
@@ -0,0 +1,38 @@
+
+
+ 感谢{{name}}提供本示例,
+ 我也提交
+
+
+
+
+
diff --git a/components/page-head/page-head.vue b/components/page-head/page-head.vue
new file mode 100644
index 00000000..07ed46dd
--- /dev/null
+++ b/components/page-head/page-head.vue
@@ -0,0 +1,16 @@
+
+
+ {{title}}
+
+
+
diff --git a/components/product.vue b/components/product.vue
new file mode 100644
index 00000000..bfa97265
--- /dev/null
+++ b/components/product.vue
@@ -0,0 +1,66 @@
+
+
+
+ {{title}}
+
+ ¥{{originalPrice}}
+ ¥{{favourPrice}}
+ {{tip}}
+
+
+
+
+
+
+
diff --git a/components/pullDown/pullDown.vue b/components/pullDown/pullDown.vue
new file mode 100644
index 00000000..bddf9758
--- /dev/null
+++ b/components/pullDown/pullDown.vue
@@ -0,0 +1,590 @@
+
+
+
+
+
+ {{label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/show-modal/show-modal.vue b/components/show-modal/show-modal.vue
new file mode 100644
index 00000000..f8b523a3
--- /dev/null
+++ b/components/show-modal/show-modal.vue
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cancelText }}
+
+
+
+ {{confirmText}}
+ ({{seconds}}s关闭)
+
+
+
+
+
+
+
+
+
+
diff --git a/components/tab-nvue/mediaList.vue b/components/tab-nvue/mediaList.vue
new file mode 100644
index 00000000..ea3d2247
--- /dev/null
+++ b/components/tab-nvue/mediaList.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+ {{options.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/u-charts/u-charts.js b/components/u-charts/u-charts.js
new file mode 100644
index 00000000..3b1b7989
--- /dev/null
+++ b/components/u-charts/u-charts.js
@@ -0,0 +1,5046 @@
+/*
+ * uCharts v1.8.5.20190815
+ * uni-app平台高性能跨全端图表,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)
+ * Copyright (c) 2019 QIUN秋云 https://www.ucharts.cn All rights reserved.
+ * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+ *
+ * uCharts官方网站
+ * https://www.uCharts.cn
+ *
+ * 开源地址:
+ * https://gitee.com/uCharts/uCharts
+ *
+ * uni-app插件市场地址:
+ * http://ext.dcloud.net.cn/plugin?id=271
+ *
+ */
+
+'use strict';
+
+var config = {
+ yAxisWidth: 15,
+ yAxisSplit: 5,
+ xAxisHeight: 15,
+ xAxisLineHeight: 15,
+ legendHeight: 15,
+ yAxisTitleWidth: 15,
+ padding: [10, 10, 10, 10],
+ pixelRatio: 1,
+ rotate: false,
+ columePadding: 3,
+ fontSize: 13,
+ //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],
+ dataPointShape: ['circle', 'circle', 'circle', 'circle'],
+ colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'],
+ pieChartLinePadding: 15,
+ pieChartTextPadding: 5,
+ xAxisTextPadding: 3,
+ titleColor: '#333333',
+ titleFontSize: 20,
+ subtitleColor: '#999999',
+ subtitleFontSize: 15,
+ toolTipPadding: 3,
+ toolTipBackground: '#000000',
+ toolTipOpacity: 0.7,
+ toolTipLineHeight: 20,
+ radarGridCount: 3,
+ radarLabelTextMargin: 15,
+ gaugeLabelTextMargin: 15
+};
+
+let assign;
+if (Object.assign) {
+ assign = Object.assign;
+} else {
+ // 使用polyfill
+ assign = function(target, varArgs) {
+ if (target == null) {
+ throw new TypeError('Cannot convert undefined or null to object');
+ }
+ var to = Object(target);
+ for (var index = 1; index < arguments.length; index++) {
+ var nextSource = arguments[index];
+ if (nextSource != null) {
+ for (var nextKey in nextSource) {
+ if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ }
+ return to;
+ }
+}
+
+var util = {
+ toFixed: function toFixed(num, limit) {
+ limit = limit || 2;
+ if (this.isFloat(num)) {
+ num = num.toFixed(limit);
+ }
+ return num;
+ },
+ isFloat: function isFloat(num) {
+ return num % 1 !== 0;
+ },
+ approximatelyEqual: function approximatelyEqual(num1, num2) {
+ return Math.abs(num1 - num2) < 1e-10;
+ },
+ isSameSign: function isSameSign(num1, num2) {
+ return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;
+ },
+ isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {
+ return this.isSameSign(p1.x, p2.x);
+ },
+ isCollision: function isCollision(obj1, obj2) {
+ obj1.end = {};
+ obj1.end.x = obj1.start.x + obj1.width;
+ obj1.end.y = obj1.start.y - obj1.height;
+ obj2.end = {};
+ obj2.end.x = obj2.start.x + obj2.width;
+ obj2.end.y = obj2.start.y - obj2.height;
+ var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y;
+ return !flag;
+ }
+};
+
+//兼容H5点击事件
+function getH5Offset(e) {
+ e.mp = {
+ changedTouches: []
+ };
+ e.mp.changedTouches.push({
+ x: e.offsetX,
+ y: e.offsetY
+ });
+ return e;
+}
+
+// hex 转 rgba
+function hexToRgb(hexValue, opc) {
+ var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+ var hex = hexValue.replace(rgx, function(m, r, g, b) {
+ return r + r + g + g + b + b;
+ });
+ var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+ var r = parseInt(rgb[1], 16);
+ var g = parseInt(rgb[2], 16);
+ var b = parseInt(rgb[3], 16);
+ return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')';
+}
+
+function findRange(num, type, limit) {
+ if (isNaN(num)) {
+ throw new Error('[uCharts] unvalid series data!');
+ }
+ limit = limit || 10;
+ type = type ? type : 'upper';
+ var multiple = 1;
+ while (limit < 1) {
+ limit *= 10;
+ multiple *= 10;
+ }
+ if (type === 'upper') {
+ num = Math.ceil(num * multiple);
+ } else {
+ num = Math.floor(num * multiple);
+ }
+ while (num % limit !== 0) {
+ if (type === 'upper') {
+ num++;
+ } else {
+ num--;
+ }
+ }
+ return num / multiple;
+}
+
+function calCandleMA(dayArr, nameArr, colorArr, kdata) {
+ let seriesTemp = [];
+ for (let k = 0; k < dayArr.length; k++) {
+ let seriesItem = {
+ data: [],
+ name: nameArr[k],
+ color: colorArr[k]
+ };
+ for (let i = 0, len = kdata.length; i < len; i++) {
+ if (i < dayArr[k]) {
+ seriesItem.data.push(null);
+ continue;
+ }
+ let sum = 0;
+ for (let j = 0; j < dayArr[k]; j++) {
+ sum += kdata[i - j][1];
+ }
+ seriesItem.data.push(+(sum / dayArr[k]).toFixed(3));
+ }
+ seriesTemp.push(seriesItem);
+ }
+ return seriesTemp;
+}
+
+function calValidDistance(distance, chartData, config, opts) {
+ var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3];
+ var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length-1);
+ var validDistance = distance;
+ if (distance >= 0) {
+ validDistance = 0;
+ } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {
+ validDistance = dataChartAreaWidth - dataChartWidth;
+ }
+ return validDistance;
+}
+
+function isInAngleRange(angle, startAngle, endAngle) {
+ function adjust(angle) {
+ while (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+ while (angle > 2 * Math.PI) {
+ angle -= 2 * Math.PI;
+ }
+ return angle;
+ }
+ angle = adjust(angle);
+ startAngle = adjust(startAngle);
+ endAngle = adjust(endAngle);
+ if (startAngle > endAngle) {
+ endAngle += 2 * Math.PI;
+ if (angle < startAngle) {
+ angle += 2 * Math.PI;
+ }
+ }
+ return angle >= startAngle && angle <= endAngle;
+}
+
+function calRotateTranslate(x, y, h) {
+ var xv = x;
+ var yv = h - y;
+ var transX = xv + (h - yv - xv) / Math.sqrt(2);
+ transX *= -1;
+ var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);
+ return {
+ transX: transX,
+ transY: transY
+ };
+}
+
+function createCurveControlPoints(points, i) {
+
+ function isNotMiddlePoint(points, i) {
+ if (points[i - 1] && points[i + 1]) {
+ return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y,
+ points[
+ i + 1].y);
+ } else {
+ return false;
+ }
+ }
+ var a = 0.2;
+ var b = 0.2;
+ var pAx = null;
+ var pAy = null;
+ var pBx = null;
+ var pBy = null;
+ if (i < 1) {
+ pAx = points[0].x + (points[1].x - points[0].x) * a;
+ pAy = points[0].y + (points[1].y - points[0].y) * a;
+ } else {
+ pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;
+ pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;
+ }
+
+ if (i > points.length - 3) {
+ var last = points.length - 1;
+ pBx = points[last].x - (points[last].x - points[last - 1].x) * b;
+ pBy = points[last].y - (points[last].y - points[last - 1].y) * b;
+ } else {
+ pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;
+ pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;
+ }
+ if (isNotMiddlePoint(points, i + 1)) {
+ pBy = points[i + 1].y;
+ }
+ if (isNotMiddlePoint(points, i)) {
+ pAy = points[i].y;
+ }
+ return {
+ ctrA: {
+ x: pAx,
+ y: pAy
+ },
+ ctrB: {
+ x: pBx,
+ y: pBy
+ }
+ };
+}
+
+function convertCoordinateOrigin(x, y, center) {
+ return {
+ x: center.x + x,
+ y: center.y - y
+ };
+}
+
+function avoidCollision(obj, target) {
+ if (target) {
+ // is collision test
+ while (util.isCollision(obj, target)) {
+ if (obj.start.x > 0) {
+ obj.start.y--;
+ } else if (obj.start.x < 0) {
+ obj.start.y++;
+ } else {
+ if (obj.start.y > 0) {
+ obj.start.y++;
+ } else {
+ obj.start.y--;
+ }
+ }
+ }
+ }
+ return obj;
+}
+
+function fillSeries(series, opts, config) {
+ var index = 0;
+ return series.map(function(item) {
+ if (!item.color) {
+ item.color = config.colors[index];
+ index = (index + 1) % config.colors.length;
+ }
+ if (!item.type) {
+ item.type = opts.type;
+ }
+ if (typeof item.show == "undefined") {
+ item.show = true;
+ }
+ if (!item.type) {
+ item.type = opts.type;
+ }
+ if (!item.pointShape) {
+ item.pointShape = "circle";
+ }
+ if (!item.legendShape) {
+ switch (item.type) {
+ case 'line':
+ item.legendShape = "line";
+ break;
+ case 'column':
+ item.legendShape = "rect";
+ break;
+ case 'area':
+ item.legendShape = "triangle";
+ break;
+ default:
+ item.legendShape = "circle";
+ }
+ }
+ return item;
+ });
+}
+
+function getDataRange(minData, maxData) {
+ var limit = 0;
+ var range = maxData - minData;
+ if (range >= 10000) {
+ limit = 1000;
+ } else if (range >= 1000) {
+ limit = 100;
+ } else if (range >= 100) {
+ limit = 10;
+ } else if (range >= 10) {
+ limit = 5;
+ } else if (range >= 1) {
+ limit = 1;
+ } else if (range >= 0.1) {
+ limit = 0.1;
+ } else if (range >= 0.01) {
+ limit = 0.01;
+ } else if (range >= 0.001) {
+ limit = 0.001;
+ } else if (range >= 0.0001) {
+ limit = 0.0001;
+ } else if (range >= 0.00001) {
+ limit = 0.00001;
+ } else {
+ limit = 0.000001;
+ }
+ return {
+ minRange: findRange(minData, 'lower', limit),
+ maxRange: findRange(maxData, 'upper', limit)
+ };
+}
+
+function measureText(text) {
+ var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize;
+ text = String(text);
+ var text = text.split('');
+ var width = 0;
+ for (let i = 0; i < text.length; i++) {
+ let item = text[i];
+ if (/[a-zA-Z]/.test(item)) {
+ width += 7;
+ } else if (/[0-9]/.test(item)) {
+ width += 5.5;
+ } else if (/\./.test(item)) {
+ width += 2.7;
+ } else if (/-/.test(item)) {
+ width += 3.25;
+ } else if (/[\u4e00-\u9fa5]/.test(item)) {
+ width += 10;
+ } else if (/\(|\)/.test(item)) {
+ width += 3.73;
+ } else if (/\s/.test(item)) {
+ width += 2.5;
+ } else if (/%/.test(item)) {
+ width += 8;
+ } else {
+ width += 10;
+ }
+ }
+ return width * fontSize / 10;
+}
+
+function dataCombine(series) {
+ return series.reduce(function(a, b) {
+ return (a.data ? a.data : a).concat(b.data);
+ }, []);
+}
+
+function dataCombineStack(series, len) {
+ var sum = new Array(len);
+ for (var j = 0; j < sum.length; j++) {
+ sum[j] = 0;
+ }
+ for (var i = 0; i < series.length; i++) {
+ for (var j = 0; j < sum.length; j++) {
+ sum[j] += series[i].data[j];
+ }
+ }
+ return series.reduce(function(a, b) {
+ return (a.data ? a.data : a).concat(b.data).concat(sum);
+ }, []);
+}
+
+function getTouches(touches, opts, e) {
+ let x, y;
+ if (touches.clientX) {
+ if (opts.rotate) {
+ y = opts.height - touches.clientX * opts.pixelRatio;
+ x = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) *
+ opts.pixelRatio;
+ } else {
+ x = touches.clientX * opts.pixelRatio;
+ y = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) *
+ opts.pixelRatio;
+ }
+ } else {
+ if (opts.rotate) {
+ y = opts.height - touches.x * opts.pixelRatio;
+ x = touches.y * opts.pixelRatio;
+ } else {
+ x = touches.x * opts.pixelRatio;
+ y = touches.y * opts.pixelRatio;
+ }
+ }
+ return {
+ x: x,
+ y: y
+ }
+}
+
+function getSeriesDataItem(series, index) {
+ var data = [];
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ if (item.data[index] !== null && typeof item.data[index] !== 'undefined' && item.show) {
+ let seriesItem = {};
+ seriesItem.color = item.color;
+ seriesItem.type = item.type;
+ seriesItem.style = item.style;
+ seriesItem.pointShape = item.pointShape;
+ seriesItem.disableLegend = item.disableLegend;
+ seriesItem.name = item.name;
+ seriesItem.show = item.show;
+ seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index];
+ data.push(seriesItem);
+ }
+ }
+ return data;
+}
+
+function getMaxTextListLength(list) {
+ var lengthList = list.map(function(item) {
+ return measureText(item);
+ });
+ return Math.max.apply(null, lengthList);
+}
+
+function getRadarCoordinateSeries(length) {
+ var eachAngle = 2 * Math.PI / length;
+ var CoordinateSeries = [];
+ for (var i = 0; i < length; i++) {
+ CoordinateSeries.push(eachAngle * i);
+ }
+
+ return CoordinateSeries.map(function(item) {
+ return -1 * item + Math.PI / 2;
+ });
+}
+
+function getToolTipData(seriesData, calPoints, index, categories) {
+ var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
+
+ var textList = seriesData.map(function(item) {
+ return {
+ text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,
+ color: item.color
+ };
+ });
+ var validCalPoints = [];
+ var offset = {
+ x: 0,
+ y: 0
+ };
+ for (let i = 0; i < calPoints.length; i++) {
+ let points = calPoints[i];
+ if (typeof points[index] !== 'undefined' && points[index] !== null) {
+ validCalPoints.push(points[index]);
+ }
+ }
+ for (let i = 0; i < validCalPoints.length; i++) {
+ let item = validCalPoints[i];
+ offset.x = Math.round(item.x);
+ offset.y += item.y;
+ }
+ offset.y /= validCalPoints.length;
+ return {
+ textList: textList,
+ offset: offset
+ };
+}
+
+function getMixToolTipData(seriesData, calPoints, index, categories) {
+ var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
+ var textList = seriesData.map(function(item) {
+ return {
+ text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,
+ color: item.color,
+ disableLegend: item.disableLegend ? true : false
+ };
+ });
+ textList = textList.filter(function(item) {
+ if (item.disableLegend !== true) {
+ return item;
+ }
+ });
+ var validCalPoints = [];
+ var offset = {
+ x: 0,
+ y: 0
+ };
+ for (let i = 0; i < calPoints.length; i++) {
+ let points = calPoints[i];
+ if (typeof points[index] !== 'undefined' && points[index] !== null) {
+ validCalPoints.push(points[index]);
+ }
+ }
+ for (let i = 0; i < validCalPoints.length; i++) {
+ let item = validCalPoints[i];
+ offset.x = Math.round(item.x);
+ offset.y += item.y;
+ }
+ offset.y /= validCalPoints.length;
+ return {
+ textList: textList,
+ offset: offset
+ };
+}
+
+function getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) {
+ var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};
+ let upColor = extra.color.upFill;
+ let downColor = extra.color.downFill;
+ //颜色顺序为开盘,收盘,最低,最高
+ let color = [upColor, upColor, downColor, upColor];
+ var textList = [];
+ let text0 = {
+ text: categories[index],
+ color: null
+ };
+ textList.push(text0);
+ seriesData.map(function(item) {
+ if (index == 0 && item.data[1] - item.data[0] < 0) {
+ color[1] = downColor;
+ } else {
+ if (item.data[0] < series[index - 1][1]) {
+ color[0] = downColor;
+ }
+ if (item.data[1] < item.data[0]) {
+ color[1] = downColor;
+ }
+ if (item.data[2] > series[index - 1][1]) {
+ color[2] = upColor;
+ }
+ if (item.data[3] < series[index - 1][1]) {
+ color[3] = downColor;
+ }
+ }
+ let text1 = {
+ text: '开盘:' + item.data[0],
+ color: color[0]
+ };
+ let text2 = {
+ text: '收盘:' + item.data[1],
+ color: color[1]
+ };
+ let text3 = {
+ text: '最低:' + item.data[2],
+ color: color[2]
+ };
+ let text4 = {
+ text: '最高:' + item.data[3],
+ color: color[3]
+ };
+ textList.push(text1, text2, text3, text4);
+ });
+ var validCalPoints = [];
+ var offset = {
+ x: 0,
+ y: 0
+ };
+ for (let i = 0; i < calPoints.length; i++) {
+ let points = calPoints[i];
+ if (typeof points[index] !== 'undefined' && points[index] !== null) {
+ validCalPoints.push(points[index]);
+ }
+ }
+ offset.x = Math.round(validCalPoints[0][0].x);
+ return {
+ textList: textList,
+ offset: offset
+ };
+}
+
+function filterSeries(series) {
+ let tempSeries = [];
+ for (let i = 0; i < series.length; i++) {
+ if (series[i].show == true) {
+ tempSeries.push(series[i])
+ }
+ }
+ return tempSeries;
+}
+
+function findCurrentIndex(currentPoints, xAxisPoints, opts, config) {
+ var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+ var currentIndex = -1;
+ var spacing = 0;
+ if((opts.type=='line' || opts.type=='area') && opts.xAxis.boundaryGap=='justify'){
+ spacing = opts.chartData.eachSpacing/2;
+ }
+ if (isInExactChartArea(currentPoints, opts, config)) {
+ xAxisPoints.forEach(function(item, index) {
+ if (currentPoints.x + offset + spacing > item) {
+ currentIndex = index;
+ }
+ });
+ }
+ return currentIndex;
+}
+
+function findLegendIndex(currentPoints, legendData, opts) {
+ let currentIndex = -1;
+ if (isInExactLegendArea(currentPoints, legendData.area)) {
+ let points = legendData.points;
+ let index = -1;
+ for (let i = 0, len = points.length; i < len; i++) {
+ let item = points[i];
+ for (let j = 0; j < item.length; j++) {
+ index += 1;
+ let area = item[j]['area'];
+ if (currentPoints.x > area[0] && currentPoints.x < area[2] && currentPoints.y > area[1] && currentPoints.y < area[3]) {
+ currentIndex = index;
+ break;
+ }
+ }
+ }
+ return currentIndex;
+ }
+ return currentIndex;
+}
+
+function isInExactLegendArea(currentPoints, area) {
+ return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y &&
+ currentPoints.y < area.end.y;
+}
+
+function isInExactChartArea(currentPoints, opts, config) {
+ return currentPoints.x < opts.width - opts.area[1] + 10 && currentPoints.x > opts.area[3] -10 && currentPoints.y > opts.area[0] && currentPoints.y < opts.height - opts.area[2];
+}
+
+function findRadarChartCurrentIndex(currentPoints, radarData, count) {
+ var eachAngleArea = 2 * Math.PI / count;
+ var currentIndex = -1;
+ if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {
+ var fixAngle = function fixAngle(angle) {
+ if (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+ if (angle > 2 * Math.PI) {
+ angle -= 2 * Math.PI;
+ }
+ return angle;
+ };
+
+ var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);
+ angle = -1 * angle;
+ if (angle < 0) {
+ angle += 2 * Math.PI;
+ }
+
+ var angleList = radarData.angleList.map(function(item) {
+ item = fixAngle(-1 * item);
+
+ return item;
+ });
+
+ angleList.forEach(function(item, index) {
+ var rangeStart = fixAngle(item - eachAngleArea / 2);
+ var rangeEnd = fixAngle(item + eachAngleArea / 2);
+ if (rangeEnd < rangeStart) {
+ rangeEnd += 2 * Math.PI;
+ }
+ if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <=
+ rangeEnd) {
+ currentIndex = index;
+ }
+ });
+ }
+
+ return currentIndex;
+}
+
+function findFunnelChartCurrentIndex(currentPoints, funnelData) {
+ var currentIndex = -1;
+ for (var i = 0, len = funnelData.series.length; i < len; i++) {
+ var item = funnelData.series[i];
+ if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) {
+ currentIndex = i;
+ break;
+ }
+ }
+ return currentIndex;
+}
+
+function findWordChartCurrentIndex(currentPoints, wordData) {
+ var currentIndex = -1;
+ for (var i = 0, len = wordData.length; i < len; i++) {
+ var item = wordData[i];
+ if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) {
+ currentIndex = i;
+ break;
+ }
+ }
+ return currentIndex;
+}
+
+function findMapChartCurrentIndex(currentPoints, opts) {
+ var currentIndex = -1;
+ var cData=opts.chartData.mapData;
+ var data=opts.series;
+ var tmp=pointToCoordinate(currentPoints.y, currentPoints.x,cData.bounds,cData.scale,cData.xoffset,cData.yoffset);
+ var poi=[tmp.x, tmp.y];
+ for (var i = 0, len = data.length; i < len; i++) {
+ var item = data[i].geometry.coordinates;
+ if(isPoiWithinPoly(poi,item)){
+ currentIndex = i;
+ break;
+ }
+ }
+ return currentIndex;
+}
+
+function findPieChartCurrentIndex(currentPoints, pieData) {
+ var currentIndex = -1;
+ if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
+ var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
+ angle = -angle;
+ for (var i = 0, len = pieData.series.length; i < len; i++) {
+ var item = pieData.series[i];
+ if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) {
+ currentIndex = i;
+ break;
+ }
+ }
+ }
+
+ return currentIndex;
+}
+
+function isInExactPieChartArea(currentPoints, center, radius) {
+ return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);
+}
+
+function splitPoints(points) {
+ var newPoints = [];
+ var items = [];
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ items.push(item);
+ } else {
+ if (items.length) {
+ newPoints.push(items);
+ }
+ items = [];
+ }
+ });
+ if (items.length) {
+ newPoints.push(items);
+ }
+
+ return newPoints;
+}
+
+function calLegendData(series, opts, config, chartData) {
+ let legendData = {
+ area: {
+ start: {
+ x: 0,
+ y: 0
+ },
+ end: {
+ x: 0,
+ y: 0
+ },
+ width: 0,
+ height: 0,
+ wholeWidth: 0,
+ wholeHeight: 0
+ },
+ points: [],
+ widthArr: [],
+ heightArr: []
+ };
+ if (opts.legend.show === false) {
+ chartData.legendData = legendData;
+ return legendData;
+ }
+
+ let padding = opts.legend.padding;
+ let margin = opts.legend.margin;
+ let fontSize = opts.legend.fontSize;
+ let shapeWidth = 15 * opts.pixelRatio;
+ let shapeRight = 5 * opts.pixelRatio;
+ let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
+ if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
+ let legendList = [];
+ let widthCount = 0;
+ let widthCountArr = [];
+ let currentRow = [];
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ let itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize) + opts.legend.itemGap;
+ if (widthCount + itemWidth > opts.width - opts.padding[1] - opts.padding[3]) {
+ legendList.push(currentRow);
+ widthCountArr.push(widthCount - opts.legend.itemGap);
+ widthCount = itemWidth;
+ currentRow = [item];
+ } else {
+ widthCount += itemWidth;
+ currentRow.push(item);
+ }
+ }
+ if (currentRow.length) {
+ legendList.push(currentRow);
+ widthCountArr.push(widthCount - opts.legend.itemGap);
+ legendData.widthArr = widthCountArr;
+ let legendWidth = Math.max.apply(null, widthCountArr);
+ switch (opts.legend.float) {
+ case 'left':
+ legendData.area.start.x = opts.padding[3];
+ legendData.area.end.x = opts.padding[3] + 2 * padding;
+ break;
+ case 'right':
+ legendData.area.start.x = opts.width - opts.padding[1] - legendWidth - 2 * padding;
+ legendData.area.end.x = opts.width - opts.padding[1];
+ break;
+ default:
+ legendData.area.start.x = (opts.width - legendWidth) / 2 - padding;
+ legendData.area.end.x = (opts.width + legendWidth) / 2 + padding;
+ }
+ legendData.area.width = legendWidth + 2 * padding;
+ legendData.area.wholeWidth = legendWidth + 2 * padding;
+ legendData.area.height = legendList.length * lineHeight + 2 * padding;
+ legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin;
+ legendData.points = legendList;
+ }
+ } else {
+ let len = series.length;
+ let maxHeight = opts.height - opts.padding[0] - opts.padding[2] - 2 * margin - 2 * padding;
+ let maxLength = Math.min(Math.floor(maxHeight / lineHeight), len);
+ legendData.area.height = maxLength * lineHeight + padding * 2;
+ legendData.area.wholeHeight = maxLength * lineHeight + padding * 2;
+ switch (opts.legend.float) {
+ case 'top':
+ legendData.area.start.y = opts.padding[0] + margin;
+ legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
+ break;
+ case 'bottom':
+ legendData.area.start.y = opts.height - opts.padding[2] - margin - legendData.area.height;
+ legendData.area.end.y = opts.height - opts.padding[2] - margin;
+ break;
+ default:
+ legendData.area.start.y = (opts.height - legendData.area.height) / 2;
+ legendData.area.end.y = (opts.height + legendData.area.height) / 2;
+ }
+ let lineNum = len % maxLength === 0 ? len / maxLength : Math.floor((len / maxLength) + 1);
+ let currentRow = [];
+ for (let i = 0; i < lineNum; i++) {
+ let temp = series.slice(i * maxLength, i * maxLength + maxLength);
+ currentRow.push(temp);
+ }
+
+ legendData.points = currentRow;
+
+ if (currentRow.length) {
+ for (let i = 0; i < currentRow.length; i++) {
+ let item = currentRow[i];
+ let maxWidth = 0;
+ for (let j = 0; j < item.length; j++) {
+ let itemWidth = shapeWidth + shapeRight + measureText(item[j].name || 'undefined', fontSize) + opts.legend.itemGap;
+ if (itemWidth > maxWidth) {
+ maxWidth = itemWidth;
+ }
+ }
+ legendData.widthArr.push(maxWidth);
+ legendData.heightArr.push(item.length * lineHeight + padding * 2);
+ }
+ let legendWidth = 0
+ for (let i = 0; i < legendData.widthArr.length; i++) {
+ legendWidth += legendData.widthArr[i];
+ }
+ legendData.area.width = legendWidth - opts.legend.itemGap + 2 * padding;
+ legendData.area.wholeWidth = legendData.area.width + padding;
+ }
+ }
+
+ switch (opts.legend.position) {
+ case 'top':
+ legendData.area.start.y = opts.padding[0] + margin;
+ legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
+ break;
+ case 'bottom':
+ legendData.area.start.y = opts.height - opts.padding[2] - legendData.area.height - margin;
+ legendData.area.end.y = opts.height - opts.padding[2] - margin;
+ break;
+ case 'left':
+ legendData.area.start.x = opts.padding[3];
+ legendData.area.end.x = opts.padding[3] + legendData.area.width;
+ break;
+ case 'right':
+ legendData.area.start.x = opts.width - opts.padding[1] - legendData.area.width;
+ legendData.area.end.x = opts.width - opts.padding[1];
+ break;
+ }
+ chartData.legendData = legendData;
+ return legendData;
+}
+
+function calCategoriesData(categories, opts, config, eachSpacing) {
+ var result = {
+ angle: 0,
+ xAxisHeight: config.xAxisHeight
+ };
+ var categoriesTextLenth = categories.map(function(item) {
+ return measureText(item);
+ });
+ var maxTextLength = Math.max.apply(this, categoriesTextLenth);
+
+ if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
+ result.angle = 45 * Math.PI / 180;
+ result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
+ }
+ return result;
+}
+
+function getRadarDataPoints(angleList, center, radius, series, opts) {
+ var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
+
+ var radarOption = opts.extra.radar || {};
+ radarOption.max = radarOption.max || 0;
+ var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
+
+ var data = [];
+ for (let i = 0; i < series.length; i++) {
+ let each = series[i];
+ let listItem = {};
+ listItem.color = each.color;
+ listItem.data = [];
+ each.data.forEach(function(item, index) {
+ let tmp = {};
+ tmp.angle = angleList[index];
+
+ tmp.proportion = item / maxData;
+ tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion *
+ process * Math.sin(tmp.angle), center);
+ listItem.data.push(tmp);
+ });
+
+ data.push(listItem);
+ }
+
+ return data;
+}
+
+function getPieDataPoints(series, radius) {
+ var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+
+ var count = 0;
+ var _start_ = 0;
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ count += item.data;
+ }
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ if (count === 0) {
+ item._proportion_ = 1 / series.length * process;
+ } else {
+ item._proportion_ = item.data / count * process;
+ }
+ item._radius_ = radius;
+ }
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item._start_ = _start_;
+ _start_ += 2 * item._proportion_ * Math.PI;
+ }
+
+ return series;
+}
+
+function getFunnelDataPoints(series, radius) {
+ var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+ series = series.sort(function(a,b){return parseInt(b.data)-parseInt(a.data);});
+ for (let i = 0; i < series.length; i++) {
+ series[i].radius = series[i].data/series[0].data*radius*process;
+ series[i]._proportion_ = series[i].data/series[0].data;
+ }
+ return series.reverse();
+}
+
+function getRoseDataPoints(series, type, minRadius, radius) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var count = 0;
+ var _start_ = 0;
+
+ var dataArr = [];
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ count += item.data;
+ dataArr.push(item.data);
+ }
+
+ var minData = Math.min.apply(null, dataArr);
+ var maxData = Math.max.apply(null, dataArr);
+ var radiusLength = radius - minRadius;
+
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ if (count === 0 || type == 'area') {
+ item._proportion_ = item.data / count * process;
+ item._rose_proportion_ = 1 / series.length * process;
+ } else {
+ item._proportion_ = item.data / count * process;
+ item._rose_proportion_ = item.data / count * process;
+ }
+ item._radius_ = minRadius + radiusLength * ((item.data - minData) / (maxData - minData));
+ }
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item._start_ = _start_;
+ _start_ += 2 * item._rose_proportion_ * Math.PI;
+ }
+
+ return series;
+}
+
+function getArcbarDataPoints(series, arcbarOption) {
+ var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+ if (process == 1) {
+ process = 0.999999;
+ }
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ let totalAngle;
+ if (arcbarOption.type == 'default') {
+ if (arcbarOption.endAngle < arcbarOption.startAngle) {
+ totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle;
+ } else{
+ totalAngle = arcbarOption.startAngle - arcbarOption.endAngle;
+ }
+ } else {
+ totalAngle = 2;
+ }
+ item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle;
+ if (item._proportion_ >= 2) {
+ item._proportion_ = item._proportion_ % 2;
+ }
+ }
+ return series;
+}
+
+function getGaugeAxisPoints(categories, startAngle, endAngle) {
+ let totalAngle = startAngle - endAngle + 1;
+ let tempStartAngle = startAngle;
+ for (let i = 0; i < categories.length; i++) {
+ categories[i].value = categories[i].value === null ? 0 : categories[i].value;
+ categories[i]._startAngle_ = tempStartAngle;
+ categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle;
+ if (categories[i]._endAngle_ >= 2) {
+ categories[i]._endAngle_ = categories[i]._endAngle_ % 2;
+ }
+ tempStartAngle = categories[i]._endAngle_;
+ }
+ return categories;
+}
+
+function getGaugeDataPoints(series, categories, gaugeOption) {
+ let process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ item.data = item.data === null ? 0 : item.data;
+ if (gaugeOption.pointer.color == 'auto') {
+ for (let i = 0; i < categories.length; i++) {
+ if (item.data <= categories[i].value) {
+ item.color = categories[i].color;
+ break;
+ }
+ }
+ } else {
+ item.color = gaugeOption.pointer.color;
+ }
+ let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
+ item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle;
+ item._oldAngle_ = gaugeOption.oldAngle;
+ if (gaugeOption.oldAngle < gaugeOption.endAngle) {
+ item._oldAngle_ += 2;
+ }
+ if (item.data >= gaugeOption.oldData) {
+ item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle;
+ } else {
+ item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process;
+ }
+ if (item._proportion_ >= 2) {
+ item._proportion_ = item._proportion_ % 2;
+ }
+ }
+ return series;
+}
+
+function getPieTextMaxLength(series) {
+ series = getPieDataPoints(series);
+ let maxLength = 0;
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ let text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
+ maxLength = Math.max(maxLength, measureText(text));
+ }
+
+ return maxLength;
+}
+
+function fixColumeData(points, eachSpacing, columnLen, index, config, opts) {
+ return points.map(function(item) {
+ if (item === null) {
+ return null;
+ }
+ item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / columnLen);
+
+ if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
+ item.width = Math.min(item.width, +opts.extra.column.width);
+ }
+ if (item.width <= 0) {
+ item.width = 1;
+ }
+ item.x += (index + 0.5 - columnLen / 2) * item.width;
+ return item;
+ });
+}
+
+function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) {
+ return points.map(function(item) {
+ if (item === null) {
+ return null;
+ }
+ item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
+
+ if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
+ item.width = Math.min(item.width, +opts.extra.column.width);
+ }
+
+ if (index > 0) {
+ item.width -= 2 * border;
+ }
+ return item;
+ });
+}
+
+function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) {
+
+ return points.map(function(item, indexn) {
+
+ if (item === null) {
+ return null;
+ }
+ item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
+
+ if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
+ item.width = Math.min(item.width, +opts.extra.column.width);
+ }
+ return item;
+ });
+}
+
+function getXAxisPoints(categories, opts, config) {
+ var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth;
+ var spacingValid = opts.width - opts.area[1] - opts.area[3];
+ var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length;
+ if((opts.type=='line' || opts.type=='area') && dataCount>1 && opts.xAxis.boundaryGap=='justify'){
+ dataCount -=1;
+ }
+ var eachSpacing = spacingValid / dataCount;
+
+ var xAxisPoints = [];
+ var startX = opts.area[3];
+ var endX = opts.width - opts.area[1];
+ categories.forEach(function(item, index) {
+ xAxisPoints.push(startX + index * eachSpacing);
+ });
+ if(opts.xAxis.boundaryGap !=='justify'){
+ if (opts.enableScroll === true) {
+ xAxisPoints.push(startX + categories.length * eachSpacing);
+ } else {
+ xAxisPoints.push(endX);
+ }
+ }
+ return {
+ xAxisPoints: xAxisPoints,
+ startX: startX,
+ endX: endX,
+ eachSpacing: eachSpacing
+ };
+}
+
+function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
+ var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
+ var points = [];
+ var validHeight = opts.height - opts.area[0] - opts.area[2];
+ data.forEach(function(item, index) {
+ if (item === null) {
+ points.push(null);
+ } else {
+ var cPoints = [];
+ item.forEach(function(items, indexs) {
+ var point = {};
+ point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
+ var value = items.value || items;
+ var height = validHeight * (value - minRange) / (maxRange - minRange);
+ height *= process;
+ point.y = opts.height - Math.round(height) - opts.area[2];
+ cPoints.push(point);
+ });
+ points.push(cPoints);
+ }
+ });
+
+ return points;
+}
+
+function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
+ var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
+ var boundaryGap='center';
+ if (opts.type == 'line'||opts.type == 'area'){
+ boundaryGap=opts.xAxis.boundaryGap;
+ }
+ var points = [];
+ var validHeight = opts.height - opts.area[0] - opts.area[2];
+ data.forEach(function(item, index) {
+ if (item === null) {
+ points.push(null);
+ } else {
+ var point = {};
+ point.color = item.color;
+ point.x = xAxisPoints[index];
+ if(boundaryGap=='center'){
+ point.x += Math.round(eachSpacing / 2);
+ }
+ var value = item;
+ if (typeof item === 'object' && item !== null) {
+ value = item.value
+ }
+ var height = validHeight * (value - minRange) / (maxRange - minRange);
+ height *= process;
+ point.y = opts.height - Math.round(height) - opts.area[2];
+ points.push(point);
+ }
+ });
+
+ return points;
+}
+
+function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {
+ var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;
+ var points = [];
+ var validHeight = opts.height - opts.area[0] - opts.area[2];
+
+ data.forEach(function(item, index) {
+ if (item === null) {
+ points.push(null);
+ } else {
+ var point = {};
+ point.color = item.color;
+ point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
+
+ if (seriesIndex > 0) {
+ var value = 0;
+ for (let i = 0; i <= seriesIndex; i++) {
+ value += stackSeries[i].data[index];
+ }
+ var value0 = value - item;
+ var height = validHeight * (value - minRange) / (maxRange - minRange);
+ var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);
+ } else {
+ var value = item;
+ var height = validHeight * (value - minRange) / (maxRange - minRange);
+ var height0 = 0;
+ }
+ var heightc = height0;
+ height *= process;
+ heightc *= process;
+ point.y = opts.height - Math.round(height) - opts.area[2];
+ point.y0 = opts.height - Math.round(heightc) - opts.area[2];
+ points.push(point);
+ }
+ });
+
+ return points;
+}
+
+function getYAxisTextList(series, opts, config, stack) {
+ var data;
+ if (stack == 'stack') {
+ data = dataCombineStack(series, opts.categories.length);
+ } else {
+ data = dataCombine(series);
+ }
+ var sorted = [];
+ // remove null from data
+ data = data.filter(function(item) {
+ //return item !== null;
+ if (typeof item === 'object' && item !== null) {
+ if (Array.isArray(item)) {
+ return item !== null;
+ } else {
+ return item.value !== null;
+ }
+ } else {
+ return item !== null;
+ }
+ });
+ data.map(function(item) {
+ if (typeof item === 'object') {
+ if (Array.isArray(item)) {
+ item.map(function(subitem) {
+ sorted.push(subitem);
+ })
+ } else {
+ sorted.push(item.value);
+ }
+ } else {
+ sorted.push(item);
+ }
+ })
+ var minData = 0;
+ var maxData = 0;
+ if (sorted.length > 0) {
+ minData = Math.min.apply(this, sorted);
+ maxData = Math.max.apply(this, sorted);
+ }
+ if (typeof opts.yAxis.min === 'number') {
+ minData = Math.min(opts.yAxis.min, minData);
+ }
+ if (typeof opts.yAxis.max === 'number') {
+ maxData = Math.max(opts.yAxis.max, maxData);
+ }
+
+ if (minData === maxData) {
+ var rangeSpan = maxData || 10;
+ maxData += rangeSpan;
+ }
+
+ var dataRange = getDataRange(minData, maxData);
+ var minRange = dataRange.minRange;
+ var maxRange = dataRange.maxRange;
+
+ var range = [];
+ var eachRange = (maxRange - minRange) / config.yAxisSplit;
+
+ for (var i = 0; i <= config.yAxisSplit; i++) {
+ range.push(minRange + eachRange * i);
+ }
+ return range.reverse();
+}
+
+function calYAxisData(series, opts, config) {
+ //堆叠图重算Y轴
+ var columnstyle = assign({}, {
+ type: ""
+ }, opts.extra.column);
+ var ranges = getYAxisTextList(series, opts, config, columnstyle.type);
+ var yAxisWidth = config.yAxisWidth;
+ var yAxisFontSize = opts.yAxis.fontSize || config.fontSize;
+ var rangesFormat = ranges.map(function(item) {
+ item = util.toFixed(item, 6);
+ item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;
+ yAxisWidth = Math.max(yAxisWidth, measureText(item, yAxisFontSize) + 5);
+ return item;
+ });
+ if (opts.yAxis.disabled === true) {
+ yAxisWidth = 0;
+ }
+
+ return {
+ rangesFormat: rangesFormat,
+ ranges: ranges,
+ yAxisWidth: yAxisWidth
+ };
+}
+
+function calTooltipYAxisData(point, series, opts, config, eachSpacing) {
+ var ranges = getYAxisTextList(series, opts, config);
+ var spacingValid = opts.height - opts.area[0] - opts.area[2];
+ let maxVal = ranges[0];
+ let minVal = ranges[ranges.length - 1];
+ let minAxis = opts.padding[3];
+ let maxAxis = opts.padding[1] + spacingValid;
+ let item = maxVal - (maxVal - minVal) * (point - minAxis) / (maxAxis - minAxis);
+ item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;
+ return item;
+}
+
+function calMarkLineData(minRange, maxRange, points, opts) {
+ let spacingValid = opts.height - opts.area[0] - opts.area[2];
+ for (let i = 0; i < points.length; i++) {
+ let height = spacingValid * (points[i].value - minRange) / (maxRange - minRange);
+ points[i].y = opts.height - Math.round(height) - opts.area[2];
+ }
+ return points;
+}
+
+function contextRotate(context, opts) {
+ if (opts.rotateLock !== true) {
+ context.translate(opts.height, 0);
+ context.rotate(90 * Math.PI / 180);
+ } else if (opts._rotate_ !== true) {
+ context.translate(opts.height, 0);
+ context.rotate(90 * Math.PI / 180);
+ opts._rotate_ = true;
+ }
+}
+
+function drawPointShape(points, color, shape, context, opts) {
+ context.beginPath();
+ context.setStrokeStyle("#ffffff");
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.setFillStyle(color);
+ if (shape === 'diamond') {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.moveTo(item.x, item.y - 4.5);
+ context.lineTo(item.x - 4.5, item.y);
+ context.lineTo(item.x, item.y + 4.5);
+ context.lineTo(item.x + 4.5, item.y);
+ context.lineTo(item.x, item.y - 4.5);
+ }
+ });
+ } else if (shape === 'circle') {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.moveTo(item.x + 3.5 * opts.pixelRatio, item.y);
+ context.arc(item.x, item.y, 4 * opts.pixelRatio, 0, 2 * Math.PI, false);
+ }
+ });
+ } else if (shape === 'rect') {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.moveTo(item.x - 3.5, item.y - 3.5);
+ context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
+ }
+ });
+ } else if (shape === 'triangle') {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.moveTo(item.x, item.y - 4.5);
+ context.lineTo(item.x - 4.5, item.y + 4.5);
+ context.lineTo(item.x + 4.5, item.y + 4.5);
+ context.lineTo(item.x, item.y - 4.5);
+ }
+ });
+ }
+ context.closePath();
+ context.fill();
+ context.stroke();
+}
+
+function drawRingTitle(opts, config, context, center) {
+ var titlefontSize = opts.title.fontSize || config.titleFontSize;
+ var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;
+ var title = opts.title.name || '';
+ var subtitle = opts.subtitle.name || '';
+ var titleFontColor = opts.title.color || config.titleColor;
+ var subtitleFontColor = opts.subtitle.color || config.subtitleColor;
+ var titleHeight = title ? titlefontSize : 0;
+ var subtitleHeight = subtitle ? subtitlefontSize : 0;
+ var margin = 5;
+
+ if (subtitle) {
+ var textWidth = measureText(subtitle, subtitlefontSize);
+ var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX || 0);
+ var startY = center.y + subtitlefontSize / 2 + (opts.subtitle.offsetY || 0);
+ if (title) {
+ startY += (titleHeight + margin) / 2;
+ }
+ context.beginPath();
+ context.setFontSize(subtitlefontSize);
+ context.setFillStyle(subtitleFontColor);
+ context.fillText(subtitle, startX, startY);
+ context.closePath();
+ context.stroke();
+ }
+ if (title) {
+ var _textWidth = measureText(title, titlefontSize);
+ var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0);
+ var _startY = center.y + titlefontSize / 2 + (opts.title.offsetY || 0);
+ if (subtitle) {
+ _startY -= (subtitleHeight + margin) / 2;
+ }
+ context.beginPath();
+ context.setFontSize(titlefontSize);
+ context.setFillStyle(titleFontColor);
+ context.fillText(title, _startX, _startY);
+ context.closePath();
+ context.stroke();
+ }
+}
+
+function drawPointText(points, series, config, context) {
+ // 绘制数据文案
+ var data = series.data;
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ //var formatVal = series.format ? series.format(data[index]) : data[index];
+ context.beginPath();
+ context.setFontSize(series.textSize || config.fontSize);
+ context.setFillStyle(series.textColor || '#666666');
+ var value = data[index]
+ if (typeof data[index] === 'object' && data[index] !== null) {
+ value = data[index].value
+ }
+ var formatVal = series.format ? series.format(value) : value;
+ context.fillText(String(formatVal), item.x - measureText(formatVal, series.textSize || config.fontSize) / 2, item.y -
+ 2);
+ context.closePath();
+ context.stroke();
+ }
+ });
+
+}
+
+function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) {
+ radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin;
+
+ let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
+ let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
+ let totalNumber = gaugeOption.endNumber - gaugeOption.startNumber;
+ let splitNumber = totalNumber / gaugeOption.splitLine.splitNumber;
+ let nowAngle = gaugeOption.startAngle;
+ let nowNumber = gaugeOption.startNumber;
+ for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
+ var pos = {
+ x: radius * Math.cos(nowAngle * Math.PI),
+ y: radius * Math.sin(nowAngle * Math.PI)
+ };
+ var labelText = gaugeOption.labelFormat ? gaugeOption.labelFormat(nowNumber) : nowNumber;
+ pos.x += centerPosition.x - measureText(labelText) / 2;
+ pos.y += centerPosition.y;
+ var startX = pos.x;
+ var startY = pos.y;
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(gaugeOption.labelColor || '#666666');
+ context.fillText(labelText, startX, startY + config.fontSize / 2);
+ context.closePath();
+ context.stroke();
+
+ nowAngle += splitAngle;
+ if (nowAngle >= 2) {
+ nowAngle = nowAngle % 2;
+ }
+ nowNumber += splitNumber;
+ }
+
+}
+
+function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {
+ var radarOption = opts.extra.radar || {};
+ radius += config.radarLabelTextMargin;
+
+ angleList.forEach(function(angle, index) {
+ var pos = {
+ x: radius * Math.cos(angle),
+ y: radius * Math.sin(angle)
+ };
+ var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);
+ var startX = posRelativeCanvas.x;
+ var startY = posRelativeCanvas.y;
+ if (util.approximatelyEqual(pos.x, 0)) {
+ startX -= measureText(opts.categories[index] || '') / 2;
+ } else if (pos.x < 0) {
+ startX -= measureText(opts.categories[index] || '');
+ }
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(radarOption.labelColor || '#666666');
+ context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);
+ context.closePath();
+ context.stroke();
+ });
+
+}
+
+function drawPieText(series, opts, config, context, radius, center) {
+ var lineRadius = config.pieChartLinePadding;
+ var textObjectCollection = [];
+ var lastTextObject = null;
+
+ var seriesConvert = series.map(function(item) {
+ var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_.toFixed(4) * 100) +'%';
+ if(item._rose_proportion_) item._proportion_=item._rose_proportion_;
+ var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);
+ var color = item.color;
+ var radius = item._radius_;
+ return {
+ arc: arc,
+ text: text,
+ color: color,
+ radius: radius,
+ textColor: item.textColor,
+ textSize: item.textSize,
+ };
+ });
+ for (let i = 0; i < seriesConvert.length; i++) {
+ let item = seriesConvert[i];
+ // line end
+ let orginX1 = Math.cos(item.arc) * (item.radius + lineRadius);
+ let orginY1 = Math.sin(item.arc) * (item.radius + lineRadius);
+
+ // line start
+ let orginX2 = Math.cos(item.arc) * item.radius;
+ let orginY2 = Math.sin(item.arc) * item.radius;
+
+ // text start
+ let orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;
+ let orginY3 = orginY1;
+ let textWidth = measureText(item.text);
+ let startY = orginY3;
+
+ if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, {
+ x: orginX3
+ })) {
+ if (orginX3 > 0) {
+ startY = Math.min(orginY3, lastTextObject.start.y);
+ } else if (orginX1 < 0) {
+ startY = Math.max(orginY3, lastTextObject.start.y);
+ } else {
+ if (orginY3 > 0) {
+ startY = Math.max(orginY3, lastTextObject.start.y);
+ } else {
+ startY = Math.min(orginY3, lastTextObject.start.y);
+ }
+ }
+ }
+ if (orginX3 < 0) {
+ orginX3 -= textWidth;
+ }
+
+ let textObject = {
+ lineStart: {
+ x: orginX2,
+ y: orginY2
+ },
+ lineEnd: {
+ x: orginX1,
+ y: orginY1
+ },
+ start: {
+ x: orginX3,
+ y: startY
+ },
+ width: textWidth,
+ height: config.fontSize,
+ text: item.text,
+ color: item.color,
+ textColor: item.textColor,
+ textSize: item.textSize
+ };
+ lastTextObject = avoidCollision(textObject, lastTextObject);
+ textObjectCollection.push(lastTextObject);
+ }
+
+ for (let i = 0; i < textObjectCollection.length; i++) {
+ let item = textObjectCollection[i];
+ let lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center);
+ let lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center);
+ let textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.setFontSize(config.fontSize);
+ context.beginPath();
+ context.setStrokeStyle(item.color);
+ context.setFillStyle(item.color);
+ context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
+ let curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x;
+ let textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;
+ context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);
+ context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
+ context.stroke();
+ context.closePath();
+ context.beginPath();
+ context.moveTo(textPosition.x + item.width, textPosition.y);
+ context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ context.beginPath();
+ context.setFontSize(item.textSize || config.fontSize);
+ context.setFillStyle(item.textColor || '#666666');
+ context.fillText(item.text, textStartX, textPosition.y + 3);
+ context.closePath();
+ context.stroke();
+ context.closePath();
+ }
+}
+
+function drawToolTipSplitLine(offsetX, opts, config, context) {
+ var toolTipOption = opts.extra.tooltip || {};
+ toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;
+ toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;
+ var startY = opts.area[0];
+ var endY = opts.height - opts.area[2];
+
+ if (toolTipOption.gridType == 'dash') {
+ context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
+ }
+ context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.beginPath();
+ context.moveTo(offsetX, startY);
+ context.lineTo(offsetX, endY);
+ context.stroke();
+ context.setLineDash([]);
+
+ if (toolTipOption.xAxisLabel) {
+ let labelText = opts.categories[opts.tooltip.index];
+ context.setFontSize(config.fontSize);
+ let textWidth = measureText(labelText, config.fontSize);
+
+ let textX = offsetX - 0.5 * textWidth;
+ let textY = endY;
+ context.beginPath();
+ context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
+ context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);
+ context.closePath();
+ context.stroke();
+ context.fill();
+
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
+ context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize);
+ context.closePath();
+ context.stroke();
+ }
+}
+
+function drawMarkLine(minRange, maxRange, opts, config, context) {
+ let markLineOption = assign({}, {
+ type: 'solid',
+ dashLength: 4,
+ data: []
+ }, opts.extra.markLine);
+ let startX = opts.area[3];
+ let endX = opts.width - opts.padding[1];
+ let points = calMarkLineData(minRange, maxRange, markLineOption.data, opts);
+
+ for (let i = 0; i < points.length; i++) {
+ let item = assign({}, {
+ lineColor: '#DE4A42',
+ showLabel: false,
+ labelFontColor: '#666666',
+ labelBgColor: '#DFE8FF',
+ labelBgOpacity: 0.8,
+ yAxisIndex: 0
+ }, points[i]);
+
+ if (markLineOption.type == 'dash') {
+ context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]);
+ }
+ context.setStrokeStyle(item.lineColor);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.beginPath();
+ context.moveTo(startX, item.y);
+ context.lineTo(endX, item.y);
+ context.stroke();
+ context.setLineDash([]);
+ if (item.showLabel) {
+ let labelText = opts.yAxis.format ? opts.yAxis.format(Number(item.value)) : item.value;
+ context.setFontSize(config.fontSize);
+ let textWidth = measureText(labelText, config.fontSize);
+ let bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding;
+ let bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2);
+ let bgWidth = bgEndX - bgStartX;
+
+ let textX = bgStartX + (bgWidth - textWidth) / 2;
+ let textY = item.y;
+ context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity));
+ context.setStrokeStyle(item.labelBgColor);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.beginPath();
+ context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
+ context.closePath();
+ context.stroke();
+ context.fill();
+
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(item.labelFontColor);
+ context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize);
+ context.stroke();
+ }
+ }
+}
+
+function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) {
+ var toolTipOption = assign({}, {
+ gridType: 'solid',
+ dashLength: 4
+ }, opts.extra.tooltip);
+
+ var startX = opts.area[3];
+ var endX = opts.width - opts.padding[1];
+
+ if (toolTipOption.gridType == 'dash') {
+ context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
+ }
+ context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.beginPath();
+ context.moveTo(startX, opts.tooltip.offset.y);
+ context.lineTo(endX, opts.tooltip.offset.y);
+ context.stroke();
+ context.setLineDash([]);
+
+ if (toolTipOption.yAxisLabel) {
+ let labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing);
+ context.setFontSize(config.fontSize);
+ let textWidth = measureText(labelText, config.fontSize);
+ let bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding;
+ let bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2);
+ let bgWidth = bgEndX - bgStartX;
+
+ let textX = bgStartX + (bgWidth - textWidth) / 2;
+ let textY = opts.tooltip.offset.y;
+ context.beginPath();
+ context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
+ context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
+ context.closePath();
+ context.stroke();
+ context.fill();
+
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
+ context.fillText(labelText, textX, textY + 0.5 * config.fontSize);
+ context.closePath();
+ context.stroke();
+ }
+}
+
+function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {
+ var toolTipOption = assign({}, {
+ activeBgColor: '#000000',
+ activeBgOpacity: 0.08
+ }, opts.extra.tooltip);
+ var startY = opts.area[0];
+ var endY = opts.height - opts.area[2];
+ context.beginPath();
+ context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
+ context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY);
+ context.closePath();
+ context.fill();
+}
+
+function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) {
+ var toolTipOption = assign({}, {
+ bgColor: '#000000',
+ bgOpacity: 0.7,
+ fontColor: '#FFFFFF'
+ }, opts.extra.tooltip);
+ var legendWidth = 4 * opts.pixelRatio;
+ var legendMarginRight = 5 * opts.pixelRatio;
+ var arrowWidth = 8 * opts.pixelRatio;
+ var isOverRightBorder = false;
+ if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') {
+ drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
+ }
+
+ offset = assign({
+ x: 0,
+ y: 0
+ }, offset);
+ offset.y -= 8 * opts.pixelRatio;
+ var textWidth = textList.map(function(item) {
+ return measureText(item.text, config.fontSize);
+ });
+ var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);
+ var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;
+
+ // if beyond the right border
+ if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) {
+ isOverRightBorder = true;
+ }
+ if (toolTipHeight + offset.y > opts.height) {
+ offset.y = opts.height - toolTipHeight;
+ }
+ // draw background rect
+ context.beginPath();
+ context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity));
+ if (isOverRightBorder) {
+ context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
+ context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
+ context.lineTo(offset.x - arrowWidth, offset.y);
+ context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y);
+ context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight);
+ context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight);
+ context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
+ context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
+ } else {
+ context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
+ context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
+ context.lineTo(offset.x + arrowWidth, offset.y);
+ context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y);
+ context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight);
+ context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight);
+ context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
+ context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
+ }
+
+ context.closePath();
+ context.fill();
+
+ // draw legend
+ textList.forEach(function(item, index) {
+ if (item.color !== null) {
+ context.beginPath();
+ context.setFillStyle(item.color);
+ var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;
+ var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
+ config.toolTipPadding + 1;
+ if (isOverRightBorder) {
+ startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;
+ }
+ context.fillRect(startX, startY, legendWidth, config.fontSize);
+ context.closePath();
+ }
+ });
+
+ // draw text list
+
+ textList.forEach(function(item, index) {
+ var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;
+ if (isOverRightBorder) {
+ startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;
+ }
+ var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
+ config.toolTipPadding;
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(toolTipOption.fontColor);
+ context.fillText(item.text, startX, startY + config.fontSize);
+ context.closePath();
+ context.stroke();
+ });
+}
+
+function drawYAxisTitle(title, opts, config, context) {
+ var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2;
+ context.save();
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(opts.yAxis.titleFontColor || '#333333');
+ context.translate(0, opts.height);
+ context.rotate(-90 * Math.PI / 180);
+ context.fillText(title, startX, opts.padding[3] + 0.5 * config.fontSize);
+ context.closePath();
+ context.stroke();
+ context.restore();
+}
+
+function drawColumnDataPoints(series, opts, config, context) {
+ let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ let ranges = [].concat(opts.chartData.yAxisData.ranges);
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+ let columnOption = assign({}, {
+ type: 'group',
+ width: eachSpacing / 2,
+ meter: {
+ border: 4,
+ fillColor: '#FFFFFF'
+ }
+ }, opts.extra.column);
+ let minRange = ranges.pop();
+ let maxRange = ranges.shift();
+ let calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+ if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
+ drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing);
+ }
+
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ switch (columnOption.type) {
+ case 'group':
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
+ calPoints.push(tooltipPoints);
+ points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.beginPath();
+ context.setStrokeStyle(item.color || eachSeries.color);
+ context.setLineWidth(1)
+ context.setFillStyle(item.color || eachSeries.color);
+ var startX = item.x - item.width / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.moveTo(startX-1, item.y);
+ context.lineTo(startX+item.width-2,item.y);
+ context.lineTo(startX+item.width-2,opts.height - opts.area[2]);
+ context.lineTo(startX,opts.height - opts.area[2]);
+ context.lineTo(startX,item.y);
+ //context.rect(startX, item.y, item.width, height);
+ context.closePath();
+ context.stroke();
+ context.fill();
+ }
+ });
+ break;
+ case 'stack':
+ // 绘制堆叠数据图
+ var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config,
+ seriesIndex,
+ series, process);
+ calPoints.push(points);
+ points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);
+
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.beginPath();
+ context.setFillStyle(item.color || eachSeries.color);
+ var startX = item.x - item.width / 2 + 1;
+ var height = opts.height - item.y - opts.area[2];
+ var height0 = opts.height - item.y0 - opts.area[2];
+ if (seriesIndex > 0) {
+ height -= height0;
+ }
+ context.moveTo(startX, item.y);
+ context.fillRect(startX, item.y, item.width - 2, height);
+ context.closePath();
+ context.fill();
+ }
+ });
+ break;
+ case 'meter':
+ // 绘制温度计数据图
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+ points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter
+ .border);
+ if (seriesIndex == 0) {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ //画背景颜色
+ context.beginPath();
+ context.setFillStyle(columnOption.meter.fillColor);
+ var startX = item.x - item.width / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.moveTo(startX, item.y);
+ context.fillRect(startX, item.y, item.width, height);
+ context.closePath();
+ context.fill();
+ //画边框线
+ if (columnOption.meter.border > 0) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(columnOption.meter.border * opts.pixelRatio);
+ context.moveTo(startX + columnOption.meter.border * 0.5, item.y + height);
+ context.lineTo(startX + columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5);
+ context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5);
+ context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + height);
+ context.stroke();
+ }
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.beginPath();
+ context.setFillStyle(item.color || eachSeries.color);
+ var startX = item.x - item.width / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.moveTo(startX, item.y);
+ context.fillRect(startX, item.y, item.width, height);
+ context.closePath();
+ context.fill();
+ }
+ });
+ }
+ break;
+ }
+ });
+
+ if (opts.dataLabel !== false && process === 1) {
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ switch (columnOption.type) {
+ case 'group':
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
+
+ drawPointText(points, eachSeries, config, context);
+ break;
+ case 'stack':
+ var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config,
+ seriesIndex,
+ series, process);
+ drawPointText(points, eachSeries, config, context);
+ break;
+ case 'meter':
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ drawPointText(points, eachSeries, config, context);
+ break;
+ }
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ minRange: minRange,
+ maxRange: maxRange
+ };
+}
+
+function drawCandleDataPoints(series, seriesMA, opts, config, context) {
+ var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
+ var candleOption = assign({}, {
+ color: {},
+ average: {}
+ }, opts.extra.candle);
+ candleOption.color = assign({}, {
+ upLine: '#f04864',
+ upFill: '#f04864',
+ downLine: '#2fc25b',
+ downFill: '#2fc25b'
+ }, candleOption.color);
+ candleOption.average = assign({}, {
+ show: false,
+ name: [],
+ day: [],
+ color: config.colors
+ }, candleOption.average);
+ opts.extra.candle = candleOption;
+
+ let ranges = [].concat(opts.chartData.yAxisData.ranges);
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+
+ let minRange = ranges.pop();
+ let maxRange = ranges.shift();
+ let calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+ //画均线
+ if (candleOption.average.show) {
+ seriesMA.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ //calPoints.push(points);
+ var splitPointList = splitPoints(points);
+
+ splitPointList.forEach(function(points, index) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(1);
+ if (points.length === 1) {
+ context.moveTo(points[0].x, points[0].y);
+ context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
+ } else {
+ context.moveTo(points[0].x, points[0].y);
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,
+ item.x, item
+ .y);
+ }
+ });
+ context.moveTo(points[0].x, points[0].y);
+ }
+ context.closePath();
+ context.stroke();
+ });
+ });
+ }
+ //画K线
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+ var splitPointList = splitPoints(points);
+ splitPointList = splitPointList[0];
+
+ splitPointList.forEach(function(points, index) {
+ context.beginPath();
+ //如果上涨
+ if (data[index][1] - data[index][0] > 0) {
+ context.setStrokeStyle(candleOption.color.upLine);
+ context.setFillStyle(candleOption.color.upFill);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.moveTo(points[3].x, points[3].y); //顶点
+ context.lineTo(points[1].x, points[1].y); //收盘中间点
+ context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点
+ context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点
+ context.lineTo(points[0].x, points[0].y); //开盘中间点
+ context.lineTo(points[2].x, points[2].y); //底点
+ context.lineTo(points[0].x, points[0].y); //开盘中间点
+ context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点
+ context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点
+ context.lineTo(points[1].x, points[1].y); //收盘中间点
+ context.moveTo(points[3].x, points[3].y); //顶点
+ } else {
+ context.setStrokeStyle(candleOption.color.downLine);
+ context.setFillStyle(candleOption.color.downFill);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.moveTo(points[3].x, points[3].y); //顶点
+ context.lineTo(points[0].x, points[0].y); //开盘中间点
+ context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点
+ context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点
+ context.lineTo(points[1].x, points[1].y); //收盘中间点
+ context.lineTo(points[2].x, points[2].y); //底点
+ context.lineTo(points[1].x, points[1].y); //收盘中间点
+ context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点
+ context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点
+ context.lineTo(points[0].x, points[0].y); //开盘中间点
+ context.moveTo(points[3].x, points[3].y); //顶点
+ }
+ context.closePath();
+ context.fill();
+ context.stroke();
+ });
+ });
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ minRange: minRange,
+ maxRange: maxRange
+ };
+}
+
+function drawAreaDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var areaOption = assign({},{
+ type: 'straight',
+ opacity: 0.2,
+ addLine: false,
+ width: 2
+ },opts.extra.area);
+
+ let ranges = [].concat(opts.chartData.yAxisData.ranges);
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+
+ let minRange = ranges.pop();
+ let maxRange = ranges.shift();
+ let endY = opts.height - opts.area[2];
+ let calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ series.forEach(function(eachSeries, seriesIndex) {
+ let data = eachSeries.data;
+ let points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+
+ let splitPointList = splitPoints(points);
+
+ for (let i = 0; i < splitPointList.length; i++) {
+ let points = splitPointList[i];
+ // 绘制区域数
+ context.beginPath();
+ context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity));
+ context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity));
+ context.setLineWidth(areaOption.width * opts.pixelRatio);
+ if (points.length > 1) {
+ let firstPoint = points[0];
+ let lastPoint = points[points.length - 1];
+
+ context.moveTo(firstPoint.x, firstPoint.y);
+ if (areaOption.type === 'curve') {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ let ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x, item.y);
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+
+ context.lineTo(lastPoint.x, endY);
+ context.lineTo(firstPoint.x, endY);
+ context.lineTo(firstPoint.x, firstPoint.y);
+ } else {
+ let item = points[0];
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, endY);
+ context.lineTo(item.x - eachSpacing / 2, endY);
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ }
+ context.closePath();
+ context.fill();
+
+ //画连线
+ if (areaOption.addLine) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(areaOption.width * opts.pixelRatio);
+ if (points.length === 1) {
+ context.moveTo(points[0].x, points[0].y);
+ context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
+ } else {
+ context.moveTo(points[0].x, points[0].y);
+ if (areaOption.type === 'curve') {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ let ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x,item.y);
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+ context.moveTo(points[0].x, points[0].y);
+ }
+ context.closePath();
+ context.stroke();
+ }
+ }
+
+ //画点
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ drawPointShape(points, eachSeries.color, shape, context, opts);
+ }
+
+ });
+
+ if (opts.dataLabel !== false && process === 1) {
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ drawPointText(points, eachSeries, config, context);
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ minRange: minRange,
+ maxRange: maxRange
+ };
+}
+
+function drawLineDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var lineOption = opts.extra.line || {
+ type: 'straight',
+ width: 2
+ };
+ lineOption.type = lineOption.type ? lineOption.type : 'straight';
+ lineOption.width = lineOption.width ? lineOption.width : 2;
+
+ let ranges = [].concat(opts.chartData.yAxisData.ranges);
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+
+ var minRange = ranges.pop();
+ var maxRange = ranges.shift();
+ var calPoints = [];
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+ var splitPointList = splitPoints(points);
+
+ splitPointList.forEach(function(points, index) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(lineOption.width * opts.pixelRatio);
+ if (points.length === 1) {
+ context.moveTo(points[0].x, points[0].y);
+ context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
+ } else {
+ context.moveTo(points[0].x, points[0].y);
+ if (lineOption.type === 'curve') {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,
+ item.x, item
+ .y);
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+ context.moveTo(points[0].x, points[0].y);
+ }
+ context.closePath();
+ context.stroke();
+ });
+
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ drawPointShape(points, eachSeries.color, shape, context, opts);
+ }
+ });
+
+ if (opts.dataLabel !== false && process === 1) {
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ drawPointText(points, eachSeries, config, context);
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ minRange: minRange,
+ maxRange: maxRange
+ };
+}
+
+function drawMixDataPoints(series, opts, config, context) {
+ let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ let ranges = [].concat(opts.chartData.yAxisData.ranges);
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+
+ let minRange = ranges.pop();
+ let maxRange = ranges.shift();
+ let endY = opts.height - opts.area[2];
+ let calPoints = [];
+
+ var columnIndex = 0;
+ var columnLength = 0;
+ series.forEach(function(eachSeries, seriesIndex) {
+ if (eachSeries.type == 'column') {
+ columnLength += 1;
+ }
+ });
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ calPoints.push(points);
+
+ // 绘制柱状数据图
+ if (eachSeries.type == 'column') {
+ points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
+ points.forEach(function(item, index) {
+ if (item !== null) {
+ context.beginPath();
+ context.setStrokeStyle(item.color || eachSeries.color);
+ context.setLineWidth(1)
+ context.setFillStyle(item.color || eachSeries.color);
+ var startX = item.x - item.width / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.moveTo(startX, item.y);
+ context.moveTo(startX-1, item.y);
+ context.lineTo(startX+item.width-2,item.y);
+ context.lineTo(startX+item.width-2,opts.height - opts.area[2]);
+ context.lineTo(startX,opts.height - opts.area[2]);
+ context.lineTo(startX,item.y);
+ //context.rect(startX, item.y, item.width, height);
+ context.closePath();
+ context.stroke();
+ context.fill();
+ context.closePath();
+ context.fill();
+ }
+ });
+ columnIndex += 1;
+ }
+
+ //绘制区域图数据
+
+ if (eachSeries.type == 'area') {
+ let splitPointList = splitPoints(points);
+ for (let i = 0; i < splitPointList.length; i++) {
+ let points = splitPointList[i];
+ // 绘制区域数据
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setFillStyle(hexToRgb(eachSeries.color, 0.2));
+ context.setLineWidth(2 * opts.pixelRatio);
+ if (points.length > 1) {
+ var firstPoint = points[0];
+ let lastPoint = points[points.length - 1];
+ context.moveTo(firstPoint.x, firstPoint.y);
+ if (eachSeries.style === 'curve') {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+ context.lineTo(lastPoint.x, endY);
+ context.lineTo(firstPoint.x, endY);
+ context.lineTo(firstPoint.x, firstPoint.y);
+ } else {
+ let item = points[0];
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, item.y);
+ context.lineTo(item.x + eachSpacing / 2, endY);
+ context.lineTo(item.x - eachSpacing / 2, endY);
+ context.moveTo(item.x - eachSpacing / 2, item.y);
+ }
+ context.closePath();
+ context.fill();
+ }
+ }
+
+ // 绘制折线数据图
+ if (eachSeries.type == 'line') {
+ var splitPointList = splitPoints(points);
+ splitPointList.forEach(function(points, index) {
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(2 * opts.pixelRatio);
+ if (points.length === 1) {
+ context.moveTo(points[0].x, points[0].y);
+ context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
+ } else {
+ context.moveTo(points[0].x, points[0].y);
+ if (eachSeries.style == 'curve') {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ var ctrlPoint = createCurveControlPoints(points, index - 1);
+ context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,
+ item.x,
+ item.y);
+ }
+ });
+ } else {
+ points.forEach(function(item, index) {
+ if (index > 0) {
+ context.lineTo(item.x, item.y);
+ }
+ });
+ }
+ context.moveTo(points[0].x, points[0].y);
+ }
+ context.closePath();
+ context.stroke();
+ });
+ }
+
+ // 绘制点数据图
+ if (eachSeries.type == 'point') {
+ points.forEach(function(pointsa, index) {
+ if (pointsa) {
+ context.beginPath();
+ context.setFillStyle(eachSeries.color);
+ context.setStrokeStyle('#FFFFFF');
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.moveTo(pointsa.x + 3.5 * opts.pixelRatio, pointsa.y);
+ context.arc(pointsa.x, pointsa.y, 4 * opts.pixelRatio, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ context.stroke();
+ }
+ });
+ }
+
+ if (eachSeries.addPoint == true && eachSeries.type !== 'column') {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ drawPointShape(points, eachSeries.color, shape, context, opts);
+ }
+ });
+ if (opts.dataLabel !== false && process === 1) {
+ var columnIndex = 0;
+ series.forEach(function(eachSeries, seriesIndex) {
+ var data = eachSeries.data;
+ var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
+ if (eachSeries.type !== 'column') {
+ drawPointText(points, eachSeries, config, context);
+ } else {
+ points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
+ drawPointText(points, eachSeries, config, context);
+ columnIndex += 1;
+ }
+
+ });
+ }
+
+ context.restore();
+
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ minRange: minRange,
+ maxRange: maxRange
+ };
+}
+
+function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) {
+ var toolTipOption = opts.extra.tooltip || {};
+ if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) {
+ drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints)
+ }
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+ if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
+ drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints);
+ }
+ context.restore();
+
+}
+
+function drawXAxis(categories, opts, config, context) {
+
+ let xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ startX = xAxisData.startX,
+ endX = xAxisData.endX,
+ eachSpacing = xAxisData.eachSpacing;
+ var boundaryGap='center';
+ if (opts.type == 'line'||opts.type == 'area'){
+ boundaryGap=opts.xAxis.boundaryGap;
+ }
+ var startY = opts.height - opts.area[2];
+ var endY = opts.area[0];
+
+ //绘制滚动条
+ if (opts.enableScroll && opts.xAxis.scrollShow) {
+ var scrollY = opts.height - opts.area[2] + config.xAxisHeight;
+ var scrollScreenWidth = endX - startX;
+ var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1);
+ var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth;
+ var scrollLeft = 0;
+ if (opts._scrollDistance_) {
+ scrollLeft = -opts._scrollDistance_ * (scrollScreenWidth) / scrollTotalWidth;
+ }
+ context.beginPath();
+ context.setLineCap('round');
+ context.setLineWidth(6 * opts.pixelRatio);
+ context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF");
+ context.moveTo(startX, scrollY);
+ context.lineTo(endX, scrollY);
+ context.stroke();
+ context.closePath();
+ context.beginPath();
+ context.setLineCap('round');
+ context.setLineWidth(6 * opts.pixelRatio);
+ context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6");
+ context.moveTo(startX + scrollLeft, scrollY);
+ context.lineTo(startX + scrollLeft + scrollWidth, scrollY);
+ context.stroke();
+ context.closePath();
+ context.setLineCap('butt');
+ }
+
+ context.save();
+
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+
+ if (opts.xAxis.disableGrid !== true) {
+ context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
+ context.setLineCap('butt');
+ context.setLineWidth(1 * opts.pixelRatio);
+ if (opts.xAxis.gridType == 'dash') {
+ context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]);
+ }
+ if (opts.xAxis.type === 'calibration') {
+ xAxisPoints.forEach(function(item, index) {
+ if (index > 0) {
+ context.beginPath();
+ context.moveTo(item - eachSpacing / 2, startY);
+ context.lineTo(item - eachSpacing / 2, startY + 4 * opts.pixelRatio);
+ context.closePath();
+ context.stroke();
+ }
+ });
+ } else {
+ opts.xAxis.gridEval = opts.xAxis.gridEval || 1;
+ xAxisPoints.forEach(function(item, index) {
+ if (index % opts.xAxis.gridEval == 0) {
+ context.beginPath();
+ context.moveTo(item, startY);
+ context.lineTo(item, endY);
+ context.stroke();
+ }
+ });
+ }
+ context.setLineDash([]);
+ }
+
+
+ //不绘制X轴
+ if (opts.xAxis.disabled !== true) {
+ // 对X轴列表做抽稀处理
+ let validWidth = opts.width - opts.padding[1] - opts.padding[3] - config.yAxisWidth - config.yAxisTitleWidth;
+ //默认全部显示X轴标签
+ let maxXAxisListLength = categories.length;
+ //如果设置了X轴单屏数量
+ if (opts.xAxis.labelCount) {
+ //如果设置X轴密度
+ if (opts.xAxis.itemCount) {
+ maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount);
+ } else {
+ maxXAxisListLength = opts.xAxis.labelCount;
+ }
+ maxXAxisListLength -= 1;
+ }
+
+ let ratio = Math.ceil(categories.length / maxXAxisListLength);
+
+ let newCategories = [];
+ let cgLength = categories.length;
+ for (let i = 0; i < cgLength; i++) {
+ if (i % ratio !== 0) {
+ newCategories.push("");
+ } else {
+ newCategories.push(categories[i]);
+ }
+ }
+ newCategories[cgLength - 1] = categories[cgLength - 1];
+
+ var xAxisFontSize = opts.xAxis.fontSize || config.fontSize;
+ if (config._xAxisTextAngle_ === 0) {
+ newCategories.forEach(function(item, index) {
+ var offset = - measureText(item, xAxisFontSize) / 2;
+ if(boundaryGap == 'center'){
+ offset+=eachSpacing / 2;
+ }
+ context.beginPath();
+ context.setFontSize(xAxisFontSize);
+ context.setFillStyle(opts.xAxis.fontColor || '#666666');
+ context.fillText(item, xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - xAxisFontSize) / 2);
+ context.closePath();
+ context.stroke();
+ });
+
+ } else {
+ newCategories.forEach(function(item, index) {
+ context.save();
+ context.beginPath();
+ context.setFontSize(xAxisFontSize);
+ context.setFillStyle(opts.xAxis.fontColor || '#666666');
+ var textWidth = measureText(item);
+ var offset = - textWidth;
+ if(boundaryGap == 'center'){
+ offset+=eachSpacing / 2;
+ }
+ var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height),
+ transX = _calRotateTranslate.transX,
+ transY = _calRotateTranslate.transY;
+
+ context.rotate(-1 * config._xAxisTextAngle_);
+ context.translate(transX, transY);
+ context.fillText(item, xAxisPoints[index] + offset, startY + xAxisFontSize + 5);
+ context.closePath();
+ context.stroke();
+ context.restore();
+ });
+ }
+ }
+ context.restore();
+
+}
+
+function drawYAxisGrid(categories, opts, config, context) {
+ if (opts.yAxis.disableGrid === true) {
+ return;
+ }
+ let spacingValid = opts.height - opts.area[0] - opts.area[2];
+ let eachSpacing = spacingValid / config.yAxisSplit;
+ let startX = opts.area[3];
+ let xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
+ xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing;
+ let TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1);
+ let endX = startX + TotalWidth;
+
+ let points = [];
+ for (let i = 0; i < config.yAxisSplit + 1; i++) {
+ points.push(opts.height - opts.area[2] - eachSpacing * i);
+ }
+
+ context.save();
+ if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
+ context.translate(opts._scrollDistance_, 0);
+ }
+
+ if (opts.yAxis.gridType == 'dash') {
+ context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]);
+ }
+ context.setStrokeStyle(opts.yAxis.gridColor || "#cccccc");
+ context.setLineWidth(1 * opts.pixelRatio);
+ points.forEach(function(item, index) {
+ context.beginPath();
+ context.moveTo(startX, item);
+ context.lineTo(endX, item);
+ context.stroke();
+ });
+ context.setLineDash([]);
+
+ context.restore();
+}
+
+function drawYAxis(series, opts, config, context) {
+ if (opts.yAxis.disabled === true) {
+ return;
+ }
+ let rangesFormat = opts.chartData.yAxisData.rangesFormat;
+ var spacingValid = opts.height - opts.area[0] - opts.area[2];
+ var eachSpacing = Math.floor(spacingValid / config.yAxisSplit);
+ var startX = opts.area[3];
+ var endX = opts.width - opts.area[1];
+ var endY = opts.height - opts.area[2];
+ var fillEndY = endY + config.xAxisHeight;
+ if (opts.xAxis.scrollShow) {
+ fillEndY -= 3 * opts.pixelRatio;
+ }
+ // set YAxis background
+ context.beginPath();
+ context.setFillStyle(opts.background || '#ffffff');
+ if (opts._scrollDistance_ < 0) {
+ context.fillRect(0, 0, startX, fillEndY);
+ }
+ if(opts.enableScroll == true){
+ context.fillRect(endX, 0, opts.width, fillEndY);
+ }
+ context.closePath();
+ context.stroke();
+
+ var points = [];
+ for (var i = 0; i <= config.yAxisSplit; i++) {
+ points.push(opts.area[0] + eachSpacing * i);
+ }
+
+ var yAxisFontSize = opts.yAxis.fontSize || config.fontSize;
+ rangesFormat.forEach(function(item, index) {
+ var pos = points[index] ? points[index] : endY;
+ context.beginPath();
+ context.setFontSize(yAxisFontSize);
+ context.setFillStyle(opts.yAxis.fontColor || '#666666');
+ context.fillText(String(item), opts.area[3] - config.yAxisWidth, pos + yAxisFontSize / 2);
+ context.closePath();
+ context.stroke();
+ });
+
+ if (opts.yAxis.title) {
+ drawYAxisTitle(opts.yAxis.title, opts, config, context);
+ }
+}
+
+function drawLegend(series, opts, config, context, chartData) {
+ if (opts.legend.show === false) {
+ return;
+ }
+ let legendData = chartData.legendData;
+ let legendList = legendData.points;
+ let legendArea = legendData.area;
+ let padding = opts.legend.padding;
+ let fontSize = opts.legend.fontSize;
+ let shapeWidth = 15 * opts.pixelRatio;
+ let shapeRight = 5 * opts.pixelRatio;
+ let itemGap = opts.legend.itemGap;
+ let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
+
+ //画背景及边框
+ context.beginPath();
+ context.setLineWidth(opts.legend.borderWidth);
+ context.setStrokeStyle(opts.legend.borderColor);
+ context.setFillStyle(opts.legend.backgroundColor);
+ context.moveTo(legendArea.start.x, legendArea.start.y);
+ context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height);
+ context.closePath();
+ context.fill();
+ context.stroke();
+
+ legendList.forEach(function(itemList, listIndex) {
+ let width = 0;
+ let height = 0;
+ width = legendData.widthArr[listIndex];
+ height = legendData.heightArr[listIndex];
+ let startX = 0;
+ let startY = 0;
+ if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
+ startX = legendArea.start.x + (legendArea.width - width) / 2;
+ startY = legendArea.start.y + padding + listIndex * lineHeight;
+ } else {
+ if (listIndex == 0) {
+ width = 0;
+ } else {
+ width = legendData.widthArr[listIndex - 1];
+ }
+ startX = legendArea.start.x + padding + width;
+ startY = legendArea.start.y + padding + (legendArea.height - height) / 2;
+ }
+
+ context.setFontSize(config.fontSize);
+ for (let i = 0; i < itemList.length; i++) {
+ let item = itemList[i];
+ item.area = [0, 0, 0, 0];
+ item.area[0] = startX;
+ item.area[1] = startY;
+ item.area[3] = startY + lineHeight;
+ context.beginPath();
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor);
+ context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor);
+ switch (item.legendShape) {
+ case 'line':
+ context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio);
+ context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio, 15 * opts.pixelRatio, 4 * opts.pixelRatio);
+ break;
+ case 'triangle':
+ context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
+ context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
+ context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ break;
+ case 'diamond':
+ context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
+ context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
+ context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
+ context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ break;
+ case 'circle':
+ context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
+ context.arc(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight, 5 * opts.pixelRatio, 0, 2 * Math.PI);
+ break;
+ case 'rect':
+ context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);
+ break;
+ default:
+ context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
+ context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);
+ }
+ context.closePath();
+ context.fill();
+ context.stroke();
+
+ startX += shapeWidth + shapeRight;
+ let fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2;
+ context.beginPath();
+ context.setFontSize(fontSize);
+ context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor);
+ context.fillText(item.name, startX, startY + fontTrans);
+ context.closePath();
+ context.stroke();
+ if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
+ startX += measureText(item.name, fontSize) + itemGap;
+ item.area[2] = startX;
+ } else {
+ item.area[2] = startX + measureText(item.name, fontSize) + itemGap;;
+ startX -= shapeWidth + shapeRight;
+ startY += lineHeight;
+ }
+ }
+ });
+}
+
+function drawPieDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var pieOption = assign({}, {
+ activeOpacity: 0.5,
+ activeRadius: 10 * opts.pixelRatio,
+ offsetAngle: 0,
+ labelWidth: 15 * opts.pixelRatio,
+ ringWidth: 0,
+ border:false,
+ borderWidth:2,
+ borderColor:'#FFFFFF'
+ }, opts.extra.pie);
+ var centerPosition = {
+ x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
+ y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
+ };
+ if (config.pieChartLinePadding == 0) {
+ config.pieChartLinePadding = pieOption.activeRadius;
+ }
+
+ var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
+
+ series = getPieDataPoints(series, radius, process);
+
+ var activeRadius = pieOption.activeRadius;
+
+ series = series.map(function(eachSeries) {
+ eachSeries._start_ += (pieOption.offsetAngle) * Math.PI / 180;
+ return eachSeries;
+ });
+ series.forEach(function(eachSeries, seriesIndex) {
+ if (opts.tooltip) {
+ if (opts.tooltip.index == seriesIndex) {
+ context.beginPath();
+ context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5));
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_,
+ eachSeries._start_ + 2 *
+ eachSeries._proportion_ * Math.PI);
+ context.closePath();
+ context.fill();
+ }
+ }
+ context.beginPath();
+ context.setLineWidth(pieOption.borderWidth * opts.pixelRatio);
+ context.lineJoin = "round";
+ context.setStrokeStyle(pieOption.borderColor);
+ context.setFillStyle(eachSeries.color);
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
+ context.closePath();
+ context.fill();
+ if (pieOption.border == true) {
+ context.stroke();
+ }
+ });
+
+ if (opts.type === 'ring') {
+ var innerPieWidth = radius * 0.6;
+ if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) {
+ innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth);
+ }
+ context.beginPath();
+ context.setFillStyle(opts.background || '#ffffff');
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);
+ context.closePath();
+ context.fill();
+ }
+
+ if (opts.dataLabel !== false && process === 1) {
+ var valid = false;
+ for (var i = 0, len = series.length; i < len; i++) {
+ if (series[i].data > 0) {
+ valid = true;
+ break;
+ }
+ }
+
+ if (valid) {
+ drawPieText(series, opts, config, context, radius, centerPosition);
+ }
+ }
+
+ if (process === 1 && opts.type === 'ring') {
+ drawRingTitle(opts, config, context, centerPosition);
+ }
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ series: series
+ };
+}
+
+function drawRoseDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var roseOption = assign({}, {
+ type: 'area',
+ activeOpacity: 0.5,
+ activeRadius: 10 * opts.pixelRatio,
+ offsetAngle: 0,
+ labelWidth: 15 * opts.pixelRatio,
+ border:false,
+ borderWidth:2,
+ borderColor:'#FFFFFF'
+ }, opts.extra.rose);
+ if (config.pieChartLinePadding == 0) {
+ config.pieChartLinePadding = roseOption.activeRadius;
+ }
+ var centerPosition = {
+ x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
+ y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
+ };
+ var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
+ var minRadius = roseOption.minRadius || radius * 0.5;
+
+ series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process);
+
+ var activeRadius = roseOption.activeRadius;
+
+ series = series.map(function(eachSeries) {
+ eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180;
+ return eachSeries;
+ });
+
+ series.forEach(function(eachSeries, seriesIndex) {
+ if (opts.tooltip) {
+ if (opts.tooltip.index == seriesIndex) {
+ context.beginPath();
+ context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5));
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_,
+ eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI);
+ context.closePath();
+ context.fill();
+ }
+ }
+ context.beginPath();
+ context.setLineWidth(roseOption.borderWidth * opts.pixelRatio);
+ context.lineJoin = "round";
+ context.setStrokeStyle(roseOption.borderColor);
+ context.setFillStyle(eachSeries.color);
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 *
+ eachSeries._rose_proportion_ * Math.PI);
+ context.closePath();
+ context.fill();
+ if (roseOption.border == true) {
+ context.stroke();
+ }
+ });
+
+ if (opts.dataLabel !== false && process === 1) {
+ var valid = false;
+ for (var i = 0, len = series.length; i < len; i++) {
+ if (series[i].data > 0) {
+ valid = true;
+ break;
+ }
+ }
+
+ if (valid) {
+ drawPieText(series, opts, config, context, radius, centerPosition);
+ }
+ }
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ series: series
+ };
+}
+
+function drawArcbarDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var arcbarOption = assign({}, {
+ startAngle: 0.75,
+ endAngle: 0.25,
+ type: 'default',
+ width: 12 * opts.pixelRatio
+ }, opts.extra.arcbar);
+
+ series = getArcbarDataPoints(series, arcbarOption, process);
+ var centerPosition = {
+ x: opts.width / 2,
+ y: opts.height / 2
+ };
+ var radius = Math.min(centerPosition.x, centerPosition.y);
+ radius -= 5 * opts.pixelRatio;
+ radius -= arcbarOption.width / 2;
+
+ //背景颜色
+ context.setLineWidth(arcbarOption.width);
+ context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9');
+ context.setLineCap('round');
+ context.beginPath();
+ if (arcbarOption.type == 'default') {
+ context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle *
+ Math.PI, false);
+ } else {
+ context.arc(centerPosition.x, centerPosition.y, radius, 0, 2 * Math.PI, false);
+ }
+ context.stroke();
+
+ for (let i = 0; i < series.length; i++) {
+ let eachSeries = series[i];
+ context.setLineWidth(arcbarOption.width);
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineCap('round');
+ context.beginPath();
+ context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ *
+ Math.PI, false);
+ context.stroke();
+ }
+
+ drawRingTitle(opts, config, context, centerPosition);
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ series: series
+ };
+}
+
+function drawGaugeDataPoints(categories, series, opts, config, context) {
+ var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
+ var gaugeOption = assign({}, {
+ startAngle: 0.75,
+ endAngle: 0.25,
+ width: 15,
+ splitLine: {
+ fixRadius: 0,
+ splitNumber: 10,
+ width: 15,
+ color: '#FFFFFF',
+ childNumber: 5,
+ childWidth: 5
+ },
+ pointer: {
+ width: 15,
+ color: 'auto'
+ }
+ }, opts.extra.gauge);
+
+ if (gaugeOption.oldAngle == undefined) {
+ gaugeOption.oldAngle = gaugeOption.startAngle;
+ }
+ if (gaugeOption.oldData == undefined) {
+ gaugeOption.oldData = 0;
+ }
+ categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle);
+
+ var centerPosition = {
+ x: opts.width / 2,
+ y: opts.height / 2
+ };
+ var radius = Math.min(centerPosition.x, centerPosition.y);
+ radius -= 5 * opts.pixelRatio;
+ radius -= gaugeOption.width / 2;
+ var innerRadius = radius - gaugeOption.width;
+
+ //画背景
+ context.setLineWidth(gaugeOption.width);
+ context.setLineCap('butt');
+ for (let i = 0; i < categories.length; i++) {
+ let eachCategories = categories[i];
+ context.beginPath();
+ context.setStrokeStyle(eachCategories.color);
+ context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ *
+ Math.PI, false);
+ context.stroke();
+ }
+ context.save();
+
+ //画刻度线
+ let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
+ let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
+ let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
+ let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
+ let endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
+ let childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth;
+
+ context.translate(centerPosition.x, centerPosition.y);
+ context.rotate((gaugeOption.startAngle - 1) * Math.PI);
+
+ for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
+ context.beginPath();
+ context.setStrokeStyle(gaugeOption.splitLine.color);
+ context.setLineWidth(2 * opts.pixelRatio);
+ context.moveTo(startX, 0);
+ context.lineTo(endX, 0);
+ context.stroke();
+ context.rotate(splitAngle * Math.PI);
+ }
+ context.restore();
+
+ context.save();
+ context.translate(centerPosition.x, centerPosition.y);
+ context.rotate((gaugeOption.startAngle - 1) * Math.PI);
+
+ for (let i = 0; i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; i++) {
+ context.beginPath();
+ context.setStrokeStyle(gaugeOption.splitLine.color);
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.moveTo(startX, 0);
+ context.lineTo(childendX, 0);
+ context.stroke();
+ context.rotate(childAngle * Math.PI);
+ }
+ context.restore();
+
+ //画指针
+ series = getGaugeDataPoints(series, categories, gaugeOption, process);
+
+ for (let i = 0; i < series.length; i++) {
+ let eachSeries = series[i];
+ context.save();
+ context.translate(centerPosition.x, centerPosition.y);
+ context.rotate((eachSeries._proportion_ - 1) * Math.PI);
+ context.beginPath();
+ context.setFillStyle(eachSeries.color);
+ context.moveTo(gaugeOption.pointer.width, 0);
+ context.lineTo(0, -gaugeOption.pointer.width / 2);
+ context.lineTo(-innerRadius, 0);
+ context.lineTo(0, gaugeOption.pointer.width / 2);
+ context.lineTo(gaugeOption.pointer.width, 0);
+ context.closePath();
+ context.fill();
+ context.beginPath();
+ context.setFillStyle('#FFFFFF');
+ context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false);
+ context.fill();
+ context.restore();
+ }
+
+ if (opts.dataLabel !== false) {
+ drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context);
+ }
+
+ drawRingTitle(opts, config, context, centerPosition);
+
+ if (process === 1 && opts.type === 'gauge') {
+ opts.extra.gauge.oldAngle = series[0]._proportion_;
+ opts.extra.gauge.oldData = series[0].data;
+ }
+ return {
+ center: centerPosition,
+ radius: radius,
+ innerRadius: innerRadius,
+ categories: categories,
+ totalAngle: totalAngle
+ };
+}
+
+function drawRadarDataPoints(series, opts, config, context) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ var radarOption = assign({},{
+ gridColor: '#cccccc',
+ labelColor: '#666666',
+ opacity: 0.2
+ },opts.extra.radar);
+
+ var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);
+
+ var centerPosition = {
+ x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
+ y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
+ };
+
+ var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin),
+ centerPosition.y - config.radarLabelTextMargin);
+ //TODO逻辑不对
+ radius -= opts.padding[1];
+
+ // draw grid
+ context.beginPath();
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.setStrokeStyle(radarOption.gridColor);
+ coordinateAngle.forEach(function(angle) {
+ var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);
+ context.moveTo(centerPosition.x, centerPosition.y);
+ context.lineTo(pos.x, pos.y);
+ });
+ context.stroke();
+ context.closePath();
+ // draw split line grid
+
+ var _loop = function _loop(i) {
+ var startPos = {};
+ context.beginPath();
+ context.setLineWidth(1 * opts.pixelRatio);
+ context.setStrokeStyle(radarOption.gridColor);
+ coordinateAngle.forEach(function(angle, index) {
+ var pos = convertCoordinateOrigin(radius / config.radarGridCount * i * Math.cos(angle), radius / config.radarGridCount *
+ i * Math.sin(angle), centerPosition);
+ if (index === 0) {
+ startPos = pos;
+ context.moveTo(pos.x, pos.y);
+ } else {
+ context.lineTo(pos.x, pos.y);
+ }
+ });
+ context.lineTo(startPos.x, startPos.y);
+ context.stroke();
+ context.closePath();
+ };
+
+ for (var i = 1; i <= config.radarGridCount; i++) {
+ _loop(i);
+ }
+
+ var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);
+
+ radarDataPoints.forEach(function(eachSeries, seriesIndex) {
+ // 绘制区域数据
+ context.beginPath();
+ context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity));
+ eachSeries.data.forEach(function(item, index) {
+ if (index === 0) {
+ context.moveTo(item.position.x, item.position.y);
+ } else {
+ context.lineTo(item.position.x, item.position.y);
+ }
+ });
+ context.closePath();
+ context.fill();
+
+ if (opts.dataPointShape !== false) {
+ var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length];
+ var points = eachSeries.data.map(function(item) {
+ return item.position;
+ });
+ drawPointShape(points, eachSeries.color, shape, context, opts);
+ }
+ });
+ // draw label text
+ drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
+
+ return {
+ center: centerPosition,
+ radius: radius,
+ angleList: coordinateAngle
+ };
+}
+
+function normalInt(min, max, iter) {
+ iter = iter==0?1:iter;
+ var arr = [];
+ for (var i = 0; i < iter; i++) {
+ arr[i] = Math.random();
+ };
+ return Math.floor(arr.reduce(function(i,j){return i+j})/iter*(max-min))+min;
+};
+
+function collisionNew(area,points,width,height){
+ var isIn=false;
+ for(let i=0;ipoints[i].area[2]||area[1]>points[i].area[3]||area[2]width || area[3]>height){
+ isIn=true;
+ break;
+ }else{
+ isIn=false;
+ }
+ }else{
+ isIn=true;
+ break;
+ }
+ }
+ }
+ return isIn;
+};
+
+function getBoundingBox(data) {
+ var bounds = {}, coords;
+ bounds.xMin = 180;
+ bounds.xMax = 0;
+ bounds.yMin = 90;
+ bounds.yMax = 0
+ for (var i = 0; i < data.length; i++) {
+ var coorda = data[i].geometry.coordinates
+ for (var k = 0; k < coorda.length; k++) {
+ coords = coorda[k];
+ if (coords.length == 1) {
+ coords = coords[0]
+ }
+ for (var j = 0; j < coords.length; j++) {
+ var longitude = coords[j][0];
+ var latitude = coords[j][1];
+ var point = {
+ x: longitude,
+ y: latitude
+ }
+ bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x;
+ bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x;
+ bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y;
+ bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y;
+ }
+ }
+ }
+ return bounds;
+}
+
+function coordinateToPoint(latitude, longitude,bounds,scale,xoffset,yoffset) {
+ return {
+ x: (longitude - bounds.xMin) * scale+xoffset,
+ y: (bounds.yMax - latitude) * scale+yoffset
+ };
+}
+
+function pointToCoordinate(pointY, pointX,bounds,scale,xoffset,yoffset) {
+ return {
+ x: (pointX-xoffset)/scale+bounds.xMin,
+ y: bounds.yMax - (pointY-yoffset)/scale
+ };
+}
+
+function isRayIntersectsSegment(poi,s_poi,e_poi){
+ if (s_poi[1]==e_poi[1]){return false;}
+ if (s_poi[1]>poi[1] && e_poi[1]>poi[1]){return false;}
+ if (s_poi[1]poi[1]){return false;}
+ if (e_poi[1]==poi[1] && s_poi[1]>poi[1]){return false;}
+ if (s_poi[0]0.7) {
+ return true;
+ }else {return false};
+ };
+ for (let i = 0; i < points.length; i++) {
+ let text = points[i].name;
+ let tHeight = points[i].textSize;
+ let tWidth = measureText(text,tHeight);
+ let isSpin = Spin();
+ let x,y,area,areav;
+ let breaknum=0;
+ while(true) {
+ breaknum++;
+ let isCollision;
+ if (isSpin) {
+ x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2;
+ y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2;
+ area=[y-5-tWidth+opts.width/2,(-x-5+opts.height/2),y+5+opts.width/2,(-x+tHeight+5+opts.height/2)];
+ areav=[opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)-5,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)-5,opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)+tHeight,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)+tWidth+5];
+ isCollision = collisionNew(areav,points,opts.height,opts.width);
+ }else{
+ x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2;
+ y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2;
+ area=[x-5+opts.width/2,y-5-tHeight+opts.height/2,x+tWidth+5+opts.width/2,y+5+opts.height/2];
+ isCollision = collisionNew(area,points,opts.width,opts.height);
+ }
+ if (!isCollision) break;
+ if (breaknum==1000){
+ area=[-1000,-1000,-1000,-1000];
+ break;
+ }
+ };
+ if (isSpin) {
+ points[i].area=areav;
+ points[i].areav=area;
+ }else{
+ points[i].area=area;
+ }
+ points[i].rotate=isSpin;
+ };
+ break;
+ }
+ return points;
+}
+
+
+function drawWordCloudDataPoints(series, opts, config, context) {
+ let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ let wordOption = assign({},{
+ type: 'normal',
+ autoColors: true
+ },opts.extra.word);
+
+ context.beginPath();
+ context.setFillStyle(opts.background||'#FFFFFF');
+ context.rect(0,0,opts.width,opts.height);
+ context.fill();
+ context.save();
+ let points = opts.chartData.wordCloudData;
+ context.translate(opts.width/2,opts.height/2);
+
+ for(let i=0;i0){
+ if (opts.tooltip) {
+ if (opts.tooltip.index == i) {
+ context.strokeText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process);
+ }else{
+ context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process);
+ }
+ }else{
+ context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process);
+ }
+ }
+ }else{
+ if(points[i].area[0]>0){
+ if (opts.tooltip) {
+ if (opts.tooltip.index == i) {
+ context.strokeText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process);
+ }else{
+ context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process);
+ }
+ }else{
+ context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process);
+ }
+
+ }
+ }
+
+ context.stroke();
+ context.restore();
+ }
+ context.restore();
+}
+
+function drawFunnelDataPoints(series, opts, config, context) {
+ let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ let funnelOption = assign({},{
+ activeWidth:10,
+ activeOpacity:0.3,
+ border:false,
+ borderWidth:2,
+ borderColor:'#FFFFFF',
+ fillOpacity:1,
+ labelAlign:'right'
+ },opts.extra.funnel);
+ let eachSpacing = (opts.height - opts.area[0] - opts.area[2])/series.length;
+ let centerPosition = {
+ x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
+ y: opts.height-opts.area[2]
+ };
+ let activeWidth = funnelOption.activeWidth;
+ let radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth);
+ series = getFunnelDataPoints(series, radius, process);
+ context.save();
+ context.translate(centerPosition.x,centerPosition.y);
+ for(let i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {};
+ this.opts = assign({}, this.opts, data);
+ this.opts.updateData = true;
+ let scrollPosition = data.scrollPosition || 'current';
+ switch (scrollPosition) {
+ case 'current':
+ this.opts._scrollDistance_ = this.scrollOption.currentOffset;
+ break;
+ case 'left':
+ this.opts._scrollDistance_ = 0;
+ this.scrollOption = {
+ currentOffset: 0,
+ startTouchX: 0,
+ distance: 0,
+ lastMoveTime: 0
+ };
+ break;
+ case 'right':
+ let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
+ yAxisWidth = _calYAxisData.yAxisWidth;
+ this.config.yAxisWidth = yAxisWidth;
+ let offsetLeft = 0;
+ let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
+ xAxisPoints = _getXAxisPoints0.xAxisPoints,
+ startX = _getXAxisPoints0.startX,
+ endX = _getXAxisPoints0.endX,
+ eachSpacing = _getXAxisPoints0.eachSpacing;
+ let totalWidth = eachSpacing * (xAxisPoints.length - 1);
+ let screenWidth = endX - startX;
+ offsetLeft = screenWidth - totalWidth;
+ this.scrollOption = {
+ currentOffset: offsetLeft,
+ startTouchX: offsetLeft,
+ distance: 0,
+ lastMoveTime: 0
+ };
+ this.opts._scrollDistance_ = offsetLeft;
+ break;
+ }
+ drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
+};
+
+Charts.prototype.zoom = function() {
+ var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount;
+ if (this.opts.enableScroll !== true) {
+ console.log('请启用滚动条后使用!')
+ return;
+ }
+ //当前屏幕中间点
+ let centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round(
+ this.opts.xAxis.itemCount / 2);
+ this.opts.animation = false;
+ this.opts.xAxis.itemCount = val.itemCount;
+ //重新计算x轴偏移距离
+ let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
+ yAxisWidth = _calYAxisData.yAxisWidth;
+ this.config.yAxisWidth = yAxisWidth;
+ let offsetLeft = 0;
+ let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
+ xAxisPoints = _getXAxisPoints0.xAxisPoints,
+ startX = _getXAxisPoints0.startX,
+ endX = _getXAxisPoints0.endX,
+ eachSpacing = _getXAxisPoints0.eachSpacing;
+ let centerLeft = eachSpacing * centerPoint;
+ let screenWidth = endX - startX;
+ let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1);
+ offsetLeft = screenWidth / 2 - centerLeft;
+ if (offsetLeft > 0) {
+ offsetLeft = 0;
+ }
+ if (offsetLeft < MaxLeft) {
+ offsetLeft = MaxLeft;
+ }
+ this.scrollOption = {
+ currentOffset: offsetLeft,
+ startTouchX: offsetLeft,
+ distance: 0,
+ lastMoveTime: 0
+ };
+ this.opts._scrollDistance_ = offsetLeft;
+ drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
+};
+
+Charts.prototype.stopAnimation = function() {
+ this.animationInstance && this.animationInstance.stop();
+};
+
+Charts.prototype.addEventListener = function(type, listener) {
+ this.event.addEventListener(type, listener);
+};
+
+Charts.prototype.getCurrentDataIndex = function(e) {
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ if (touches) {
+ let _touches$ = getTouches(touches, this.opts, e);
+ if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose') {
+ return findPieChartCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.pieData);
+ } else if (this.opts.type === 'radar') {
+ return findRadarChartCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.radarData, this.opts.categories.length);
+ } else if (this.opts.type === 'funnel') {
+ return findFunnelChartCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.funnelData);
+ } else if (this.opts.type === 'map') {
+ return findMapChartCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts);
+ }else if (this.opts.type === 'word') {
+ return findWordChartCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.wordCloudData);
+ } else {
+ return findCurrentIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.xAxisPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
+ }
+ }
+ return -1;
+};
+
+Charts.prototype.getLegendDataIndex = function(e) {
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ if (touches) {
+ let _touches$ = getTouches(touches, this.opts, e);
+ return findLegendIndex({
+ x: _touches$.x,
+ y: _touches$.y
+ }, this.opts.chartData.legendData);
+ }
+ return -1;
+};
+
+Charts.prototype.touchLegend = function(e) {
+ var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ if (touches) {
+ var _touches$ = getTouches(touches, this.opts, e);
+ var index = this.getLegendDataIndex(e);
+ if (index >= 0) {
+ this.opts.series[index].show = !this.opts.series[index].show;
+ this.opts.animation = option.animation ? true : false;
+ drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
+ }
+ }
+
+};
+
+Charts.prototype.showToolTip = function(e) {
+ var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ if (!touches) {
+ console.log("touchError");
+ }
+ var _touches$ = getTouches(touches, this.opts, e);
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column') {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var seriesData = getSeriesDataItem(this.opts.series, index);
+ if (seriesData.length !== 0) {
+ var _getToolTipData = getToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option),
+ textList = _getToolTipData.textList,
+ offset = _getToolTipData.offset;
+ offset.y = _touches$.y;
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === 'mix') {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ var seriesData = getSeriesDataItem(this.opts.series, index);
+ if (seriesData.length !== 0) {
+ var _getMixToolTipData = getMixToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option),
+ textList = _getMixToolTipData.textList,
+ offset = _getMixToolTipData.offset;
+ offset.y = _touches$.y;
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === 'candle') {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ var seriesData = getSeriesDataItem(this.opts.series, index);
+ if (seriesData.length !== 0) {
+ var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts.chartData.calPoints,
+ index, this.opts.categories, this.opts.extra.candle, option),
+ textList = _getToolTipData.textList,
+ offset = _getToolTipData.offset;
+ offset.y = _touches$.y;
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose'||this.opts.type === 'funnel' ) {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ var seriesData = this.opts._series_[index];
+ var textList = [{
+ text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data,
+ color: seriesData.color
+ }];
+ var offset = {
+ x: _touches$.x,
+ y: _touches$.y
+ };
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === 'map'||this.opts.type === 'word') {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ var seriesData = this.opts._series_[index];
+ var textList = [{
+ text: option.format ? option.format(seriesData) : seriesData.properties.name ,
+ color: seriesData.color
+ }];
+ var offset = {
+ x: _touches$.x,
+ y: _touches$.y
+ };
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ opts.updateData = false;
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === 'radar') {
+ var index = this.getCurrentDataIndex(e);
+ if (index > -1) {
+ var currentOffset = this.scrollOption.currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset,
+ animation: false
+ });
+ var seriesData = getSeriesDataItem(this.opts.series, index);
+ if (seriesData.length !== 0) {
+ var textList = seriesData.map(function(item) {
+ return {
+ text: option.format ? option.format(item) : item.name + ': ' + item.data,
+ color: item.color
+ };
+ });
+ var offset = {
+ x: _touches$.x,
+ y: _touches$.y
+ };
+ opts.tooltip = {
+ textList: textList,
+ offset: offset,
+ option: option,
+ index: index
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+};
+
+Charts.prototype.translate = function(distance) {
+ this.scrollOption = {
+ currentOffset: distance,
+ startTouchX: distance,
+ distance: 0,
+ lastMoveTime: 0
+ };
+ let opts = assign({}, this.opts, {
+ _scrollDistance_: distance,
+ animation: false
+ });
+ drawCharts.call(this, this.opts.type, opts, this.config, this.context);
+};
+
+Charts.prototype.scrollStart = function(e) {
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ var _touches$ = getTouches(touches, this.opts, e);
+ if (touches && this.opts.enableScroll === true) {
+ this.scrollOption.startTouchX = _touches$.x;
+ }
+};
+
+Charts.prototype.scroll = function(e) {
+ if (this.scrollOption.lastMoveTime === 0) {
+ this.scrollOption.lastMoveTime = Date.now();
+ }
+ let Limit = this.opts.extra.touchMoveLimit || 20;
+ let currMoveTime = Date.now();
+ let duration = currMoveTime - this.scrollOption.lastMoveTime;
+ if (duration < Math.floor(1000 / Limit)) return;
+ this.scrollOption.lastMoveTime = currMoveTime;
+ var touches = null;
+ if (e.changedTouches) {
+ touches = e.changedTouches[0];
+ } else {
+ touches = e.mp.changedTouches[0];
+ }
+ if (touches && this.opts.enableScroll === true) {
+ var _touches$ = getTouches(touches, this.opts, e);
+ var _distance;
+ _distance = _touches$.x - this.scrollOption.startTouchX;
+ var currentOffset = this.scrollOption.currentOffset;
+ var validDistance = calValidDistance(currentOffset + _distance, this.opts.chartData, this.config, this.opts);
+ this.scrollOption.distance = _distance = validDistance - currentOffset;
+ var opts = assign({}, this.opts, {
+ _scrollDistance_: currentOffset + _distance,
+ animation: false
+ });
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ return currentOffset + _distance;
+ }
+};
+
+Charts.prototype.scrollEnd = function(e) {
+ if (this.opts.enableScroll === true) {
+ var _scrollOption = this.scrollOption,
+ currentOffset = _scrollOption.currentOffset,
+ distance = _scrollOption.distance;
+ this.scrollOption.currentOffset = currentOffset + distance;
+ this.scrollOption.distance = 0;
+ }
+};
+if (typeof module === "object" && typeof module.exports === "object") {
+ module.exports = Charts;
+ //export default Charts;//建议使用nodejs的module导出方式,如报错请使用export方式导出
+}
diff --git a/components/verifition/Verify.vue b/components/verifition/Verify.vue
deleted file mode 100644
index 3fe4d884..00000000
--- a/components/verifition/Verify.vue
+++ /dev/null
@@ -1,469 +0,0 @@
-
-
-
-
- 请完成安全验证
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/components/verifition/utils/ase.js b/components/verifition/utils/ase.js
deleted file mode 100644
index 1fdceed4..00000000
--- a/components/verifition/utils/ase.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import CryptoJS from 'crypto-js'
-/**
- * @word 要加密的内容
- * @keyWord String 服务器随机返回的关键字
- * */
-export function aesEncrypt(word, keyWord = "XwKsGlMcdPMEhR1B") {
- var key = CryptoJS.enc.Utf8.parse(keyWord);
- var srcs = CryptoJS.enc.Utf8.parse(word);
- var encrypted = CryptoJS.AES.encrypt(srcs, key, {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7
- });
- return encrypted.toString();
-}
diff --git a/components/verifition/utils/request.js b/components/verifition/utils/request.js
deleted file mode 100644
index e6a31b02..00000000
--- a/components/verifition/utils/request.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import config from '@/config'
-const baseUrl = config.baseUrl
-export const myRequest = (option = {}) => {
- return new Promise((reslove, reject) => {
- uni.request({
- url: baseUrl + option.url,
- data: option.data,
- method: option.method || "GET",
- success: (result) => {
- reslove(result)
- },
- fail: (error) => {
- reject(error)
- }
- })
- })
-}
diff --git a/components/verifition/verifyPoint/verifyPoint.vue b/components/verifition/verifyPoint/verifyPoint.vue
deleted file mode 100644
index 57d7d033..00000000
--- a/components/verifition/verifyPoint/verifyPoint.vue
+++ /dev/null
@@ -1,557 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{index + 1}}
-
-
-
-
-
- {{text}}
-
-
-
-
-
-
diff --git a/components/verifition/verifySlider/verifySlider.vue b/components/verifition/verifySlider/verifySlider.vue
deleted file mode 100644
index 7c75e0e2..00000000
--- a/components/verifition/verifySlider/verifySlider.vue
+++ /dev/null
@@ -1,661 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{tipWords}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/config.js b/config.js
index 8500f848..edffc226 100644
--- a/config.js
+++ b/config.js
@@ -1,27 +1,30 @@
// 应用全局配置
-module.exports = {
- // baseUrl: 'http://api-dashboard.win.iocoder.cn',
- baseUrl: 'http://localhost:12080',
- baseApi: '/admin-api',
- // 应用信息
- appInfo: {
- // 应用名称
- name: "win-app",
- // 应用版本
- version: "1.0.0",
- // 应用logo
- logo: "/static/logo.png",
- // 官方网站
- site_url: "https://iocoder.cn",
- // 政策协议
- agreements: [{
- title: "隐私政策",
- url: "https://iocoder.cn"
- },
- {
- title: "用户服务协议",
- url: "https://iocoder.cn"
- }
- ]
- }
-}
+const config = {
+ //baseUrl: 'https://vue.ruoyi.vip/prod-api',
+ //cloud后台网关地址
+ baseUrl: 'http://dev.ccwin-in.com:25100/api',
+ baseApi: '/admin-api',
+ // 应用信息
+ appInfo: {
+ // 应用名称
+ name: "ruoyi-app-vue3",
+ // 应用版本
+ version: "1.1.0",
+ // 应用logo
+ logo: "/static/logo.png",
+ // 官方网站
+ site_url: "http://ruoyi.vip",
+ // 政策协议
+ agreements: [{
+ title: "隐私政策",
+ url: "https://ruoyi.vip/protocol.html"
+ },
+ {
+ title: "用户服务协议",
+ url: "https://ruoyi.vip/protocol.html"
+ }
+ ]
+ }
+ }
+
+ export default config
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..c3ff205f
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/versionUpdate.js b/libs/versionUpdate.js
new file mode 100644
index 00000000..4b2e9c78
--- /dev/null
+++ b/libs/versionUpdate.js
@@ -0,0 +1,23 @@
+import axios from 'axios'
+
+const isNewVersion = () => {
+ let updae_url = getApp().globalData.text;
+ let url = updae_url+ `/static/version.json?t=${new Date().getTime()}`
+ axios.get(url).then(res => {
+ if (res.status === 200) {
+ let vueVersion = res.data.version;
+ let localVueVersion = localStorage.getItem('vueVersion');
+ if (localVueVersion && localVueVersion != vueVersion) {
+ localStorage.setItem('vueVersion', vueVersion);
+ window.location.reload();
+ return;
+ } else {
+ localStorage.setItem('vueVersion', vueVersion);
+ }
+ }
+ })
+}
+
+export default {
+ isNewVersion
+}
diff --git a/main.js b/main.js
index 3985b1b1..19300141 100644
--- a/main.js
+++ b/main.js
@@ -1,17 +1,86 @@
-import Vue from 'vue'
import App from './App'
-import store from './store' // store
-import plugins from './plugins' // plugins
-import './permission' // permission
-Vue.use(plugins)
+import store from './store'
+import './router/my_router.js'; //引入拦截
+import VueClipboard from 'vue-clipboard2'
+
+// 引入 uView UI
+import uView from './uni_modules/vk-uview-ui';
+// import utils from '@/common/utils.js';
+// import uShowModal from "./mycomponents/show-modal/uShowModal.vue"
+// // 如此配置即可
+// uni.$u.config.unit = 'rpx'
+// #ifndef VUE3
+import Vue from 'vue'
+console.log("Vuew2222");
Vue.config.productionTip = false
Vue.prototype.$store = store
-
+Vue.prototype.$adpid = "1111111111"
+Vue.prototype.$backgroundAudioData = {
+ playing: false,
+ playTime: 0,
+ formatedPlayTime: '00:00:00'
+}
App.mpType = 'app'
-
const app = new Vue({
- ...App
+ store,
+ ...App
})
-
app.$mount()
+// #endif
+
+// #ifdef VUE3
+import {
+ createSSRApp
+} from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+
+ // 使用 uView UI
+ app.use(store)
+ app.use(uView)
+ app.use(VueClipboard)
+ app.config.globalProperties.$adpid = "1111111111"
+ app.config.globalProperties.$pageSize = 100
+ // app.config.globalProperties.$utils = utils;
+
+ app.config.globalProperties.$backgroundAudioData = {
+ playing: false,
+ playTime: 0,
+ formatedPlayTime: '00:00:00'
+ }
+ startApp(app);
+ // app.component('u-show-modal', uShowModal);
+ return {
+ app
+ }
+}
+
+
+export function startApp(app) {
+ uni.request({
+ url: `./static/config.json?t=${new Date().getTime()}`,
+ method: 'get',
+ data: {},
+ success: (res) => {
+ if (res.data != "") {
+ //在配置中读url,company等信息
+ app.config.globalProperties.$baseInfo = res.data.baseInfo;
+ getApp().globalData.dev_url = res.data.baseInfo.dev.value;
+ getApp().globalData.request_url = res.data.baseInfo.request_url.value;
+ getApp().globalData.tenantId = res.data.baseInfo.tenantId.value;
+ app.config.globalProperties.$recepit_configList = res.data.recepit_configList;
+ getApp().globalData.recepit_configList = res.data.recepit_configList;
+ getApp().globalData.feed_configList = res.data.feed_configList;
+ }
+ },
+ fail: (error) => {
+
+ }
+ })
+
+ return {
+ startApp
+ };
+}
+// #endif
diff --git a/manifest.json b/manifest.json
index 409e5a29..c47378df 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,69 +1,210 @@
{
- "name" : "闻荫移动端",
- "appid" : "__UNI__25A9D80",
- "description" : "",
+ "name" : "pda_vue_3.0",
+ "appid" : "__UNI__43932FE",
+ "description" : "应用描述",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
"usingComponents" : true,
"nvueCompiler" : "uni-app",
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "nvueLaunchMode" : "fast",
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
- "modules" : {},
+ "modules" : {
+ "OAuth" : {},
+ "Payment" : {},
+ "Push" : {},
+ "Share" : {},
+ "Speech" : {},
+ "VideoPlayer" : {}
+ },
"distribute" : {
"android" : {
"permissions" : [
- "",
- "",
- "",
- "",
- "",
+ "",
"",
+ "",
+ "",
+ "",
+ "",
"",
+ "",
+ "",
"",
+ "",
+ "",
+ "",
"",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
"",
- "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
"",
- "",
- "",
- ""
+ "",
+ "",
+ "",
+ "",
+ ""
]
},
- "ios" : {},
- "sdkConfigs" : {}
+ "ios" : {
+ "UIBackgroundModes" : [ "audio" ],
+ "urlschemewhitelist" : [ "baidumap", "iosamap" ]
+ },
+ "sdkConfigs" : {
+ "speech" : {
+ "ifly" : {}
+ }
+ },
+ "orientation" : [ "portrait-primary" ]
+ },
+ "uniStatistics" : {
+ "enable" : true
}
},
"quickapp" : {},
+ "quickapp-native" : {
+ "icon" : "/static/logo.png",
+ "package" : "com.example.demo",
+ "features" : [
+ {
+ "name" : "system.clipboard"
+ }
+ ]
+ },
+ "quickapp-webview" : {
+ "icon" : "/static/logo.png",
+ "package" : "com.example.demo",
+ "minPlatformVersion" : 1070,
+ "versionName" : "1.0.0",
+ "versionCode" : 100
+ },
"mp-weixin" : {
- "appid" : "wxccd7e2a0911b3397",
+ "appid" : "",
"setting" : {
- "urlCheck" : false,
- "es6" : false,
- "minified" : true,
- "postcss" : true
+ "urlCheck" : false
},
- "optimization" : {
- "subPackages" : true
+ "usingComponents" : true,
+ "permission" : {
+ "scope.userLocation" : {
+ "desc" : "演示定位能力"
+ }
},
- "usingComponents" : true
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "mp-alipay" : {
+ "usingComponents" : true,
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "mp-baidu" : {
+ "usingComponents" : true,
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true,
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "mp-jd" : {
+ "usingComponents" : true,
+ "uniStatistics" : {
+ "enable" : true
+ }
},
- "vueVersion" : "2",
"h5" : {
- "template" : "static/index.html",
- "devServer" : {
- "port" : 9090,
- "https" : false
- },
- "title" : "win-App",
"router" : {
- "mode" : "hash",
- "base" : "./"
+ "mode" : "hash"
+ },
+ "template" : "template.h5.html",
+ "sdkConfigs" : {
+ "maps" : {}
+ },
+ "devServer" : {
+ "https" : false,
+ "proxy" : {
+ "/prod" : {
+ "target" : "http://dev.ccwin-in.com:59096/",
+ //"target": "http://127.0.0.1:4523/m1/1086659-0-default/",
+ "changeOrigin" : true,
+ "logLevel" : "debug",
+ "secure" : false,
+ "pathRewrite" : {
+ "^/prod" : "/"
+ }
+ },
+ "/print" : {
+ "target" : "http://dev.ccwin-in.com:59095/",
+ "changeOrigin" : true,
+ "logLevel" : "debug",
+ "secure" : false,
+ "pathRewrite" : {
+ "^/print" : "/"
+ }
+ },
+ "/pc" : {
+ "target" : "http://dev.ccwin-in.com:59097/",
+ "changeOrigin" : true,
+ "logLevel" : "debug",
+ "secure" : false,
+ "pathRewrite" : {
+ "^/pc" : "/"
+ }
+ }
+ },
+ "port" : 8081
+ }
+ },
+ "vueVersion" : "3",
+ "mp-kuaishou" : {
+ "uniStatistics" : {
+ "enable" : true
}
+ },
+ "mp-lark" : {
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "mp-qq" : {
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "quickapp-webview-huawei" : {
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "quickapp-webview-union" : {
+ "uniStatistics" : {
+ "enable" : true
+ }
+ },
+ "uniStatistics" : {
+ "version" : "2",
+ "enable" : true
}
}
diff --git a/mycomponents/Batch/Batch.vue b/mycomponents/Batch/Batch.vue
new file mode 100644
index 00000000..d251eac6
--- /dev/null
+++ b/mycomponents/Batch/Batch.vue
@@ -0,0 +1,25 @@
+
+
+ 批次
+  {{batch}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mycomponents/balance/balance.vue b/mycomponents/balance/balance.vue
new file mode 100644
index 00000000..df890c9c
--- /dev/null
+++ b/mycomponents/balance/balance.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 复制箱码
+
+
+ 复制制品
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/balanceDetailPopup.vue b/mycomponents/balance/balanceDetailPopup.vue
new file mode 100644
index 00000000..70393770
--- /dev/null
+++ b/mycomponents/balance/balanceDetailPopup.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+ {{item.item_title}}
+ {{item.content}}
+ {{formatDate(item.content)}}
+ {{boolean(item.content)}}
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/balanceLabel.vue b/mycomponents/balance/balanceLabel.vue
new file mode 100644
index 00000000..9c96a9df
--- /dev/null
+++ b/mycomponents/balance/balanceLabel.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/balanceMove.vue b/mycomponents/balance/balanceMove.vue
new file mode 100644
index 00000000..c906afef
--- /dev/null
+++ b/mycomponents/balance/balanceMove.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/balanceSelect.vue b/mycomponents/balance/balanceSelect.vue
new file mode 100644
index 00000000..0b63c993
--- /dev/null
+++ b/mycomponents/balance/balanceSelect.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/batch.vue b/mycomponents/balance/batch.vue
new file mode 100644
index 00000000..a16f2853
--- /dev/null
+++ b/mycomponents/balance/batch.vue
@@ -0,0 +1,24 @@
+
+
+ 批次
+ {{batch}}
+
+
+
+
+
+
diff --git a/mycomponents/balance/bussinessType.vue b/mycomponents/balance/bussinessType.vue
new file mode 100644
index 00000000..0a1a1d01
--- /dev/null
+++ b/mycomponents/balance/bussinessType.vue
@@ -0,0 +1,37 @@
+
+
+ {{businessTypeDesc(bussinessType)}}
+ {{number}}
+
+
+
+
+
+
diff --git a/mycomponents/balance/handleBalance.vue b/mycomponents/balance/handleBalance.vue
new file mode 100644
index 00000000..f5dce70a
--- /dev/null
+++ b/mycomponents/balance/handleBalance.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+ 实际
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/location.vue b/mycomponents/balance/location.vue
new file mode 100644
index 00000000..bcdb2dab
--- /dev/null
+++ b/mycomponents/balance/location.vue
@@ -0,0 +1,26 @@
+
+
+ 库位
+ {{locationCode}}
+
+
+
+
+
+
diff --git a/mycomponents/balance/moveStatus.vue b/mycomponents/balance/moveStatus.vue
new file mode 100644
index 00000000..11a8f3a7
--- /dev/null
+++ b/mycomponents/balance/moveStatus.vue
@@ -0,0 +1,56 @@
+
+
+
+ •
+ {{statusDesc(fromInventoryStatus)}}
+
+ ->
+
+ •
+ {{statusDesc(toInventoryStatus)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/pack.vue b/mycomponents/balance/pack.vue
new file mode 100644
index 00000000..819170e5
--- /dev/null
+++ b/mycomponents/balance/pack.vue
@@ -0,0 +1,34 @@
+
+
+ 箱码
+ {{packingCode}}
+
+
+
+
+
+
diff --git a/mycomponents/balance/productionLabel.vue b/mycomponents/balance/productionLabel.vue
new file mode 100644
index 00000000..cbec3b1d
--- /dev/null
+++ b/mycomponents/balance/productionLabel.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/purchaseLabel.vue b/mycomponents/balance/purchaseLabel.vue
new file mode 100644
index 00000000..c4b25002
--- /dev/null
+++ b/mycomponents/balance/purchaseLabel.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/balance/recommendBalance.vue b/mycomponents/balance/recommendBalance.vue
new file mode 100644
index 00000000..a0adcb27
--- /dev/null
+++ b/mycomponents/balance/recommendBalance.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+ 推荐
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/button/requestButton.vue b/mycomponents/button/requestButton.vue
new file mode 100644
index 00000000..8db55a85
--- /dev/null
+++ b/mycomponents/button/requestButton.vue
@@ -0,0 +1,57 @@
+
+
+
+
+ {{btnName}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comBlankView.vue b/mycomponents/common/comBlankView.vue
new file mode 100644
index 00000000..96a64f63
--- /dev/null
+++ b/mycomponents/common/comBlankView.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comEmptyView.vue b/mycomponents/common/comEmptyView.vue
new file mode 100644
index 00000000..c8b41abd
--- /dev/null
+++ b/mycomponents/common/comEmptyView.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comListHint.vue b/mycomponents/common/comListHint.vue
new file mode 100644
index 00000000..78080840
--- /dev/null
+++ b/mycomponents/common/comListHint.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+ 编号:{{number}}
+
+
+
+
+ {{itemCode}}
+
+
+ {{itemDesc}}
+
+
+
+
+
+
+ 执行中
+
+
+ 待执行
+
+
+
+
+
+
+
+
+ {{item.title}} :
+ {{item.content}}
+
+
+
+
+
+
+ {{getContent("worker")}}
+
+
+
+ {{formatDate(getContent("date"))}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comListItem.vue b/mycomponents/common/comListItem.vue
new file mode 100644
index 00000000..4af08b7a
--- /dev/null
+++ b/mycomponents/common/comListItem.vue
@@ -0,0 +1,60 @@
+
+
+
+
+ {{item.title}} :
+ {{item.content}}
+ {{formatDate(item.content)}}
+ {{boolean(item.content)}}
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comMessage.vue b/mycomponents/common/comMessage.vue
new file mode 100644
index 00000000..9b560ca5
--- /dev/null
+++ b/mycomponents/common/comMessage.vue
@@ -0,0 +1,479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cancelText }}
+
+
+
+ {{confirmText}}
+ ({{seconds}}s关闭)
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comPopup.vue b/mycomponents/common/comPopup.vue
new file mode 100644
index 00000000..d0b37dc6
--- /dev/null
+++ b/mycomponents/common/comPopup.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/common/comUploadCamera.vue b/mycomponents/common/comUploadCamera.vue
new file mode 100644
index 00000000..b1f0857f
--- /dev/null
+++ b/mycomponents/common/comUploadCamera.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/container/containerInfo.vue b/mycomponents/container/containerInfo.vue
new file mode 100644
index 00000000..36ef39fc
--- /dev/null
+++ b/mycomponents/container/containerInfo.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ {{ itemDetail.number }}
+
+
+ 总容量 : {{ itemDetail.capacity }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/container/containerStatus.vue b/mycomponents/container/containerStatus.vue
new file mode 100644
index 00000000..c3fe6587
--- /dev/null
+++ b/mycomponents/container/containerStatus.vue
@@ -0,0 +1,47 @@
+
+
+ {{statusDesc(status)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/container/targetContainer.vue b/mycomponents/container/targetContainer.vue
new file mode 100644
index 00000000..c2045ab0
--- /dev/null
+++ b/mycomponents/container/targetContainer.vue
@@ -0,0 +1,68 @@
+
+
+ {{title}}
+
+   请扫描
+   {{containerCode}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/comDetailCard.vue b/mycomponents/detail/comDetailCard.vue
new file mode 100644
index 00000000..8ebd7613
--- /dev/null
+++ b/mycomponents/detail/comDetailCard.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/comRequestDetailCard.vue b/mycomponents/detail/comRequestDetailCard.vue
new file mode 100644
index 00000000..24db4008
--- /dev/null
+++ b/mycomponents/detail/comRequestDetailCard.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/detailBasicInfo.vue b/mycomponents/detail/detailBasicInfo.vue
new file mode 100644
index 00000000..ad2f2849
--- /dev/null
+++ b/mycomponents/detail/detailBasicInfo.vue
@@ -0,0 +1,50 @@
+
+
+
+ 物品描述1 :
+ {{dataContent.itemDesc1}}
+
+
+ 物品描述2 :
+ {{dataContent.itemDesc2}}
+
+
+ 数量 :
+ {{dataContent.qty}}
+
+
+ 计量单位 :
+ {{getUnitInfo(dataContent.uom)}}
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/detailCommonInfo.vue b/mycomponents/detail/detailCommonInfo.vue
new file mode 100644
index 00000000..2211b1ed
--- /dev/null
+++ b/mycomponents/detail/detailCommonInfo.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/detailHandleInfo.vue b/mycomponents/detail/detailHandleInfo.vue
new file mode 100644
index 00000000..3f270f52
--- /dev/null
+++ b/mycomponents/detail/detailHandleInfo.vue
@@ -0,0 +1,63 @@
+
+
+
+
+ 扫描箱码 :
+ {{dataContent.record.packingNumber}}
+
+
+ 扫描批次 :
+ {{dataContent.record.batch}}
+
+
+ 扫描数量 :
+
+ {{Number(dataContent.record.qty)}}
+ {{dataContent.record.uom}}
+
+
+
+ 扫描状态 :
+ {{getInventoryStatusInfo(dataContent.record.inventoryStatus)}}
+
+
+ 目标库位 :
+ {{dataContent.record.locationCode}}
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/detailRecommendInfo.vue b/mycomponents/detail/detailRecommendInfo.vue
new file mode 100644
index 00000000..f81b1d72
--- /dev/null
+++ b/mycomponents/detail/detailRecommendInfo.vue
@@ -0,0 +1,71 @@
+
+
+
+
+ 明细箱码 :
+ {{dataContent.packingNumber}}
+
+
+ 明细批次 :
+ {{dataContent.batch}}
+
+
+ 明细数量 :
+
+ {{Number(dataContent.qty)}}
+ {{getUnitInfo(dataContent.uom)}}
+
+
+
+ 明细状态 :
+ {{getInventoryStatusInfo(dataContent.inventoryStatus)}}
+
+
+ 来源库位 :
+ {{dataContent.fromLocationCode}}
+
+
+ 目标库位 :
+ {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/jobDetailPopup.vue b/mycomponents/detail/jobDetailPopup.vue
new file mode 100644
index 00000000..f2eeed6f
--- /dev/null
+++ b/mycomponents/detail/jobDetailPopup.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/recordDetailBasicInfo.vue b/mycomponents/detail/recordDetailBasicInfo.vue
new file mode 100644
index 00000000..39b3c526
--- /dev/null
+++ b/mycomponents/detail/recordDetailBasicInfo.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/recordDetailCommonInfo.vue b/mycomponents/detail/recordDetailCommonInfo.vue
new file mode 100644
index 00000000..ba8c253d
--- /dev/null
+++ b/mycomponents/detail/recordDetailCommonInfo.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/recordDetailPopup.vue b/mycomponents/detail/recordDetailPopup.vue
new file mode 100644
index 00000000..1cd4d309
--- /dev/null
+++ b/mycomponents/detail/recordDetailPopup.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/requestDetailBasicInfo.vue b/mycomponents/detail/requestDetailBasicInfo.vue
new file mode 100644
index 00000000..4961b535
--- /dev/null
+++ b/mycomponents/detail/requestDetailBasicInfo.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/detail/requestDetailCommonInfo.vue b/mycomponents/detail/requestDetailCommonInfo.vue
new file mode 100644
index 00000000..01a6279a
--- /dev/null
+++ b/mycomponents/detail/requestDetailCommonInfo.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/item.vue b/mycomponents/item/item.vue
new file mode 100644
index 00000000..201020dd
--- /dev/null
+++ b/mycomponents/item/item.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+ {{dataContent.itemCode}}
+
+
+ {{dataContent.itemName}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemCompareQty.vue b/mycomponents/item/itemCompareQty.vue
new file mode 100644
index 00000000..d1bc22a9
--- /dev/null
+++ b/mycomponents/item/itemCompareQty.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemDetailInfo.vue b/mycomponents/item/itemDetailInfo.vue
new file mode 100644
index 00000000..14c757a1
--- /dev/null
+++ b/mycomponents/item/itemDetailInfo.vue
@@ -0,0 +1,74 @@
+
+
+
+
+ 零件号
+ {{dataContent.code}}
+
+
+ 零件名称
+ {{dataContent.name}}
+
+
+ 描述1
+ {{dataContent.desc1}}
+
+
+ 描述2
+ {{dataContent.desc2}}
+
+
+ 状态
+ {{dataContent.status}}
+
+
+ 类型
+ {{dataContent.type}}
+
+
+ 制造件
+ {{dataContent.canMake}}
+
+
+
+ 采购件
+ {{dataContent.canBuy}}
+
+
+ 外包件
+ {{dataContent.canOutsourcing}}
+
+
+ 回收件
+ {{dataContent.isRecycled}}
+
+
+ ABC类
+ {{dataContent.abcClass}}
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemInfo.vue b/mycomponents/item/itemInfo.vue
new file mode 100644
index 00000000..f40e16c8
--- /dev/null
+++ b/mycomponents/item/itemInfo.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+ {{ itemdetail.code }}
+
+
+ {{ itemdetail.name }}
+
+
+ {{ itemdetail.desc1 }}
+ {{ itemdetail.desc2 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemInfoPopup.vue b/mycomponents/item/itemInfoPopup.vue
new file mode 100644
index 00000000..9ce35800
--- /dev/null
+++ b/mycomponents/item/itemInfoPopup.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+ 编号:{{number}}
+
+
+
+
+ {{itemCode}}
+
+
+ {{itemDesc}}
+
+
+
+
+
+
+ 执行中
+
+
+ 待执行
+
+
+
+
+
+
+
+
+ {{item.title}} :
+ {{item.content}}
+
+
+
+
+
+
+ {{getContent("worker")}}
+
+
+
+ {{formatDate(getContent("date"))}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemQty.vue b/mycomponents/item/itemQty.vue
new file mode 100644
index 00000000..363d16cb
--- /dev/null
+++ b/mycomponents/item/itemQty.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemRecommendQty.vue b/mycomponents/item/itemRecommendQty.vue
new file mode 100644
index 00000000..92574af0
--- /dev/null
+++ b/mycomponents/item/itemRecommendQty.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemSelect.vue b/mycomponents/item/itemSelect.vue
new file mode 100644
index 00000000..631cf749
--- /dev/null
+++ b/mycomponents/item/itemSelect.vue
@@ -0,0 +1,62 @@
+
+
+
+ 零件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/item/itemStatus.vue b/mycomponents/item/itemStatus.vue
new file mode 100644
index 00000000..b7f1c7e9
--- /dev/null
+++ b/mycomponents/item/itemStatus.vue
@@ -0,0 +1,47 @@
+
+
+ {{statusDesc(status)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobBottom.vue b/mycomponents/job/jobBottom.vue
new file mode 100644
index 00000000..120265e5
--- /dev/null
+++ b/mycomponents/job/jobBottom.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ {{dataContent.creator}}
+
+
+
+ {{formatDate(dataContent.createTime)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobCard.vue b/mycomponents/job/jobCard.vue
new file mode 100644
index 00000000..a8d7944f
--- /dev/null
+++ b/mycomponents/job/jobCard.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobComMainCard.vue b/mycomponents/job/jobComMainCard.vue
new file mode 100644
index 00000000..30252013
--- /dev/null
+++ b/mycomponents/job/jobComMainCard.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobCommonInfo.vue b/mycomponents/job/jobCommonInfo.vue
new file mode 100644
index 00000000..28afb772
--- /dev/null
+++ b/mycomponents/job/jobCommonInfo.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobDetailPopup.vue b/mycomponents/job/jobDetailPopup.vue
new file mode 100644
index 00000000..611bdd03
--- /dev/null
+++ b/mycomponents/job/jobDetailPopup.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobFilter.vue b/mycomponents/job/jobFilter.vue
new file mode 100644
index 00000000..6a5948a6
--- /dev/null
+++ b/mycomponents/job/jobFilter.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+ 只看当天
+
+
+
+
+
+
+
+ 只看待处理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobInfoPopup.vue b/mycomponents/job/jobInfoPopup.vue
new file mode 100644
index 00000000..170be4b4
--- /dev/null
+++ b/mycomponents/job/jobInfoPopup.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobNumber.vue b/mycomponents/job/jobNumber.vue
new file mode 100644
index 00000000..94a38499
--- /dev/null
+++ b/mycomponents/job/jobNumber.vue
@@ -0,0 +1,36 @@
+
+
+
+ {{number}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobPersonInfo.vue b/mycomponents/job/jobPersonInfo.vue
new file mode 100644
index 00000000..7c1be5d6
--- /dev/null
+++ b/mycomponents/job/jobPersonInfo.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+ 承接人 :
+ {{dataContent.acceptUserName}}
+
+
+ 承接时间 :
+ {{dataContent.acceptTime}}
+
+
+ 创建人 :
+ {{dataContent.creator}}
+
+
+ 创建时间 :
+ {{dataContent.createTime}}
+
+
+ 完成人 :
+ {{dataContent.completeUserName}}
+
+
+ 完成时间 :
+ {{dataContent.completeTime}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobProperty.vue b/mycomponents/job/jobProperty.vue
new file mode 100644
index 00000000..f231f5ef
--- /dev/null
+++ b/mycomponents/job/jobProperty.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+ {{item.name}} : {{item.value}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobRequestInfo.vue b/mycomponents/job/jobRequestInfo.vue
new file mode 100644
index 00000000..66d18570
--- /dev/null
+++ b/mycomponents/job/jobRequestInfo.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+ 申请单号 :
+ {{dataContent.requestNumber}}
+
+
+ 申请时间 :
+ {{dataContent.requestTime}}
+
+
+ 要求截至时间 :
+ {{dataContent.requestDueTime}}
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobSettingInfo.vue b/mycomponents/job/jobSettingInfo.vue
new file mode 100644
index 00000000..db1ab473
--- /dev/null
+++ b/mycomponents/job/jobSettingInfo.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+ 允许修改库位 :
+ {{ converter( dataContent.allowModifyLocation)}}
+
+
+
+ 允许修改数量 :
+ {{converter(dataContent.allowModifyQty)}}
+
+
+ 允许大于推荐数量 :
+ {{converter(dataContent.allowBiggerQty)}}
+
+
+ 允许小于推荐数量 :
+ {{converter(dataContent.allowSmallerQty)}}
+
+
+ 允许修改库存状态 :
+ {{converter(dataContent.allowModifyInventoryStatus)}}
+
+
+ 允许修改箱码 :
+ {{converter(dataContent.allowModifyPackingNumber)}}
+
+
+ 允许修改批次 :
+ {{converter(dataContent.allowModifyBach)}}
+
+
+ 允许部分完成 :
+ {{converter(dataContent.allowPartialComplete)}}
+
+
+ 允许连续扫描 :
+ {{converter(dataContent.allowContinuousScanning)}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobStatus.vue b/mycomponents/job/jobStatus.vue
new file mode 100644
index 00000000..9a80a5e0
--- /dev/null
+++ b/mycomponents/job/jobStatus.vue
@@ -0,0 +1,45 @@
+
+
+
+ {{ jobStatusInfo.label}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobTop.vue b/mycomponents/job/jobTop.vue
new file mode 100644
index 00000000..f2a9f476
--- /dev/null
+++ b/mycomponents/job/jobTop.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/job/jobcomDetailCard.vue b/mycomponents/job/jobcomDetailCard.vue
new file mode 100644
index 00000000..8e2b3b91
--- /dev/null
+++ b/mycomponents/job/jobcomDetailCard.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/label/label.vue b/mycomponents/label/label.vue
new file mode 100644
index 00000000..067b373f
--- /dev/null
+++ b/mycomponents/label/label.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/location/location.vue b/mycomponents/location/location.vue
new file mode 100644
index 00000000..b2286bf3
--- /dev/null
+++ b/mycomponents/location/location.vue
@@ -0,0 +1,55 @@
+
+
+
+
+ 库位
+ {{locationCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mycomponents/location/locationDetail.vue b/mycomponents/location/locationDetail.vue
new file mode 100644
index 00000000..c6fd752f
--- /dev/null
+++ b/mycomponents/location/locationDetail.vue
@@ -0,0 +1,47 @@
+
+
+
+
+ 仓库
+ {{dataContent.warehouseCode}}
+
+
+ 库区
+ {{dataContent.areaCode }}
+
+
+ 库位组
+ {{ dataContent.locationGroupCode }}
+
+
+ ERP储位
+ {{ dataContent.erpLocationCode }}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/location/locationDrop.vue b/mycomponents/location/locationDrop.vue
new file mode 100644
index 00000000..6862f92f
--- /dev/null
+++ b/mycomponents/location/locationDrop.vue
@@ -0,0 +1,58 @@
+
+
+
+ 库位
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mycomponents/location/locationInfo.vue b/mycomponents/location/locationInfo.vue
new file mode 100644
index 00000000..6a63f0a5
--- /dev/null
+++ b/mycomponents/location/locationInfo.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ {{locationDetail.code}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/location/locationStatus.vue b/mycomponents/location/locationStatus.vue
new file mode 100644
index 00000000..cf26117b
--- /dev/null
+++ b/mycomponents/location/locationStatus.vue
@@ -0,0 +1,46 @@
+
+
+ {{statusDesc(type)}}
+
+
+
+
+
+
diff --git a/mycomponents/location/requiredLocation.vue b/mycomponents/location/requiredLocation.vue
new file mode 100644
index 00000000..cd889b7b
--- /dev/null
+++ b/mycomponents/location/requiredLocation.vue
@@ -0,0 +1,74 @@
+
+
+ {{title}}
+
+   请扫描
+   {{locationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/package/packageBalance.vue b/mycomponents/package/packageBalance.vue
new file mode 100644
index 00000000..dd4cdbbf
--- /dev/null
+++ b/mycomponents/package/packageBalance.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+ 原始
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/package/packageDetailPopup.vue b/mycomponents/package/packageDetailPopup.vue
new file mode 100644
index 00000000..7abc53d7
--- /dev/null
+++ b/mycomponents/package/packageDetailPopup.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+ {{item.item_title}}
+ {{item.text_wrap}}
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/package/packageHandle.vue b/mycomponents/package/packageHandle.vue
new file mode 100644
index 00000000..a3513fc3
--- /dev/null
+++ b/mycomponents/package/packageHandle.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ 实际
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/package/packageTarget.vue b/mycomponents/package/packageTarget.vue
new file mode 100644
index 00000000..51dc3176
--- /dev/null
+++ b/mycomponents/package/packageTarget.vue
@@ -0,0 +1,57 @@
+
+
+ {{title}}
+
+   请扫描
+   {{packingNumber}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/partCode/partCode.vue b/mycomponents/partCode/partCode.vue
new file mode 100644
index 00000000..915106b8
--- /dev/null
+++ b/mycomponents/partCode/partCode.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+ {{itemCode}}
+
+
+ {{itemName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/partCode/partCodeSelect.vue b/mycomponents/partCode/partCodeSelect.vue
new file mode 100644
index 00000000..631cf749
--- /dev/null
+++ b/mycomponents/partCode/partCodeSelect.vue
@@ -0,0 +1,62 @@
+
+
+
+ 零件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/production/productionInfo.vue b/mycomponents/production/productionInfo.vue
new file mode 100644
index 00000000..6ced48a6
--- /dev/null
+++ b/mycomponents/production/productionInfo.vue
@@ -0,0 +1,39 @@
+
+
+ 生产线
+ {{dataContent.ProductionLineCode}}
+
+
+ 生产日期
+ {{dataContent.ProduceDate}}
+
+
+
+
+
+
diff --git a/mycomponents/purchase/purchaseInfo.vue b/mycomponents/purchase/purchaseInfo.vue
new file mode 100644
index 00000000..b831c770
--- /dev/null
+++ b/mycomponents/purchase/purchaseInfo.vue
@@ -0,0 +1,37 @@
+
+
+ 供应商
+ {{dataContent.SupplierName}}
+
+
+ 采购订单
+ {{dataContent.PoNumber}}
+
+
+
+
+
+
diff --git a/mycomponents/qty/CountQtyEdit.vue b/mycomponents/qty/CountQtyEdit.vue
new file mode 100644
index 00000000..0ded9f60
--- /dev/null
+++ b/mycomponents/qty/CountQtyEdit.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ 标包个数 :
+
+
+
+
+ {{getStdPackUnitInfo(dataContent.stdPackUnit)}}
+
+
+
+
+
+
+ 标包量 :
+
+ {{Number(dataContent.stdPackQty)}}
+
+
+
+
+
+
+ 数量 :
+
+
+
+
+
+
+
+ 库存数量 :
+
+ {{Number(dataContent.balanceQty)}}
+
+
+
+
+
+ 库存状态 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/RecommendQty.vue b/mycomponents/qty/RecommendQty.vue
new file mode 100644
index 00000000..b294485c
--- /dev/null
+++ b/mycomponents/qty/RecommendQty.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+ {{Number(dataContent.qty)}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/balanceQty.vue b/mycomponents/qty/balanceQty.vue
new file mode 100644
index 00000000..d1358a3d
--- /dev/null
+++ b/mycomponents/qty/balanceQty.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+ {{Number(dataContent.qty)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/balanceQtyEdit.vue b/mycomponents/qty/balanceQtyEdit.vue
new file mode 100644
index 00000000..bfe98e46
--- /dev/null
+++ b/mycomponents/qty/balanceQtyEdit.vue
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ 标包个数 :
+
+
+
+
+
+
+
+
+
+ 标包量 :
+
+ {{Number(dataContent.stdPackQty)}}
+
+
+
+
+
+
+ 数量 :
+
+
+
+
+
+
+
+ 库存数量 :
+
+ {{Number(dataContent.balanceQty)}}
+
+
+
+
+
+ 库存状态 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/compareQty.vue b/mycomponents/qty/compareQty.vue
new file mode 100644
index 00000000..f519e3c5
--- /dev/null
+++ b/mycomponents/qty/compareQty.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+ {{Number(handleQty)}}
+
+
+ {{Number(handleQty)}}
+
+
+ {{Number(handleQty)}}
+
+
+ /
+
+ {{Number(recommendQty)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/inspectQtyEdit.vue b/mycomponents/qty/inspectQtyEdit.vue
new file mode 100644
index 00000000..874bb484
--- /dev/null
+++ b/mycomponents/qty/inspectQtyEdit.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+ 数量 :
+
+
+
+
+
+
+
+ 不合格数量 :
+
+
+
+
+
+
+
+
+ 不合格原因 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/qty.vue b/mycomponents/qty/qty.vue
new file mode 100644
index 00000000..f2d55dcc
--- /dev/null
+++ b/mycomponents/qty/qty.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+ {{Number(dataContent.qty)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/recommendQtyEdit.vue b/mycomponents/qty/recommendQtyEdit.vue
new file mode 100644
index 00000000..feadfc8a
--- /dev/null
+++ b/mycomponents/qty/recommendQtyEdit.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ 标包个数 :
+
+
+
+
+
+
+
+
+
+ 标包量 :
+
+ {{Number(dataContent.stdPackQty)}}
+
+
+
+
+
+
+ 总数量 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/stdPackQty.vue b/mycomponents/qty/stdPackQty.vue
new file mode 100644
index 00000000..6c14c24e
--- /dev/null
+++ b/mycomponents/qty/stdPackQty.vue
@@ -0,0 +1,39 @@
+
+
+
+ {{Number(dataContent.stdPackQty)}}•{{getStdPackUnit(dataContent.uom)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/stdUom.vue b/mycomponents/qty/stdUom.vue
new file mode 100644
index 00000000..03508a7f
--- /dev/null
+++ b/mycomponents/qty/stdUom.vue
@@ -0,0 +1,40 @@
+
+
+ {{getStdPackUnit(uom)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/qty/uom.vue b/mycomponents/qty/uom.vue
new file mode 100644
index 00000000..bb138ba3
--- /dev/null
+++ b/mycomponents/qty/uom.vue
@@ -0,0 +1,40 @@
+
+
+ {{getUnitInfo(uom)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/recommend/recommend.vue b/mycomponents/recommend/recommend.vue
new file mode 100644
index 00000000..e6258c95
--- /dev/null
+++ b/mycomponents/recommend/recommend.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 复制箱码
+
+
+ 复制制品
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/recommend/recommendBalance.vue b/mycomponents/recommend/recommendBalance.vue
new file mode 100644
index 00000000..407f87b8
--- /dev/null
+++ b/mycomponents/recommend/recommendBalance.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/record.vue b/mycomponents/record/record.vue
new file mode 100644
index 00000000..bd7e6b1d
--- /dev/null
+++ b/mycomponents/record/record.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordBottom.vue b/mycomponents/record/recordBottom.vue
new file mode 100644
index 00000000..120265e5
--- /dev/null
+++ b/mycomponents/record/recordBottom.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ {{dataContent.creator}}
+
+
+
+ {{formatDate(dataContent.createTime)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordComDetailCard.vue b/mycomponents/record/recordComDetailCard.vue
new file mode 100644
index 00000000..c4fe3498
--- /dev/null
+++ b/mycomponents/record/recordComDetailCard.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordCommonInfo.vue b/mycomponents/record/recordCommonInfo.vue
new file mode 100644
index 00000000..efcd0f76
--- /dev/null
+++ b/mycomponents/record/recordCommonInfo.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordDetailCommonInfo.vue b/mycomponents/record/recordDetailCommonInfo.vue
new file mode 100644
index 00000000..7655126f
--- /dev/null
+++ b/mycomponents/record/recordDetailCommonInfo.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordFilter.vue b/mycomponents/record/recordFilter.vue
new file mode 100644
index 00000000..c3112443
--- /dev/null
+++ b/mycomponents/record/recordFilter.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ 只看当天
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordItemInfo.vue b/mycomponents/record/recordItemInfo.vue
new file mode 100644
index 00000000..dc911f51
--- /dev/null
+++ b/mycomponents/record/recordItemInfo.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 详细信息 :
+
+
+ 项目代码 :
+ {{dataContent.projectCode}}
+
+
+ 单据号 :
+ {{dataContent.number}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 物品代码 :
+ {{dataContent.itemCode}}
+
+
+ 物品名称 :
+ {{dataContent.itemName}}
+
+
+ 物品描述1 :
+ {{dataContent.itemDesc1}}
+
+
+ 物品描述2 :
+ {{dataContent.itemDesc2}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+
+ 数量 :
+ {{dataContent.qty}}
+
+
+ 计量单位 :
+ {{dataContent.uom}}
+
+
+ 备注 :
+ {{dataContent.remark}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordListCommonInfo.vue b/mycomponents/record/recordListCommonInfo.vue
new file mode 100644
index 00000000..5d8cabe3
--- /dev/null
+++ b/mycomponents/record/recordListCommonInfo.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordListDetailPoup.vue b/mycomponents/record/recordListDetailPoup.vue
new file mode 100644
index 00000000..7bbdf298
--- /dev/null
+++ b/mycomponents/record/recordListDetailPoup.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordMainInfo.vue b/mycomponents/record/recordMainInfo.vue
new file mode 100644
index 00000000..1c774cf2
--- /dev/null
+++ b/mycomponents/record/recordMainInfo.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+ 主要信息 :
+
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+
+ 从库位类型范围 :
+ {{dataContent.fromLocationTypes}}
+
+
+
+ 到库位类型范围 :
+ {{dataContent.toLocationTypes}}
+
+
+
+ 从库区代码范围 :
+ {{dataContent.fromAreaCodes}}
+
+
+
+ 到库区代码范围 :
+ {{dataContent.toAreaCodes}}
+
+
+
+ 单据号 :
+ {{dataContent.number}}
+
+
+
+
+ 业务类型 :
+ {{dataContent.businessType}}
+
+
+
+ 备注 :
+ {{dataContent.remark}}
+
+
+
+ 创建时间 :
+ {{dataContent.creationTime}}
+
+
+ 创建者Id :
+ {{dataContent.creatorId}}
+
+
+ 创建者用户名 :
+ {{dataContent.creatorName}}
+
+
+ 扩展属性 :
+ {{dataContent.extraProperties}}
+
+
+ 地点ID :
+ {{dataContent.siteId}}
+
+
+ 申请时间 :
+ {{dataContent.requestTime}}
+
+
+
+ 截止时间 :
+ {{dataContent.dueTime}}
+
+
+
+ 部门 :
+ {{dataContent.departmentCode}}
+
+
+ 状态 :
+ {{dataContent.status}}
+
+
+ 自动提交 :
+ {{dataContent.autoCommit}}
+
+
+
+ 自动通过 :
+ {{dataContent.autoAgree}}
+
+
+ 自动执行 :
+ {{dataContent.autoExecute}}
+
+
+ 直接生成记录 :
+ {{dataContent.directCreateRecord}}
+
+
+
+ 最后更新时间 :
+ {{dataContent.lastModificationTime}}
+
+
+ 最后更新者Id :
+ {{dataContent.lastModifierId}}
+
+
+
+ 最后更新者用户名 :
+ {{dataContent.lastModiferName}}
+
+
+
+ 并发乐观锁 :
+ {{dataContent.concurrencyStamp}}
+
+
+
+ 权限所属人员id :
+ {{dataContent.rule_user_id}}
+
+
+
+ 工作流流水号 :
+ {{dataContent.serialNumber}}
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordNumber.vue b/mycomponents/record/recordNumber.vue
new file mode 100644
index 00000000..94a38499
--- /dev/null
+++ b/mycomponents/record/recordNumber.vue
@@ -0,0 +1,36 @@
+
+
+
+ {{number}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordPersonInfo.vue b/mycomponents/record/recordPersonInfo.vue
new file mode 100644
index 00000000..628a0a89
--- /dev/null
+++ b/mycomponents/record/recordPersonInfo.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+ 创建者Id :
+ {{dataContent.creatorId}}
+
+
+ 创建者用户名 :
+ {{dataContent.creatorName}}
+
+
+ 创建时间 :
+ {{dataContent.creationTime}}
+
+
+ 最后更新者Id :
+ {{dataContent.lastModifierId}}
+
+
+ 最后更新者用户名 :
+ {{dataContent.lastModiferName}}
+
+
+ 最后更新时间 :
+ {{dataContent.lastModificationTime}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordRequestInfo.vue b/mycomponents/record/recordRequestInfo.vue
new file mode 100644
index 00000000..66d18570
--- /dev/null
+++ b/mycomponents/record/recordRequestInfo.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+ 申请单号 :
+ {{dataContent.requestNumber}}
+
+
+ 申请时间 :
+ {{dataContent.requestTime}}
+
+
+ 要求截至时间 :
+ {{dataContent.requestDueTime}}
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordStatus.vue b/mycomponents/record/recordStatus.vue
new file mode 100644
index 00000000..f0a516f7
--- /dev/null
+++ b/mycomponents/record/recordStatus.vue
@@ -0,0 +1,47 @@
+
+
+
+ {{ jobStatusInfo.name}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/record/recordTop.vue b/mycomponents/record/recordTop.vue
new file mode 100644
index 00000000..6c52a50a
--- /dev/null
+++ b/mycomponents/record/recordTop.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestBottom.vue b/mycomponents/request/requestBottom.vue
new file mode 100644
index 00000000..120265e5
--- /dev/null
+++ b/mycomponents/request/requestBottom.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+ {{dataContent.creator}}
+
+
+
+ {{formatDate(dataContent.createTime)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestComMainCard.vue b/mycomponents/request/requestComMainCard.vue
new file mode 100644
index 00000000..0f4ca8a5
--- /dev/null
+++ b/mycomponents/request/requestComMainCard.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestCommonInfo.vue b/mycomponents/request/requestCommonInfo.vue
new file mode 100644
index 00000000..4ea47042
--- /dev/null
+++ b/mycomponents/request/requestCommonInfo.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestFilter.vue b/mycomponents/request/requestFilter.vue
new file mode 100644
index 00000000..3d1777c5
--- /dev/null
+++ b/mycomponents/request/requestFilter.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ 只看处理中
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestItemInfo.vue b/mycomponents/request/requestItemInfo.vue
new file mode 100644
index 00000000..dc911f51
--- /dev/null
+++ b/mycomponents/request/requestItemInfo.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 详细信息 :
+
+
+ 项目代码 :
+ {{dataContent.projectCode}}
+
+
+ 单据号 :
+ {{dataContent.number}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 物品代码 :
+ {{dataContent.itemCode}}
+
+
+ 物品名称 :
+ {{dataContent.itemName}}
+
+
+ 物品描述1 :
+ {{dataContent.itemDesc1}}
+
+
+ 物品描述2 :
+ {{dataContent.itemDesc2}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+
+ 数量 :
+ {{dataContent.qty}}
+
+
+ 计量单位 :
+ {{dataContent.uom}}
+
+
+ 备注 :
+ {{dataContent.remark}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestListCommonInfo.vue b/mycomponents/request/requestListCommonInfo.vue
new file mode 100644
index 00000000..e9d490a5
--- /dev/null
+++ b/mycomponents/request/requestListCommonInfo.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestMainInfo.vue b/mycomponents/request/requestMainInfo.vue
new file mode 100644
index 00000000..1c774cf2
--- /dev/null
+++ b/mycomponents/request/requestMainInfo.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+ 主要信息 :
+
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+
+ 从库位类型范围 :
+ {{dataContent.fromLocationTypes}}
+
+
+
+ 到库位类型范围 :
+ {{dataContent.toLocationTypes}}
+
+
+
+ 从库区代码范围 :
+ {{dataContent.fromAreaCodes}}
+
+
+
+ 到库区代码范围 :
+ {{dataContent.toAreaCodes}}
+
+
+
+ 单据号 :
+ {{dataContent.number}}
+
+
+
+
+ 业务类型 :
+ {{dataContent.businessType}}
+
+
+
+ 备注 :
+ {{dataContent.remark}}
+
+
+
+ 创建时间 :
+ {{dataContent.creationTime}}
+
+
+ 创建者Id :
+ {{dataContent.creatorId}}
+
+
+ 创建者用户名 :
+ {{dataContent.creatorName}}
+
+
+ 扩展属性 :
+ {{dataContent.extraProperties}}
+
+
+ 地点ID :
+ {{dataContent.siteId}}
+
+
+ 申请时间 :
+ {{dataContent.requestTime}}
+
+
+
+ 截止时间 :
+ {{dataContent.dueTime}}
+
+
+
+ 部门 :
+ {{dataContent.departmentCode}}
+
+
+ 状态 :
+ {{dataContent.status}}
+
+
+ 自动提交 :
+ {{dataContent.autoCommit}}
+
+
+
+ 自动通过 :
+ {{dataContent.autoAgree}}
+
+
+ 自动执行 :
+ {{dataContent.autoExecute}}
+
+
+ 直接生成记录 :
+ {{dataContent.directCreateRecord}}
+
+
+
+ 最后更新时间 :
+ {{dataContent.lastModificationTime}}
+
+
+ 最后更新者Id :
+ {{dataContent.lastModifierId}}
+
+
+
+ 最后更新者用户名 :
+ {{dataContent.lastModiferName}}
+
+
+
+ 并发乐观锁 :
+ {{dataContent.concurrencyStamp}}
+
+
+
+ 权限所属人员id :
+ {{dataContent.rule_user_id}}
+
+
+
+ 工作流流水号 :
+ {{dataContent.serialNumber}}
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestNumber.vue b/mycomponents/request/requestNumber.vue
new file mode 100644
index 00000000..94a38499
--- /dev/null
+++ b/mycomponents/request/requestNumber.vue
@@ -0,0 +1,36 @@
+
+
+
+ {{number}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestPersonInfo.vue b/mycomponents/request/requestPersonInfo.vue
new file mode 100644
index 00000000..628a0a89
--- /dev/null
+++ b/mycomponents/request/requestPersonInfo.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+ 创建者Id :
+ {{dataContent.creatorId}}
+
+
+ 创建者用户名 :
+ {{dataContent.creatorName}}
+
+
+ 创建时间 :
+ {{dataContent.creationTime}}
+
+
+ 最后更新者Id :
+ {{dataContent.lastModifierId}}
+
+
+ 最后更新者用户名 :
+ {{dataContent.lastModiferName}}
+
+
+ 最后更新时间 :
+ {{dataContent.lastModificationTime}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestRequestInfo.vue b/mycomponents/request/requestRequestInfo.vue
new file mode 100644
index 00000000..66d18570
--- /dev/null
+++ b/mycomponents/request/requestRequestInfo.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+ 申请单号 :
+ {{dataContent.requestNumber}}
+
+
+ 申请时间 :
+ {{dataContent.requestTime}}
+
+
+ 要求截至时间 :
+ {{dataContent.requestDueTime}}
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestStatus.vue b/mycomponents/request/requestStatus.vue
new file mode 100644
index 00000000..4d07e6b9
--- /dev/null
+++ b/mycomponents/request/requestStatus.vue
@@ -0,0 +1,45 @@
+
+
+
+ {{ statusInfo.label}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/request/requestTop.vue b/mycomponents/request/requestTop.vue
new file mode 100644
index 00000000..5a49dbe2
--- /dev/null
+++ b/mycomponents/request/requestTop.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winComScan.vue b/mycomponents/scan/winComScan.vue
new file mode 100644
index 00000000..315e97ed
--- /dev/null
+++ b/mycomponents/scan/winComScan.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 历史记录
+
+
+
+
+
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanAsnNumber.vue b/mycomponents/scan/winScanAsnNumber.vue
new file mode 100644
index 00000000..3a0e420d
--- /dev/null
+++ b/mycomponents/scan/winScanAsnNumber.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanButton.vue b/mycomponents/scan/winScanButton.vue
new file mode 100644
index 00000000..fd228659
--- /dev/null
+++ b/mycomponents/scan/winScanButton.vue
@@ -0,0 +1,53 @@
+
+
+
+
+ 扫描
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanContainer.vue b/mycomponents/scan/winScanContainer.vue
new file mode 100644
index 00000000..dcc083b5
--- /dev/null
+++ b/mycomponents/scan/winScanContainer.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanItem.vue b/mycomponents/scan/winScanItem.vue
new file mode 100644
index 00000000..6b459119
--- /dev/null
+++ b/mycomponents/scan/winScanItem.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanJobNumber.vue b/mycomponents/scan/winScanJobNumber.vue
new file mode 100644
index 00000000..84d09b86
--- /dev/null
+++ b/mycomponents/scan/winScanJobNumber.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanLocation.vue b/mycomponents/scan/winScanLocation.vue
new file mode 100644
index 00000000..2b33c512
--- /dev/null
+++ b/mycomponents/scan/winScanLocation.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanPack.vue b/mycomponents/scan/winScanPack.vue
new file mode 100644
index 00000000..82058c80
--- /dev/null
+++ b/mycomponents/scan/winScanPack.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanPackAndLocation.vue b/mycomponents/scan/winScanPackAndLocation.vue
new file mode 100644
index 00000000..0a1ae1d1
--- /dev/null
+++ b/mycomponents/scan/winScanPackAndLocation.vue
@@ -0,0 +1,349 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/scan/winScanProdline.vue b/mycomponents/scan/winScanProdline.vue
new file mode 100644
index 00000000..e174fcfd
--- /dev/null
+++ b/mycomponents/scan/winScanProdline.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/status/balanceStatus.vue b/mycomponents/status/balanceStatus.vue
new file mode 100644
index 00000000..19564c36
--- /dev/null
+++ b/mycomponents/status/balanceStatus.vue
@@ -0,0 +1,70 @@
+
+
+
+
+ {{statusDesc(status) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/status/status.vue b/mycomponents/status/status.vue
new file mode 100644
index 00000000..e884b25e
--- /dev/null
+++ b/mycomponents/status/status.vue
@@ -0,0 +1,41 @@
+
+
+
+ •
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/status/statusEdit.vue b/mycomponents/status/statusEdit.vue
new file mode 100644
index 00000000..22473275
--- /dev/null
+++ b/mycomponents/status/statusEdit.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mycomponents/transfer/comTransferReceipt.vue b/mycomponents/transfer/comTransferReceipt.vue
new file mode 100644
index 00000000..1c9ba308
--- /dev/null
+++ b/mycomponents/transfer/comTransferReceipt.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+ 调入人:{{dataContent.acceptUserName}}
+
+
+
+
+
+ 创建时间:{{dataContent.creationTime===null?'无':formatDate(dataContent.creationTime)}}
+
+
+
+
+
+
+
+
diff --git a/mycomponents/wincom/basicCom/winHint.vue b/mycomponents/wincom/basicCom/winHint.vue
new file mode 100644
index 00000000..e9945cb3
--- /dev/null
+++ b/mycomponents/wincom/basicCom/winHint.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+ 物品信息 {{dataContent.itemCode}}
+
+
+ 描述 {{dataContent.itemDesc1}} {{dataContent.itemDesc2}}
+
+
+ 箱码 {{dataContent.recommendPackingCode}}
+
+
+ 批次 {{dataContent.recommendSupplierBatch}}
+
+
+ 库位 {{dataContent.recommendLocationCode}}
+
+
+ 数量{{dataContent.recommendQty}}
+
+
+ 标包数量{{dataContent.stdPackQty}}
+
+
+ 推荐单位{{dataContent.recommendUom}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mycomponents/wincom/winScanContainerNumber.vue b/mycomponents/wincom/winScanContainerNumber.vue
new file mode 100644
index 00000000..642e62a4
--- /dev/null
+++ b/mycomponents/wincom/winScanContainerNumber.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..30ac86f2
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,397 @@
+{
+ "name": "hello-uniapp",
+ "version": "3.4.4",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "hello-uniapp",
+ "version": "3.4.4",
+ "license": "MIT",
+ "dependencies": {
+ "axios": "^1.3.4",
+ "decimal.js": "^10.4.3",
+ "jwt-decode": "^3.1.2",
+ "vue-clipboard2": "^0.3.3"
+ },
+ "devDependencies": {
+ "browserslist": "^4.21.9",
+ "caniuse-lite": "^1.0.30001515"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/axios": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+ "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001515",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz",
+ "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==",
+ "dev": true
+ },
+ "node_modules/clipboard": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz",
+ "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
+ "dependencies": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.455",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.455.tgz",
+ "integrity": "sha512-8tgdX0Odl24LtmLwxotpJCVjIndN559AvaOtd67u+2mo+IDsgsTF580NB+uuDCqsHw8yFg53l5+imFV9Fw3cbA==",
+ "dev": true
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
+ "dependencies": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "node_modules/jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
+ },
+ "node_modules/tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/vue-clipboard2": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz",
+ "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==",
+ "dependencies": {
+ "clipboard": "^2.0.0"
+ }
+ }
+ },
+ "dependencies": {
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "axios": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+ "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+ "requires": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001515",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz",
+ "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==",
+ "dev": true
+ },
+ "clipboard": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz",
+ "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
+ },
+ "electron-to-chromium": {
+ "version": "1.4.455",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.455.tgz",
+ "integrity": "sha512-8tgdX0Odl24LtmLwxotpJCVjIndN559AvaOtd67u+2mo+IDsgsTF580NB+uuDCqsHw8yFg53l5+imFV9Fw3cbA==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
+ "requires": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
+ },
+ "tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
+ },
+ "update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "vue-clipboard2": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz",
+ "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==",
+ "requires": {
+ "clipboard": "^2.0.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index e5def356..ff5c00f6 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,114 @@
{
+ "id": "hello-uniapp",
+ "name": "hello-uniapp",
+ "displayName": "hello-uniapp 示例工程",
+ "version": "3.4.4",
+ "description": "uni-app 框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机扫码快速体验 uni-app 的强大功能",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": "https://github.com/dcloudio/hello-uniapp.git",
+ "keywords": [
+ "hello-uniapp",
+ "uni-app",
+ "uni-ui",
+ "示例工程"
+ ],
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/dcloudio/hello-uniapp/issues"
+ },
+ "homepage": "https://github.com/dcloudio/hello-uniapp#readme",
"dependencies": {
- "crypto-js": "^4.0.0"
+ "axios": "^1.3.4",
+ "decimal.js": "^10.4.3",
+ "jwt-decode": "^3.1.2",
+ "vue-clipboard2": "^0.3.3"
+ },
+ "dcloudext": {
+ "category": [
+ "前端页面模板",
+ "uni-app前端项目模板"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "京东": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ },
+ "uni-app": {
+ "scripts": {
+ "mp-dingtalk": {
+ "title": "钉钉小程序",
+ "env": {
+ "UNI_PLATFORM": "mp-alipay"
+ },
+ "define": {
+ "MP-DINGTALK": true
+ }
+ }
+ }
+ },
+ "devDependencies": {
+ "browserslist": "^4.21.9",
+ "caniuse-lite": "^1.0.30001515"
}
}
diff --git a/pages.json b/pages.json
index 5c19f74b..4f7494a2 100644
--- a/pages.json
+++ b/pages.json
@@ -1,97 +1,1728 @@
{
- "pages": [{
- "path": "pages/login",
- "style": {
- "navigationBarTitleText": "登录"
- }
- }, {
- "path": "pages/index",
- "style": {
- "navigationBarTitleText": "闻荫移动端框架",
- "navigationStyle": "custom"
- }
- }, {
- "path": "pages/work/index",
- "style": {
- "navigationBarTitleText": "工作台"
- }
- }, {
- "path": "pages/mine/index",
- "style": {
- "navigationBarTitleText": "我的"
- }
- }, {
- "path": "pages/mine/avatar/index",
- "style": {
- "navigationBarTitleText": "修改头像"
- }
- }, {
- "path": "pages/mine/info/index",
- "style": {
- "navigationBarTitleText": "个人信息"
- }
- }, {
- "path": "pages/mine/info/edit",
- "style": {
- "navigationBarTitleText": "编辑资料"
- }
- }, {
- "path": "pages/mine/pwd/index",
- "style": {
- "navigationBarTitleText": "修改密码"
- }
- }, {
- "path": "pages/mine/setting/index",
- "style": {
- "navigationBarTitleText": "应用设置"
- }
- }, {
- "path": "pages/mine/help/index",
- "style": {
- "navigationBarTitleText": "常见问题"
- }
- }, {
- "path": "pages/mine/about/index",
- "style": {
- "navigationBarTitleText": "关于我们"
- }
- }, {
- "path": "pages/common/webview/index",
- "style": {
- "navigationBarTitleText": "浏览网页"
- }
- }, {
- "path": "pages/common/textview/index",
- "style": {
- "navigationBarTitleText": "浏览文本"
- }
- }],
- "tabBar": {
- "color": "#000000",
- "selectedColor": "#000000",
- "borderStyle": "white",
- "backgroundColor": "#ffffff",
- "list": [{
- "pagePath": "pages/index",
- "iconPath": "static/images/tabbar/home.png",
- "selectedIconPath": "static/images/tabbar/home_.png",
- "text": "首页"
- }, {
- "pagePath": "pages/work/index",
- "iconPath": "static/images/tabbar/work.png",
- "selectedIconPath": "static/images/tabbar/work_.png",
- "text": "工作台"
- }, {
- "pagePath": "pages/mine/index",
- "iconPath": "static/images/tabbar/mine.png",
- "selectedIconPath": "static/images/tabbar/mine_.png",
- "text": "我的"
- }
- ]
- },
- "globalStyle": {
- "navigationBarTextStyle": "black",
- "navigationBarTitleText": "RuoYi",
- "navigationBarBackgroundColor": "#FFFFFF"
- }
+
+ "pages": [{
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "WMS仓库管理系统-移动端",
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ },
+ {
+ "path": "pages/message/index",
+ "style": {
+ "navigationBarTitleText": "消息",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "设置",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/mine/avatar/index",
+ "style": {
+ "navigationBarTitleText": "修改头像"
+ }
+ }, {
+ "path": "pages/mine/info/index",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ }, {
+ "path": "pages/mine/info/edit",
+ "style": {
+ "navigationBarTitleText": "编辑资料"
+ }
+ }, {
+ "path": "pages/mine/pwd/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ }, {
+ "path": "pages/mine/setting/index",
+ "style": {
+ "navigationBarTitleText": "应用设置"
+ }
+ }, {
+ "path": "pages/mine/help/index",
+ "style": {
+ "navigationBarTitleText": "常见问题"
+ }
+ }, {
+ "path": "pages/mine/about/index",
+ "style": {
+ "navigationBarTitleText": "关于我们"
+ }
+ },
+ {
+ "path": "pages/common/webview/index",
+ "style": {
+ "navigationBarTitleText": "浏览网页"
+ }
+ }, {
+ "path": "pages/common/textview/index",
+ "style": {
+ "navigationBarTitleText": "浏览文本"
+ }
+ },
+ {
+ "path": "pages/home/index",
+ "style": {
+ "navigationBarTitleText": "WMS仓库管理系统-移动端",
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ },
+ {
+ "path": "pages/login/index",
+ "style": {
+ "navigationBarTitleText": "登录",
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ },
+
+ {
+ "path": "pages/demo/demo",
+ "style": {
+ "navigationBarTitleText": "组件",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/purchaseReturn/record/returnRecord",
+ "style": {
+ "navigationBarTitleText": "采购退货记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/purchaseReturn/request/returnRequest",
+ "style": {
+ "navigationBarTitleText": "采购退货申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/purchaseReturn/request/returnRequestDetail",
+ "style": {
+ "navigationBarTitleText": "采购退货申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/purchaseReturn/job/returnJob",
+ "style": {
+ "navigationBarTitleText": "采购退货",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/purchaseReturn/job/returnDetail",
+ "style": {
+ "navigationBarTitleText": "退货任务详情",
+ "enablePullDownRefresh": true
+ // "titleNView": {
+ // "autoBackButton": "true"
+ // }
+ }
+ },
+ {
+ "path": "pages/purchaseReceipt/job/receiptJob",
+ "style": {
+ "navigationBarTitleText": "采购收货",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/purchaseReceipt/job/receiptDetail",
+ "style": {
+ "navigationBarTitleText": "采购收货任务详情",
+ "enablePullDownRefresh": true
+ }
+ },
+
+ {
+ "path": "pages/inspect/job/inspectJob",
+ "style": {
+ "navigationBarTitleText": "到货检验",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/inspect/job/inspectDetail",
+ "style": {
+ "navigationBarTitleText": "到货检验详情",
+ "enablePullDownRefresh": true
+ }
+ },
+
+ {
+ "path": "pages/putaway/job/putawayJob",
+ "style": {
+ "navigationBarTitleText": "原料上架",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/putaway/job/putawayDetail",
+ "style": {
+ "navigationBarTitleText": "原料上架详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/putaway/record/putawayRecord",
+ "style": {
+ "navigationBarTitleText": "原料上架",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/putaway/request/putawayRequest",
+ "style": {
+ "navigationBarTitleText": "原料上架申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/putaway/request/putawayRequestDetail",
+ "style": {
+ "navigationBarTitleText": "原料上架申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/productionReceipt/job/productionReceiptJob",
+ "style": {
+ "navigationBarTitleText": "生产收料",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productionReceipt/job/productionReceiptDetail",
+ "style": {
+ "navigationBarTitleText": "生产收料详细"
+
+ }
+ },
+ {
+ "path": "pages/productionReceipt/record/productionReceiptRecord",
+ "style": {
+ "navigationBarTitleText": "生产收料记录"
+
+ }
+ },
+
+ {
+ "path": "pages/issue/job/issueJob",
+ "style": {
+ "navigationBarTitleText": "发料任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/repleinsh/job/repleinshJob",
+ "style": {
+ "navigationBarTitleText": "补料任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/repleinsh/job/repleinshDetail",
+ "style": {
+ "navigationBarTitleText": "补料详情",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true"
+ }
+ }
+ },
+ {
+ "path": "pages/repleinsh/record/repleinshRecord",
+ "style": {
+ "navigationBarTitleText": "补料记录",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true"
+ }
+ }
+ },
+ {
+ "path": "pages/issue/record/issueRecord",
+ "style": {
+ "navigationBarTitleText": "直接发料",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true"
+ }
+ }
+ },
+ {
+ "path": "pages/issue/job/issueDetail",
+ "style": {
+ "navigationBarTitleText": "发料任务详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/issue/request/issueRequest",
+ "style": {
+ "navigationBarTitleText": "发料申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/issue/request/issueRequestDetail",
+ "style": {
+ "navigationBarTitleText": "发料申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/productionReturn/job/returnJob",
+ "style": {
+ "navigationBarTitleText": "生产退料",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productionReturn/job/returnDetail",
+ "style": {
+ "navigationBarTitleText": "生产退料详细",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/productionReturn/record/returnToStore",
+ "style": {
+ "navigationBarTitleText": "合格退料",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/productionReturn/record/returnToHold",
+ "style": {
+ "navigationBarTitleText": "隔离退料",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/productionReturn/request/returnToStoreRequest",
+ "style": {
+ "navigationBarTitleText": "生产退料合格申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productionReturn/request/returnToHoldRequest",
+ "style": {
+ "navigationBarTitleText": "生产退料隔离申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/productionReturn/request/requestDetail",
+ "style": {
+ "navigationBarTitleText": "生产退料详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+
+
+
+
+ {
+ "path": "pages/query/item",
+ "style": {
+ "enablePullDownRefresh": false, // 是否配置下拉刷新的功能
+ "navigationBarTitleText": "按零件查询库存",
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ },
+ {
+ "path": "pages/query/location",
+ "style": {
+ "navigationBarTitleText": "按库位查询库存",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ }, {
+ "path": "pages/query/number",
+ "style": {
+ "navigationBarTitleText": "按库位查询库存",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ }, {
+ "path": "pages/query/container",
+ "style": {
+ "navigationBarTitleText": "按器具查询库存",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{}]
+ }
+ }
+ },
+ {
+ "path": "pages/supplierDeliver/record/supplierDeliverRecord",
+ "style": {
+ "navigationBarTitleText": "供应商发货记录",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/supplierDeliver/record/supplierDeliverRecordDetail",
+ "style": {
+ "navigationBarTitleText": "供应商发货记录详情",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inspect/request/inspectRequest",
+ "style": {
+ "navigationBarTitleText": "检验单申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inspect/request/inspectRequestDetail",
+ "style": {
+ "navigationBarTitleText": "检验单申请详情",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inspect/job/inspectResult",
+ "style": {
+ "navigationBarTitleText": "检验结果",
+ "enablePullDownRefresh": true
+ }
+ },
+
+
+
+ {
+ "path": "pages/inventoryMove/job/inventoryMoveJob",
+ "style": {
+ "navigationBarTitleText": "库存转移",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/inventoryMoveDetail",
+ "style": {
+ "navigationBarTitleText": "库存转移详细",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/okToHoldMoveJob",
+ "style": {
+ "navigationBarTitleText": "合格转隔离",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/holdToOkMoveJob",
+ "style": {
+ "navigationBarTitleText": "隔离转合格",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/okToScrapMoveJob",
+ "style": {
+ "navigationBarTitleText": "合格转报废",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/HoldToScrapMoveJob",
+ "style": {
+ "navigationBarTitleText": "隔离转报废",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/job/scrapToHoldMoveJob",
+ "style": {
+ "navigationBarTitleText": "报废转隔离",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/inventoryMove/record/scrapToHoldMoveRecord",
+ "style": {
+ "navigationBarTitleText": "报废转隔离记录",
+ "enablePullDownRefresh": true
+ }
+ },
+
+
+ {
+ "path": "pages/inventoryMove/record/moveFreeRecord",
+ "style": {
+ "navigationBarTitleText": "库存转移记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inventoryMove/record/moveOkToHoldRecord",
+ "style": {
+ "navigationBarTitleText": "合格转隔离记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inventoryMove/record/moveHoldToOkRecord",
+ "style": {
+ "navigationBarTitleText": "隔离转合格记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inventoryMove/record/holdToScrapRecord",
+ "style": {
+ "navigationBarTitleText": "隔离转报废记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/inventoryMove/record/oktoScrapRecord",
+ "style": {
+ "navigationBarTitleText": "合格转报废记录",
+ "enablePullDownRefresh": true
+ }
+ },
+
+
+ {
+ "path": "pages/transfer/job/receiptJob",
+ "style": {
+ "navigationBarTitleText": "调拨接收任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/transfer/job/receiptDetail",
+ "style": {
+ "navigationBarTitleText": "调拨接收详情",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/transfer/record/receiptRecord",
+ "style": {
+ "navigationBarTitleText": "调拨接收记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/transfer/job/issueJob",
+ "style": {
+ "navigationBarTitleText": "调拨发货任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "buttons": [{
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/transfer/record/issueRecord",
+ "style": {
+ "navigationBarTitleText": "调拨发出记录",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/transfer/job/issueDetail",
+ "style": {
+ "navigationBarTitleText": "调拨发出详细",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/count/job/countJob",
+ "style": {
+ "navigationBarTitleText": "盘点任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/count/job/countDetail",
+ "style": {
+ "navigationBarTitleText": "盘点详细",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/count/record/countRecord",
+ "style": {
+ "navigationBarTitleText": "按库位盘点",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/productReceipt/job/productReceiptJob",
+ "style": {
+ "navigationBarTitleText": "制品收货任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productReceipt/record/productReceiptRecord",
+ "style": {
+ "navigationBarTitleText": "制品收货记录",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/productReceipt/job/productReceiptDetail",
+ "style": {
+ "navigationBarTitleText": "制品收货详情",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/productPutaway/job/productPutawayJob",
+ "style": {
+ "navigationBarTitleText": "制品上架任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productPutaway/job/productPutawayDetail",
+ "style": {
+ "navigationBarTitleText": "制品上架详情",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/productPutaway/record/productPutawayRecord",
+ "style": {
+ "navigationBarTitleText": "制品上架记录",
+ "enablePullDownRefresh": false
+
+ }
+ },
+
+ {
+ "path": "pages/productPutaway/request/putawayRequest",
+ "style": {
+ "navigationBarTitleText": "制品上架申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/productPutaway/request/putawayRequestDetail",
+ "style": {
+ "navigationBarTitleText": "制品上架申请详情",
+ "enablePullDownRefresh": false
+
+ }
+ },
+
+ {
+ "path": "pages/productDismantle/job/productDismantleJob",
+ "style": {
+ "navigationBarTitleText": "制品拆解",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/productDismantle/job/productDismantleDetail",
+ "style": {
+ "navigationBarTitleText": "制品拆解任务详情",
+ "enablePullDownRefresh": false
+
+ }
+ },
+ {
+ "path": "pages/productDismantle/record/productDismantleRecord",
+ "style": {
+ "navigationBarTitleText": "制品拆解记录",
+ "enablePullDownRefresh": false
+
+ }
+ },
+
+
+
+
+
+
+
+ //productPutawayDetail
+ // {
+ // "path": "test/winScanStandardTest",
+ // "style": {
+ // "navigationBarTitleText": "扫描控件测试",
+ // "enablePullDownRefresh": false
+ // }
+ // },
+ {
+ "path": "pages/unPlanned/job/receiptJob",
+ "style": {
+ "navigationBarTitleText": "计划外入库任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+
+ {
+ "path": "pages/unPlanned/job/receiptJobDetail",
+ "style": {
+ "navigationBarTitleText": "计划外入库详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/unPlanned/request/receiptRequest",
+ "style": {
+ "navigationBarTitleText": "计划外入库申请",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/unPlanned/request/receiptRequestDetail",
+ "style": {
+ "navigationBarTitleText": "计划外入库申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/unPlanned/job/issueJob",
+ "style": {
+ "navigationBarTitleText": "计划外出库任务",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/unPlanned/job/issueJobDetail",
+ "style": {
+ "navigationBarTitleText": "计划外出库详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/unPlanned/request/issueRequest",
+ "style": {
+ "navigationBarTitleText": "计划外出库申请",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/unPlanned/request/issueRequestDetail",
+ "style": {
+ "navigationBarTitleText": "计划外出库申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/unPlanned/record/receiptRecord",
+ "style": {
+ "navigationBarTitleText": "计划外入库记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/unPlanned/record/issueRecord",
+ "style": {
+ "navigationBarTitleText": "计划外出库记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/deliver/job/deliverJob",
+ "style": {
+ "navigationBarTitleText": "制品发货任务",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/deliver/job/deliverDetail",
+ "style": {
+ "navigationBarTitleText": "制品发货详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/deliver/record/deliverRecord",
+ "style": {
+ "navigationBarTitleText": "制品发货记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/deliver/request/deliverRequest",
+ "style": {
+ "navigationBarTitleText": "成品发货申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/deliver/request/deliverRequestDetail",
+ "style": {
+ "navigationBarTitleText": "成品发货申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/customerReturn/job/returnJob",
+ "style": {
+ "navigationBarTitleText": "客户退货任务",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/customerReturn/job/returnDetail",
+ "style": {
+ "navigationBarTitleText": "客户退货详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/customerReturn/record/returnRecord",
+ "style": {
+ "navigationBarTitleText": "客户退货记录",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/customerReturn/request/customerReturnRequest",
+ "style": {
+ "navigationBarTitleText": "客户退货申请",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/customerReturn/request/customerReturnRequestDetail",
+ "style": {
+ "navigationBarTitleText": "客户退货申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/scrap/record/scrapRecord",
+ "style": {
+ "navigationBarTitleText": "报废出库",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "pages/scrap/job/scrapJob",
+ "style": {
+ "navigationBarTitleText": "报废出库",
+ "enablePullDownRefresh": true,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/scrap/job/scrapJobDetail",
+ "style": {
+ "navigationBarTitleText": "报废出库任务详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/scrap/request/scrapRrequest",
+ "style": {
+ "navigationBarTitleText": "报废出库申请",
+ "enablePullDownRefresh": false,
+ "titleNView": {
+ // "autoBackButton": "true",
+ "buttons": [
+ // 右边按钮
+ {
+ "float": "right",
+ "fontSize": "23px", //按钮上文字的大小
+ "text": "\ue7c6",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ },
+ {
+
+ "float": "right",
+ "fontSize": "21px", //按钮上文字的大小
+ "text": "\ue6e2",
+ "fontSrc": "/static/iconfont/iconfont.ttf"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "path": "pages/scrap/request/scrapRequestDetail",
+ "style": {
+ "navigationBarTitleText": "报废出库申请详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/pallet/record/bindPalletRecord",
+ "style": {
+ "navigationBarTitleText": "托盘绑定",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/pallet/record/unBindPalletRecord",
+ "style": {
+ "navigationBarTitleText": "托盘解绑",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/package/record/splitPackageRecord",
+ "style": {
+ "navigationBarTitleText": "拆包",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/package/record/mergePackageRecord",
+ "style": {
+ "navigationBarTitleText": "合包",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/package/record/overPackageRecord",
+ "style": {
+ "navigationBarTitleText": "翻包",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/setter/index",
+ "style": {
+ "navigationBarTitleText": "设置",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/setter/passwordpage",
+ "style": {
+ "navigationBarTitleText": "修改密码",
+ "enablePullDownRefresh": false
+ }
+ }
+
+ ],
+
+ "globalStyle": {
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "WMS仓库管理系统-移动端",
+ "navigationBarBackgroundColor": "#3C9CFF !important",
+ "h5": {
+ "maxWidth": 1190,
+ "navigationBarTextStyle": "white",
+ "navigationBarBackgroundColor": "#3C9CFF !important"
+ },
+ //增加返回首页
+ "titleNView": {
+ "autoBackButton": "true",
+ "buttons": [{
+ "float": "right",
+ "text": "\ue7c6",
+ "fontSrc": "/static/icon/iconfont.ttf",
+ "fontSize": "22px"
+ }]
+ },
+ "softinputMode": "adjustPan" //adjustResize
+ },
+ "tabBar": {
+ "color": "#7A7E83",
+ "selectedColor": "#2678f2",
+ "borderStyle": "black",
+ "backgroundColor": "#ffffff",
+ "list": [{
+ "pagePath": "pages/index/index",
+ "iconPath": "static/bar/sy.png",
+ "selectedIconPath": "static/bar/sya.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/message/index",
+ "iconPath": "static/bar/xx.png",
+ "selectedIconPath": "static/bar/xxa.png",
+ "text": "消息"
+ }, {
+ "pagePath": "pages/setter/index",
+ "iconPath": "static/bar/sz.png",
+ "selectedIconPath": "static/bar/sza.png",
+ "text": "设置"
+ }
+ ]
+ }
}
diff --git a/pages/API/action-sheet/action-sheet.vue b/pages/API/action-sheet/action-sheet.vue
new file mode 100644
index 00000000..90c035d8
--- /dev/null
+++ b/pages/API/action-sheet/action-sheet.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/add-phone-contact/add-phone-contact.vue b/pages/API/add-phone-contact/add-phone-contact.vue
new file mode 100644
index 00000000..f4c39a37
--- /dev/null
+++ b/pages/API/add-phone-contact/add-phone-contact.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+ 名称
+
+
+
+
+
+
+
+ 手机号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/animation/animation.vue b/pages/API/animation/animation.vue
new file mode 100644
index 00000000..379858d2
--- /dev/null
+++ b/pages/API/animation/animation.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/background-audio/background-audio.vue b/pages/API/background-audio/background-audio.vue
new file mode 100644
index 00000000..5a3315e2
--- /dev/null
+++ b/pages/API/background-audio/background-audio.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+ {{formatedPlayTime}}
+
+
+
+
+
+ 00:00
+ 00:21
+
+ 注意:离开当前页面后背景音乐将保持播放,但退出uni-app将停止
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/bluetooth/bluetooth.vue b/pages/API/bluetooth/bluetooth.vue
new file mode 100644
index 00000000..d9bc4dad
--- /dev/null
+++ b/pages/API/bluetooth/bluetooth.vue
@@ -0,0 +1,723 @@
+
+
+
+
+
+ 本蓝牙协议只支持低功耗蓝牙协议ble。如果想连接非ble蓝牙设备,请在社区搜索 Native.js 蓝牙。
+
+
+
+
+ {{ '蓝牙适配器不可用,请初始化蓝牙模块' }}
+
+
+
+
+
+ {{
+ (connected ? '已连接设备' : '已选择设备') +
+ ' : ' +
+ equipment[0].name +
+ ' (' +
+ equipment[0].deviceId +
+ ')'
+ }}
+
+
+
+ 已选服务uuid:{{ servicesData[0].uuid }}
+
+
+ uuid:{{ characteristicsData[0].uuid }}
+
+ 是否支持 read 操作:{{ characteristicsData[0].properties.read }}
+
+
+ 是否支持 write 操作:{{ characteristicsData[0].properties.write }}
+
+
+ 是否支持 notify 操作:{{ characteristicsData[0].properties.notify }}
+
+
+ 是否支持 indicate 操作:{{ characteristicsData[0].properties.indicate }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 已经发现{{ list.length }}{{ showMaskType === 'device' ? '台设备' : '个服务' }}:
+
+
+
+ {{ item.name || item.localName }}
+ 信号强度:{{ item.RSSI }}dBm
+ UUID:{{ item.deviceId }}
+
+
+
+
+ UUID: {{ item.uuid }}
+
+ {{ item.isPrimary ? '(主服务)' : '' }}
+
+
+
+
+ uuid:{{ item.uuid }}
+ 是否支持 read 操作:{{ item.properties.read }}
+
+ 是否支持 write 操作:{{ item.properties.write }}
+
+
+ 是否支持 notify 操作:{{ item.properties.notify }}
+
+
+ 是否支持 indicate 操作:{{ item.properties.indicate }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/brightness/brightness.vue b/pages/API/brightness/brightness.vue
new file mode 100644
index 00000000..a0c9e125
--- /dev/null
+++ b/pages/API/brightness/brightness.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+ 亮度 : {{ screen }}
+
+
+
+
+ 保持常亮时,屏幕不会熄灭。仅在当前应用生效,离开应用后设置失效。
+
+
+
+
+
+
+
diff --git a/pages/API/canvas/canvas.vue b/pages/API/canvas/canvas.vue
new file mode 100644
index 00000000..f0f34a12
--- /dev/null
+++ b/pages/API/canvas/canvas.vue
@@ -0,0 +1,366 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/choose-location/choose-location.vue b/pages/API/choose-location/choose-location.vue
new file mode 100644
index 00000000..3b30801c
--- /dev/null
+++ b/pages/API/choose-location/choose-location.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+ 当前位置信息
+
+ 未选择位置
+
+
+
+ {{locationAddress}}
+
+
+ E: {{location.longitude[0]}}°{{location.longitude[1]}}′
+ \nN: {{location.latitude[0]}}°{{location.latitude[1]}}′
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/clipboard/clipboard.vue b/pages/API/clipboard/clipboard.vue
new file mode 100644
index 00000000..648fc4df
--- /dev/null
+++ b/pages/API/clipboard/clipboard.vue
@@ -0,0 +1,91 @@
+
+
+
+
+ 请输入剪贴板内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/download-file/download-file.vue b/pages/API/download-file/download-file.vue
new file mode 100644
index 00000000..2e1ddcd7
--- /dev/null
+++ b/pages/API/download-file/download-file.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+ 点击按钮下载服务端示例图片(下载网络文件到本地临时目录)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/file/file.vue b/pages/API/file/file.vue
new file mode 100644
index 00000000..43d6cca9
--- /dev/null
+++ b/pages/API/file/file.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+ + 请选择文件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/full-screen-video-ad/full-screen-video-ad.vue b/pages/API/full-screen-video-ad/full-screen-video-ad.vue
new file mode 100644
index 00000000..5224ed82
--- /dev/null
+++ b/pages/API/full-screen-video-ad/full-screen-video-ad.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/get-location/get-location.vue b/pages/API/get-location/get-location.vue
new file mode 100644
index 00000000..26dfd16c
--- /dev/null
+++ b/pages/API/get-location/get-location.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+ 当前位置经纬度
+
+ 未获取
+
+
+
+ E: {{location.longitude[0]}}°{{location.longitude[1]}}′
+ \nN: {{location.latitude[0]}}°{{location.latitude[1]}}′
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/get-network-type/get-network-type.vue b/pages/API/get-network-type/get-network-type.vue
new file mode 100644
index 00000000..740d99ea
--- /dev/null
+++ b/pages/API/get-network-type/get-network-type.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+ 网络状态
+
+ 未获取
+ 请点击下面按钮获取网络状态
+
+
+ {{networkType}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/get-node-info/get-node-info.vue b/pages/API/get-node-info/get-node-info.vue
new file mode 100644
index 00000000..870ab167
--- /dev/null
+++ b/pages/API/get-node-info/get-node-info.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ Drag
+
+
+
+ Click
+
+
+
+
+
+ {{item.key}}
+ {{item.val}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/get-system-info/get-system-info.vue b/pages/API/get-system-info/get-system-info.vue
new file mode 100644
index 00000000..feac3b54
--- /dev/null
+++ b/pages/API/get-system-info/get-system-info.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+ 设备型号
+
+
+
+
+
+
+
+ 客户端平台
+
+
+
+
+
+
+
+ 操作系统版本
+
+
+
+
+
+
+
+ 语言
+
+
+
+
+
+
+
+ 版本
+
+
+
+
+
+
+
+ 屏幕宽度
+
+
+
+
+
+
+
+ 屏幕高度
+
+
+
+
+
+
+
+ 可使用窗口高度
+
+
+
+
+
+
+
+ 可使用窗口的顶部位置
+
+
+
+
+
+
+
+ 可使用窗口的底部位置
+
+
+
+
+
+
+
+ 状态栏的高度
+
+
+
+
+
+
+
+ DPI
+
+
+
+
+
+
+
+
+ 基础库版本
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/get-user-info/get-user-info.vue b/pages/API/get-user-info/get-user-info.vue
new file mode 100644
index 00000000..f3ac9284
--- /dev/null
+++ b/pages/API/get-user-info/get-user-info.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+ 请点击下方按钮获取用户头像及昵称或手机号
+
+
+
+ {{userInfo.nickName || userInfo.nickname || userInfo.gender || userInfo.email || userInfo.phoneNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/ibeacon/ibeacon.vue b/pages/API/ibeacon/ibeacon.vue
new file mode 100644
index 00000000..0b19e4fd
--- /dev/null
+++ b/pages/API/ibeacon/ibeacon.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 已经发现 {{ deviceList.length }} 台设备:
+
+
+ UUID: {{ item.uuid }}
+ major: {{ item.major }}
+ minor: {{ item.minor }}
+ rssi: {{ item.rssi }} dBm
+ accuracy: {{ item.accuracy }}
+ heading: {{ item.heading }}
+
+
+
+
+
+
+
+
diff --git a/pages/API/image/image.vue b/pages/API/image/image.vue
new file mode 100644
index 00000000..24279391
--- /dev/null
+++ b/pages/API/image/image.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/inner-audio/inner-audio.vue b/pages/API/inner-audio/inner-audio.vue
new file mode 100644
index 00000000..ba6a2c26
--- /dev/null
+++ b/pages/API/inner-audio/inner-audio.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/intersection-observer/intersection-observer.vue b/pages/API/intersection-observer/intersection-observer.vue
new file mode 100644
index 00000000..80e5d9b6
--- /dev/null
+++ b/pages/API/intersection-observer/intersection-observer.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+ {{appear ? '小球出现' : '小球消失'}}
+
+
+
+ 向下滚动让小球出现
+
+
+
+
+
+
+
+
diff --git a/pages/API/login/login.vue b/pages/API/login/login.vue
new file mode 100644
index 00000000..9ab812f6
--- /dev/null
+++ b/pages/API/login/login.vue
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+ 已登录
+
+
+ ({{phoneNumber}})
+
+
+
+ 每个账号仅需登录 1 次,\n后续每次进入页面即可自动拉取用户信息。
+
+
+
+ 未登录
+
+ 请点击按钮登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/make-phone-call/make-phone-call.vue b/pages/API/make-phone-call/make-phone-call.vue
new file mode 100644
index 00000000..0e3cdee0
--- /dev/null
+++ b/pages/API/make-phone-call/make-phone-call.vue
@@ -0,0 +1,50 @@
+
+
+
+
+ 请在下方输入电话号码
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/map-search/map-search.nvue b/pages/API/map-search/map-search.nvue
new file mode 100644
index 00000000..9dc8ef61
--- /dev/null
+++ b/pages/API/map-search/map-search.nvue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/map/map.nvue b/pages/API/map/map.nvue
new file mode 100644
index 00000000..e9d0d4cd
--- /dev/null
+++ b/pages/API/map/map.nvue
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/modal/modal.vue b/pages/API/modal/modal.vue
new file mode 100644
index 00000000..65dff736
--- /dev/null
+++ b/pages/API/modal/modal.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/API/navigator/navigator.vue b/pages/API/navigator/navigator.vue
new file mode 100644
index 00000000..b58504f0
--- /dev/null
+++ b/pages/API/navigator/navigator.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/navigator/new-page/new-nvue-page-1.nvue b/pages/API/navigator/new-page/new-nvue-page-1.nvue
new file mode 100644
index 00000000..5c25cea9
--- /dev/null
+++ b/pages/API/navigator/new-page/new-nvue-page-1.nvue
@@ -0,0 +1,83 @@
+
+
+
+ 1?0:colorIndex+1)" :style="{backgroundColor:currentColor}">
+ 点击改变颜色
+
+
+ 点击上方色块使用vuex在页面之间进行通讯
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/navigator/new-page/new-nvue-page-2.nvue b/pages/API/navigator/new-page/new-nvue-page-2.nvue
new file mode 100644
index 00000000..a5d07800
--- /dev/null
+++ b/pages/API/navigator/new-page/new-nvue-page-2.nvue
@@ -0,0 +1,69 @@
+
+
+
+ 1?0:colorIndex+1)" :style="{backgroundColor:currentColor}">
+ 点击改变颜色
+
+
+ 点击上方色块使用vuex在页面之间进行通讯
+
+
+
+
+
+
diff --git a/pages/API/navigator/new-page/new-vue-page-1.vue b/pages/API/navigator/new-page/new-vue-page-1.vue
new file mode 100644
index 00000000..0b6c608a
--- /dev/null
+++ b/pages/API/navigator/new-page/new-vue-page-1.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+ 从上个页面接收到参数:{{data}}
+
+ 1?0:colorIndex+1)" :style="{backgroundColor:currentColor}">
+ 点击改变颜色
+
+
+ 点击上方色块使用vuex在页面之间进行通讯
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/navigator/new-page/new-vue-page-2.vue b/pages/API/navigator/new-page/new-vue-page-2.vue
new file mode 100644
index 00000000..925badd9
--- /dev/null
+++ b/pages/API/navigator/new-page/new-vue-page-2.vue
@@ -0,0 +1,84 @@
+
+
+
+ 1?0:colorIndex+1)" :style="{backgroundColor:currentColor}">
+ 点击改变颜色
+
+
+ 点击上方色块使用vuex在页面之间进行通讯
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/on-accelerometer-change/on-accelerometer-change.vue b/pages/API/on-accelerometer-change/on-accelerometer-change.vue
new file mode 100644
index 00000000..0565b422
--- /dev/null
+++ b/pages/API/on-accelerometer-change/on-accelerometer-change.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/on-compass-change/on-compass-change.vue b/pages/API/on-compass-change/on-compass-change.vue
new file mode 100644
index 00000000..72ddd898
--- /dev/null
+++ b/pages/API/on-compass-change/on-compass-change.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 旋转手机即可获取方位信息
+
+
+
+
+
+ {{direction}}
+ o
+
+
+
+
+
+
+
+
diff --git a/pages/API/open-location/open-location.vue b/pages/API/open-location/open-location.vue
new file mode 100644
index 00000000..f9dceb3a
--- /dev/null
+++ b/pages/API/open-location/open-location.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/pull-down-refresh/pull-down-refresh.vue b/pages/API/pull-down-refresh/pull-down-refresh.vue
new file mode 100644
index 00000000..708e6555
--- /dev/null
+++ b/pages/API/pull-down-refresh/pull-down-refresh.vue
@@ -0,0 +1,83 @@
+
+
+
+
+ 注:PC 不支持下拉刷新
+ list - {{num}}
+ {{loadMoreText}}
+
+
+
+
+
+
diff --git a/pages/API/request-payment/request-payment.vue b/pages/API/request-payment/request-payment.vue
new file mode 100644
index 00000000..b83a6f2c
--- /dev/null
+++ b/pages/API/request-payment/request-payment.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+ 支付金额
+
+ ¥
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/request/request.vue b/pages/API/request/request.vue
new file mode 100644
index 00000000..8ee15030
--- /dev/null
+++ b/pages/API/request/request.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+ 请点击按钮向服务器发起请求
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/rewarded-video-ad/rewarded-video-ad.vue b/pages/API/rewarded-video-ad/rewarded-video-ad.vue
new file mode 100644
index 00000000..a6d7b992
--- /dev/null
+++ b/pages/API/rewarded-video-ad/rewarded-video-ad.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+ 小程序端的广告ID由小程序平台提供
+
+
+
+
+
+
+
+
diff --git a/pages/API/save-media/save-media.vue b/pages/API/save-media/save-media.vue
new file mode 100644
index 00000000..9b30d563
--- /dev/null
+++ b/pages/API/save-media/save-media.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/scan-code/scan-code.vue b/pages/API/scan-code/scan-code.vue
new file mode 100644
index 00000000..89006deb
--- /dev/null
+++ b/pages/API/scan-code/scan-code.vue
@@ -0,0 +1,76 @@
+
+
+
+
+ 扫码结果:
+
+
+
+ {{result}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js b/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js
new file mode 100644
index 00000000..4023b732
--- /dev/null
+++ b/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js
@@ -0,0 +1,22 @@
+
+describe('pages/API/set-navigation-bar-title/set-navigation-bar-title.vue', () => {
+ let page
+ beforeAll(async () => {
+ // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
+ page = await program.reLaunch('/pages/API/set-navigation-bar-title/set-navigation-bar-title')
+
+ if (process.env.UNI_PLATFORM === "mp-weixin") {
+ await page.waitFor(10000)
+ } else {
+ await page.waitFor(5000)
+ }
+
+ page = await program.currentPage()
+
+ })
+
+ it('set-navigation-bar-title 组件标题', async () => {
+ let view = await page.$('.common-page-head-title')
+ expect(await view.text()).toBe('nav-default')
+ })
+})
diff --git a/pages/API/set-navigation-bar-title/set-navigation-bar-title.vue b/pages/API/set-navigation-bar-title/set-navigation-bar-title.vue
new file mode 100644
index 00000000..58546212
--- /dev/null
+++ b/pages/API/set-navigation-bar-title/set-navigation-bar-title.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 本页标题栏是uni-app的默认配置,开发者可在pages.json里配置文字内容及标题颜色,也可通过api接口将其改变。
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/share/share.vue b/pages/API/share/share.vue
new file mode 100644
index 00000000..a56f017b
--- /dev/null
+++ b/pages/API/share/share.vue
@@ -0,0 +1,293 @@
+
+
+
+
+ 分享内容
+
+
+
+ 分享图片:
+
+
+
+
+
+ 分享类型:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/show-loading/show-loading.vue b/pages/API/show-loading/show-loading.vue
new file mode 100644
index 00000000..20dc7fd1
--- /dev/null
+++ b/pages/API/show-loading/show-loading.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/soter/soter.vue b/pages/API/soter/soter.vue
new file mode 100644
index 00000000..f477e39d
--- /dev/null
+++ b/pages/API/soter/soter.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ result }}
+
+
+
+
+
+
+
diff --git a/pages/API/sqlite/sqlite.vue b/pages/API/sqlite/sqlite.vue
new file mode 100644
index 00000000..76276703
--- /dev/null
+++ b/pages/API/sqlite/sqlite.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/storage/storage.vue b/pages/API/storage/storage.vue
new file mode 100644
index 00000000..9dac7b01
--- /dev/null
+++ b/pages/API/storage/storage.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+ key
+
+
+
+
+
+
+
+ value
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/subnvue/subnvue.vue b/pages/API/subnvue/subnvue.vue
new file mode 100644
index 00000000..78e6cdaf
--- /dev/null
+++ b/pages/API/subnvue/subnvue.vue
@@ -0,0 +1,137 @@
+
+
+
+
+ 从左侧滑出
+
+
+
+ 从上侧竖向滑出
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/subnvue/subnvue/drawer.nvue b/pages/API/subnvue/subnvue/drawer.nvue
new file mode 100644
index 00000000..1fb883b1
--- /dev/null
+++ b/pages/API/subnvue/subnvue/drawer.nvue
@@ -0,0 +1,103 @@
+
+
+
左侧列表
+
+
+
+ {{item.name}}
+
+
+ |
+
+
+
+
+
+
+
+
diff --git a/pages/API/subnvue/subnvue/popup.nvue b/pages/API/subnvue/subnvue/popup.nvue
new file mode 100644
index 00000000..2d6a431a
--- /dev/null
+++ b/pages/API/subnvue/subnvue/popup.nvue
@@ -0,0 +1,121 @@
+
+
+
{{title}}
+
+
+ {{content}}
+
+
+ 以下为 Popup 内部滚动示例:
+
+
+ {{item}}
+
+
+
+ 向页面发送消息
+
+
+
+
+
+
+
diff --git a/pages/API/subnvue/subnvue/video-mask.nvue b/pages/API/subnvue/subnvue/video-mask.nvue
new file mode 100644
index 00000000..d7ba10c7
--- /dev/null
+++ b/pages/API/subnvue/subnvue/video-mask.nvue
@@ -0,0 +1,114 @@
+
+
+
+
+ {{item.name}}:
+ {{item.content}}
+ |
+
+
+
+
+
+
+
diff --git a/pages/API/toast/toast.vue b/pages/API/toast/toast.vue
new file mode 100644
index 00000000..f75cb50a
--- /dev/null
+++ b/pages/API/toast/toast.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/upload-file/upload-file.vue b/pages/API/upload-file/upload-file.vue
new file mode 100644
index 00000000..86c42a9c
--- /dev/null
+++ b/pages/API/upload-file/upload-file.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+ + 选择图片
+
+
+
+
+
+
+
+
diff --git a/pages/API/vibrate/vibrate.vue b/pages/API/vibrate/vibrate.vue
new file mode 100644
index 00000000..f8fadf72
--- /dev/null
+++ b/pages/API/vibrate/vibrate.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+ Tips
+ iOS上只有长震动,没有短震动
+ iOS上需要手机设置“打开响铃时震动”或“静音时震动”,否则无法震动
+
+
+
+
+
+
+
diff --git a/pages/API/video/video.vue b/pages/API/video/video.vue
new file mode 100644
index 00000000..b3716081
--- /dev/null
+++ b/pages/API/video/video.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+ 视频来源
+
+
+
+ {{sourceType[sourceTypeIndex]}}
+
+
+
+
+
+
+ 摄像头位置
+ 注意:部分 Android 手机下由于系统 ROM 不支持无法生效,打开拍摄界面后可操作切换
+
+
+
+
+
+
+
+ + 添加视频
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/voice/voice.vue b/pages/API/voice/voice.vue
new file mode 100644
index 00000000..0e9e319b
--- /dev/null
+++ b/pages/API/voice/voice.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+ {{formatedRecordTime}}
+
+
+
+
+
+
+
+
+
+
+
+ {{formatedRecordTime}}
+
+
+
+
+
+
+
+
+
+
+
+ {{formatedPlayTime}}
+ {{formatedRecordTime}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{formatedPlayTime}}
+ {{formatedRecordTime}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/API/websocket-global/websocket-global.vue b/pages/API/websocket-global/websocket-global.vue
new file mode 100644
index 00000000..3d7f1acc
--- /dev/null
+++ b/pages/API/websocket-global/websocket-global.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+ {{showMsg}}
+
+
+
+ 发送消息后会收到一条服务器返回的消息(与发送的消息内容一致)
+
+
+
+
+
+
+
+
diff --git a/pages/API/websocket-socketTask/websocket-socketTask.vue b/pages/API/websocket-socketTask/websocket-socketTask.vue
new file mode 100644
index 00000000..a8913592
--- /dev/null
+++ b/pages/API/websocket-socketTask/websocket-socketTask.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+ {{showMsg}}
+
+
+
+ 发送消息后会收到一条服务器返回的消息(与发送的消息内容一致)
+
+
+
+
+
+
+
+
diff --git a/pages/about/about.vue b/pages/about/about.vue
new file mode 100644
index 00000000..5436278d
--- /dev/null
+++ b/pages/about/about.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+ 扫码体验uni-app
+
+
+ uni-app
+ 是一个使用 Vue.js 开发跨平台应用的前端框架。
+
+
+ 本示例源码获取方式:
+
+
+ 1.
+ 下载 HBuilderX,新建 uni-app 项目时选择 Hello uni-app 模板。
+
+
+ 2.
+
+
+
+
+
+
+
+
+
+
+ 当前版本:{{version}}
+
+
+
+
+
+
+
+
diff --git a/pages/component/ad/ad.vue b/pages/component/ad/ad.vue
new file mode 100644
index 00000000..450e5d6d
--- /dev/null
+++ b/pages/component/ad/ad.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{adMessage}}
+
+
+
+
+ 小程序端的广告ID由小程序平台提供
+
+
+
+
+ 本示例页面仅演示ad组件。另点此可体验激励视频API。
+
+
+
+
+
+
+
diff --git a/pages/component/audio/audio.vue b/pages/component/audio/audio.vue
new file mode 100644
index 00000000..81f911e4
--- /dev/null
+++ b/pages/component/audio/audio.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ audio组件不再维护,建议使用能力更强的uni.createInnerAudioContext()
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/component/button/button.vue b/pages/component/button/button.vue
new file mode 100644
index 00000000..b62fdace
--- /dev/null
+++ b/pages/component/button/button.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/canvas/canvas.vue b/pages/component/canvas/canvas.vue
new file mode 100644
index 00000000..c4699a4e
--- /dev/null
+++ b/pages/component/canvas/canvas.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/checkbox/checkbox.vue b/pages/component/checkbox/checkbox.vue
new file mode 100644
index 00000000..de5bb051
--- /dev/null
+++ b/pages/component/checkbox/checkbox.vue
@@ -0,0 +1,101 @@
+
+
+
+
+ 默认样式
+
+
+
+
+
+
+ 不同颜色和尺寸的checkbox
+
+
+
+
+
+
+
+
+
+
+ 推荐展示样式
+ \n使用 uni-list 布局
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/cover-view/cover-view.nvue b/pages/component/cover-view/cover-view.nvue
new file mode 100644
index 00000000..377d1cc0
--- /dev/null
+++ b/pages/component/cover-view/cover-view.nvue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/cover-view/cover-view.vue b/pages/component/cover-view/cover-view.vue
new file mode 100644
index 00000000..ace1bf94
--- /dev/null
+++ b/pages/component/cover-view/cover-view.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 简单的cover-view
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/editor/editor-icon.css b/pages/component/editor/editor-icon.css
new file mode 100644
index 00000000..e8f0345c
--- /dev/null
+++ b/pages/component/editor/editor-icon.css
@@ -0,0 +1,238 @@
+@font-face {
+ font-family: 'iconfont';
+ src: url('data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYZt980AACuYAAAAHEdERUYAKQBBAAAreAAAAB5PUy8yPJdOmAAAAVgAAABWY21hcLyvuFAAAAJMAAACGmdhc3D//wADAAArcAAAAAhnbHlm1+PZcgAABOAAACD0aGVhZBRVFL8AAADcAAAANmhoZWEISgQAAAABFAAAACRobXR4TS8LYAAAAbAAAACcbG9jYQhHD/wAAARoAAAAeG1heHABTgChAAABOAAAACBuYW1lKeYRVQAAJdQAAAKIcG9zdLoCe30AAChcAAADEgABAAAAAQAAUo9exF8PPPUACwQAAAAAANhk6GIAAAAA2GToYgAA/34EbAOAAAAACAACAAAAAAAAAAEAAAOA/4AAXARsAAAAAARsAAEAAAAAAAAAAAAAAAAAAAATAAEAAAA7AJUACQAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQQBAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5ifspQOA/4AAXAOAAIIAAAABAAAAAAAABAAAAAAAAAABVQAABAAALwQAAJ0EAAAeBAAAQARsAAAEAAACBAAANwQAADcEAACVBAAAmgQAAJoEAAA+BAAAQAQAACUEAQAABAAAQAAnAIAAgABgAIAAgACAAIAAeAAAAFAAMABgAEAAYAAgAEAAOQAgAGAAYACAAD8AYAAgAEAA1wBeACEAwACAAOAAogBgABoAIQBgADIAiwBAAAAAAwAAAAMAAAAcAAEAAAAAARQAAwABAAAAHAAEAPgAAAA6ACAABAAa5ifmK+Yx5jPmPuZN5mDmZOZu5njmfuaE5ujm/ecs513n+Ohg6GXpZOso7AnsE+x87JTsnuyg7KX//wAA5ifmK+Yx5jPmPuZN5l/mZOZt5njmfuaE5ujm/ecs51zn+Ohg6GPpZOso7AnsE+x67H/snuyg7KX//xncGdkZ1BnTGckZuxmqGacZnxmWGZEZjBkpGRUY5xi4GB4Xtxe1FrcU9BQUFAsTpROjE5oTmROVAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgB8ANIA7AGaAiwCugNGBCAEgATiBRgFfgXyBl4GfAbGBwAHOAeWB7wH5ggoCGgI5AlSCaIKIgqmCxILPAtKC64L+gw8DIQMpgzKDQYNKA1GDaAN4g4MDlIObA6gDs4O6g8MD2APpA/GD+gQHhB6AAEAL/+AA8ADgAAJAAABNQkBNQQCFyYSAkABgP6A/r1YYdeEAoj4/oD+gP4G/rCo+QIEAAACAJ0ACANqAtQAKwA9AAAlIS4BJxE+ATchHgEXFQ4BIiY9AS4BJyEOAQcRHgEzITI2NzU0NjIWFxUOASUiLwEmNDYyHwEBNjIWFAcBBgL2/hsxQQICQTEB6y4+AgESGxIBGhP+FRYdAQEdFgHlFh0BEhsSAQJB/qoNCqMKFBkKjQFgChkUCv6KCggBQTEB5jBCAQE+Lx4NEhINHhQZAQEdFf4aFh0dFvkOEhIO+TFBnwqjChoTCY0BYAoUGQr+iQkAAAAABAAeAEoD4gJoAA8AGwAnADAAAAEGBAcmJC8BNzYkNxYEHwElDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgEnDgEUFjI2NCYD0Ar+/sTE/v4LERELAQLExAECChL+Ho3WKirWjY3WKirWjTpNAQFNOjpNAQFNOh8qKj4qKgFEFtUPD9UWFRUX1Q4O1RcVzgeVMjKUCAiUMjKV/qwCTzw8UAEBUDw8T9cBK0ArK0ArAAEAQP+AA9EDgAAJAAAFNgIlFQkBFQQSAvphWP69/oABgAGNhICoAVAG/gGAAYD4C/38AAAIAAD/gARsA4AAHwArAEAATABVAGIAaAB1AAAFIikBLgEnET4BNzMVIyIGHQEhNS4BKwE1Mx4BFxEOARMiKQERFBYzITI2NwEwDwEGDwEjNzEuASc+ATceARcUBycOARQWMj8BNjcuAQUGDwE1NzMRIwEuASc1PgEyFh0BFAYlMjMhFSEHLgE9ATQ2MhYdARQGBAA5/m/+Ni49AQE9LlFRFx8EAAEeF1FRLj0BAT0IQP5A/gAfFwOUFx4B/uUCAgUGhTpiM0UBAUUzNEQBDmscJiY5FAkJAQEm/q0FIylTNDYCAAsPAQEPFw8P/aMi7AEN/eU1DA8PFw8PgAE9LgLXLj0BNh8Xa2sXHzYBPS79KS49AqH9yhcfHxcBIAMDCQjSoAJMOTlMAgJMOSIcjwEuRC4YEBIWIi4VBCAkQ1D+UgKGAQ8LogsQEAuiCw+GNlEBDwuiCxAQC6ILDwADAAL/fgPvA3AAKwBNAGcAAAEjNS4BJyMOAQcVIw4BBxUUFhcDHgE3ITUzFjI3MxYyNzMWNjcRPgE9AS4BAyM1NCYiBh0BIzU0JiIGBxUjNS4BIgYdASMiJicRIREUBhMUBiMhIiYnNT4BMyE1PgE3Mx4BFxUhMhYVA3/fAS8kpyQvAeAvPwEeGgEKYAYBMxUEBwO2AwcEhQZgCRoeAT+DVBAYEIwQGA8BiwEPGBBUJC8BAw4vZyAY/PIXIAEBIBcBGAEvIzgkLwEBFxggAnSoIzABATAjqAE/MDcgMg/+hlEjBAEBAQEBBCNQAXoPMiA3MD/9SN4MEBAM3t4MEBAM398MEBAM3ywoAU/+sScsAhIYICAYNxggqCMwAQEwI6ggGAAABQA3/8ED2gNPABEAIAAzAEQAXwAAASIjISYnJj4BMyEyFxYOASMGAzI7AR4BBwYHIS4BNzYzBSIjJSInJjY3NjMlIR4BFAYHIxUyOwEWFxYGBwYjBS4BNDYzATQmIg8BNTQmIgYdAScmIgYUFzEXFjI/ATE2ApxL0v7jHQgEBxgOAwQhCAQGGBBnZzlQiRcWBwke/LkXFwYIIAIjRs3+7RwJBAYKDQ8BcAFvFBYWFLwuJVQcCQQGCgwP/TcTFhYSAjQVHwotFB8ULQogFAlrCiEKawkB0AEZDBcOGgwXDgEBgAEeFBgBARwUG+YBGQwWBwkBARUiFAHoARgMFwcIAQEUIhX+2g8UCzKpDxQUD6kyCxQdCnYMDHYKAAAFADf/wQPaA00AEQAgADMARABeAAAlIiMhJicmPgE3ITIXFg4BIwYDMjsBHgEHBiMhIiY3NjcFIiMhJicmNjc2NykBMhYUBisBFTIzFxYXFgYHBgchIiY0NjMBMScmIg8BMQYUFjI/ARUUFjI2PQEXFjI2NAKcS9L+4x0IBAcYDgMEIQgEBhgQZ2c5UIkXFgcJHvy5FxcGCCACI0bN/u0cCQQGCg0PAXABbxQWFhS8LiVUHAkEBgoMD/03ExYWEgIrawohCmsJFCAKLRQfFC0KHxVbARkNFw0BGg0WDgEBgAEeFRgdFBoB5gEYDBcHCAEVIhXoAQEYCxcHCAEVIRUCv3cLC3cKHRQMMagPFBQPqDEMFB0AAAAACQCV/4EDawN+AB8ALwA9AE4AWgBrAHcAiACUAAABIzUuAScjLgEiBgcjDgEHFSMiBhURFBYXIT4BNRE0JiUzMjY3PgEyFhceATsBFSEBIREzFR4BMyEyNjc1MwUHJyYiBhQfARYyPwE2NCYiFyIGFBYzITI2NCYjBQcnJiIGFB8BFjI/ATY0JiIFIQ4BFBYzITI2NCYFBycmIgYUHwEWMj8BNjQmIgUhIgYUFhchPgE0JgNZVQEKB4IJPVQ9CYIHCgFVCAoKCAKyCAoK/b9/BwoBAyxALAMBCgd//kACJ/1yQwEKBwHkBwoBQ/4zSiEFDwoFLQYOBlYFCw5WBwoKBwEpBwoKB/58SiEFDwoFLQYOBlYFCw4Bf/7XBwoKBwEpBwoK/nVKIQUPCgUtBg4GVgULDgF//tcHCgoHASkHCgoC4TEHCgEoMjIoAQoHMQoI/MQHCgEBCgcDPAgKHwkIICkpIAgJbf0SAxg8CAoKCDzCSiEFCg8FLgUFVwUOCysKDwsLDwqlSSEFCw4GLQUFVgYOCysBCg8KCg8KpEohBgsPBS4FBVcFDgsrCg8KAQEKDwoAAAMAmv+AAzMDTQAXADQAPQAAJScmIgYUHwEhDgEUFhchBwYUFjI/ATY0ESEOAQceARczFRQWMjY1ETMRHgEyNjcRMzI2NCYBIy4BJz4BNzMDEmYIFBAIOv4kCg8PCgHcOggPFQhmCP5MV3MCAnNXNA4WD5kBDhYOAYAKDw/+djRBVwEBV0E0EmcHEBQIOgEOFg4BOggVDwhmCBQDQwJ0V1d0AuYLDw8LAk39swsPDwsCTQ4WD/6ZAldBQVcCAAAAAAMAmv+AAzMDTQAcACUAPQAAASEOAQceARczFRQWMjY1ETMRHgEyNjcRMzI2NCYBIy4BJz4BNzMBITc2LgEiDwEGFB8BFjI2NC8BIT4BNCYDGv5MV3MCAnNXNA4WD5kBDhYOAYAKDw/+djRBVwEBV0E0AUz+JToIAQ8UCGYICGYIFQ8IOgHbCw8PA00CdFdXdALmCw4OCwJN/bMLDg4LAk0OFg/+mQJXQUFXAv0AOggUEAdnCBQIZggPFQg6AQ4WDgAAAAADAD7/vgPCA0IADwAXABsAAAEhDgEHER4BFyE+ATcRLgEDJyMHIxMzEwEDMwMDUv1cL0ABAUAvAqQvQAEBQM82+DZn4m7i/uZevl0DQgFAL/1cL0ABAUAvAqQvQPzuqKgCav2WAfr+5wEZAAADAEAAAAPAAsAAFgAjAD8AAAEzPgE0JichDgEUFhczBwMGHgE2NxM2AT4BNyEeARQGByEuASUnJiIGFB8BBwYUFjI/ARcWMjY0LwE3NjQmIgcBtMwbJCQb/gAbJCQbuQEtBB02KgUtAv6IASQbAYAbJCQb/oAbJAK/VxMxJRJXVxIlMRNXVxMxJRJXVxIlMRMCQAEkNiQBASQ2JAEH/tgfMQsiHwEoEf4QGyQBASQ2JAEBJPJXEiUxE1dXEzElEldXEiUxE1dXEzElEgACACX/yQPbAzcABwBLAAABAxcWMzI3JgE3PgQ3GwEzFhcTHgEXHgEXFhceARcWHQEiJiMiBiM0PwI2PwE+ATU0Ji8BJQ4BFB4CHwEWFRQHIiYjIgYjBgHDYU47IAsWMv4rAQ0mGx0WB4egSQUCdRNTFwkxEQsJC04JAySRJSufFgJbCAYDBgQCIxcY/v4OOhAiFRYXAQEhhSIEFQIuAkH+/gEBAZH9+i0EBwULFhIBYAGeCAT+7i3NNhR+IRoHCBEDFgsPCQgYFBQCAgIFAgcFCVw3OgEhnhoSCgYCAgsWBQsMBQgAAAAABQAAABIEAAM3AA0AHQAtAD0ATQAAExEUBiIvASY0PwE2MhYBFRQGIyEiJj0BNDYzITIWNRUUBiMhIiY9ATQ2MyEyFjUVFAYjISImPQE0NjMhMhY1FRQGIyEiJj0BNDYzITIW2woQBaUFBaUFEAoDJQsH/CQHCwsHA9wHCwsH/ZIHCwsHAm4HCwsH/ZIHCwsHAm4HCwsH/CQHCwsHA9wHCwJJ/rcHCwWkBhAFpAUK/kFtCAsLCG0ICwvUbgcLCwduBwsL1G4HCwsHbggKCtRuCAoKCG4HCwsAAgBA/4ADwAMAAAcADwAAEyEVIxEjESMBIxEjESM1IUABgICAgAOA/Ij8AoABgID+gAGAAYD9AAMAgAAAAwAn/88D2QMxABgAHAAsAAA3MzI2PwEhFx4BOwE+AScDJicjIgYHAwYWATMXIwEhIgYHFR4BMyEyNjc1LgHNUQkPAz8BCEUDDwlRCwsE7AcTjAkPA9kECwEqElWyAhj8igwRAQERDAN2DBEBARG7DQmvrwkNAQ8KAkkSAQoJ/bcKDwH/xf5PEQ07DBERDDsNEQAAAAIAgACAA4AC1QALACQAABMzETMRMxEjESMRIykBIiY0PwE2NCYiBhUjPgE3HgEXFAYPASGAVatVVatVAwD/ACMyF88ZMkYyVQFhSElgAhsXzgEAAtX/AAEA/asBAP8AMkYX4BhHMjIjSGEBAWFIJD0Y3QAAAgCAAIADgALVAAsAJwAAEzMRMxEzESMRIxEjATMyFhURFAYrASImPQEzFTM1IzUzNSMVIzU0NoBVq1VVq1UCAKsjMjIjqyMyVaurq6tVMgLV/wABAP2rAQD/AAJVMiP+VSMyMiMrK6tVqysrIzIAAAIAYAAgA6EC4AAjAD0AAAEhBgcVFhczNjc1MxEjBgcVFhchNjc1JicjETMVFhczNjc1JgEjETMyNi8BJg8BBhY7AREjIgYfARY/ATYmAoj94AcBAQc4BwGoXAcBAQcBCAcBAQdcqAEHOAcBAQEKQUEEBAJlBgZkAwQEQUEEBANkBgZkAwQC4AEHgAcBAQdA/dABBzgHAQEHOAcBAjBABwEBB4AH/d8BhAgEfwYGfwQI/nwIBH8GBn8ECAAAAgCAAIADVQLVAAsAFgAAEzMRMxEzESMRIxEjITUzEQc1NzMRMxWAVatVVatVAdVWa2tVVQLV/wABAP2rAQD/AFUBnj5jPf4AVQAAAAMAgACAA4AC1QALABYAGQAAEzMRMxEzESMRIxEjITUjNRMzETMVIxUDNQeAVatVVatVAoDV1VUrK1VtAtX/AAEA/asBAP8A1VYBKv7WVtUBK5iYAAIAgACAA4AC1QALACsAABMzETMRMxEjESMRIwEzFSMVMx4BFw4BByMuASc1MxUzPgE0JicjLgEnNT4BgFWrVVWrVQIA1dVVSWACAmBJVSQwAVVVJDExJFUkMAEBMALV/wABAP2rAQD/AAJVVasBYUhJYAIBMCQrKwExSDABATAkqyQwAAMAgACAA4AC1QALACQAKAAAEzMRMxEzESMRIxEjATMeARcVIzUjFTMeARcVDgEHIy4BJxE+ARMVMzWAVatVVatVAgCrJDABVaurJDABATAkqyQwAQEwJKsC1f8AAQD9qwEA/wACVQEwJCsrqwEwJKskMAEBMCQBqyQw/qyrqwAAAgB4/6IDiQNeAC8AVgAAJSY1Ji8BJiIGFB8BITc2NCYiDwEOAR0BFBYfARYyPgEvASEHBhQWMj8CPgE1NyYBPgE9ASERIyIGFBY7ATI2NCYrAREhFRQWMjY9ATQmIyEiBh0BFBYDiAEBA2YFDgoFSf1jSQUKDgVmAgICAmYFDQoBBUkCnUkFCg4FZwEBAgEB/UUHCgERMwgJCQiICAkJCDMBEQoOCgoH/ZoHCgoeAQEDA2YFCg4FSUkFDgoFZwIFAwMCBQJoBAoNBUpKBQ4KBWYCAgQDAgIC2wEJCDP9MwoOCgoOCgLNMwgJCQhEBwoKB0QICQAAAAAFAAAAEgQAAzcADgAeAC4APgBOAAATFA8BBiImNRE0NjIfARYBFRQGIyEiJj0BNDYzITIWNRUUBiMhIiY9ATQ2MyEyFjUVFAYjISImPQE0NjMhMhY1FRQGIyEiJj0BNDYzITIWyQWlBQ8LCw8FpQUDNwsH/CQHCwsHA9wHCwsH/ZIHCwsHAm4HCwsH/ZIHCwsHAm4HCwsH/CQHCwsHA9wHCwGlCAakBQsHAUkICgWkBf7lbQgLCwhtCAsL1G4HCwsHbgcLC9RuBwsLB24ICgrUbggKCghuBwsLAAAABABQ/9ADsAMwABEAFQAZADIAAAkBJiMhDgEHER4BFyE+ATcRNCUzFSMBITUhFyM1NCYjISIGHQEjETMVFBYzITI2PQEzAQOd/v4TGv4iGyQBASQbAuAbJAH9cMDAAcD+QAHAkFASDv4ADhJQUBIOAQAOEk4BAgIbAQITASQb/SAbJAEBJBsB3hrocP2QkJCwDhISDrAC4JAOEhIOkP7+AAYAMP+wA9ADUAAQACEAMgBEAFQAWAAAASMiBh0BFBYyNj0BMzI2NCYhIyIGFBY7ARUUFjI2PQE0JgEjNTQmIgYdARQWOwEyNjQmJSIGHQEjIgYUFjsBMjY9ATQmEyEOAQcRHgEXIT4BNxEuAQERIREBcZEOEhIcEnENExMBk5EOEhIOcRIbExP+U3ESHBISDpENExMBkw4ScQ4SEg6RDRMTcvzgGyQBASQbAyAbJAEBJPzFAyACwBIOig0TEw1qEhwSEhwSag0TEw2KDhL9tmoOEhIOig4SEhwSihIOahIcEhIOig4SAlABJBv84BskAQEkGwMgGyT8oQMg/OAAAAAGAGD/wAOgA0AADwAfADMAPwBLAFcAAAEhDgEHER4BFyE+ATcRLgEDFAYjISImNRE0NjMhMhYVNyEiBhQWMyEyFhURFBYyNjURLgEBISIGFBYzITI2NCYHISIGFBYzITI2NCYHIyIGFBYXMz4BNCYC0P3gIi0BAS0iAiAiLQEBLRIJB/3gBwkJBwIgBwlw/eAOEhIOAiAHCRIcEgEt/u7+wA4SEg4BQA4SEg7+wA4SEg4BQA4SEo7ADhISDsAOEhICwAEtIv2gIi0BAS0iAmAiLf1RBwkJBwJgBwkJB9ASHBIJB/2gDhISDgJgIi3+2RIcEhIcEqASHBISHBKfEhsSAQESGxIAAAAFAED/oAPAA2AAHwAjAC0AOgBHAAABIzU0JiMhIgYdASMiBhQWOwETHgEXIT4BNxMzMjY0JiUhFSEBDgEjISImJwMhAzI2NRE0JiIGFREUFiMyNjURNCYiBhURFBYDoMASDv6ADhLADhISDiJOBDUmAaImNQROIg4SEv2yAUD+wAGRAhEN/l4NEQJNAnzeDhISHBISog4SEhwSEgLwUA4SEg5QEhwS/UUlLwEBLyUCuxIcEjAw/QwMEBAMArT9mxIOAdYNExMN/ioOEhIOAdYNExMN/ioOEgADAGD/wAOmAzcABAAPABMAAAEnAQc3AScjLgEPARc3NjQBIRUhAwib/jQnvwJpgwEEDQWDm4EF/LoDQPzAAfet/lm8DQJMlwUBBXitdwQN/WtAAAABACABQAPgAbAAAwAAEyEVISADwPxAAbBwAAAAAwBA/9UDwgMyAB4AJwA/AAABITY1LgEHDgEdAQ4BByMiBhURHgEzITI2NxM2LgIBETQ7AREjIiYBAw4BIyERPgE3NTY3NhYXFAcGFjMhMhYDWf73EwJUNi4sAUo5dhsoASYcAo0lOAdKBAseKf0QA01NAQIC/0kDFQ7+AE1fAQEiFiwBHAUSEQE0EhcCJ0I0PlcFB0QzOzpTBycc/nsdJi4lAYUXLCQT/fEBhQP+dQIBov57DhEBjhBzTjs5BgExIThUDxscAAADADn/uwPXAycAEwAlACkAAAEuAQ8BFzc2FhcWBg8BFzc+AiYBBiYnJjY/AScHDgEXHgE/AScTFwEnA45U82dlM2RNsz47E0lsMmwwOQ0i/k9Msz86E0lvMm9jGk9V82dpMzcz/qkzAqpjGk9SPlI6E0lMsz9XPlcnanp0/c06E0lMsz9aPlpU82djGk9VPwGBPv7iPQAAAAUAIAAAA+ADAAASABMAHAAgACQAAAE0LwEmDwEGIi8BLgEPAQYVESEDIx4BMjY0JiIGJREhEQMhESEDgAisDAlNBQ0E/QUMBbwFAwBgQAEkNiQkNiT9PwPAQPzAA0ABDQkFaQYJXgUF/AQBBaoFB/73AeAbJCQ2JCSl/QADAP1AAoAAAAkAYAARA6AC7wADAAcACwAMABUAFgAfACAAKQAAASEVIRUhFSEVIRUhAyMeATI2NCYiBhMjHgEyNjQmIgYTIx4BMjY0JiIGASACgP2AAoD9gAKA/YCAQAEkNiQkNiQ/QAEkNiQkNiQ/QAEkNiQkNiQC4GDQYNBgApAbJCQ2JCT+tRskJDYkJP61GyQkNiQkAAQAYAAAA6ADAAADAAcACwAPAAATIRUhESEVIRMhFSERIRUhYANA/MADQPzAgAJA/cACQP3AAwBg/qBgAUBg/qBgAAAABACAAFIDdQLAAAMABwALAA8AABMhESEREzMDKQERIRETMwOAAVX+q5BukAEyAVX+q5BukAGn/qsBVQEZ/uf+qwFVARn+5wAABgA//+ADoAMpAAUADwAbAB8AIwAnAAATMzUjFTMDMwcVMzUjNzUjETMVIxUzFSMVMzUjEyEVIRUhFSEVIRUhYzdbJCNAQIBAQIBJKipJgIDgAoD9gAKA/YACgP2AAmDJN/7AWzc3Wzf+iRI3EjfJAjdg0GDQYAAABABgAAADoAMAAAMABwALAA8AABMhFSERIRUhASEVIREhFSFgA0D8wANA/MABAAJA/cACQP3AAwBg/qBgAUBg/qBgAAACACAARAPUAqAABQALAAAJAjcnNyUHFwcXAQEs/vQBDEjU1AFUSNTUSAEMAqD+0v7SQO7uQEDu7kABLgAHAED/wAPAA0AACwAXABgAIQAiACsAMgAAAQ4BBx4BFz4BNy4BAy4BJz4BNx4BFw4BASMeATI2NCYiBgUjHgEyNjQmIgYFHgEXPgE3AgC+/QUF/b6+/QUF/b6j2QQE2aOj2QQE2f6dQAEkNiQkNiQBv0ABJDYkJDYk/l8Do3p6owMDQAX9vr79BQX9vr79/MUE2aOj2QQE2aOj2QH8GyQkNiQkGxskJDYkJJt6owMDo3oAAAADANf/7QMgAwYAEwAdACYAAAEmJzU+ATc2JzQmJyERITI3Njc0ATMWFxYUBwYrAQEGByM1Mx4BFAMBIUEiLw0YAXZ1/q4BbV0/PwH+OMNCHyAgH0LDATEfQ8/PQz4BQTMRAhAoFS0xX3QB/Oc+PGc+AY8BHyFgICL+yyMC7wFFYQAAAAADAF7/4AOdAyAACwATABcAAAEhIgYUFhchPgE0JiUzNSE1IRUhETMRIwN9/QANEhINAwAOEhL+NXABIP1QASBwcAGKEhsSAQESGxI28HBw/lD+4AAEACEAAAPgA2AABwALAA4AJwAACQEzNyEXMwEDEzMTBQchAw4BFSE1IzY3PgE1NCYjIgcXNjMyFhUUBgE7/uZ8PAEmPHv+56JwAnABc5ABINorOwEgnwkqOylHPXQaXwkhEBUhAwf8+a2tAwf+DgFT/q014AKHIlsxUBAhLzomNkFnDyYVERYqAAAAAAEAwP/AA0ADIAALAAABESERIxEzESERMxEC4P5AYGABwGADIP6AAYD8oAGg/mADYAAAAAACAID/ygOAAyYAEQAdAAAlPgE3ESMRDgEHLgEnESMRHgEFISIGFBYXIT4BNCYCAIWwA3ACcVVVcQJwA7AB5f1ADhISDgLADhISVQOwhQGZ/mdVcQICcVUBmf5nhbBOEhsSAQESGxIAAAEA4P/qAyADKgAbAAABISIGFBYXMwMjIgYUFhchPgE0JisBEzM+ATQmAwD+4A4SEg5g5loOEhIOASAOEhIOXudXDhISAyoSGxIB/UASGxIBARIbEgLAARIbEgAAAgCi/+YDgAMSAAcACgAABTcBIwEzNyElGwEDGWf+vVr+v2ZDAYr+nJ+fGgIDKvzWqGABjv5yAAAEAGAAAAOgAwAAAwAHAAsADwAAEyEVIREhFSERIRUhESEVIWADQPzAA0D8wAJA/cACQP3AAwBg/qBgAUBg/qBgAAAAAAQAGgAvA+4CvwALABcAIwAvAAABAiADDgEXFiA3NiYHBiAnJjQ3NiAXHgEBDgEHHgEXPgE3LgEHIi4BND4BMx4BFAYD0uP+K+QbARvPAgDPGwFLvv5AvgsM0gGW0wsB/lJffwICf19ffwICf58RHhERHhEbJCQBugEF/vsgUCH6+iFQSOTkDiIO8fEOIgEAAn9fX38CAn9fX3/eER4iHhEBJDYkAAAAAAQAIf+5A+ADJwACAAoADgAmAAABIRclATM3IRczAQMTMxMBNjc+ATU0JiMiBxc2MzIWFRQOAhUhNQPA/uCQ/gv+5nw8ASY8e/7nonACcAFkCSo7KUc9dBpfCSEQFSFYOwEgAyDg5/z5ra0DB/4OAVP+rf7UECEvOiY2QWcPJhURFipFWzFQAAAEAGAAAAOgAwAAAwAHAAsADwAAEyEVIREhFSERIRUhESEVIWADQPzAA0D8wANA/MADQPzAAwBg/qBgAUBg/qBgAAAAAAEAMgBGA+ICrwAPAAABNjIWFAcBDgEnASY+ARcBA6sKGhMJ/eYJGQr+rQ4HIg8BPAKlChMaCv3YCQEIASQMJAwM/vEAAQCLABsDZQL1ABoAAAkBNjQmIgcJASYiBhQXCQEGHgE3CQEWMjY0JwInATQKExoK/sz+ywoZFAoBNP7MDQojDQE1ATQKGhMKAYoBNAoaEwn+ywE1CRMaCv7M/ssOIwkMATX+ywkTGgoAAAAAAwBAABgDwALNABEAJgA5AAABNzYWFxEOAS8BIyImNRE0NjMBBiImNDc+ATU0JicmPgEXHgEVFAYXBi4BNz4BNCYnJj4BMhceARQGAQTNDyQBASQP0p8OEhIOAj8KGRMJHyEcHAwLJA0jJStwDSQJDDo9OzcJARMaCUBERwIbpAwRFP2eFBEMqBIOAQgOEv6VCRMaCh5PLChKHg4jCA4nYDQ5ZrMNCSMOO5ellDoKGhIKRKq/rQAAAAAAEgDeAAEAAAAAAAAAFQAsAAEAAAAAAAEACABUAAEAAAAAAAIABwBtAAEAAAAAAAMACACHAAEAAAAAAAQACACiAAEAAAAAAAUACwDDAAEAAAAAAAYACADhAAEAAAAAAAoAKwFCAAEAAAAAAAsAEwGWAAMAAQQJAAAAKgAAAAMAAQQJAAEAEABCAAMAAQQJAAIADgBdAAMAAQQJAAMAEAB1AAMAAQQJAAQAEACQAAMAAQQJAAUAFgCrAAMAAQQJAAYAEADPAAMAAQQJAAoAVgDqAAMAAQQJAAsAJgFuAAoAQwByAGUAYQB0AGUAZAAgAGIAeQAgAGkAYwBvAG4AZgBvAG4AdAAKAAAKQ3JlYXRlZCBieSBpY29uZm9udAoAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGkAYwBvAG4AZgBvAG4AdAAAaWNvbmZvbnQAAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AAEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC4AAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAGh0dHA6Ly9mb250ZWxsby5jb20AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAEAAgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkEcmVkbwlzZWxlY3RhbGwHcHJldmlldwR1bmRvBGRhdGUHY2xlYXJ1cBU3MjNiaWFuamlxaV9kdWFuaG91anUWNzIyYmlhbmppcWlfZHVhbnFpYW5qdQotY2hlY2tsaXN0DWRpcmVjdGlvbi1sdHINZGlyZWN0aW9uLXJ0bAtmb250Ymdjb2xvcg1jbGVhcmVkZm9ybWF0BGZvbnQHb3V0ZGVudAhmb250c2l6ZQp0ZXh0X2NvbG9yD2Zvcm1hdC1oZWFkZXItMg9mb3JtYXQtaGVhZGVyLTMLbGluZS1oZWlnaHQPZm9ybWF0LWhlYWRlci0xD2Zvcm1hdC1oZWFkZXItNA9mb3JtYXQtaGVhZGVyLTUPZm9ybWF0LWhlYWRlci02EUNoYXJhY3Rlci1TcGFjaW5nBmluZGVudAZiYW9jdW4IcXVhbnBpbmcFZnV6aGkHc2hhbmNodQxiaWFuamlzZWt1YWkJZmVuZ2V4aWFuB2RpYW56YW4MY2hhcnVsaWFuamllC2NoYXJ1dHVwaWFuCnd1eHVwYWlsaWUManV6aG9uZ2R1aXFpB3lpbnlvbmcLeW91eHVwYWlsaWUIeW91ZHVpcWkJeml0aWRhaW1hCHhpYW9saWFuCXppdGlqaWFjdQ96aXRpc2hhbmNodXhpYW4Neml0aXNoYW5nYmlhbwp6aXRpYmlhb3RpDnppdGl4aWFodWF4aWFuCXppdGl4aWV0aQl6aXRpeWFuc2UIenVvZHVpcWkJeml0aXl1bGFuC3ppdGl4aWFiaWFvC3p1b3lvdWR1aXFpB2R1aWdvdXgGZ3VhbmJpDnNoZW5neWluX3NoaXRpAAAAAAAB//8AAgABAAAADAAAABYAAAACAAEAAwA6AAEABAAAAAIAAAAAAAAAAQAAAADVpCcIAAAAANhk6GIAAAAA2GToYg==') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ font-display: swap;
+}
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-redo:before {
+ content: "\e627";
+}
+
+.icon-undo:before {
+ content: "\e633";
+}
+
+.icon-indent:before {
+ content: "\eb28";
+}
+
+.icon-outdent:before {
+ content: "\e6e8";
+}
+
+.icon-fontsize:before {
+ content: "\e6fd";
+}
+
+.icon-format-header-1:before {
+ content: "\e860";
+}
+
+.icon-format-header-4:before {
+ content: "\e863";
+}
+
+.icon-format-header-5:before {
+ content: "\e864";
+}
+
+.icon-format-header-6:before {
+ content: "\e865";
+}
+
+.icon-clearup:before {
+ content: "\e64d";
+}
+
+.icon-preview:before {
+ content: "\e631";
+}
+
+.icon-date:before {
+ content: "\e63e";
+}
+
+.icon-fontbgcolor:before {
+ content: "\e678";
+}
+
+.icon-clearedformat:before {
+ content: "\e67e";
+}
+
+.icon-font:before {
+ content: "\e684";
+}
+
+.icon-723bianjiqi_duanhouju:before {
+ content: "\e65f";
+}
+
+.icon-722bianjiqi_duanqianju:before {
+ content: "\e660";
+}
+
+.icon-text_color:before {
+ content: "\e72c";
+}
+
+.icon-format-header-2:before {
+ content: "\e75c";
+}
+
+.icon-format-header-3:before {
+ content: "\e75d";
+}
+
+.icon--checklist:before {
+ content: "\e664";
+}
+
+.icon-baocun:before {
+ content: "\ec09";
+}
+
+.icon-line-height:before {
+ content: "\e7f8";
+}
+
+.icon-quanping:before {
+ content: "\ec13";
+}
+
+.icon-direction-rtl:before {
+ content: "\e66e";
+}
+
+.icon-direction-ltr:before {
+ content: "\e66d";
+}
+
+.icon-selectall:before {
+ content: "\e62b";
+}
+
+.icon-fuzhi:before {
+ content: "\ec7a";
+}
+
+.icon-shanchu:before {
+ content: "\ec7b";
+}
+
+.icon-bianjisekuai:before {
+ content: "\ec7c";
+}
+
+.icon-fengexian:before {
+ content: "\ec7f";
+}
+
+.icon-dianzan:before {
+ content: "\ec80";
+}
+
+.icon-charulianjie:before {
+ content: "\ec81";
+}
+
+.icon-charutupian:before {
+ content: "\ec82";
+}
+
+.icon-wuxupailie:before {
+ content: "\ec83";
+}
+
+.icon-juzhongduiqi:before {
+ content: "\ec84";
+}
+
+.icon-yinyong:before {
+ content: "\ec85";
+}
+
+.icon-youxupailie:before {
+ content: "\ec86";
+}
+
+.icon-youduiqi:before {
+ content: "\ec87";
+}
+
+.icon-zitidaima:before {
+ content: "\ec88";
+}
+
+.icon-xiaolian:before {
+ content: "\ec89";
+}
+
+.icon-zitijiacu:before {
+ content: "\ec8a";
+}
+
+.icon-zitishanchuxian:before {
+ content: "\ec8b";
+}
+
+.icon-zitishangbiao:before {
+ content: "\ec8c";
+}
+
+.icon-zitibiaoti:before {
+ content: "\ec8d";
+}
+
+.icon-zitixiahuaxian:before {
+ content: "\ec8e";
+}
+
+.icon-zitixieti:before {
+ content: "\ec8f";
+}
+
+.icon-zitiyanse:before {
+ content: "\ec90";
+}
+
+.icon-zuoduiqi:before {
+ content: "\ec91";
+}
+
+.icon-zitiyulan:before {
+ content: "\ec92";
+}
+
+.icon-zitixiabiao:before {
+ content: "\ec93";
+}
+
+.icon-zuoyouduiqi:before {
+ content: "\ec94";
+}
+
+.icon-duigoux:before {
+ content: "\ec9e";
+}
+
+.icon-guanbi:before {
+ content: "\eca0";
+}
+
+.icon-shengyin_shiti:before {
+ content: "\eca5";
+}
+
+.icon-Character-Spacing:before {
+ content: "\e964";
+}
diff --git a/pages/component/editor/editor.vue b/pages/component/editor/editor.vue
new file mode 100644
index 00000000..95465db0
--- /dev/null
+++ b/pages/component/editor/editor.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/editor/iconfont.ttf b/pages/component/editor/iconfont.ttf
new file mode 100644
index 00000000..8ade3a4c
Binary files /dev/null and b/pages/component/editor/iconfont.ttf differ
diff --git a/pages/component/form/form.vue b/pages/component/form/form.vue
new file mode 100644
index 00000000..a336962d
--- /dev/null
+++ b/pages/component/form/form.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/image/image.vue b/pages/component/image/image.vue
new file mode 100644
index 00000000..a2f42954
--- /dev/null
+++ b/pages/component/image/image.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+ 示例1 \n本地图片
+
+
+
+
+
+ 示例2 \n网络图片
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/input/input.nvue b/pages/component/input/input.nvue
new file mode 100644
index 00000000..c6624abe
--- /dev/null
+++ b/pages/component/input/input.nvue
@@ -0,0 +1,245 @@
+
+
+
+
+ {{title}}
+
+
+
+
+ 可自动聚焦的 input
+
+
+
+
+
+
+ 隐藏 iOS 软键盘上的导航条
+
+
+
+
+
+
+ 键盘右下角按钮显示为搜索
+
+
+
+
+
+
+ 键盘右下角按钮显示为发送
+
+
+
+
+
+
+ 控制最大输入长度的 input
+
+
+
+
+
+ 实时获取输入值:{{inputValue}}
+
+
+
+
+
+ 控制输入的 input
+
+
+
+
+
+
+ 控制键盘的 input
+
+
+
+
+
+
+ 数字输入的 input
+
+
+
+
+
+ 密码输入的 input
+
+
+
+
+
+ 带小数点的 input
+
+
+
+
+ 身份证输入的 input
+
+
+
+
+ 控制占位符颜色的 input
+
+
+
+
+
+ 带清除按钮的输入框
+
+
+
+
+
+
+ 可查看密码的输入框
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/label/label.vue b/pages/component/label/label.vue
new file mode 100644
index 00000000..b920ccef
--- /dev/null
+++ b/pages/component/label/label.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+ 表单组件在label内
+
+
+
+
+
+
+ label用for标识表单组件
+
+
+
+
+
+
+
+
+
+
+
+ label内有多个时选中第一个
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/map/map.nvue b/pages/component/map/map.nvue
new file mode 100644
index 00000000..a3696ffa
--- /dev/null
+++ b/pages/component/map/map.nvue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/map/map.vue b/pages/component/map/map.vue
new file mode 100644
index 00000000..794acf1d
--- /dev/null
+++ b/pages/component/map/map.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/movable-view/movable-view.vue b/pages/component/movable-view/movable-view.vue
new file mode 100644
index 00000000..c93e9f6c
--- /dev/null
+++ b/pages/component/movable-view/movable-view.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+ 示例 1
+ \nmovable-view 区域小于 movable-area
+
+
+ text
+
+
+ 点击这里移动至 (30px, 30px)
+
+
+ 示例 2
+ \nmovable-view区域大于movable-area
+
+
+ text
+
+
+ 示例 3
+ \n只可以横向移动
+
+
+ text
+
+
+ 示例 4
+ \n只可以纵向移动
+
+
+ text
+
+
+ 示例 5
+ \n可超出边界
+
+
+ text
+
+
+ 示例 6
+ \n带有惯性
+
+
+ text
+
+
+ 示例 7
+ \n可放缩
+
+
+ text
+
+
+ 点击这里放大3倍
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/component/navigator/navigate/navigate.vue b/pages/component/navigator/navigate/navigate.vue
new file mode 100644
index 00000000..d293fa41
--- /dev/null
+++ b/pages/component/navigator/navigate/navigate.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/pages/component/navigator/navigator.vue b/pages/component/navigator/navigator.vue
new file mode 100644
index 00000000..2c98518b
--- /dev/null
+++ b/pages/component/navigator/navigator.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/navigator/redirect/redirect.vue b/pages/component/navigator/redirect/redirect.vue
new file mode 100644
index 00000000..246011ab
--- /dev/null
+++ b/pages/component/navigator/redirect/redirect.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/pages/component/picker-view/picker-view.vue b/pages/component/picker-view/picker-view.vue
new file mode 100644
index 00000000..0fd4c51e
--- /dev/null
+++ b/pages/component/picker-view/picker-view.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 日期:{{year}}年{{month}}月{{day}}日
+
+
+
+
+ {{item}}年
+
+
+ {{item}}月
+
+
+ {{item}}日
+
+
+
+
+
+
+
+
diff --git a/pages/component/picker/picker.vue b/pages/component/picker/picker.vue
new file mode 100644
index 00000000..2288adf5
--- /dev/null
+++ b/pages/component/picker/picker.vue
@@ -0,0 +1,178 @@
+
+
+
+ 普通选择器
+
+
+
+ 当前选择
+
+
+
+ {{array[index].name}}
+
+
+
+
+
+
+ 多列选择器
+
+
+
+ 当前选择
+
+
+
+ {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
+
+
+
+
+
+
+ 时间选择器
+
+
+
+ 当前选择
+
+
+
+ {{time}}
+
+
+
+
+
+ 注:选择 09:01 ~ 21:01 之间的时间, 不在区间内不能选中
+
+
+ 日期选择器
+
+
+
+ 当前选择
+
+
+
+ {{date}}
+
+
+
+
+
+ 注:选择当前时间 ±10 年之间的时间, 不在区间内不能选中
+
+
+
+
+
+
diff --git a/pages/component/progress/progress.vue b/pages/component/progress/progress.vue
new file mode 100644
index 00000000..1541d7df
--- /dev/null
+++ b/pages/component/progress/progress.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/radio/radio.vue b/pages/component/radio/radio.vue
new file mode 100644
index 00000000..44f7b777
--- /dev/null
+++ b/pages/component/radio/radio.vue
@@ -0,0 +1,90 @@
+
+
+
+
+ 默认样式
+
+
+
+
+
+
+ 不同颜色和尺寸的radio
+
+
+
+
+
+ 推荐展示样式
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/rich-text/rich-text.vue b/pages/component/rich-text/rich-text.vue
new file mode 100644
index 00000000..47e73870
--- /dev/null
+++ b/pages/component/rich-text/rich-text.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 数组类型
+ \nnodes属性为Array
+
+
+
+
+
+
+ 字符串类型
+ \nnodes属性为String
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/scroll-view/scroll-view.vue b/pages/component/scroll-view/scroll-view.vue
new file mode 100644
index 00000000..60c88bfb
--- /dev/null
+++ b/pages/component/scroll-view/scroll-view.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Vertical Scroll
+ \n纵向滚动
+
+
+
+ A
+ B
+ C
+
+
+
+ 点击这里返回顶部
+
+
+
+ Horizontal Scroll
+ \n横向滚动
+
+
+
+ A
+ B
+ C
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/component/slider/slider.vue b/pages/component/slider/slider.vue
new file mode 100644
index 00000000..a44d4807
--- /dev/null
+++ b/pages/component/slider/slider.vue
@@ -0,0 +1,40 @@
+
+
+
+
+ 显示当前value
+
+
+
+
+ 设置步进step跳动
+
+
+
+
+ 设置最小/最大值
+
+
+
+
+ 不同颜色和大小的滑块
+
+
+
+
+
+
+
diff --git a/pages/component/swiper/swiper.vue b/pages/component/swiper/swiper.vue
new file mode 100644
index 00000000..de4df517
--- /dev/null
+++ b/pages/component/swiper/swiper.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ A
+
+
+ B
+
+
+ C
+
+
+
+
+
+
+ 指示点
+
+
+
+ 自动播放
+
+
+
+
+
+
+ 幻灯片切换时长(ms)
+ {{duration}}
+
+
+
+ 自动播放间隔时长(ms)
+ {{interval}}
+
+
+
+
+
+
+
+
diff --git a/pages/component/switch/switch.vue b/pages/component/switch/switch.vue
new file mode 100644
index 00000000..32c64371
--- /dev/null
+++ b/pages/component/switch/switch.vue
@@ -0,0 +1,47 @@
+
+
+
+
+ 默认样式
+
+
+
+
+ 不同颜色和尺寸的switch
+
+
+
+
+
+ 推荐展示样式
+
+
+
+ 开启中
+
+
+
+ 关闭
+
+
+
+
+
+
+
diff --git a/pages/component/text/text.vue b/pages/component/text/text.vue
new file mode 100644
index 00000000..0494e206
--- /dev/null
+++ b/pages/component/text/text.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+ {{text}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/textarea/textarea.vue b/pages/component/textarea/textarea.vue
new file mode 100644
index 00000000..b20a27ea
--- /dev/null
+++ b/pages/component/textarea/textarea.vue
@@ -0,0 +1,31 @@
+
+
+
+ 输入区域高度自适应,不会出现滚动条
+
+
+
+ 占位符字体是红色的textarea
+
+
+
+
+
+
+
+
diff --git a/pages/component/video/video.nvue b/pages/component/video/video.nvue
new file mode 100644
index 00000000..673c072d
--- /dev/null
+++ b/pages/component/video/video.nvue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/video/video.vue b/pages/component/video/video.vue
new file mode 100644
index 00000000..49522d8a
--- /dev/null
+++ b/pages/component/video/video.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+ 弹幕内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/view/view.test.js b/pages/component/view/view.test.js
new file mode 100644
index 00000000..4755f380
--- /dev/null
+++ b/pages/component/view/view.test.js
@@ -0,0 +1,36 @@
+describe('pages/component/view/view.vue', () => {
+ let page
+ beforeAll(async () => {
+ // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
+ page = await program.reLaunch('/pages/component/view/view')
+ await page.waitFor(1000)
+ })
+
+ /**
+ * 测试步骤
+ * 1. 检测页面标题是否为 view
+ */
+ it('view 组件标题', async () => {
+ let view = await page.$('.common-page-head-title')
+ expect(await view.text()).toBe('view')
+ })
+ /**
+ * 测试步骤
+ * 1. uni-flex 的个数
+ * 2. flex-item 的个数
+ */
+ it('view 个数', async () => {
+ let viewLen = await page.$$('.uni-flex')
+ expect(viewLen.length).toBe(18)
+ let viewItemLen = await page.$$('.flex-item')
+ expect(viewItemLen.length).toBe(6)
+ })
+ /**
+ * 测试步骤
+ * 1. 第一个颜色块的色值是否为 rgb(247, 98, 96)
+ */
+ it('view 前三个元素颜色', async () => {
+ let viewRed = await page.$('.uni-bg-red')
+ expect(await viewRed.style('backgroundColor')).toBe('rgb(247, 98, 96)')
+ })
+})
diff --git a/pages/component/view/view.vue b/pages/component/view/view.vue
new file mode 100644
index 00000000..df7145f5
--- /dev/null
+++ b/pages/component/view/view.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+ Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。当设置display: flex后,继续给view等容器组件设置flex-direction:
+ row或column,就可以在该容器内按行或列排布子组件。uni-app推荐使用flex布局。因为flex布局有利于跨更多平台,尤其是采用原生渲染的平台。
+
+
+
+ flex-direction: row
+ \n横向布局
+
+
+ A
+ B
+ C
+
+
+
+ flex-direction: column
+ \n纵向布局
+
+
+ A
+ B
+ C
+
+
+
+ 更多布局示例
+ \nflex布局演示
+
+
+ 纵向布局-自动宽度
+ 纵向布局-固定宽度
+
+ 横向布局-自动宽度
+ 横向布局-自动宽度
+
+
+ 横向布局-居中
+ 横向布局-居中
+
+
+ 横向布局-居右
+ 横向布局-居右
+
+
+ 横向布局-平均分布
+ 横向布局-平均分布
+
+
+ 横向布局-两端对齐
+ 横向布局-两端对齐
+
+
+ 固定宽度
+ 自动占满余量
+
+
+ 固定宽度
+ 自动占满
+ 固定宽度
+
+
+ 一行显示不全,wrap折行
+ 一行显示不全,wrap折行
+ 一行显示不全,wrap折行
+
+
+
+ 垂直居顶
+
+
+ 垂直居中
+
+
+ 垂直居底
+
+
+
+
+
+ 组合示例
+ \nflex布局演示
+
+
+
+
+
+
+
+ 文字居左,留出左间距
+
+
+ 剩余数量
+ 立即购买
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/web-view-local/web-view-local.vue b/pages/component/web-view-local/web-view-local.vue
new file mode 100644
index 00000000..a9c9e366
--- /dev/null
+++ b/pages/component/web-view-local/web-view-local.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/component/web-view/web-view.vue b/pages/component/web-view/web-view.vue
new file mode 100644
index 00000000..0e78c251
--- /dev/null
+++ b/pages/component/web-view/web-view.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/coms/comCountDetailCard.vue b/pages/count/coms/comCountDetailCard.vue
new file mode 100644
index 00000000..dc59f0a2
--- /dev/null
+++ b/pages/count/coms/comCountDetailCard.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/coms/comCountJobCard.vue b/pages/count/coms/comCountJobCard.vue
new file mode 100644
index 00000000..4ae0b835
--- /dev/null
+++ b/pages/count/coms/comCountJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 盘点阶段 : {{dataContent.stage}}
+
+
+
+
+
+ 盘点库位 : {{dataContent.locationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/coms/detailInfoPopup.vue b/pages/count/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..7e75ffce
--- /dev/null
+++ b/pages/count/coms/detailInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 盘点明细号 :
+ {{dataContent.CountDetailNumber}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/coms/jobInfoPopup.vue b/pages/count/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..1e244259
--- /dev/null
+++ b/pages/count/coms/jobInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 计划单号 :
+ {{dataContent.PlanNumber}}
+
+
+ 阶段 :
+ {{dataContent.Stage}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/coms/jobListPopup.vue b/pages/count/coms/jobListPopup.vue
new file mode 100644
index 00000000..fe98c8cf
--- /dev/null
+++ b/pages/count/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/job/countDetail.vue b/pages/count/job/countDetail.vue
new file mode 100644
index 00000000..6838156e
--- /dev/null
+++ b/pages/count/job/countDetail.vue
@@ -0,0 +1,635 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/job/countJob.vue b/pages/count/job/countJob.vue
new file mode 100644
index 00000000..fccafabe
--- /dev/null
+++ b/pages/count/job/countJob.vue
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/count/record/countRecord.vue b/pages/count/record/countRecord.vue
new file mode 100644
index 00000000..de913193
--- /dev/null
+++ b/pages/count/record/countRecord.vue
@@ -0,0 +1,570 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/comReturnJobCard.vue b/pages/customerReturn/coms/comReturnJobCard.vue
new file mode 100644
index 00000000..1d282c73
--- /dev/null
+++ b/pages/customerReturn/coms/comReturnJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 客户名称 : {{dataContent.customerName}}
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/comReturnRecord.vue b/pages/customerReturn/coms/comReturnRecord.vue
new file mode 100644
index 00000000..5528217d
--- /dev/null
+++ b/pages/customerReturn/coms/comReturnRecord.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/comReturnRequestCard.vue b/pages/customerReturn/coms/comReturnRequestCard.vue
new file mode 100644
index 00000000..5978d07d
--- /dev/null
+++ b/pages/customerReturn/coms/comReturnRequestCard.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+ 客户代码 : {{dataContent.customerCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/detailInfoPopup.vue b/pages/customerReturn/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..d12228aa
--- /dev/null
+++ b/pages/customerReturn/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 销售订单号 :
+ {{dataContent.SoNumber}}
+
+
+ 销售订单行 :
+ {{dataContent.SoLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/jobInfoPopup.vue b/pages/customerReturn/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..568f1737
--- /dev/null
+++ b/pages/customerReturn/coms/jobInfoPopup.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ 发货记录单号 :
+ {{dataContent.deliverRecordNumber}}
+
+
+ 发货计划单号 :
+ {{dataContent.deliverPlanNumber}}
+
+
+ 客户代码 :
+ {{dataContent.customerCode}}
+
+
+ 客户月台代码 :
+ {{dataContent.customerDockCode}}
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/jobListPopup.vue b/pages/customerReturn/coms/jobListPopup.vue
new file mode 100644
index 00000000..4c73872a
--- /dev/null
+++ b/pages/customerReturn/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/requestDetailInfoPopup.vue b/pages/customerReturn/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..bc963019
--- /dev/null
+++ b/pages/customerReturn/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+ 销售订单号 :
+ {{dataContent.soNumber}}
+
+
+ 销售订单行 :
+ {{dataContent.soLine}}
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/coms/requestInfoPopup.vue b/pages/customerReturn/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..5d7e774b
--- /dev/null
+++ b/pages/customerReturn/coms/requestInfoPopup.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/job/returnDetail.vue b/pages/customerReturn/job/returnDetail.vue
new file mode 100644
index 00000000..332f094e
--- /dev/null
+++ b/pages/customerReturn/job/returnDetail.vue
@@ -0,0 +1,509 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/job/returnJob.vue b/pages/customerReturn/job/returnJob.vue
new file mode 100644
index 00000000..6e9a8482
--- /dev/null
+++ b/pages/customerReturn/job/returnJob.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/record/returnRecord.vue b/pages/customerReturn/record/returnRecord.vue
new file mode 100644
index 00000000..b382d19a
--- /dev/null
+++ b/pages/customerReturn/record/returnRecord.vue
@@ -0,0 +1,441 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/request/customerReturnRequest.vue b/pages/customerReturn/request/customerReturnRequest.vue
new file mode 100644
index 00000000..1e976e3f
--- /dev/null
+++ b/pages/customerReturn/request/customerReturnRequest.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/customerReturn/request/customerReturnRequestDetail.vue b/pages/customerReturn/request/customerReturnRequestDetail.vue
new file mode 100644
index 00000000..20fb057b
--- /dev/null
+++ b/pages/customerReturn/request/customerReturnRequestDetail.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/comDeliverDetailCard.vue b/pages/deliver/coms/comDeliverDetailCard.vue
new file mode 100644
index 00000000..20a849bf
--- /dev/null
+++ b/pages/deliver/coms/comDeliverDetailCard.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/comDeliverJobCard.vue b/pages/deliver/coms/comDeliverJobCard.vue
new file mode 100644
index 00000000..5998243a
--- /dev/null
+++ b/pages/deliver/coms/comDeliverJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 零件号 : {{dataContent.itemCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/comDeliverRequestCard.vue b/pages/deliver/coms/comDeliverRequestCard.vue
new file mode 100644
index 00000000..5c26c197
--- /dev/null
+++ b/pages/deliver/coms/comDeliverRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 客户代码 : {{dataContent.customerCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/detailInfoPopup.vue b/pages/deliver/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..d12228aa
--- /dev/null
+++ b/pages/deliver/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 销售订单号 :
+ {{dataContent.SoNumber}}
+
+
+ 销售订单行 :
+ {{dataContent.SoLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/jobInfoPopup.vue b/pages/deliver/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..831b56ea
--- /dev/null
+++ b/pages/deliver/coms/jobInfoPopup.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ 发货计划单号 :
+ {{dataContent.DeliverPlanNumber}}
+
+
+ 客户发货单号 :
+ {{dataContent.CustomerDeliverNumber}}
+
+
+ 客户代码 :
+ {{dataContent.CustomerCode}}
+
+
+ 客户月台代码 :
+ {{dataContent.CustomerDockCode}}
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/jobListPopup.vue b/pages/deliver/coms/jobListPopup.vue
new file mode 100644
index 00000000..f58edcf5
--- /dev/null
+++ b/pages/deliver/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/requestDetailInfoPopup.vue b/pages/deliver/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..e2c75dc3
--- /dev/null
+++ b/pages/deliver/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+ 销售订单号 :
+ {{dataContent.soNumber}}
+
+
+ 销售订单行 :
+ {{dataContent.soLine}}
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 到库位代码 :
+ {{dataContent.toLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/coms/requestInfoPopup.vue b/pages/deliver/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..9314d4ae
--- /dev/null
+++ b/pages/deliver/coms/requestInfoPopup.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/job/deliverDetail.vue b/pages/deliver/job/deliverDetail.vue
new file mode 100644
index 00000000..f0dde792
--- /dev/null
+++ b/pages/deliver/job/deliverDetail.vue
@@ -0,0 +1,510 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/job/deliverJob.vue b/pages/deliver/job/deliverJob.vue
new file mode 100644
index 00000000..5e0d3d8f
--- /dev/null
+++ b/pages/deliver/job/deliverJob.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/record/deliverRecord.vue b/pages/deliver/record/deliverRecord.vue
new file mode 100644
index 00000000..5f8994a2
--- /dev/null
+++ b/pages/deliver/record/deliverRecord.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 客户 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/request/deliverRequest.vue b/pages/deliver/request/deliverRequest.vue
new file mode 100644
index 00000000..d96a6190
--- /dev/null
+++ b/pages/deliver/request/deliverRequest.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/deliver/request/deliverRequestDetail.vue b/pages/deliver/request/deliverRequestDetail.vue
new file mode 100644
index 00000000..49f0ff4a
--- /dev/null
+++ b/pages/deliver/request/deliverRequestDetail.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/demo/demo.vue b/pages/demo/demo.vue
new file mode 100644
index 00000000..7f2c7454
--- /dev/null
+++ b/pages/demo/demo.vue
@@ -0,0 +1,705 @@
+
+
+
+ 公共组件
+
+
+
+
+
+ 按钮组件
+
+
+
+
+ 页面按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 弹出页按钮
+
+
+
+
+
+
+
+ 去扫描
+
+
+
+
+
+
+ 扫描按钮
+
+
+
+
+
+
+
+
+
+
+ 扫描组件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 任务组件
+
+
+
+ 任务编号 - jobNumer
+
+
+
+
+
+
+ 任务状态 - jobStatus
+
+
+
+
+
+
+ 任务顶部 - jobTop
+
+
+
+
+
+
+ 任务底部 - jobBottom
+
+
+
+
+
+
+ 任务其它属性 - jobProperty
+
+
+
+
+
+
+ 任务卡片 - jobCard
+
+
+
+
+
+
+
+
+
+
+
+ 数量组件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 数量组件通用属性
+ isShowStatus:显示状态
+ isShowStdPack:显示标包
+
+ 默认数量 qty
+
+
+
+
+
+
+ 推荐数量 recommendQty
+
+
+
+
+
+
+ 对比数量 compareQty
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 零件组件
+
+
+ 零件 item
+
+
+
+
+
+
+ 零件数量 itemQty
+
+
+
+
+ 零件数量 itemQty
+
+
+
+
+
+
+
+
+
+
+ 卡片组件
+
+
+ 箱码 pack
+
+
+
+
+ 托码 暂无
+
+
+
+ 批次 batch
+
+
+
+
+ 库位 location
+
+
+
+
+
+ 推荐卡片 recommend
+
+
+
+
+ 推荐卡片/实际/已扫描 recommend
+
+
+
+
+ 库存卡片 balance
+
+
+ 对比数量
+ 默认数量
+
+
+
+
+
+
+
+ 单箱管理
+
+
+
+
+ 批次管理
+
+
+
+
+ 批量管理
+
+
+
+
+
+
+
+
+
+
+ 消息框-comMessage
+
+
+
+
+ 信息提示弹窗-showMessage
+
+
+ 成功提示弹窗-showSuccessMessage
+
+
+ 错误提示弹窗-showErrorMessage
+
+
+ 警告提示弹窗-showWarningMessage
+
+
+ 问题选择弹窗-showQuestionMessage
+
+
+
+
+
+
+
+ 库存状态组件-balanceStatus
+
+
+
+
+
+
+
+
+
+ 零件状态组件-itemStatus
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 无数据
+
+
+
+
+
+
+
+ 库位相关组件
+
+
+
+
+
+ 选择库位
+
+
+
+
+ 下拉列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/demo/page.vue b/pages/demo/page.vue
new file mode 100644
index 00000000..491d6a24
--- /dev/null
+++ b/pages/demo/page.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.cont}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/error/404.vue b/pages/error/404.vue
new file mode 100644
index 00000000..2f29e39e
--- /dev/null
+++ b/pages/error/404.vue
@@ -0,0 +1,34 @@
+
+
+
+
+ 404 Page Not Found
+
+
+
+
+ {{errMsg}}
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/badge/badge.vue b/pages/extUI/badge/badge.vue
new file mode 100644
index 00000000..ff1bea5a
--- /dev/null
+++ b/pages/extUI/badge/badge.vue
@@ -0,0 +1,113 @@
+
+
+
+ 数字角标通用来标记重点信息使用,如接受到新消息、有未读消息等
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 右上
+
+
+
+
+
+ 右上
+
+
+
+
+ 圆点
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/breadcrumb/breadcrumb.vue b/pages/extUI/breadcrumb/breadcrumb.vue
new file mode 100644
index 00000000..bd4055da
--- /dev/null
+++ b/pages/extUI/breadcrumb/breadcrumb.vue
@@ -0,0 +1,41 @@
+
+
+
+ 面包屑导航显示当前页面的路径,快速返回之前的任意可跳转页面
+
+
+
+ {{route.name}}
+
+
+
+
+ {{route.name}}
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/button/button.vue b/pages/extUI/button/button.vue
new file mode 100644
index 00000000..f42df35d
--- /dev/null
+++ b/pages/extUI/button/button.vue
@@ -0,0 +1,107 @@
+
+
+
+
+ 使用 '.uni-btn' 样式,可对内置button组件设置样式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/calendar/calendar.nvue b/pages/extUI/calendar/calendar.nvue
new file mode 100644
index 00000000..fa242d37
--- /dev/null
+++ b/pages/extUI/calendar/calendar.nvue
@@ -0,0 +1,123 @@
+
+
+ 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/calendar/calendar.vue b/pages/extUI/calendar/calendar.vue
new file mode 100644
index 00000000..8883a737
--- /dev/null
+++ b/pages/extUI/calendar/calendar.vue
@@ -0,0 +1,126 @@
+
+
+ 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/card/card.nvue b/pages/extUI/card/card.nvue
new file mode 100644
index 00000000..47506217
--- /dev/null
+++ b/pages/extUI/card/card.nvue
@@ -0,0 +1,196 @@
+
+
+
+ 卡片组件通用来显示完整独立的一段信息,同时让用户理解他的作用。例如一篇文章的预览图、作者信息、时间等,卡片通常是更复杂和更详细信息的入口点。
+
+
+
+ 这是一个基础卡片示例,内容较少,此示例展示了一个没有任何属性不带阴影的卡片。
+
+
+
+
+ 这是一个基础卡片示例,此示例展示了一个标题加标题额外信息的标准卡片。
+
+
+
+
+
+ 这是一个带头像和双标题的基础卡片,此示例展示了一个完整的卡片。
+
+
+
+
+
+ 这是一个通栏卡片 ,通栏没有外边距,左右会贴合父元素。
+
+
+
+
+
+
+ 这是一个带封面和操作栏的卡片示例,此示例展示了封面插槽和操作栏插槽的用法。
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 卡片组件通用来显示完整独立的一段信息,同时让用户理解他的作用。例如一篇文章的预览图、作者信息、时间等,卡片通常是更复杂和更详细信息的入口点。
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
+ 今日新闻热点
+
+
+
+
+
+
+
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/collapse/collapse.vue b/pages/extUI/collapse/collapse.vue
new file mode 100644
index 00000000..0758f391
--- /dev/null
+++ b/pages/extUI/collapse/collapse.vue
@@ -0,0 +1,171 @@
+
+
+
+ 折叠面板用来折叠/显示过长的内容或者是列表。通常是在多内容分类项使用,折叠不重要的内容,显示重要内容。点击可以展开折叠部分。
+
+
+
+
+
+ {{content}}
+
+
+
+
+ 折叠内容主体,这是一段比较长内容。默认折叠主要内容,只显示当前项标题。点击标题展开,才能看到这段文字。再次点击标题,折叠内容。
+
+
+
+
+ 禁用状态内容主体,页面上是看不到这段话的。
+
+
+
+
+
+
+
+
+
+
+
+ 默认开启组件动画,使用动画效果折叠内容会有一个从上到下的动画。
+
+
+
+
+ 设置 show-animation="false",关闭当前组件动画效果。
+
+
+
+
+
+
+
+
+ 手风琴效果同时只会保留一个组件的打开状态,其余组件会自动关闭。
+
+
+
+
+ 手风琴效果同时只会保留一个组件的打开状态,其余组件会自动关闭。
+
+
+
+
+ 手风琴效果同时只会保留一个组件的打开状态,其余组件会自动关闭。
+
+
+
+
+
+
+
+
+
+ 折叠内容主体,可自定义内容及样式
+
+
+
+
+ 折叠内容主体,可自定义内容及样式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 折叠内容主体,可自定义内容及样式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/color/color.nvue b/pages/extUI/color/color.nvue
new file mode 100644
index 00000000..aba053b9
--- /dev/null
+++ b/pages/extUI/color/color.nvue
@@ -0,0 +1,150 @@
+
+
+
+ uni-ui 规范颜色色板,通过内置样式快速指定元素前景和背景色。
+
+
+
+
+ primary
+
+ disable
+
+ light
+
+
+
+
+
+
+
+ success
+
+ disable
+
+ light
+
+
+
+ warning
+
+ disable
+
+ light
+
+
+
+ error
+
+ disable
+ light
+
+
+
+ info
+
+ disable
+
+ light
+
+
+
+
+
+
+
+ main-color
+ base-color
+ secondary-color
+
+
+
+
+
+
+ border-4
+ border-3
+ border-2
+ border-1
+
+
+
+
+
+ white
+ black
+ transparent
+
+ bg-color
+
+
+
+
+ shadow-sm
+ shadow-base
+ shadow-lg
+
+
+
+
+
+
+
diff --git a/pages/extUI/combox/combox.vue b/pages/extUI/combox/combox.vue
new file mode 100644
index 00000000..3a1300d8
--- /dev/null
+++ b/pages/extUI/combox/combox.vue
@@ -0,0 +1,55 @@
+
+
+
+ 组合框一般用于可以选择也可以输入的表单项。
+
+
+
+
+
+ 所选城市为:{{city}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/countdown/countdown.nvue b/pages/extUI/countdown/countdown.nvue
new file mode 100644
index 00000000..7fb7a140
--- /dev/null
+++ b/pages/extUI/countdown/countdown.nvue
@@ -0,0 +1,71 @@
+
+
+
+ 倒计时组件主要用于促销商品剩余时间,发送短信验证等待时间等场景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/data-checkbox/data-checkbox.vue b/pages/extUI/data-checkbox/data-checkbox.vue
new file mode 100644
index 00000000..a8a8b277
--- /dev/null
+++ b/pages/extUI/data-checkbox/data-checkbox.vue
@@ -0,0 +1,159 @@
+
+
+
+ 通过数据驱动的单选框和复选框,可直接通过连接 uniCloud 获取数据,同时可以配合表单组件 uni-forms 使用
+
+
+
+ 单选选中:{{JSON.stringify(radio1)}}
+
+
+
+
+
+ 多选选中:{{JSON.stringify(checkbox1)}}
+
+
+
+
+
+
+ 选中:{{JSON.stringify(checkbox6)}}
+
+
+
+
+
+
+ 单选选中:{{JSON.stringify(radio2)}}
+
+
+
+ 多选选中:{{JSON.stringify(checkbox2)}}
+
+
+
+
+
+
+ 单选选中:{{JSON.stringify(radio3)}}
+
+
+
+ 多选选中:{{JSON.stringify(checkbox3)}}
+
+
+
+
+
+
+ 单选选中:{{JSON.stringify(radio4)}}
+
+
+
+ 多选选中:{{JSON.stringify(checkbox4)}}
+
+
+
+
+
+
+
+
+
+ 单选选中:{{JSON.stringify(radio5)}}
+
+
+
+ 多选选中:{{JSON.stringify(checkbox5)}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/data-indexed-list/data-indexed-list.vue b/pages/extUI/data-indexed-list/data-indexed-list.vue
new file mode 100644
index 00000000..8562b9b2
--- /dev/null
+++ b/pages/extUI/data-indexed-list/data-indexed-list.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/extUI/data-picker/data-picker.nvue b/pages/extUI/data-picker/data-picker.nvue
new file mode 100644
index 00000000..66309438
--- /dev/null
+++ b/pages/extUI/data-picker/data-picker.nvue
@@ -0,0 +1,113 @@
+
+
+
+ 标签组件多用于商品分类、重点内容显示等场景。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/data-select/data-select.vue b/pages/extUI/data-select/data-select.vue
new file mode 100644
index 00000000..71af8a2a
--- /dev/null
+++ b/pages/extUI/data-select/data-select.vue
@@ -0,0 +1,71 @@
+
+
+
+ 通过数据驱动的单选框和复选框,可直接通过连接 uniCloud 获取数据,同时可以配合表单组件 uni-forms 使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/dateformat/dateformat.vue b/pages/extUI/dateformat/dateformat.vue
new file mode 100644
index 00000000..9a9ab81e
--- /dev/null
+++ b/pages/extUI/dateformat/dateformat.vue
@@ -0,0 +1,47 @@
+
+
+
+ 日期格式化组件,通常用于需要展示友好的日期格式的场景。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/datetime-picker/datetime-picker.vue b/pages/extUI/datetime-picker/datetime-picker.vue
new file mode 100644
index 00000000..431f03d9
--- /dev/null
+++ b/pages/extUI/datetime-picker/datetime-picker.vue
@@ -0,0 +1,108 @@
+
+
+
+ 可以同时选择日期和时间的选择器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我是一个插槽,点击我
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/drawer/drawer.vue b/pages/extUI/drawer/drawer.vue
new file mode 100644
index 00000000..bdcbdd06
--- /dev/null
+++ b/pages/extUI/drawer/drawer.vue
@@ -0,0 +1,129 @@
+
+
+
+ 这是抽屉式导航组件使用示例,可以指定菜单左侧或者右侧弹出(仅初始化生效),组件内部可以放置任何内容。点击页面按钮即可显示导航菜单。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 右侧遮罩只能通过按钮关闭,不能通过点击遮罩关闭
+
+
+
+
+
+ 可滚动内容 {{item}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/easyinput/easyinput.vue b/pages/extUI/easyinput/easyinput.vue
new file mode 100644
index 00000000..d0a93b9b
--- /dev/null
+++ b/pages/extUI/easyinput/easyinput.vue
@@ -0,0 +1,87 @@
+
+
+
+ easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件 uni-forms 而设计的,easyinput 内置了边框,图标等,同时包含 input
+ 所有功能
+
+
+
+
+
+
+ 输入内容:{{ '"'+value+'"' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/fab/fab.vue b/pages/extUI/fab/fab.vue
new file mode 100644
index 00000000..418390e7
--- /dev/null
+++ b/pages/extUI/fab/fab.vue
@@ -0,0 +1,123 @@
+
+
+
+ uni-ui 规范颜色色板,通过内置样式快速指定元素前景和背景色。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/fav/fav.vue b/pages/extUI/fav/fav.vue
new file mode 100644
index 00000000..85e8a487
--- /dev/null
+++ b/pages/extUI/fav/fav.vue
@@ -0,0 +1,93 @@
+
+
+
+ 用于收藏功能,可点击切换选中、不选中的状态。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/file-picker/file-picker.vue b/pages/extUI/file-picker/file-picker.vue
new file mode 100644
index 00000000..c7fa0642
--- /dev/null
+++ b/pages/extUI/file-picker/file-picker.vue
@@ -0,0 +1,110 @@
+
+
+
+ 文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择头像
+ 选择
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/font/font.nvue b/pages/extUI/font/font.nvue
new file mode 100644
index 00000000..5b87914f
--- /dev/null
+++ b/pages/extUI/font/font.nvue
@@ -0,0 +1,53 @@
+
+
+
+ 字体辅助样式提供了常见的字体样式类
+
+
+
+ 一级标题
+
+
+
+
+ 二级标题
+
+
+
+
+ 三级标题
+
+
+
+
+ 四级标题
+
+
+
+
+ 五级标题
+
+
+
+
+ 六级标题
+
+
+
+
+ 副标题
+
+
+
+
+ uni-ui 是 DCloud 官方面向 uni-app 开发者提供的一套 ui 解决方案
+
+
+
+
+ 标注说明文字
+
+
+
+
+
diff --git a/pages/extUI/forms/forms.vue b/pages/extUI/forms/forms.vue
new file mode 100644
index 00000000..eaf4c4b4
--- /dev/null
+++ b/pages/extUI/forms/forms.vue
@@ -0,0 +1,355 @@
+
+
+
+ uni-forms 组件一般由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/goods-nav/goods-nav.nvue b/pages/extUI/goods-nav/goods-nav.nvue
new file mode 100644
index 00000000..ea455745
--- /dev/null
+++ b/pages/extUI/goods-nav/goods-nav.nvue
@@ -0,0 +1,109 @@
+
+
+
+ uni-goods-nav 组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/grid/grid.nvue b/pages/extUI/grid/grid.nvue
new file mode 100644
index 00000000..51efef71
--- /dev/null
+++ b/pages/extUI/grid/grid.nvue
@@ -0,0 +1,282 @@
+
+
+
+ 宫格组件主要使用场景如:商品推荐列表、热门内容等
+
+
+
+
+
+
+ 文本信息
+
+
+
+
+
+
+
+
+
+ 文本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/group/group.vue b/pages/extUI/group/group.vue
new file mode 100644
index 00000000..9a15d8c5
--- /dev/null
+++ b/pages/extUI/group/group.vue
@@ -0,0 +1,88 @@
+
+
+
+ 分组组件可用于将组件分组,添加间隔,以产生明显的区块。
+
+
+
+ 分组内容
+ 分组内容
+ 分组内容
+ 分组内容
+
+
+ 分组内容
+ 分组内容
+ 分组内容
+ 分组内容
+
+
+
+
+
+
+
+
+ 分组内容
+ 分组内容
+ 分组内容
+ 分组内容
+
+
+
+ 分组内容
+ 分组内容
+ 分组内容
+ 分组内容
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/icons/icons.nvue b/pages/extUI/icons/icons.nvue
new file mode 100644
index 00000000..df07ec88
--- /dev/null
+++ b/pages/extUI/icons/icons.nvue
@@ -0,0 +1,569 @@
+
+
+
+ 图标组件方便用户在设计页面的时候,减少小图片的使用。可方便自定义图标单色、尺寸。
+
+
+
+
+
+
+
+
+
+
+ {{ checked? item.unicode: item.name }}
+
+
+
+
+
+
+
+
+ youxi
+
+
+
+ wenjian
+
+
+
+ zhuanfa
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/indexed-list/indexed-list.nvue b/pages/extUI/indexed-list/indexed-list.nvue
new file mode 100644
index 00000000..16c0408f
--- /dev/null
+++ b/pages/extUI/indexed-list/indexed-list.nvue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/pages/extUI/link/link.vue b/pages/extUI/link/link.vue
new file mode 100644
index 00000000..a834ca79
--- /dev/null
+++ b/pages/extUI/link/link.vue
@@ -0,0 +1,37 @@
+
+
+
+ 超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击跳转
+
+
+
+
+
+
+
diff --git a/pages/extUI/list/ad.vue b/pages/extUI/list/ad.vue
new file mode 100644
index 00000000..40ac4de4
--- /dev/null
+++ b/pages/extUI/list/ad.vue
@@ -0,0 +1,91 @@
+
+
+ 此示例展示了ad广告组件在 uni-list 中的应用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/list/chat.vue b/pages/extUI/list/chat.vue
new file mode 100644
index 00000000..6fc75a00
--- /dev/null
+++ b/pages/extUI/list/chat.vue
@@ -0,0 +1,176 @@
+
+
+
+ 此示例展示了聊天列表的使用场景。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 刚刚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/list/list.nvue b/pages/extUI/list/list.nvue
new file mode 100644
index 00000000..4f4af144
--- /dev/null
+++ b/pages/extUI/list/list.nvue
@@ -0,0 +1,164 @@
+
+
+
+ 列表组件可以在其中使用图标、略缩图或放置任何你想放的元素,使用场景如:导航菜单、列表、设置中心排版等
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用 body 插槽
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义两侧插槽
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/load-more/load-more.nvue b/pages/extUI/load-more/load-more.nvue
new file mode 100644
index 00000000..110b52a3
--- /dev/null
+++ b/pages/extUI/load-more/load-more.nvue
@@ -0,0 +1,105 @@
+
+
+
+ 加载更多组件用于页面加载更多数据时,页面底部显示内容等场景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/nav-bar/nav-bar.nvue b/pages/extUI/nav-bar/nav-bar.nvue
new file mode 100644
index 00000000..bc2b3870
--- /dev/null
+++ b/pages/extUI/nav-bar/nav-bar.nvue
@@ -0,0 +1,186 @@
+
+
+
+
+ 本导航栏为自定义组件,并非原生导航栏。除非原生导航栏无法满足需求,否则不推荐使用自定义导航栏组件。具体参考https://ask.dcloud.net.cn/article/34921
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ city }}
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/notice-bar/notice-bar.vue b/pages/extUI/notice-bar/notice-bar.vue
new file mode 100644
index 00000000..d43d2391
--- /dev/null
+++ b/pages/extUI/notice-bar/notice-bar.vue
@@ -0,0 +1,64 @@
+
+
+
+ 通告栏组件多用于系统通知,广告通知等场景,可自定义图标,颜色,展现方式等。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/number-box/number-box.nvue b/pages/extUI/number-box/number-box.nvue
new file mode 100644
index 00000000..414634f3
--- /dev/null
+++ b/pages/extUI/number-box/number-box.nvue
@@ -0,0 +1,56 @@
+
+
+
+ 数字输入框组件多用于购物车加减商品等场景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/pagination/pagination.vue b/pages/extUI/pagination/pagination.vue
new file mode 100644
index 00000000..0ad1ba17
--- /dev/null
+++ b/pages/extUI/pagination/pagination.vue
@@ -0,0 +1,94 @@
+
+
+
+ 分页器组件,用于展示页码、请求数据等
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 当前页:{{ current }},数据总量:{{ total }}条,每页数据:{{ pageSize }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/popup/popup.vue b/pages/extUI/popup/popup.vue
new file mode 100644
index 00000000..63bdd161
--- /dev/null
+++ b/pages/extUI/popup/popup.vue
@@ -0,0 +1,276 @@
+
+
+
+ 弹出层组件用于弹出一个覆盖到页面上的内容,使用场景如:底部弹出分享弹窗、页面插屏广告等。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 输入内容:{{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/radius/radius.nvue b/pages/extUI/radius/radius.nvue
new file mode 100644
index 00000000..64585c8a
--- /dev/null
+++ b/pages/extUI/radius/radius.nvue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+ 各值的含义请参考文档
+
+
+
+
+ 通过下面的选项控制圆角
+
+
+
+ 位置
+
+
+
+ 大小
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/rate/rate.nvue b/pages/extUI/rate/rate.nvue
new file mode 100644
index 00000000..4e1bdb41
--- /dev/null
+++ b/pages/extUI/rate/rate.nvue
@@ -0,0 +1,63 @@
+
+
+
+ 评分组件多用于商品评价打分、服务态度评价、用户满意度等场景。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/row/row.vue b/pages/extUI/row/row.vue
new file mode 100644
index 00000000..fe370bcc
--- /dev/null
+++ b/pages/extUI/row/row.vue
@@ -0,0 +1,230 @@
+
+
+
+
+ 流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局
+
+
+ 流式栅格系统,在nvue不可使用媒体查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/search-bar/search-bar.vue b/pages/extUI/search-bar/search-bar.vue
new file mode 100644
index 00000000..42227cc6
--- /dev/null
+++ b/pages/extUI/search-bar/search-bar.vue
@@ -0,0 +1,111 @@
+
+
+
+ 搜索栏组件,通常用于搜索商品、文章等。
+
+
+
+
+
+
+ 当前输入为:{{ searchValue }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/section/section.vue b/pages/extUI/section/section.vue
new file mode 100644
index 00000000..bd5e7f30
--- /dev/null
+++ b/pages/extUI/section/section.vue
@@ -0,0 +1,60 @@
+
+
+
uni-section 组件主要用于文章、列表详情等标题展示
+
+
+
+
+
+
+
+
+ 默认插槽内容
+
+
+ right slot
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/segmented-control/segmented-control.vue b/pages/extUI/segmented-control/segmented-control.vue
new file mode 100644
index 00000000..9ab78278
--- /dev/null
+++ b/pages/extUI/segmented-control/segmented-control.vue
@@ -0,0 +1,168 @@
+
+
+
+ 标签组件多用于商品分类、重点内容显示等场景。
+
+
+
+
+
+
+
+ 选项卡1的内容
+ 选项卡2的内容
+ 选项卡3的内容
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/space/space.nvue b/pages/extUI/space/space.nvue
new file mode 100644
index 00000000..0173168f
--- /dev/null
+++ b/pages/extUI/space/space.nvue
@@ -0,0 +1,151 @@
+
+
+
+
+
+ 各值的含义请参考文档
+
+
+
+
+
+ 通过下面的选项控制边距
+
+
+
+
+ 外边距
+
+
+
+ 外边距大小
+
+
+
+
+ 内边距
+
+
+
+ 内边距大小
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/steps/steps.vue b/pages/extUI/steps/steps.vue
new file mode 100644
index 00000000..612238a1
--- /dev/null
+++ b/pages/extUI/steps/steps.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/swipe-action/swipe-action.vue b/pages/extUI/swipe-action/swipe-action.vue
new file mode 100644
index 00000000..d5e924dd
--- /dev/null
+++ b/pages/extUI/swipe-action/swipe-action.vue
@@ -0,0 +1,350 @@
+
+
+
+ 通过滑动触发选项的容器,容器内可放置列表等组件,通过左右滑动来触发一些操作。
+
+
+
+
+
+ 使用数据填充
+
+
+
+
+
+ 置顶
+
+
+
+ 使用左右插槽
+
+
+ 删除
+
+
+
+
+ 置顶
+
+
+ 数据与插槽混合使用
+
+
+
+
+
+
+
+ 禁止左右滚动
+
+
+
+
+
+
+ 当前状态:{{ isOpened }}
+
+
+
+
+
+ 使用变量控制SwipeAction的开启状态
+
+
+
+
+
+
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/swiper-dot/swiper-dot.nvue b/pages/extUI/swiper-dot/swiper-dot.nvue
new file mode 100644
index 00000000..25a95e49
--- /dev/null
+++ b/pages/extUI/swiper-dot/swiper-dot.nvue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+
+
+ default
+ dot
+
+ round
+ nav
+
+ indexes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 内容
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/table/table.vue b/pages/extUI/table/table.vue
new file mode 100644
index 00000000..efd002fa
--- /dev/null
+++ b/pages/extUI/table/table.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+ 日期
+ 姓名
+ 地址
+ 设置
+
+
+ {{ item.date }}
+
+ {{ item.name }}
+
+ {{ item.address }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/table/tableData.js b/pages/extUI/table/tableData.js
new file mode 100644
index 00000000..14ac8268
--- /dev/null
+++ b/pages/extUI/table/tableData.js
@@ -0,0 +1,193 @@
+export default [{
+ "date": "2020-09-01",
+ "name": "Dcloud1",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-02",
+ "name": "Dcloud2",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-03",
+ "name": "Dcloud3",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-04",
+ "name": "Dcloud4",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-05",
+ "name": "Dcloud5",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-06",
+ "name": "Dcloud6",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-07",
+ "name": "Dcloud7",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-08",
+ "name": "Dcloud8",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-09",
+ "name": "Dcloud9",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-10",
+ "name": "Dcloud10",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-11",
+ "name": "Dcloud11",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-12",
+ "name": "Dcloud12",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-13",
+ "name": "Dcloud13",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-14",
+ "name": "Dcloud14",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-15",
+ "name": "Dcloud15",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-16",
+ "name": "Dcloud16",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-01",
+ "name": "Dcloud17",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-02",
+ "name": "Dcloud18",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-03",
+ "name": "Dcloud19",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-04",
+ "name": "Dcloud20",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-05",
+ "name": "Dcloud21",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-06",
+ "name": "Dcloud22",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-07",
+ "name": "Dcloud23",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-08",
+ "name": "Dcloud24",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-09",
+ "name": "Dcloud25",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-10",
+ "name": "Dcloud26",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-11",
+ "name": "Dcloud27",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-12",
+ "name": "Dcloud28",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-13",
+ "name": "Dcloud29",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-14",
+ "name": "Dcloud30",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-15",
+ "name": "Dcloud31",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-16",
+ "name": "Dcloud32",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-01",
+ "name": "Dcloud33",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-02",
+ "name": "Dcloud34",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-03",
+ "name": "Dcloud35",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-04",
+ "name": "Dcloud36",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-05",
+ "name": "Dcloud37",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-06",
+ "name": "Dcloud38",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-07",
+ "name": "Dcloud39",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-08",
+ "name": "Dcloud40",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-09",
+ "name": "Dcloud41",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-10",
+ "name": "Dcloud42",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-11",
+ "name": "Dcloud43",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-12",
+ "name": "Dcloud44",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}, {
+ "date": "2020-09-13",
+ "name": "Dcloud45",
+ "address": "上海市普陀区金沙江路 1518 弄"
+}, {
+ "date": "2020-09-14",
+ "name": "Dcloud46",
+ "address": "上海市普陀区金沙江路 1517 弄"
+}, {
+ "date": "2020-09-15",
+ "name": "Dcloud47",
+ "address": "上海市普陀区金沙江路 1519 弄"
+}, {
+ "date": "2020-09-16",
+ "name": "Dcloud48",
+ "address": "上海市普陀区金沙江路 1516 弄"
+}]
diff --git a/pages/extUI/tag/tag.nvue b/pages/extUI/tag/tag.nvue
new file mode 100644
index 00000000..d2ab6440
--- /dev/null
+++ b/pages/extUI/tag/tag.nvue
@@ -0,0 +1,157 @@
+
+
+
+ 标签组件多用于商品分类、重点内容显示等场景。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/test/color.vue b/pages/extUI/test/color.vue
new file mode 100644
index 00000000..1dca253d
--- /dev/null
+++ b/pages/extUI/test/color.vue
@@ -0,0 +1,196 @@
+
+
+
+ primary
+
+ disable
+ light
+
+
+
+ success
+
+ disable
+ light
+
+
+
+
+
+ warning
+
+ disable
+ light
+
+
+
+ error
+
+ disable
+ light
+
+
+
+ info
+
+ disable
+ light
+
+
+ black
+ main-color
+ base-color
+ secondary-color
+ light-color
+ border-1
+ border-2
+ border-3
+ border-4
+ bg-color
+ white
+ transparent
+
+
+
+
+
+
diff --git a/pages/extUI/test/test.nvue b/pages/extUI/test/test.nvue
new file mode 100644
index 00000000..7dadc257
--- /dev/null
+++ b/pages/extUI/test/test.nvue
@@ -0,0 +1,192 @@
+
+
+
+ 卡片组件通用来显示完整独立的一段信息,同时让用户理解他的作用。例如一篇文章的预览图、作者信息、时间等,卡片通常是更复杂和更详细信息的入口点。
+
+
+
+ 这是一个基础卡片示例,内容较少,此示例展示了一个没有任何属性不带阴影的卡片。
+
+
+
+
+ 这是一个基础卡片示例,此示例展示了一个标题加标题额外信息的标准卡片。
+
+
+
+
+
+ 这是一个带头像和双标题的基础卡片,此示例展示了一个完整的卡片。
+
+
+
+
+
+ 这是一个通栏卡片 ,通栏没有外边距,左右会贴合父元素。
+
+
+
+
+
+
+ 这是一个带封面和操作栏的卡片示例,此示例展示了封面插槽和操作栏插槽的用法。
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 卡片组件通用来显示完整独立的一段信息,同时让用户理解他的作用。例如一篇文章的预览图、作者信息、时间等,卡片通常是更复杂和更详细信息的入口点。
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
+ 今日新闻热点
+
+
+
+
+
+
+
+
+
+
+ 分享
+
+
+
+ 点赞
+
+
+
+ 评论
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/title/title.vue b/pages/extUI/title/title.vue
new file mode 100644
index 00000000..23ccdefb
--- /dev/null
+++ b/pages/extUI/title/title.vue
@@ -0,0 +1,97 @@
+
+
+
+ 标题组件,通常用于记录页面标题,使用当前组件在 uni-app 开启统计的情况下,将会自动统计页面标题.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。即使不跨端,uni-app同时也是更好的小程序开发框架。DCloud公司拥有370万开发者用户,旗下uni-app有5万+案例、900款插件、50+微信/qq群,并且被阿里小程序工具内置,开发者可以放心选择。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/tooltip/tooltip.vue b/pages/extUI/tooltip/tooltip.vue
new file mode 100644
index 00000000..f243d4b7
--- /dev/null
+++ b/pages/extUI/tooltip/tooltip.vue
@@ -0,0 +1,41 @@
+
+
+
+ 常用于展示鼠标 hover 时的提示信息,注意:无法覆盖原生组件
+
+
+
+
+
+
+
+
+
+
+
+
+ 一段文字一段文字一段文字一段文字一段文字一段文字一段文字
+ 一段文字一段文字一段文字一段文字一段文字一段文字一段文字
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/extUI/transition/transition.vue b/pages/extUI/transition/transition.vue
new file mode 100644
index 00000000..dae23442
--- /dev/null
+++ b/pages/extUI/transition/transition.vue
@@ -0,0 +1,160 @@
+
+
+
+ 过渡动画,通常用于元素的过渡效果,例如淡隐淡出效果,遮罩层的效果、放大缩小的效果等
+
+
+
+ 示例元素
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/home/index.vue b/pages/home/index.vue
new file mode 100644
index 00000000..b94e6012
--- /dev/null
+++ b/pages/home/index.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+ {{item.menuName}}
+
+
+
+
+
+
+
+
diff --git a/pages/index.vue b/pages/index.vue
deleted file mode 100644
index bdaf530d..00000000
--- a/pages/index.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
- Hello 闻荫
-
-
-
-
-
-
-
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 00000000..a71ca8f6
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,438 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/comInspectDetailCard.vue b/pages/inspect/coms/comInspectDetailCard.vue
new file mode 100644
index 00000000..0f6e8745
--- /dev/null
+++ b/pages/inspect/coms/comInspectDetailCard.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 不合格数量 : {{item.FailedQty}}
+
+
+ 不合格原因 : {{item.FailedReason}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/comInspectJobCard.vue b/pages/inspect/coms/comInspectJobCard.vue
new file mode 100644
index 00000000..393947ec
--- /dev/null
+++ b/pages/inspect/coms/comInspectJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 物料号 : {{dataContent.itemCode}}
+
+
+ 批次 : {{dataContent.batch}}
+
+
+ 检验类型 : {{getInspectType(dataContent.inspectType)}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/comInspectJobList.vue b/pages/inspect/coms/comInspectJobList.vue
new file mode 100644
index 00000000..87f0b010
--- /dev/null
+++ b/pages/inspect/coms/comInspectJobList.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/comInspectRequestCard.vue b/pages/inspect/coms/comInspectRequestCard.vue
new file mode 100644
index 00000000..f6c79311
--- /dev/null
+++ b/pages/inspect/coms/comInspectRequestCard.vue
@@ -0,0 +1,45 @@
+
+
+
+
+ 采购收货记录单号 : {{dataContent.purchaseReceiptRecordNumber}}
+
+
+ 订单号 : {{dataContent.poNumber}}
+
+
+ 订单行 : {{dataContent.poLine}}
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/inspectComDetailCard.vue b/pages/inspect/coms/inspectComDetailCard.vue
new file mode 100644
index 00000000..51abfc00
--- /dev/null
+++ b/pages/inspect/coms/inspectComDetailCard.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 不合格数量 :{{item.failedQty}}
+
+
+ 报废数量 :{{item.crackQty}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/inspectEdit.vue b/pages/inspect/coms/inspectEdit.vue
new file mode 100644
index 00000000..6ec5593c
--- /dev/null
+++ b/pages/inspect/coms/inspectEdit.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+ 箱码
+ {{dataContent.packingNumber}}
+
+
+ 收货数量
+
+ {{dataContent.qty}}
+
+
+
+
+
+ 不合格数量
+
+
+
+
+
+
+
+ 报废数量
+
+
+
+
+
+
+
+
+ 不合格原因
+
+
+
+
+
+
+
+ 检验结果
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/inspectInfoPopup.vue b/pages/inspect/coms/inspectInfoPopup.vue
new file mode 100644
index 00000000..8a73d011
--- /dev/null
+++ b/pages/inspect/coms/inspectInfoPopup.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+ 申请单号 :
+ {{dataContent.requestNumber}}
+
+
+ 采购收货记录单号 :
+ {{dataContent.purchaseReceiptRecordNumber}}
+
+
+ 供应商代码 :
+ {{dataContent.supplierCode}}
+
+
+ 仓库代码 :
+ {{dataContent.warehouseCode}}
+
+
+ 货主代码 :
+ {{dataContent.ownerCode}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 物品代码 :
+ {{dataContent.itemCode}}
+
+
+ 检验类型 :
+ {{dataContent.inspectType}}
+
+
+ 下一步检验动作 :
+ {{dataContent.nextAction}}
+
+
+ 抽检方式 :
+ {{dataContent.sampleMethod}}
+
+
+ 计量单位 :
+ {{dataContent.uom}}
+
+
+ 收货数量 :
+ {{dataContent.receiveQty}}
+
+
+ 样品数量 :
+ {{dataContent.sampleQty}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/requestDetailInfoPopup.vue b/pages/inspect/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..8bc5c446
--- /dev/null
+++ b/pages/inspect/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode }}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/requestInfoPopup.vue b/pages/inspect/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..206213ae
--- /dev/null
+++ b/pages/inspect/coms/requestInfoPopup.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/coms/uploadCamera.vue b/pages/inspect/coms/uploadCamera.vue
new file mode 100644
index 00000000..b1f0857f
--- /dev/null
+++ b/pages/inspect/coms/uploadCamera.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/job/inspectDetail.vue b/pages/inspect/job/inspectDetail.vue
new file mode 100644
index 00000000..3bb140da
--- /dev/null
+++ b/pages/inspect/job/inspectDetail.vue
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/job/inspectJob.vue b/pages/inspect/job/inspectJob.vue
new file mode 100644
index 00000000..6a422185
--- /dev/null
+++ b/pages/inspect/job/inspectJob.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/job/inspectResult.vue b/pages/inspect/job/inspectResult.vue
new file mode 100644
index 00000000..83cc5862
--- /dev/null
+++ b/pages/inspect/job/inspectResult.vue
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+ 类型
+
+
+ {{getInspectName(jobContent.inspectType) }}
+
+
+
+
+ 零件号
+
+
+
+
+
+
+
+
+
+ 批次
+
+
+
+
+
+
+
+ 收货数量
+
+
+ {{jobContent.receiveQty}} {{getUnitInfo(jobContent.uom)}}
+
+
+
+
+
+ 检验数量
+
+
+ {{jobContent.sampleQty}} {{getUnitInfo(jobContent.uom)}}
+
+
+
+
+
+ 不合格数量
+
+
+
+
+
+
+
+
+
+
+ 报废数量
+
+
+
+
+
+
+
+
+
+ 下一步动作
+
+
+
+
+
+
+
+
+
+ 最终不合格
+
+
+
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{index+1}}.
+
+
+
+ 箱码:{{item.packingNumber}}
+
+
+ 库位:{{item.fromLocationCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/request/inspectRequest.vue b/pages/inspect/request/inspectRequest.vue
new file mode 100644
index 00000000..4f4b601c
--- /dev/null
+++ b/pages/inspect/request/inspectRequest.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inspect/request/inspectRequestDetail.vue b/pages/inspect/request/inspectRequestDetail.vue
new file mode 100644
index 00000000..e199c93a
--- /dev/null
+++ b/pages/inspect/request/inspectRequestDetail.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+ 发货单号 :
+
+
+ 供应商 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comInventoryDetailCard.vue b/pages/inventoryMove/coms/comInventoryDetailCard.vue
new file mode 100644
index 00000000..bf62fc3e
--- /dev/null
+++ b/pages/inventoryMove/coms/comInventoryDetailCard.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 来源库位
+ {{item.FromLocationCode}}
+
+
+ 目标库位
+ {{item.toLocationCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comInventoryJobCard.vue b/pages/inventoryMove/coms/comInventoryJobCard.vue
new file mode 100644
index 00000000..81e61e52
--- /dev/null
+++ b/pages/inventoryMove/coms/comInventoryJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+ 来源库位 : {{dataContent.fromLocationCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comMove.vue b/pages/inventoryMove/coms/comMove.vue
new file mode 100644
index 00000000..164913b5
--- /dev/null
+++ b/pages/inventoryMove/coms/comMove.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comMoveJob.vue b/pages/inventoryMove/coms/comMoveJob.vue
new file mode 100644
index 00000000..7e4ab8f1
--- /dev/null
+++ b/pages/inventoryMove/coms/comMoveJob.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comMoveRecord.vue b/pages/inventoryMove/coms/comMoveRecord.vue
new file mode 100644
index 00000000..b7e9a40c
--- /dev/null
+++ b/pages/inventoryMove/coms/comMoveRecord.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/comMovebalance.vue b/pages/inventoryMove/coms/comMovebalance.vue
new file mode 100644
index 00000000..e4943e21
--- /dev/null
+++ b/pages/inventoryMove/coms/comMovebalance.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 复制箱码
+
+
+ 复制制品
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/detailInfoPopup.vue b/pages/inventoryMove/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..72340688
--- /dev/null
+++ b/pages/inventoryMove/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.PoNumber}}
+
+
+ 订单行 :
+ {{dataContent.PoLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/jobInfoPopup.vue b/pages/inventoryMove/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..7b02b6ab
--- /dev/null
+++ b/pages/inventoryMove/coms/jobInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 供应商代码 :
+ {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/coms/jobListPopup.vue b/pages/inventoryMove/coms/jobListPopup.vue
new file mode 100644
index 00000000..59ace1d4
--- /dev/null
+++ b/pages/inventoryMove/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/HoldToScrapMoveJob.vue b/pages/inventoryMove/job/HoldToScrapMoveJob.vue
new file mode 100644
index 00000000..410b2abf
--- /dev/null
+++ b/pages/inventoryMove/job/HoldToScrapMoveJob.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/OktoScrapMoveJob.vue b/pages/inventoryMove/job/OktoScrapMoveJob.vue
new file mode 100644
index 00000000..c78799e0
--- /dev/null
+++ b/pages/inventoryMove/job/OktoScrapMoveJob.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/holdToOkMoveJob.vue b/pages/inventoryMove/job/holdToOkMoveJob.vue
new file mode 100644
index 00000000..149213d6
--- /dev/null
+++ b/pages/inventoryMove/job/holdToOkMoveJob.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/inventoryMoveDetail.vue b/pages/inventoryMove/job/inventoryMoveDetail.vue
new file mode 100644
index 00000000..9766b7d1
--- /dev/null
+++ b/pages/inventoryMove/job/inventoryMoveDetail.vue
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/inventoryMoveJob.vue b/pages/inventoryMove/job/inventoryMoveJob.vue
new file mode 100644
index 00000000..156ca7ab
--- /dev/null
+++ b/pages/inventoryMove/job/inventoryMoveJob.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/moveJob.vue b/pages/inventoryMove/job/moveJob.vue
new file mode 100644
index 00000000..e7b7ec56
--- /dev/null
+++ b/pages/inventoryMove/job/moveJob.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/okToHoldMoveJob.vue b/pages/inventoryMove/job/okToHoldMoveJob.vue
new file mode 100644
index 00000000..4c2bcca0
--- /dev/null
+++ b/pages/inventoryMove/job/okToHoldMoveJob.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/job/scrapToHoldMoveJob.vue b/pages/inventoryMove/job/scrapToHoldMoveJob.vue
new file mode 100644
index 00000000..985e5a58
--- /dev/null
+++ b/pages/inventoryMove/job/scrapToHoldMoveJob.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/holdToScrapRecord.vue b/pages/inventoryMove/record/holdToScrapRecord.vue
new file mode 100644
index 00000000..2e3fab46
--- /dev/null
+++ b/pages/inventoryMove/record/holdToScrapRecord.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/moveFreeRecord.vue b/pages/inventoryMove/record/moveFreeRecord.vue
new file mode 100644
index 00000000..258ba26f
--- /dev/null
+++ b/pages/inventoryMove/record/moveFreeRecord.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/moveHoldToOkRecord.vue b/pages/inventoryMove/record/moveHoldToOkRecord.vue
new file mode 100644
index 00000000..39cb5413
--- /dev/null
+++ b/pages/inventoryMove/record/moveHoldToOkRecord.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/moveOkToHoldRecord.vue b/pages/inventoryMove/record/moveOkToHoldRecord.vue
new file mode 100644
index 00000000..1aa58c97
--- /dev/null
+++ b/pages/inventoryMove/record/moveOkToHoldRecord.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/oktoScrapRecord.vue b/pages/inventoryMove/record/oktoScrapRecord.vue
new file mode 100644
index 00000000..3df2f7b8
--- /dev/null
+++ b/pages/inventoryMove/record/oktoScrapRecord.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/inventoryMove/record/scrapToHoldMoveRecord.vue b/pages/inventoryMove/record/scrapToHoldMoveRecord.vue
new file mode 100644
index 00000000..b1bcbe3a
--- /dev/null
+++ b/pages/inventoryMove/record/scrapToHoldMoveRecord.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/coms/comIssueDetailCard.vue b/pages/issue-按批次推荐/coms/comIssueDetailCard.vue
new file mode 100644
index 00000000..0059807a
--- /dev/null
+++ b/pages/issue-按批次推荐/coms/comIssueDetailCard.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/coms/comIssueJobCard.vue b/pages/issue-按批次推荐/coms/comIssueJobCard.vue
new file mode 100644
index 00000000..d9dc35b1
--- /dev/null
+++ b/pages/issue-按批次推荐/coms/comIssueJobCard.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+ 需求零件 : {{dataContent.itemCode}}
+
+
+ 需求库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/coms/comIssueRecommend.vue b/pages/issue-按批次推荐/coms/comIssueRecommend.vue
new file mode 100644
index 00000000..6b6bd970
--- /dev/null
+++ b/pages/issue-按批次推荐/coms/comIssueRecommend.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/coms/comScanIssueList.vue b/pages/issue-按批次推荐/coms/comScanIssueList.vue
new file mode 100644
index 00000000..1b815cab
--- /dev/null
+++ b/pages/issue-按批次推荐/coms/comScanIssueList.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/issue-按批次推荐/coms/comScanIssuePack.vue b/pages/issue-按批次推荐/coms/comScanIssuePack.vue
new file mode 100644
index 00000000..1080be58
--- /dev/null
+++ b/pages/issue-按批次推荐/coms/comScanIssuePack.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/job/issueDetail.vue b/pages/issue-按批次推荐/job/issueDetail.vue
new file mode 100644
index 00000000..5201bb10
--- /dev/null
+++ b/pages/issue-按批次推荐/job/issueDetail.vue
@@ -0,0 +1,696 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue-按批次推荐/job/issueJob.vue b/pages/issue-按批次推荐/job/issueJob.vue
new file mode 100644
index 00000000..1a0435c1
--- /dev/null
+++ b/pages/issue-按批次推荐/job/issueJob.vue
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comIssueDetailCard.vue b/pages/issue/coms/comIssueDetailCard.vue
new file mode 100644
index 00000000..cb2ac161
--- /dev/null
+++ b/pages/issue/coms/comIssueDetailCard.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comIssueJobCard.vue b/pages/issue/coms/comIssueJobCard.vue
new file mode 100644
index 00000000..24e20f4c
--- /dev/null
+++ b/pages/issue/coms/comIssueJobCard.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+ 需求库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comIssueRecommend.vue b/pages/issue/coms/comIssueRecommend.vue
new file mode 100644
index 00000000..6b6bd970
--- /dev/null
+++ b/pages/issue/coms/comIssueRecommend.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comIssueRequestCard.vue b/pages/issue/coms/comIssueRequestCard.vue
new file mode 100644
index 00000000..8f7f4b5a
--- /dev/null
+++ b/pages/issue/coms/comIssueRequestCard.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ 部门 : {{dataContent.departmentCode}}
+
+
+ 车间代码 : {{dataContent.WorkshopCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comIssueRequestPopup.vue b/pages/issue/coms/comIssueRequestPopup.vue
new file mode 100644
index 00000000..21377601
--- /dev/null
+++ b/pages/issue/coms/comIssueRequestPopup.vue
@@ -0,0 +1,379 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+ 位置 :
+
+
+
+ {{positionInfo}}
+
+
+
+
+
+
+
+
+
+ 零件 :
+
+
+
+
+
+
+
+ 数量 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/comScanIssueList.vue b/pages/issue/coms/comScanIssueList.vue
new file mode 100644
index 00000000..1b815cab
--- /dev/null
+++ b/pages/issue/coms/comScanIssueList.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/issue/coms/comScanIssuePack.vue b/pages/issue/coms/comScanIssuePack.vue
new file mode 100644
index 00000000..347a2486
--- /dev/null
+++ b/pages/issue/coms/comScanIssuePack.vue
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/detailInfoPopup.vue b/pages/issue/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..72340688
--- /dev/null
+++ b/pages/issue/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.PoNumber}}
+
+
+ 订单行 :
+ {{dataContent.PoLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/jobInfoPopup.vue b/pages/issue/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..89710769
--- /dev/null
+++ b/pages/issue/coms/jobInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 车间代码 :
+ {{dataContent.WorkshopCode}}
+
+
+ 使用在途库 :
+ {{dataContent.UseOnTheWayLocation}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/jobListPopup.vue b/pages/issue/coms/jobListPopup.vue
new file mode 100644
index 00000000..315991f6
--- /dev/null
+++ b/pages/issue/coms/jobListPopup.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/requestDetailInfoPopup.vue b/pages/issue/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..d20250bd
--- /dev/null
+++ b/pages/issue/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ 生产线代码 :
+ {{dataContent.productionLineCode}}
+
+
+ 工位代码 :
+ {{dataContent.workStationCode}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 到库位代码 :
+ {{dataContent.toLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/coms/requestInfoPopup.vue b/pages/issue/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..723cade1
--- /dev/null
+++ b/pages/issue/coms/requestInfoPopup.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/job/issueDetail.vue b/pages/issue/job/issueDetail.vue
new file mode 100644
index 00000000..55be5452
--- /dev/null
+++ b/pages/issue/job/issueDetail.vue
@@ -0,0 +1,350 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/job/issueJob.vue b/pages/issue/job/issueJob.vue
new file mode 100644
index 00000000..8e1d4660
--- /dev/null
+++ b/pages/issue/job/issueJob.vue
@@ -0,0 +1,316 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/job/issueReceiptJob.vue b/pages/issue/job/issueReceiptJob.vue
new file mode 100644
index 00000000..6c4887e5
--- /dev/null
+++ b/pages/issue/job/issueReceiptJob.vue
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/js/issue.js b/pages/issue/js/issue.js
new file mode 100644
index 00000000..4e783152
--- /dev/null
+++ b/pages/issue/js/issue.js
@@ -0,0 +1,101 @@
+export function getDataSource(list,details) {
+ for (var i = 0; i < details.length; i++) {
+ let detail = details[i];
+ var location = list.find(r =>
+ r.toLocationCode == detail.toLocationCode)
+ if (location == undefined) {
+ location = {
+ toLocationCode: detail.toLocationCode,
+ Items: []
+ }
+ list.push(location);
+ }
+ createDetailInfo(location, detail);
+ }
+ return list;
+}
+
+//树形结构:需求库位 -> 零件Items -> 库位 Locations-> 批次Batchs -> 记录Records
+export function createDetailInfo(location, detail) {
+ var item = location.Items.find(r =>
+ r.itemCode == detail.itemCode)
+ if (item == undefined) {
+ item = createItemInfo(detail);
+ location.Items.push(item)
+ } else {
+ item.qty += detail.qty
+ //在零件下查找库位
+ let location = item.Locations.find(r => r.FromLocationCode == detail.FromLocationCode);
+ if (location == undefined) {
+ location = createLocationInfo(detail);
+ item.Locations.push(location);
+ } else {
+ //在库位下查找批次
+ let batch = location.Batchs.find(r => r.batch == detail.Bacth);
+ if (batch == undefined) {
+ let batch = createBatchInfo(detail);
+ location.Batchs.push(batch);
+ } else {
+ batch.recommends.push(detail);
+ }
+ }
+ }
+}
+
+export function createItemInfo(detail) {
+ let item = {
+ itemCode: detail.itemCode,
+ itemName: detail.itemName,
+ stdPackQty: detail.stdPackQty,
+ stdPackUnit: detail.stdPackUnit,
+ qty: detail.qty,
+ uom: detail.uom,
+ handleQty: 0,
+ Locations: []
+ }
+ let location = createLocationInfo(detail);
+ item.Locations.push(location);
+ return item;
+}
+
+export function createLocationInfo(detail) {
+ let location = {
+ FromLocationCode: detail.FromLocationCode,
+ qty: detail.qty,
+ uom: detail.uom,
+ handleQty: 0,
+ Batchs: []
+ }
+ let batch = createBatchInfo(detail);
+ location.Batchs.push(batch);
+ return location;
+}
+
+export function createBatchInfo(detail) {
+ let batch = {
+ batch: detail.batch,
+ packingNumber: detail.packingNumber,
+ qty: detail.qty,
+ uom: detail.uom,
+ handleQty: 0,
+ // Recommends: [detail],
+ // Records: []
+ }
+
+ //推荐到了箱码和批次
+ if (detail.packingNumber != '') {
+ batch.Recommends = [detail];
+ }
+
+ return batch;
+}
+
+export function createRecordInfo(detail) {
+ var record = {}
+ detail.scaned = true;
+ // let record = JSON.parse(JSON.stringify(detail));
+ //克隆对象,深度克隆,防止双向绑定同一个变量
+ Object.assign(record, detail)
+ record.toLocationCode = this.toLocationCode;
+ return record;
+}
diff --git a/pages/issue/record/issueRecord.vue b/pages/issue/record/issueRecord.vue
new file mode 100644
index 00000000..2c4882b6
--- /dev/null
+++ b/pages/issue/record/issueRecord.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/request/issueRequest.vue b/pages/issue/request/issueRequest.vue
new file mode 100644
index 00000000..a1e05769
--- /dev/null
+++ b/pages/issue/request/issueRequest.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/issue/request/issueRequestDetail.vue b/pages/issue/request/issueRequestDetail.vue
new file mode 100644
index 00000000..54eed1ab
--- /dev/null
+++ b/pages/issue/request/issueRequestDetail.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/login.vue b/pages/login.vue
deleted file mode 100644
index 13cbfc60..00000000
--- a/pages/login.vue
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
- 闻荫移动端登录
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 登录即代表同意
- 《用户协议》
- 《隐私协议》
-
-
-
-
-
-
-
diff --git a/pages/login/index.vue b/pages/login/index.vue
new file mode 100644
index 00000000..dd305289
--- /dev/null
+++ b/pages/login/index.vue
@@ -0,0 +1,365 @@
+
+
+
+
+
+ 您好,欢迎使用
+ WMS仓库管理系统
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/message/index.vue b/pages/message/index.vue
new file mode 100644
index 00000000..3e29db03
--- /dev/null
+++ b/pages/message/index.vue
@@ -0,0 +1,9 @@
+
+ 消息
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mine/about/index.vue b/pages/mine/about/index.vue
index c3a2bcad..8c1e2fcb 100644
--- a/pages/mine/about/index.vue
+++ b/pages/mine/about/index.vue
@@ -3,7 +3,7 @@
@@ -17,7 +17,7 @@
@@ -38,20 +38,16 @@
- Copyright © 2022 iocoder.cn All Rights Reserved.
+ Copyright © 2022 ruoyi.vip All Rights Reserved.
-
diff --git a/pages/mine/info/edit.vue b/pages/mine/info/edit.vue
index 44d8ce4c..113dcddc 100644
--- a/pages/mine/info/edit.vue
+++ b/pages/mine/info/edit.vue
@@ -2,18 +2,17 @@
-
-
+
+
-
-
+
+
-
-
+
@@ -22,33 +21,32 @@
diff --git a/pages/package/coms/comPackageRecord.vue b/pages/package/coms/comPackageRecord.vue
new file mode 100644
index 00000000..1293cc70
--- /dev/null
+++ b/pages/package/coms/comPackageRecord.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{index+1}}.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/package/record/mergePackageRecord.vue b/pages/package/record/mergePackageRecord.vue
new file mode 100644
index 00000000..a8020c8b
--- /dev/null
+++ b/pages/package/record/mergePackageRecord.vue
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/package/record/mergePackageRecord.vue.b17252 b/pages/package/record/mergePackageRecord.vue.b17252
new file mode 100644
index 00000000..eacb2b1c
--- /dev/null
+++ b/pages/package/record/mergePackageRecord.vue.b17252
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/package/record/mergePackageRecord.vue.y17252 b/pages/package/record/mergePackageRecord.vue.y17252
new file mode 100644
index 00000000..8c00125c
--- /dev/null
+++ b/pages/package/record/mergePackageRecord.vue.y17252
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/package/record/overPackageRecord.vue b/pages/package/record/overPackageRecord.vue
new file mode 100644
index 00000000..ae1a9205
--- /dev/null
+++ b/pages/package/record/overPackageRecord.vue
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/package/record/splitPackageRecord.vue b/pages/package/record/splitPackageRecord.vue
new file mode 100644
index 00000000..64307cec
--- /dev/null
+++ b/pages/package/record/splitPackageRecord.vue
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/pallet/coms/comPalletRecord.vue b/pages/pallet/coms/comPalletRecord.vue
new file mode 100644
index 00000000..0fa7b43e
--- /dev/null
+++ b/pages/pallet/coms/comPalletRecord.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/pallet/record/bindPalletRecord.vue b/pages/pallet/record/bindPalletRecord.vue
new file mode 100644
index 00000000..b4e57bd3
--- /dev/null
+++ b/pages/pallet/record/bindPalletRecord.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/pallet/record/unBindPalletRecord.vue b/pages/pallet/record/unBindPalletRecord.vue
new file mode 100644
index 00000000..b38c1a37
--- /dev/null
+++ b/pages/pallet/record/unBindPalletRecord.vue
@@ -0,0 +1,367 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/comProductDetailCard.vue b/pages/productDismantle/coms/comProductDetailCard.vue
new file mode 100644
index 00000000..4d54e1be
--- /dev/null
+++ b/pages/productDismantle/coms/comProductDetailCard.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/comProductJobCard.vue b/pages/productDismantle/coms/comProductJobCard.vue
new file mode 100644
index 00000000..5998243a
--- /dev/null
+++ b/pages/productDismantle/coms/comProductJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 零件号 : {{dataContent.itemCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/comProductRecord.vue b/pages/productDismantle/coms/comProductRecord.vue
new file mode 100644
index 00000000..ca34c29b
--- /dev/null
+++ b/pages/productDismantle/coms/comProductRecord.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/comScanProductList.vue b/pages/productDismantle/coms/comScanProductList.vue
new file mode 100644
index 00000000..1b815cab
--- /dev/null
+++ b/pages/productDismantle/coms/comScanProductList.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/productDismantle/coms/detailInfoPopup.vue b/pages/productDismantle/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..2fc76f5b
--- /dev/null
+++ b/pages/productDismantle/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/jobInfoPopup.vue b/pages/productDismantle/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..2a0ab3f2
--- /dev/null
+++ b/pages/productDismantle/coms/jobInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 车间代码 :
+ {{dataContent.workshopCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/jobListPopup.vue b/pages/productDismantle/coms/jobListPopup.vue
new file mode 100644
index 00000000..7d0c8b93
--- /dev/null
+++ b/pages/productDismantle/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/requestDetailInfoPopup.vue b/pages/productDismantle/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..8bc5c446
--- /dev/null
+++ b/pages/productDismantle/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode }}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/coms/requestInfoPopup.vue b/pages/productDismantle/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..939f09a0
--- /dev/null
+++ b/pages/productDismantle/coms/requestInfoPopup.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+ 供应商代码 :
+ {{dataContent.supplierCode}}
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+ 从库位类型范围 :
+ {{dataContent.fromLocationTypes}}
+
+
+ 到库位类型范围 :
+ {{dataContent.toLocationTypes}}
+
+
+
+ 从库区代码范围 :
+ {{dataContent.fromAreaCodes}}
+
+
+ 到库区代码范围 :
+ {{dataContent.toAreaCodes}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/job/productDismantleDetail.vue b/pages/productDismantle/job/productDismantleDetail.vue
new file mode 100644
index 00000000..3e2137e0
--- /dev/null
+++ b/pages/productDismantle/job/productDismantleDetail.vue
@@ -0,0 +1,543 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/job/productDismantleJob.vue b/pages/productDismantle/job/productDismantleJob.vue
new file mode 100644
index 00000000..a9289ea9
--- /dev/null
+++ b/pages/productDismantle/job/productDismantleJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productDismantle/record/productDismantleRecord.vue b/pages/productDismantle/record/productDismantleRecord.vue
new file mode 100644
index 00000000..cf5840bb
--- /dev/null
+++ b/pages/productDismantle/record/productDismantleRecord.vue
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/comProductDetailCard.vue b/pages/productPutaway/coms/comProductDetailCard.vue
new file mode 100644
index 00000000..4d54e1be
--- /dev/null
+++ b/pages/productPutaway/coms/comProductDetailCard.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/comProductJobCard.vue b/pages/productPutaway/coms/comProductJobCard.vue
new file mode 100644
index 00000000..5998243a
--- /dev/null
+++ b/pages/productPutaway/coms/comProductJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 零件号 : {{dataContent.itemCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/comProductRecord.vue b/pages/productPutaway/coms/comProductRecord.vue
new file mode 100644
index 00000000..ca34c29b
--- /dev/null
+++ b/pages/productPutaway/coms/comProductRecord.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/comPutawayRequestCard.vue b/pages/productPutaway/coms/comPutawayRequestCard.vue
new file mode 100644
index 00000000..e1428660
--- /dev/null
+++ b/pages/productPutaway/coms/comPutawayRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/comScanProductList.vue b/pages/productPutaway/coms/comScanProductList.vue
new file mode 100644
index 00000000..1b815cab
--- /dev/null
+++ b/pages/productPutaway/coms/comScanProductList.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/productPutaway/coms/detailInfoPopup.vue b/pages/productPutaway/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..2fc76f5b
--- /dev/null
+++ b/pages/productPutaway/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/jobInfoPopup.vue b/pages/productPutaway/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..2a0ab3f2
--- /dev/null
+++ b/pages/productPutaway/coms/jobInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 车间代码 :
+ {{dataContent.workshopCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/jobListPopup.vue b/pages/productPutaway/coms/jobListPopup.vue
new file mode 100644
index 00000000..7d0c8b93
--- /dev/null
+++ b/pages/productPutaway/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/requestDetailInfoPopup.vue b/pages/productPutaway/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..8bc5c446
--- /dev/null
+++ b/pages/productPutaway/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode }}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/coms/requestInfoPopup.vue b/pages/productPutaway/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..069c31d3
--- /dev/null
+++ b/pages/productPutaway/coms/requestInfoPopup.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/job/productPutawayDetail.vue b/pages/productPutaway/job/productPutawayDetail.vue
new file mode 100644
index 00000000..acd47844
--- /dev/null
+++ b/pages/productPutaway/job/productPutawayDetail.vue
@@ -0,0 +1,541 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/job/productPutawayJob.vue b/pages/productPutaway/job/productPutawayJob.vue
new file mode 100644
index 00000000..33eb60cd
--- /dev/null
+++ b/pages/productPutaway/job/productPutawayJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/record/productPutawayRecord.vue b/pages/productPutaway/record/productPutawayRecord.vue
new file mode 100644
index 00000000..3ff28097
--- /dev/null
+++ b/pages/productPutaway/record/productPutawayRecord.vue
@@ -0,0 +1,419 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/request/putawayRequest.vue b/pages/productPutaway/request/putawayRequest.vue
new file mode 100644
index 00000000..426bbfda
--- /dev/null
+++ b/pages/productPutaway/request/putawayRequest.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productPutaway/request/putawayRequestDetail.vue b/pages/productPutaway/request/putawayRequestDetail.vue
new file mode 100644
index 00000000..129e86f2
--- /dev/null
+++ b/pages/productPutaway/request/putawayRequestDetail.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/comProductDetailCard.vue b/pages/productReceipt/coms/comProductDetailCard.vue
new file mode 100644
index 00000000..a4f19bad
--- /dev/null
+++ b/pages/productReceipt/coms/comProductDetailCard.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/comProductJobCard.vue b/pages/productReceipt/coms/comProductJobCard.vue
new file mode 100644
index 00000000..a698ad39
--- /dev/null
+++ b/pages/productReceipt/coms/comProductJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/comProductRecord.vue b/pages/productReceipt/coms/comProductRecord.vue
new file mode 100644
index 00000000..6047330e
--- /dev/null
+++ b/pages/productReceipt/coms/comProductRecord.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/detailInfoPopup.vue b/pages/productReceipt/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..5c5f52a0
--- /dev/null
+++ b/pages/productReceipt/coms/detailInfoPopup.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+ 生产线代码 :
+ {{dataContent.productionLineCode}}
+
+
+ 工位代码 :
+ {{dataContent.workStationCode}}
+
+
+ 工序代码 :
+ {{dataContent.processCode}}
+
+
+
+ 标包数量 :
+ {{dataContent.stdPackQty}}
+
+
+ 标包单位 :
+ {{dataContent.stdPackUnit}}
+
+
+
+ 生产日期 :
+ {{dataContent.produceDate}}
+
+
+ 过期日期 :
+ {{dataContent.expireDate}}
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/jobInfoPopup.vue b/pages/productReceipt/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..89c88846
--- /dev/null
+++ b/pages/productReceipt/coms/jobInfoPopup.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+ 生产计划单号 :
+ {{dataContent.productionPlanNumber}}
+
+
+ 车间代码 :
+ {{dataContent.workshopCode}}
+
+
+ 班组 :
+ {{dataContent.team}}
+
+
+ 班次 :
+ {{dataContent.shift}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/coms/jobListPopup.vue b/pages/productReceipt/coms/jobListPopup.vue
new file mode 100644
index 00000000..cbcf1996
--- /dev/null
+++ b/pages/productReceipt/coms/jobListPopup.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/job/productReceiptDetail.vue b/pages/productReceipt/job/productReceiptDetail.vue
new file mode 100644
index 00000000..719e4e81
--- /dev/null
+++ b/pages/productReceipt/job/productReceiptDetail.vue
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/job/productReceiptJob.vue b/pages/productReceipt/job/productReceiptJob.vue
new file mode 100644
index 00000000..245dedb1
--- /dev/null
+++ b/pages/productReceipt/job/productReceiptJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productReceipt/record/productReceiptRecord.vue b/pages/productReceipt/record/productReceiptRecord.vue
new file mode 100644
index 00000000..8b1c5ef1
--- /dev/null
+++ b/pages/productReceipt/record/productReceiptRecord.vue
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/comProductionDetailCard.vue b/pages/productionReceipt/coms/comProductionDetailCard.vue
new file mode 100644
index 00000000..4d54e1be
--- /dev/null
+++ b/pages/productionReceipt/coms/comProductionDetailCard.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/comProductionJobCard.vue b/pages/productionReceipt/coms/comProductionJobCard.vue
new file mode 100644
index 00000000..b60b1ed2
--- /dev/null
+++ b/pages/productionReceipt/coms/comProductionJobCard.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+ 零件号 : {{dataContent.itemCode}}
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/comProductionRecord.vue b/pages/productionReceipt/coms/comProductionRecord.vue
new file mode 100644
index 00000000..baeb441c
--- /dev/null
+++ b/pages/productionReceipt/coms/comProductionRecord.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/detailInfoPopup.vue b/pages/productionReceipt/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..7dc7d5f2
--- /dev/null
+++ b/pages/productionReceipt/coms/detailInfoPopup.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+ 生产线代码 :
+ {{dataContent.productionLineCode}}
+
+
+ 工位代码 :
+ {{dataContent.workStationCode}}
+
+
+ 在途库库位 :
+ {{dataContent.onTheWayLocationCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/jobInfoPopup.vue b/pages/productionReceipt/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..764e671f
--- /dev/null
+++ b/pages/productionReceipt/coms/jobInfoPopup.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+ 发料任务单号 :
+ {{dataContent.issueJobNumber}}
+
+
+ 车间代码 :
+ {{dataContent.workshopCode}}
+
+
+ 使用在途库 :
+ {{dataContent.使用在途库}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/coms/jobListPopup.vue b/pages/productionReceipt/coms/jobListPopup.vue
new file mode 100644
index 00000000..79eff277
--- /dev/null
+++ b/pages/productionReceipt/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/job/productionReceiptDetail.vue b/pages/productionReceipt/job/productionReceiptDetail.vue
new file mode 100644
index 00000000..98e070fa
--- /dev/null
+++ b/pages/productionReceipt/job/productionReceiptDetail.vue
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/job/productionReceiptJob.vue b/pages/productionReceipt/job/productionReceiptJob.vue
new file mode 100644
index 00000000..a7d25752
--- /dev/null
+++ b/pages/productionReceipt/job/productionReceiptJob.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReceipt/record/productionReceiptRecord.vue b/pages/productionReceipt/record/productionReceiptRecord.vue
new file mode 100644
index 00000000..7224854e
--- /dev/null
+++ b/pages/productionReceipt/record/productionReceiptRecord.vue
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/comReturn.vue b/pages/productionReturn/coms/comReturn.vue
new file mode 100644
index 00000000..d5189655
--- /dev/null
+++ b/pages/productionReturn/coms/comReturn.vue
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/comReturnJobCard.vue b/pages/productionReturn/coms/comReturnJobCard.vue
new file mode 100644
index 00000000..0c128100
--- /dev/null
+++ b/pages/productionReturn/coms/comReturnJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+ 目标库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/comReturnRequestCard.vue b/pages/productionReturn/coms/comReturnRequestCard.vue
new file mode 100644
index 00000000..cda53594
--- /dev/null
+++ b/pages/productionReturn/coms/comReturnRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 车间代码 : {{dataContent.workshopCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/detailInfoPopup.vue b/pages/productionReturn/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..bb89e506
--- /dev/null
+++ b/pages/productionReturn/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 生产线代码 :
+ {{dataContent.productionLineCode}}
+
+
+ 工位代码 :
+ {{dataContent.workStationCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/jobInfoPopup.vue b/pages/productionReturn/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..2a0ab3f2
--- /dev/null
+++ b/pages/productionReturn/coms/jobInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 车间代码 :
+ {{dataContent.workshopCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/jobListPopup.vue b/pages/productionReturn/coms/jobListPopup.vue
new file mode 100644
index 00000000..4c73872a
--- /dev/null
+++ b/pages/productionReturn/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/requestDetailInfoPopup.vue b/pages/productionReturn/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..22e6abbe
--- /dev/null
+++ b/pages/productionReturn/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+ 生产线代码 :
+ {{dataContent.productionLineCode}}
+
+
+ 工位代码 :
+ {{dataContent.workStationCode}}
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/coms/requestInfoPopup.vue b/pages/productionReturn/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..4b3904f9
--- /dev/null
+++ b/pages/productionReturn/coms/requestInfoPopup.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/job/returnDetail.vue b/pages/productionReturn/job/returnDetail.vue
new file mode 100644
index 00000000..aff93d54
--- /dev/null
+++ b/pages/productionReturn/job/returnDetail.vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/job/returnJob.vue b/pages/productionReturn/job/returnJob.vue
new file mode 100644
index 00000000..74ea232f
--- /dev/null
+++ b/pages/productionReturn/job/returnJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/record/returnToHold.vue b/pages/productionReturn/record/returnToHold.vue
new file mode 100644
index 00000000..e62a47a6
--- /dev/null
+++ b/pages/productionReturn/record/returnToHold.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/record/returnToStore.vue b/pages/productionReturn/record/returnToStore.vue
new file mode 100644
index 00000000..61b37ab9
--- /dev/null
+++ b/pages/productionReturn/record/returnToStore.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/request/requestDetail.vue b/pages/productionReturn/request/requestDetail.vue
new file mode 100644
index 00000000..b0084486
--- /dev/null
+++ b/pages/productionReturn/request/requestDetail.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/request/returnToHoldRequest.vue b/pages/productionReturn/request/returnToHoldRequest.vue
new file mode 100644
index 00000000..6ddda2f9
--- /dev/null
+++ b/pages/productionReturn/request/returnToHoldRequest.vue
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/productionReturn/request/returnToStoreRequest.vue b/pages/productionReturn/request/returnToStoreRequest.vue
new file mode 100644
index 00000000..3a58846f
--- /dev/null
+++ b/pages/productionReturn/request/returnToStoreRequest.vue
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/coms/comReceiptDetailCard.vue b/pages/purchaseReceipt/coms/comReceiptDetailCard.vue
new file mode 100644
index 00000000..f542d468
--- /dev/null
+++ b/pages/purchaseReceipt/coms/comReceiptDetailCard.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/coms/comReceiptJobCard.vue b/pages/purchaseReceipt/coms/comReceiptJobCard.vue
new file mode 100644
index 00000000..65affce4
--- /dev/null
+++ b/pages/purchaseReceipt/coms/comReceiptJobCard.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+ 发货单号 : {{dataContent.asnNumber}}
+
+
+
+
+ 要货计划单号 : {{dataContent.ppNumber}}
+
+
+
+
+ 供应商名称 : {{dataContent.supplierName}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/coms/receiptDetailInfoPopup.vue b/pages/purchaseReceipt/coms/receiptDetailInfoPopup.vue
new file mode 100644
index 00000000..52bb66c5
--- /dev/null
+++ b/pages/purchaseReceipt/coms/receiptDetailInfoPopup.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+ 标包数量 :
+ {{dataContent.stdPackQty}}
+
+
+ 标包单位 :
+ {{getStdPackUnitInfo(dataContent.stdPackUnit)}}
+
+
+ 供应商计量数量 :
+ {{dataContent.supplierQty}}
+
+
+ 供应商计量单位 :
+ {{getStdPackUnitInfo(dataContent.supplierUom)}}
+
+
+ 转换率 :
+ {{dataContent.convertRate}}
+
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 项目代码 :
+ {{dataContent.projectCode}}
+
+
+ 到货日期 :
+ {{dateFormat(dataContent.arriveDate)}}
+
+
+ 生产日期 :
+ {{dateFormat(dataContent.produceDate)}}
+
+
+ 过期日期 :
+ {{dateFormat(dataContent.expireDate)}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/coms/receiptInfoPopup.vue b/pages/purchaseReceipt/coms/receiptInfoPopup.vue
new file mode 100644
index 00000000..71a8f427
--- /dev/null
+++ b/pages/purchaseReceipt/coms/receiptInfoPopup.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ 发货单号 :
+ {{dataContent.asnNumber}}
+
+
+ 要货计划单号 :
+ {{dataContent.ppNumber}}
+
+
+ 供应商代码 :
+ {{dataContent.carrierCode}}
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/coms/receiptJobListPopup.vue b/pages/purchaseReceipt/coms/receiptJobListPopup.vue
new file mode 100644
index 00000000..c1e6bcf2
--- /dev/null
+++ b/pages/purchaseReceipt/coms/receiptJobListPopup.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/job/receiptDetail.vue b/pages/purchaseReceipt/job/receiptDetail.vue
new file mode 100644
index 00000000..1f9a1481
--- /dev/null
+++ b/pages/purchaseReceipt/job/receiptDetail.vue
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReceipt/job/receiptJob.vue b/pages/purchaseReceipt/job/receiptJob.vue
new file mode 100644
index 00000000..b4b6daab
--- /dev/null
+++ b/pages/purchaseReceipt/job/receiptJob.vue
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/comReturnJobCard.vue b/pages/purchaseReturn/coms/comReturnJobCard.vue
new file mode 100644
index 00000000..6e018818
--- /dev/null
+++ b/pages/purchaseReturn/coms/comReturnJobCard.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ 发货单号 : {{dataContent.asnNumber}}
+
+
+
+
+
+
+ 供应商 : {{dataContent.supplierName}}
+
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/comReturnRequestCard.vue b/pages/purchaseReturn/coms/comReturnRequestCard.vue
new file mode 100644
index 00000000..fcdd96f0
--- /dev/null
+++ b/pages/purchaseReturn/coms/comReturnRequestCard.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ 收货单号 : {{dataContent.PurchaseReceiptRecordNumber}}
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/requestDetailInfoPopup.vue b/pages/purchaseReturn/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..93d1b5a2
--- /dev/null
+++ b/pages/purchaseReturn/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 替代批次 :
+ {{dataContent.altBatch}}
+
+
+ 到库位代码 :
+ {{dataContent.toLocationCode}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 原因 :
+ {{dataContent.reason}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/requestInfoPopup.vue b/pages/purchaseReturn/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..a9128631
--- /dev/null
+++ b/pages/purchaseReturn/coms/requestInfoPopup.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/returnDetailInfoPopup.vue b/pages/purchaseReturn/coms/returnDetailInfoPopup.vue
new file mode 100644
index 00000000..7128d112
--- /dev/null
+++ b/pages/purchaseReturn/coms/returnDetailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/returnInfoPopup.vue b/pages/purchaseReturn/coms/returnInfoPopup.vue
new file mode 100644
index 00000000..71a8f427
--- /dev/null
+++ b/pages/purchaseReturn/coms/returnInfoPopup.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ 发货单号 :
+ {{dataContent.asnNumber}}
+
+
+ 要货计划单号 :
+ {{dataContent.ppNumber}}
+
+
+ 供应商代码 :
+ {{dataContent.carrierCode}}
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/coms/returnJobListPopup.vue b/pages/purchaseReturn/coms/returnJobListPopup.vue
new file mode 100644
index 00000000..9a17ec18
--- /dev/null
+++ b/pages/purchaseReturn/coms/returnJobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/job/returnDetail.vue b/pages/purchaseReturn/job/returnDetail.vue
new file mode 100644
index 00000000..c34e5798
--- /dev/null
+++ b/pages/purchaseReturn/job/returnDetail.vue
@@ -0,0 +1,476 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/job/returnJob.vue b/pages/purchaseReturn/job/returnJob.vue
new file mode 100644
index 00000000..84289555
--- /dev/null
+++ b/pages/purchaseReturn/job/returnJob.vue
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/record/returnRecord.vue b/pages/purchaseReturn/record/returnRecord.vue
new file mode 100644
index 00000000..91d098fe
--- /dev/null
+++ b/pages/purchaseReturn/record/returnRecord.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/request/returnRequest.vue b/pages/purchaseReturn/request/returnRequest.vue
new file mode 100644
index 00000000..9e54b065
--- /dev/null
+++ b/pages/purchaseReturn/request/returnRequest.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/purchaseReturn/request/returnRequestDetail.vue b/pages/purchaseReturn/request/returnRequestDetail.vue
new file mode 100644
index 00000000..5cfdc65b
--- /dev/null
+++ b/pages/purchaseReturn/request/returnRequestDetail.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/comPutawayJobCard.vue b/pages/putaway/coms/comPutawayJobCard.vue
new file mode 100644
index 00000000..6da43026
--- /dev/null
+++ b/pages/putaway/coms/comPutawayJobCard.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+
+
+ 客户名称 : {{dataContent.customerName}}
+
+
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/comPutawayRequestCard.vue b/pages/putaway/coms/comPutawayRequestCard.vue
new file mode 100644
index 00000000..e1428660
--- /dev/null
+++ b/pages/putaway/coms/comPutawayRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/putawayDetailInfoPopup.vue b/pages/putaway/coms/putawayDetailInfoPopup.vue
new file mode 100644
index 00000000..7128d112
--- /dev/null
+++ b/pages/putaway/coms/putawayDetailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/putawayInfoPopup.vue b/pages/putaway/coms/putawayInfoPopup.vue
new file mode 100644
index 00000000..fd6f9882
--- /dev/null
+++ b/pages/putaway/coms/putawayInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 供应商代码 :
+ {{dataContent.carrierCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/putawayJobListPopup.vue b/pages/putaway/coms/putawayJobListPopup.vue
new file mode 100644
index 00000000..9a17ec18
--- /dev/null
+++ b/pages/putaway/coms/putawayJobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/requestDetailInfoPopup.vue b/pages/putaway/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..d68114d3
--- /dev/null
+++ b/pages/putaway/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/coms/requestInfoPopup.vue b/pages/putaway/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..0cf786b8
--- /dev/null
+++ b/pages/putaway/coms/requestInfoPopup.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/job/putawayDetail.vue b/pages/putaway/job/putawayDetail.vue
new file mode 100644
index 00000000..4e49355c
--- /dev/null
+++ b/pages/putaway/job/putawayDetail.vue
@@ -0,0 +1,516 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/job/putawayJob.vue b/pages/putaway/job/putawayJob.vue
new file mode 100644
index 00000000..d9db6080
--- /dev/null
+++ b/pages/putaway/job/putawayJob.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/record/putawayRecord.vue b/pages/putaway/record/putawayRecord.vue
new file mode 100644
index 00000000..8558b7b5
--- /dev/null
+++ b/pages/putaway/record/putawayRecord.vue
@@ -0,0 +1,438 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/request/putawayRequest.vue b/pages/putaway/request/putawayRequest.vue
new file mode 100644
index 00000000..cd0b0a6e
--- /dev/null
+++ b/pages/putaway/request/putawayRequest.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/putaway/request/putawayRequestDetail.vue b/pages/putaway/request/putawayRequestDetail.vue
new file mode 100644
index 00000000..bc3c63d6
--- /dev/null
+++ b/pages/putaway/request/putawayRequestDetail.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/coms/comItemBalance.vue b/pages/query/coms/comItemBalance.vue
new file mode 100644
index 00000000..084b3a34
--- /dev/null
+++ b/pages/query/coms/comItemBalance.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/coms/comItemDetailCard.vue b/pages/query/coms/comItemDetailCard.vue
new file mode 100644
index 00000000..024d0c57
--- /dev/null
+++ b/pages/query/coms/comItemDetailCard.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/coms/comLocationDetailCard.vue b/pages/query/coms/comLocationDetailCard.vue
new file mode 100644
index 00000000..819a5740
--- /dev/null
+++ b/pages/query/coms/comLocationDetailCard.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/container.vue b/pages/query/container.vue
new file mode 100644
index 00000000..752cb7a7
--- /dev/null
+++ b/pages/query/container.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 、
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/item.vue b/pages/query/item.vue
new file mode 100644
index 00000000..901411c9
--- /dev/null
+++ b/pages/query/item.vue
@@ -0,0 +1,302 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/item_copy.vue b/pages/query/item_copy.vue
new file mode 100644
index 00000000..64c3925c
--- /dev/null
+++ b/pages/query/item_copy.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/location.vue b/pages/query/location.vue
new file mode 100644
index 00000000..e04f22da
--- /dev/null
+++ b/pages/query/location.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/location_copy.vue b/pages/query/location_copy.vue
new file mode 100644
index 00000000..7fc3e820
--- /dev/null
+++ b/pages/query/location_copy.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/query/number.vue b/pages/query/number.vue
new file mode 100644
index 00000000..b995fd0b
--- /dev/null
+++ b/pages/query/number.vue
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/repleinsh/coms/comRepleinshJobCard.vue b/pages/repleinsh/coms/comRepleinshJobCard.vue
new file mode 100644
index 00000000..42adb984
--- /dev/null
+++ b/pages/repleinsh/coms/comRepleinshJobCard.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/comRepleinshRequestCard.vue b/pages/repleinsh/coms/comRepleinshRequestCard.vue
new file mode 100644
index 00000000..e1428660
--- /dev/null
+++ b/pages/repleinsh/coms/comRepleinshRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/repleinshDetailInfoPopup.vue b/pages/repleinsh/coms/repleinshDetailInfoPopup.vue
new file mode 100644
index 00000000..7128d112
--- /dev/null
+++ b/pages/repleinsh/coms/repleinshDetailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/repleinshInfoPopup.vue b/pages/repleinsh/coms/repleinshInfoPopup.vue
new file mode 100644
index 00000000..d446a8b1
--- /dev/null
+++ b/pages/repleinsh/coms/repleinshInfoPopup.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ 从库位类型范围 :
+ {{dataContent.fromLocationTypes}}
+
+
+ 到库位类型范围 :
+ {{dataContent.toLocationTypes}}
+
+
+ 从库区代码范围 :
+ {{dataContent.fromAreaCodes}}
+
+
+ 到库区代码范围 :
+ {{dataContent.toAreaCodes}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/repleinshJobListPopup.vue b/pages/repleinsh/coms/repleinshJobListPopup.vue
new file mode 100644
index 00000000..9a17ec18
--- /dev/null
+++ b/pages/repleinsh/coms/repleinshJobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/requestDetailInfoPopup.vue b/pages/repleinsh/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..d68114d3
--- /dev/null
+++ b/pages/repleinsh/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/coms/requestInfoPopup.vue b/pages/repleinsh/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..4e7f864b
--- /dev/null
+++ b/pages/repleinsh/coms/requestInfoPopup.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+ 从仓库代码 :
+ {{dataContent.fromWarehouseCode}}
+
+
+ 到仓库代码 :
+ {{dataContent.toWarehouseCode}}
+
+
+ 从库位类型范围 :
+ {{dataContent.fromLocationTypes}}
+
+
+ 到库位类型范围 :
+ {{dataContent.toLocationTypes}}
+
+
+
+ 从库区代码范围 :
+ {{dataContent.fromAreaCodes}}
+
+
+ 到库区代码范围 :
+ {{dataContent.toAreaCodes}}
+
+
+
+ 供应商代码 :
+ {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/job/repleinshDetail.vue b/pages/repleinsh/job/repleinshDetail.vue
new file mode 100644
index 00000000..3290e54e
--- /dev/null
+++ b/pages/repleinsh/job/repleinshDetail.vue
@@ -0,0 +1,508 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/job/repleinshJob.vue b/pages/repleinsh/job/repleinshJob.vue
new file mode 100644
index 00000000..b3308181
--- /dev/null
+++ b/pages/repleinsh/job/repleinshJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/record/repleinshRecord.vue b/pages/repleinsh/record/repleinshRecord.vue
new file mode 100644
index 00000000..3414aaf3
--- /dev/null
+++ b/pages/repleinsh/record/repleinshRecord.vue
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/request/repleinshRequest.vue b/pages/repleinsh/request/repleinshRequest.vue
new file mode 100644
index 00000000..e73b1e77
--- /dev/null
+++ b/pages/repleinsh/request/repleinshRequest.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/repleinsh/request/repleinshRequestDetail.vue b/pages/repleinsh/request/repleinshRequestDetail.vue
new file mode 100644
index 00000000..5538f251
--- /dev/null
+++ b/pages/repleinsh/request/repleinshRequestDetail.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/comScrapDetailCard.vue b/pages/scrap/coms/comScrapDetailCard.vue
new file mode 100644
index 00000000..19006852
--- /dev/null
+++ b/pages/scrap/coms/comScrapDetailCard.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/comScrapJobCard.vue b/pages/scrap/coms/comScrapJobCard.vue
new file mode 100644
index 00000000..65affce4
--- /dev/null
+++ b/pages/scrap/coms/comScrapJobCard.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+ 发货单号 : {{dataContent.asnNumber}}
+
+
+
+
+ 要货计划单号 : {{dataContent.ppNumber}}
+
+
+
+
+ 供应商名称 : {{dataContent.supplierName}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/comScrapRequestCard.vue b/pages/scrap/coms/comScrapRequestCard.vue
new file mode 100644
index 00000000..23d744ad
--- /dev/null
+++ b/pages/scrap/coms/comScrapRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 从仓库代码 : {{dataContent.fromWarehouseCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/requestDetailInfoPopup.vue b/pages/scrap/coms/requestDetailInfoPopup.vue
new file mode 100644
index 00000000..8b4679fc
--- /dev/null
+++ b/pages/scrap/coms/requestDetailInfoPopup.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 原因 :
+ {{dataContent.reason}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/requestInfoPopup.vue b/pages/scrap/coms/requestInfoPopup.vue
new file mode 100644
index 00000000..04bdcb96
--- /dev/null
+++ b/pages/scrap/coms/requestInfoPopup.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/scrapDetailInfoPopup.vue b/pages/scrap/coms/scrapDetailInfoPopup.vue
new file mode 100644
index 00000000..26c801eb
--- /dev/null
+++ b/pages/scrap/coms/scrapDetailInfoPopup.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+ 标包数量 :
+ {{dataContent.stdPackQty}}
+
+
+ 标包单位 :
+ {{dataContent.stdPackUnit}}
+
+
+ 供应商计量数量 :
+ {{dataContent.supplierQty}}
+
+
+ 供应商计量单位 :
+ {{dataContent.supplierUom}}
+
+
+ 转换率 :
+ {{dataContent.convertRate}}
+
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 项目代码 :
+ {{dataContent.projectCode}}
+
+
+ 到货日期 :
+ {{dataContent.arriveDate}}
+
+
+ 生产日期 :
+ {{dataContent.produceDate}}
+
+
+ 过期日期 :
+ {{dataContent.expireDate}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/scrapInfoPopup.vue b/pages/scrap/coms/scrapInfoPopup.vue
new file mode 100644
index 00000000..71a8f427
--- /dev/null
+++ b/pages/scrap/coms/scrapInfoPopup.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ 发货单号 :
+ {{dataContent.asnNumber}}
+
+
+ 要货计划单号 :
+ {{dataContent.ppNumber}}
+
+
+ 供应商代码 :
+ {{dataContent.carrierCode}}
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/coms/scrapJobListPopup.vue b/pages/scrap/coms/scrapJobListPopup.vue
new file mode 100644
index 00000000..66af3f14
--- /dev/null
+++ b/pages/scrap/coms/scrapJobListPopup.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/job/scrapJob.vue b/pages/scrap/job/scrapJob.vue
new file mode 100644
index 00000000..9e86406e
--- /dev/null
+++ b/pages/scrap/job/scrapJob.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/job/scrapJobDetail.vue b/pages/scrap/job/scrapJobDetail.vue
new file mode 100644
index 00000000..c226dd82
--- /dev/null
+++ b/pages/scrap/job/scrapJobDetail.vue
@@ -0,0 +1,448 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/record/scrapRecord.vue b/pages/scrap/record/scrapRecord.vue
new file mode 100644
index 00000000..8e1b6489
--- /dev/null
+++ b/pages/scrap/record/scrapRecord.vue
@@ -0,0 +1,428 @@
+
+
+
+
+
+
+
+
+
+ 报废原因 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/request/scrapRequestDetail.vue b/pages/scrap/request/scrapRequestDetail.vue
new file mode 100644
index 00000000..ec7f8845
--- /dev/null
+++ b/pages/scrap/request/scrapRequestDetail.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/scrap/request/scrapRrequest.vue b/pages/scrap/request/scrapRrequest.vue
new file mode 100644
index 00000000..e85995fa
--- /dev/null
+++ b/pages/scrap/request/scrapRrequest.vue
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/setter/index.vue b/pages/setter/index.vue
new file mode 100644
index 00000000..4579145e
--- /dev/null
+++ b/pages/setter/index.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/setter/passwordpage.vue b/pages/setter/passwordpage.vue
new file mode 100644
index 00000000..72434c61
--- /dev/null
+++ b/pages/setter/passwordpage.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/setter/setterDetail.vue b/pages/setter/setterDetail.vue
new file mode 100644
index 00000000..708e6d06
--- /dev/null
+++ b/pages/setter/setterDetail.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/comRecordCard.vue b/pages/supplierDeliver/coms/comRecordCard.vue
new file mode 100644
index 00000000..1c6e0c4a
--- /dev/null
+++ b/pages/supplierDeliver/coms/comRecordCard.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+ 发货单号 : {{dataContent.asnNumber}}
+
+
+
+
+ 供应商代码 : {{dataContent.supplierCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/comRecordDetailCard.vue b/pages/supplierDeliver/coms/comRecordDetailCard.vue
new file mode 100644
index 00000000..9c39c698
--- /dev/null
+++ b/pages/supplierDeliver/coms/comRecordDetailCard.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/recordDetailInfoPopup.vue b/pages/supplierDeliver/coms/recordDetailInfoPopup.vue
new file mode 100644
index 00000000..1689d6c4
--- /dev/null
+++ b/pages/supplierDeliver/coms/recordDetailInfoPopup.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/recordInfoPopup.vue b/pages/supplierDeliver/coms/recordInfoPopup.vue
new file mode 100644
index 00000000..7603a1b8
--- /dev/null
+++ b/pages/supplierDeliver/coms/recordInfoPopup.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/recordListDetailPop.vue b/pages/supplierDeliver/coms/recordListDetailPop.vue
new file mode 100644
index 00000000..3a8a98f1
--- /dev/null
+++ b/pages/supplierDeliver/coms/recordListDetailPop.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+ 出库事务类型 :
+ {{dataContent.outTransaction}}
+
+
+ 入库事务类型 :
+ {{dataContent.inTransaction}}
+
+
+ 执行时间 :
+ {{formatDate(dataContent.executeTime)}}
+
+
+ 生效日期 :
+ {{formatDate(dataContent.activeDate)}}
+
+
+ 申请时间 :
+ {{formatDate(dataContent.requestTime)}}
+
+
+ 截止时间 :
+ {{formatDate(dataContent.dueTime)}}
+
+
+ 部门 :
+ {{dataContent.departmentCode}}
+
+
+ 岗位 : 数据库中没有该字段,设计中有
+ {{dataContent.userPositionCode}}
+
+
+ 是否可用 :
+ {{avaliable(dataContent.available)}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/recordListPopup.vue b/pages/supplierDeliver/coms/recordListPopup.vue
new file mode 100644
index 00000000..88edbd19
--- /dev/null
+++ b/pages/supplierDeliver/coms/recordListPopup.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/coms/recordtDetailInfoPopup.vue b/pages/supplierDeliver/coms/recordtDetailInfoPopup.vue
new file mode 100644
index 00000000..26c801eb
--- /dev/null
+++ b/pages/supplierDeliver/coms/recordtDetailInfoPopup.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+ 标包数量 :
+ {{dataContent.stdPackQty}}
+
+
+ 标包单位 :
+ {{dataContent.stdPackUnit}}
+
+
+ 供应商计量数量 :
+ {{dataContent.supplierQty}}
+
+
+ 供应商计量单位 :
+ {{dataContent.supplierUom}}
+
+
+ 转换率 :
+ {{dataContent.convertRate}}
+
+
+
+
+
+
+
+
+ 订单号 :
+ {{dataContent.poNumber}}
+
+
+ 订单行 :
+ {{dataContent.poLine}}
+
+
+ 项目代码 :
+ {{dataContent.projectCode}}
+
+
+ 到货日期 :
+ {{dataContent.arriveDate}}
+
+
+ 生产日期 :
+ {{dataContent.produceDate}}
+
+
+ 过期日期 :
+ {{dataContent.expireDate}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/record/supplierDeliverRecord.vue b/pages/supplierDeliver/record/supplierDeliverRecord.vue
new file mode 100644
index 00000000..9c0fa09e
--- /dev/null
+++ b/pages/supplierDeliver/record/supplierDeliverRecord.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/supplierDeliver/record/supplierDeliverRecordDetail.vue b/pages/supplierDeliver/record/supplierDeliverRecordDetail.vue
new file mode 100644
index 00000000..ac541401
--- /dev/null
+++ b/pages/supplierDeliver/record/supplierDeliverRecordDetail.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+ 发货单号 :
+
+
+ 供应商 :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/tabBar/API/API.nvue b/pages/tabBar/API/API.nvue
new file mode 100644
index 00000000..47e2e744
--- /dev/null
+++ b/pages/tabBar/API/API.nvue
@@ -0,0 +1,494 @@
+
+
+
+
+
+
+
+
+ 以下将演示uni-app接口能力,详细文档见:
+
+
+
+
+ {{item.name}}
+ {{item.pages ? '' : ''}}
+
+
+
+ {{item2.name ? item2.name : item2}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/tabBar/component/component.nvue b/pages/tabBar/component/component.nvue
new file mode 100644
index 00000000..48979f2a
--- /dev/null
+++ b/pages/tabBar/component/component.nvue
@@ -0,0 +1,216 @@
+
+
+
+
+ uni-app内置组件,展示样式仅供参考,文档详见:
+
+
+
+
+ {{item.name}}
+ {{item.pages ? '' : ''}}
+
+
+
+ {{item2.name ? item2.name : item2}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/tabBar/component/component.test.js b/pages/tabBar/component/component.test.js
new file mode 100644
index 00000000..1706a090
--- /dev/null
+++ b/pages/tabBar/component/component.test.js
@@ -0,0 +1,57 @@
+describe('pages/tabBar/component/component.nvue', () => {
+ let page
+ beforeAll(async () => {
+ // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
+ page = await program.reLaunch('/pages/tabBar/component/component')
+ await page.waitFor(1000)
+ })
+
+ it('u-link', async () => {
+ // 检测首页u-link的文本内容
+ expect(await (await page.$('.hello-link')).text()).toBe(
+ 'https://uniapp.dcloud.io/component/')
+ })
+
+ it('视图容器', async () => {
+ let panelText = await page.$('.uni-panel-text')
+ // 检测首个 panel 是视图容器
+ expect(await panelText.text()).toBe(
+ '视图容器')
+
+ // 检测首个 panel 切换展开
+ const panelH = await page.$('.uni-panel-h');
+ // 不能做完全匹配,百度小程序会生成额外的class
+ expect(await panelH.attribute('class')).toContain('uni-panel-h')
+ await panelH.tap()
+ await page.waitFor(500)
+ // 已展开
+ expect(await panelH.attribute('class')).toContain('uni-panel-h-on')
+ })
+
+ // it('.uni-panel', async () => {
+ // const lists = await page.$$('.uni-panel')
+ // expect(lists.length).toBe(9)
+ // })
+
+ it('.uni-panel action', async () => {
+ const listHead = await page.$('.uni-panel-h')
+ expect(await listHead.attribute('class')).toContain('uni-panel-h-on')
+ await listHead.tap()
+ await page.waitFor(200)
+ expect(await listHead.attribute('class')).toContain(
+ 'uni-panel-h',
+ )
+
+ // 展开第一个 panel,点击第一个 item,验证打开的新页面是否正确
+ await listHead.tap()
+ await page.waitFor(200)
+ const item = await page.$('.uni-navigate-item')
+ await item.tap()
+ await page.waitFor(500)
+ expect((await program.currentPage()).path).toBe('pages/component/view/view')
+ await page.waitFor(500)
+
+ // 执行 navigateBack 验证是否返回
+ expect((await program.navigateBack()).path).toBe('pages/tabBar/component/component')
+ })
+})
diff --git a/pages/tabBar/extUI/extUI.nvue b/pages/tabBar/extUI/extUI.nvue
new file mode 100644
index 00000000..aa311915
--- /dev/null
+++ b/pages/tabBar/extUI/extUI.nvue
@@ -0,0 +1,266 @@
+
+
+
+
+ 以下是uni-app扩展组件示例,更多组件见插件市场:
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
diff --git a/pages/tabBar/extUI/extUI.test.js b/pages/tabBar/extUI/extUI.test.js
new file mode 100644
index 00000000..802681cb
--- /dev/null
+++ b/pages/tabBar/extUI/extUI.test.js
@@ -0,0 +1,58 @@
+describe('pages/tabBar/extUI/extUI.nvue', () => {
+ let page
+ beforeAll(async () => {
+ // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
+ page = await program.reLaunch('/pages/tabBar/extUI/extUI')
+ if (process.env.UNI_PLATFORM === "h5") {
+ await page.waitFor(1000)
+ }
+ if (process.env.UNI_PLATFORM === "mp-weixin" || process.env.UNI_PLATFORM === "mp-baidu") {
+ await page.waitFor(10000)
+ }
+
+ page = await program.currentPage()
+
+ })
+ /**
+ * 点击 u-link 组件
+ */
+ it('u-link 点击', async () => {
+ const helloLink = await page.$('.hello-link')
+ // 检测首页u-link的文本内容
+ expect(await helloLink.text()).toBe(
+ 'https://ext.dcloud.net.cn')
+ })
+
+ /**
+ * 检测列表长度,是否发生变化
+ */
+ it('.uni-panel 列表长度', async () => {
+ const lists = await page.$$('.uni-panel')
+ expect(lists.length).toBe(29)
+ })
+
+ /**
+ * 检测打开列表第一个元素是否正确
+ */
+ it('.uni-panel-h tap 打开 badge 组件', async () => {
+ // 检测首个 panel 是视图容器
+ expect(await (await page.$('.uni-panel-text')).text()).toBe(
+ 'Badge 数字角标')
+
+ const listHead = await page.$('.uni-panel-h')
+ // 是否获取正确的元素
+ expect(await listHead.attribute('class')).toContain(
+ 'uni-panel-h',
+ )
+
+ // 点击第一个 item,验证打开的新页面是否正确
+ await listHead.tap()
+ await page.waitFor(2000)
+
+ expect((await program.currentPage()).path).toBe('pages/extUI/badge/badge')
+ await page.waitFor(500)
+ // 执行 navigateBack 验证是否返回
+ expect((await program.navigateBack()).path).toBe('pages/tabBar/extUI/extUI')
+ })
+
+})
diff --git a/pages/tabBar/template/template.nvue b/pages/tabBar/template/template.nvue
new file mode 100644
index 00000000..ed529836
--- /dev/null
+++ b/pages/tabBar/template/template.nvue
@@ -0,0 +1,210 @@
+
+
+
+
+ 以下是部分模板示例,更多模板见插件市场:
+
+
+
+
+ {{item.name}}
+ {{item.pages ? '' : ''}}
+
+
+
+ {{item2.name ? item2.name : item2}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/component-communication/bus.js b/pages/template/component-communication/bus.js
new file mode 100644
index 00000000..94950da1
--- /dev/null
+++ b/pages/template/component-communication/bus.js
@@ -0,0 +1,3 @@
+import Vue from 'vue'
+
+export default new Vue()
\ No newline at end of file
diff --git a/pages/template/component-communication/component-communication.vue b/pages/template/component-communication/component-communication.vue
new file mode 100644
index 00000000..851345f6
--- /dev/null
+++ b/pages/template/component-communication/component-communication.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/component-communication/reciver.vue b/pages/template/component-communication/reciver.vue
new file mode 100644
index 00000000..c307e1cd
--- /dev/null
+++ b/pages/template/component-communication/reciver.vue
@@ -0,0 +1,36 @@
+
+
+
+ {{msg===''?'等待发送':'收到消息:'}}{{msg}}
+
+
+
+
+
+
+
diff --git a/pages/template/component-communication/sender-bus.vue b/pages/template/component-communication/sender-bus.vue
new file mode 100644
index 00000000..ceb4f821
--- /dev/null
+++ b/pages/template/component-communication/sender-bus.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/component-communication/sender.vue b/pages/template/component-communication/sender.vue
new file mode 100644
index 00000000..59eb69d4
--- /dev/null
+++ b/pages/template/component-communication/sender.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/crop/crop.vue b/pages/template/crop/crop.vue
new file mode 100644
index 00000000..f7dd0f79
--- /dev/null
+++ b/pages/template/crop/crop.vue
@@ -0,0 +1,639 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/global/global.vue b/pages/template/global/global.vue
new file mode 100644
index 00000000..481efaa9
--- /dev/null
+++ b/pages/template/global/global.vue
@@ -0,0 +1,66 @@
+
+
+
+ globalData
+
+
+ globalData中text的值: {{gd.test}}
+
+
+
+ vuex
+
+
+ vuex中hasLogin的值: {{testvuex}}
+
+
+
+
+
+
+
+
diff --git a/pages/template/list-with-badges/list-with-badges.vue b/pages/template/list-with-badges/list-with-badges.vue
new file mode 100644
index 00000000..b0fa31e7
--- /dev/null
+++ b/pages/template/list-with-badges/list-with-badges.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ 右侧带箭头
+
+
+
+ Item1
+
+
+
+
+ Item2
+
+
+
+ 右侧带数字角标
+
+
+
+ Item2
+
+
+
+
+
+ Item1
+
+
+
+
+ 右侧带数字角标+箭头
+
+
+
+ Item1
+
+
+
+
+
+ Item2
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/list-with-collapses/list-with-collapses.vue b/pages/template/list-with-collapses/list-with-collapses.vue
new file mode 100644
index 00000000..d33228a8
--- /dev/null
+++ b/pages/template/list-with-collapses/list-with-collapses.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+ {{list.title}}
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/list2detail-detail/list2detail-detail.vue b/pages/template/list2detail-detail/list2detail-detail.vue
new file mode 100644
index 00000000..8ec90d52
--- /dev/null
+++ b/pages/template/list2detail-detail/list2detail-detail.vue
@@ -0,0 +1,191 @@
+
+
+
+
+ {{banner.title}}
+
+
+ {{banner.author_name}}
+ 发表于
+ {{banner.published_at}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/list2detail-list/list2detail-list.vue b/pages/template/list2detail-list/list2detail-list.vue
new file mode 100644
index 00000000..48ec8e5b
--- /dev/null
+++ b/pages/template/list2detail-list/list2detail-list.vue
@@ -0,0 +1,196 @@
+
+
+
+
+ {{ banner.title }}
+
+
+
+
+
+
+
+ {{ value.title }}
+
+ {{ value.author_name }}
+ {{ value.published_at }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/nav-button/nav-button.vue b/pages/template/nav-button/nav-button.vue
new file mode 100644
index 00000000..85d16768
--- /dev/null
+++ b/pages/template/nav-button/nav-button.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 说明 :
+
+ 在App端可在pages.json里配置buttons,暂不支持动态改变buttons的样式,使用onNavigationBarButtonTap可监听buttons的点击事件。
+ 在小程序端,不支持配置buttons,故按钮不见了。
+
+
+
+
+
+
+
diff --git a/pages/template/nav-city-dropdown/nav-city-dropdown.vue b/pages/template/nav-city-dropdown/nav-city-dropdown.vue
new file mode 100644
index 00000000..3dfb263b
--- /dev/null
+++ b/pages/template/nav-city-dropdown/nav-city-dropdown.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+ 说明 :
+
+
+
+ 在App端可在pages.json里配置buttons,暂不支持动态改变buttons的样式,使用onNavigationBarButtonTap可监听城市选择按钮的点击事件。
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/nav-default/nav-default.vue b/pages/template/nav-default/nav-default.vue
new file mode 100644
index 00000000..e902134a
--- /dev/null
+++ b/pages/template/nav-default/nav-default.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+ 本页标题栏是uni-app的默认配置,开发者可在pages.json里配置文字内容及标题颜色,也可通过api接口将其改变。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/nav-dot/nav-dot.vue b/pages/template/nav-dot/nav-dot.vue
new file mode 100644
index 00000000..502134fe
--- /dev/null
+++ b/pages/template/nav-dot/nav-dot.vue
@@ -0,0 +1,66 @@
+
+
+
+
+ 说明 :
+
+ 在App端可在pages.json里配置buttons,暂不支持动态改变buttons的样式,使用onNavigationBarButtonTap可监听红点按钮的点击事件。
+
+
+
+
+
+
+
diff --git a/pages/template/nav-image/nav-image.vue b/pages/template/nav-image/nav-image.vue
new file mode 100644
index 00000000..829208f1
--- /dev/null
+++ b/pages/template/nav-image/nav-image.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+ 说明 :
+
+ 在App端可在pages.json里通过 style -> titleImage 配置,支付宝小程序只支持https地址的图片,暂不支持动态改变;常用于App首页顶部导航显示产品Logo。
+ 在支付宝小程序里请使用真机调试查看效果。
+
+
+
+
+
+
+
diff --git a/pages/template/nav-search-input/detail/detail.vue b/pages/template/nav-search-input/detail/detail.vue
new file mode 100644
index 00000000..eb70baf1
--- /dev/null
+++ b/pages/template/nav-search-input/detail/detail.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+ 搜索历史
+
+
+
+
+ {{ item.name }}
+
+
+
+ 您还没有历史记录
+
+
+
+
+
+
+
+ 没有搜索到相关内容
+
+
+
+
+
+
+
diff --git a/pages/template/nav-search-input/nav-search-input.vue b/pages/template/nav-search-input/nav-search-input.vue
new file mode 100644
index 00000000..b8b0f50f
--- /dev/null
+++ b/pages/template/nav-search-input/nav-search-input.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+ 本示例为导航栏带搜索框完整功能演示,主要演示有:
+ 1. 导航栏为 transparent 模式,向上滑动页面,导航栏会从透明变为实色。
+ 2. 点击搜索框跳转到搜索页面。
+ 3. 点击导航栏右侧按钮实现关联操作。
+ 4. 搜索页面为提示词搜索,输入内容实时显示关联词。
+ 5. 搜索结果根据搜索内容高亮显示文字。
+ 6. 点击搜索列表或者软键盘搜索按钮,会将结果保存到搜索历史列表。
+ 7. 点击删除图标,清空历史搜索列表。
+ Tips
+ 1. 本示例目前仅支持 App 端
+ 2. 所有示例均为演示使用,具体逻辑需要自己实现。
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/nav-transparent/nav-transparent.vue b/pages/template/nav-transparent/nav-transparent.vue
new file mode 100644
index 00000000..53210412
--- /dev/null
+++ b/pages/template/nav-transparent/nav-transparent.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 在App端默认为标题栏透明,当用户向下滚动时,标题栏逐渐由透明转变为不透明;当用户再次向上滚动时,标题栏又从不透明变为透明状态。
+ 在微信小程序端,导航栏始终为不透明样式。
+
+
+ 图片类型
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/scheme/scheme.vue b/pages/template/scheme/scheme.vue
new file mode 100644
index 00000000..8a79d379
--- /dev/null
+++ b/pages/template/scheme/scheme.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ 打开QQ
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/swiper-list-nvue/swiper-list-nvue.nvue b/pages/template/swiper-list-nvue/swiper-list-nvue.nvue
new file mode 100644
index 00000000..f4a152aa
--- /dev/null
+++ b/pages/template/swiper-list-nvue/swiper-list-nvue.nvue
@@ -0,0 +1,393 @@
+
+
+
+
+ |
+
+
+
+
+
+
+ {{tab.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
diff --git a/pages/template/swiper-list-nvue/swiper-page.nvue b/pages/template/swiper-list-nvue/swiper-page.nvue
new file mode 100644
index 00000000..2923e64c
--- /dev/null
+++ b/pages/template/swiper-list-nvue/swiper-page.nvue
@@ -0,0 +1,87 @@
+
+
+
+
+
+ {{item.name}}
+
+ |
+ |
+
+
+
+
+
+
+
diff --git a/pages/template/swiper-list/swiper-list.nvue b/pages/template/swiper-list/swiper-list.nvue
new file mode 100644
index 00000000..aedbddb9
--- /dev/null
+++ b/pages/template/swiper-list/swiper-list.nvue
@@ -0,0 +1,363 @@
+
+
+
+
+
+
+ {{tab.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/swiper-list/swiper-page.nvue b/pages/template/swiper-list/swiper-page.nvue
new file mode 100644
index 00000000..bb8135fe
--- /dev/null
+++ b/pages/template/swiper-list/swiper-page.nvue
@@ -0,0 +1,45 @@
+
+
+ Tab View {{ pid}}
+
+
+
+
+
+
diff --git a/pages/template/swiper-vertical/swiper-vertical.nvue b/pages/template/swiper-vertical/swiper-vertical.nvue
new file mode 100644
index 00000000..4a276b1d
--- /dev/null
+++ b/pages/template/swiper-vertical/swiper-vertical.nvue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/tabbar/detail/detail.vue b/pages/template/tabbar/detail/detail.vue
new file mode 100644
index 00000000..7025348a
--- /dev/null
+++ b/pages/template/tabbar/detail/detail.vue
@@ -0,0 +1,22 @@
+
+
+
+ 这是选项卡页面跳转详情页面的演示,下面是页面跳转时传递过来的标题:
+ {{title}}
+
+
+
+
+
diff --git a/pages/template/tabbar/news-item.nvue b/pages/template/tabbar/news-item.nvue
new file mode 100644
index 00000000..5102b517
--- /dev/null
+++ b/pages/template/tabbar/news-item.nvue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+ {{options.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/tabbar/tabbar.nvue b/pages/template/tabbar/tabbar.nvue
new file mode 100644
index 00000000..4a4739be
--- /dev/null
+++ b/pages/template/tabbar/tabbar.nvue
@@ -0,0 +1,436 @@
+
+
+
+
+ {{tab.name}}
+
+
+
+
+
+
+
+
+
+
+
+ {{tab.refreshText}}
+
+
+
+
+ |
+
+ {{tab.loadingText}}
+ |
+
+
+
+
+
+
+
+
+ {{tab.loadingText}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/ucharts/ucharts.vue b/pages/template/ucharts/ucharts.vue
new file mode 100644
index 00000000..db80d110
--- /dev/null
+++ b/pages/template/ucharts/ucharts.vue
@@ -0,0 +1,1226 @@
+
+
+
+ {{tips}}
+
+
+ 更新柱状图数据
+
+
+ 柱状图
+
+
+
+
+
+
+
+
+
+
+ 温度计式图表
+
+
+
+
+
+
+
+
+
+
+ 混合图(单坐标系支持画点、线、面、柱)
+
+
+
+
+
+
+
+
+
+
+ K线图(蜡烛图)
+
+
+
+
+
+
+
+
+
+
+
+
+ 更新仪表盘数据
+
+
+ 仪表盘
+
+
+
+
+
+
+
+
+
+
+ 圆弧进度图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 漏斗图
+
+
+
+
+
+
+
+
+
+
+ 折线图一(可横向拖拽带滚动条)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 折线图二(横屏图表)
+
+
+
+
+
+
+
+
+
+
+ 区域图
+
+
+
+
+
+
+
+
+
+
+ 饼状图
+
+
+
+
+
+
+
+
+
+
+ 环形图
+
+
+
+
+
+
+
+
+
+
+ 雷达图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/template/vant-button/vant-button.vue b/pages/template/vant-button/vant-button.vue
new file mode 100644
index 00000000..dd07066c
--- /dev/null
+++ b/pages/template/vant-button/vant-button.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+ uni-app支持在微信小程序、QQ小程序端、App端、H5端引入微信小程序自定义组件。以下以vant weapp组件为例演示
+
+
+
+ vant weapp的van-button按钮组件
+
+
+
+
+
+
+
diff --git a/pages/transfer/coms/comTransferJobCard.vue b/pages/transfer/coms/comTransferJobCard.vue
new file mode 100644
index 00000000..8fdddad7
--- /dev/null
+++ b/pages/transfer/coms/comTransferJobCard.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 物品代码 : {{dataContent.itemCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/coms/comTransferRecord.vue b/pages/transfer/coms/comTransferRecord.vue
new file mode 100644
index 00000000..2ee03421
--- /dev/null
+++ b/pages/transfer/coms/comTransferRecord.vue
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/coms/detailInfoPopup.vue b/pages/transfer/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..2fc76f5b
--- /dev/null
+++ b/pages/transfer/coms/detailInfoPopup.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/coms/jobInfoPopup.vue b/pages/transfer/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..465fb5a2
--- /dev/null
+++ b/pages/transfer/coms/jobInfoPopup.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+ 承运商 :
+ {{dataContent.carrierCode}}
+
+
+ 运输方式 :
+ {{dataContent.transferMode}}
+
+
+ 车牌号 :
+ {{dataContent.vehiclePlateNumber}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/coms/jobListPopup.vue b/pages/transfer/coms/jobListPopup.vue
new file mode 100644
index 00000000..4301be07
--- /dev/null
+++ b/pages/transfer/coms/jobListPopup.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/issueDetail.vue b/pages/transfer/job/issueDetail.vue
new file mode 100644
index 00000000..89a0c25c
--- /dev/null
+++ b/pages/transfer/job/issueDetail.vue
@@ -0,0 +1,529 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/issueJob.vue b/pages/transfer/job/issueJob.vue
new file mode 100644
index 00000000..d2983849
--- /dev/null
+++ b/pages/transfer/job/issueJob.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/receiptDetail.vue b/pages/transfer/job/receiptDetail.vue
new file mode 100644
index 00000000..44aaf5ec
--- /dev/null
+++ b/pages/transfer/job/receiptDetail.vue
@@ -0,0 +1,505 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/receiptJob.vue b/pages/transfer/job/receiptJob.vue
new file mode 100644
index 00000000..eeeda509
--- /dev/null
+++ b/pages/transfer/job/receiptJob.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/transferDetail.vue b/pages/transfer/job/transferDetail.vue
new file mode 100644
index 00000000..4d84271f
--- /dev/null
+++ b/pages/transfer/job/transferDetail.vue
@@ -0,0 +1,616 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/job/transferJob.vue b/pages/transfer/job/transferJob.vue
new file mode 100644
index 00000000..b3ac330a
--- /dev/null
+++ b/pages/transfer/job/transferJob.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/record/issueRecord.vue b/pages/transfer/record/issueRecord.vue
new file mode 100644
index 00000000..a7dcceb2
--- /dev/null
+++ b/pages/transfer/record/issueRecord.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfer/record/receiptRecord.vue b/pages/transfer/record/receiptRecord.vue
new file mode 100644
index 00000000..efd0c4ea
--- /dev/null
+++ b/pages/transfer/record/receiptRecord.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comBalance.vue b/pages/unPlanned/coms/comBalance.vue
new file mode 100644
index 00000000..45e326fb
--- /dev/null
+++ b/pages/unPlanned/coms/comBalance.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comIssueDetailCard.vue b/pages/unPlanned/coms/comIssueDetailCard.vue
new file mode 100644
index 00000000..456c22bb
--- /dev/null
+++ b/pages/unPlanned/coms/comIssueDetailCard.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comIssueJobCard.vue b/pages/unPlanned/coms/comIssueJobCard.vue
new file mode 100644
index 00000000..f9d352fd
--- /dev/null
+++ b/pages/unPlanned/coms/comIssueJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 出库物料 : {{dataContent.itemCode}}
+
+
+
+
+
+ 出库库位 : {{dataContent.fromLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comIssueRequestCard.vue b/pages/unPlanned/coms/comIssueRequestCard.vue
new file mode 100644
index 00000000..3ca67a93
--- /dev/null
+++ b/pages/unPlanned/coms/comIssueRequestCard.vue
@@ -0,0 +1,34 @@
+
+
+
+ 从仓库代码 : {{dataContent.fromWarehouseCode}}
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comReceiptDetailCard.vue b/pages/unPlanned/coms/comReceiptDetailCard.vue
new file mode 100644
index 00000000..cd119f55
--- /dev/null
+++ b/pages/unPlanned/coms/comReceiptDetailCard.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 入库库位
+ {{item.toLocationCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comReceiptJobCard.vue b/pages/unPlanned/coms/comReceiptJobCard.vue
new file mode 100644
index 00000000..7038fc1d
--- /dev/null
+++ b/pages/unPlanned/coms/comReceiptJobCard.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 申请单号 : {{dataContent.requestNumber}}
+
+
+
+
+
+ 入库物料 : {{dataContent.itemCode}}
+
+
+
+
+
+ 入库库位 : {{dataContent.toLocationCode}}
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comReceiptRecord.vue b/pages/unPlanned/coms/comReceiptRecord.vue
new file mode 100644
index 00000000..2bc2353e
--- /dev/null
+++ b/pages/unPlanned/coms/comReceiptRecord.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/comReceiptRequestCard.vue b/pages/unPlanned/coms/comReceiptRequestCard.vue
new file mode 100644
index 00000000..f9784b43
--- /dev/null
+++ b/pages/unPlanned/coms/comReceiptRequestCard.vue
@@ -0,0 +1,36 @@
+
+
+
+
+ 到仓库代码 : {{dataContent.toWarehouseCode}}
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/detailInfoPopup.vue b/pages/unPlanned/coms/detailInfoPopup.vue
new file mode 100644
index 00000000..f9dafe90
--- /dev/null
+++ b/pages/unPlanned/coms/detailInfoPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+ 原因 :
+ {{dataContent.Reason}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/jobInfoPopup.vue b/pages/unPlanned/coms/jobInfoPopup.vue
new file mode 100644
index 00000000..9076bb71
--- /dev/null
+++ b/pages/unPlanned/coms/jobInfoPopup.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/jobListPopup.vue b/pages/unPlanned/coms/jobListPopup.vue
new file mode 100644
index 00000000..d57df207
--- /dev/null
+++ b/pages/unPlanned/coms/jobListPopup.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/requestIssDetailInfoPopup.vue b/pages/unPlanned/coms/requestIssDetailInfoPopup.vue
new file mode 100644
index 00000000..584178df
--- /dev/null
+++ b/pages/unPlanned/coms/requestIssDetailInfoPopup.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 从库位代码 :
+ {{dataContent.fromLocationCode}}
+
+
+ 从货主代码 :
+ {{dataContent.fromOwnerCode}}
+
+
+ 原因 :
+ {{dataContent.reason}}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/requestIssInfoPopup.vue b/pages/unPlanned/coms/requestIssInfoPopup.vue
new file mode 100644
index 00000000..c7bda5c4
--- /dev/null
+++ b/pages/unPlanned/coms/requestIssInfoPopup.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/requestRecDetailInfoPopup.vue b/pages/unPlanned/coms/requestRecDetailInfoPopup.vue
new file mode 100644
index 00000000..acb6cb5f
--- /dev/null
+++ b/pages/unPlanned/coms/requestRecDetailInfoPopup.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+ 包装号 :
+ {{dataContent.packingNumber}}
+
+
+ 器具号 :
+ {{dataContent.containerNumber}}
+
+
+ 批次 :
+ {{dataContent.batch}}
+
+
+ 替代批次 :
+ {{dataContent.altBatch}}
+
+
+ 到库位代码 :
+ {{dataContent.toLocationCode}}
+
+
+ 库存状态 :
+ {{dataContent.inventoryStatus}}
+
+
+ 到货日期 :
+ {{dataContent.arriveDate}}
+
+
+ 生产日期 :
+ {{dataContent.produceDate}}
+
+
+ 过期日期 :
+ {{dataContent.expireDate}}
+
+
+ 到货主代码 :
+ {{dataContent.toOwnerCode}}
+
+
+ 原因 :
+ {{dataContent.reason}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/coms/requestRecInfoPopup.vue b/pages/unPlanned/coms/requestRecInfoPopup.vue
new file mode 100644
index 00000000..d666cb2d
--- /dev/null
+++ b/pages/unPlanned/coms/requestRecInfoPopup.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/job/issueJob.vue b/pages/unPlanned/job/issueJob.vue
new file mode 100644
index 00000000..66839797
--- /dev/null
+++ b/pages/unPlanned/job/issueJob.vue
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/job/issueJobDetail.vue b/pages/unPlanned/job/issueJobDetail.vue
new file mode 100644
index 00000000..b4554fc4
--- /dev/null
+++ b/pages/unPlanned/job/issueJobDetail.vue
@@ -0,0 +1,461 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/job/receiptJob.vue b/pages/unPlanned/job/receiptJob.vue
new file mode 100644
index 00000000..b0eed125
--- /dev/null
+++ b/pages/unPlanned/job/receiptJob.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/job/receiptJobDetail.vue b/pages/unPlanned/job/receiptJobDetail.vue
new file mode 100644
index 00000000..6a9b90bf
--- /dev/null
+++ b/pages/unPlanned/job/receiptJobDetail.vue
@@ -0,0 +1,477 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/record/issueRecord.vue b/pages/unPlanned/record/issueRecord.vue
new file mode 100644
index 00000000..faa460e5
--- /dev/null
+++ b/pages/unPlanned/record/issueRecord.vue
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/record/receiptRecord.vue b/pages/unPlanned/record/receiptRecord.vue
new file mode 100644
index 00000000..cbc3a5cc
--- /dev/null
+++ b/pages/unPlanned/record/receiptRecord.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/request/issueRequest.vue b/pages/unPlanned/request/issueRequest.vue
new file mode 100644
index 00000000..6c1b451d
--- /dev/null
+++ b/pages/unPlanned/request/issueRequest.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/request/issueRequestDetail.vue b/pages/unPlanned/request/issueRequestDetail.vue
new file mode 100644
index 00000000..b8765a95
--- /dev/null
+++ b/pages/unPlanned/request/issueRequestDetail.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/request/receiptRequest.vue b/pages/unPlanned/request/receiptRequest.vue
new file mode 100644
index 00000000..bea896ee
--- /dev/null
+++ b/pages/unPlanned/request/receiptRequest.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/unPlanned/request/receiptRequestDetail.vue b/pages/unPlanned/request/receiptRequestDetail.vue
new file mode 100644
index 00000000..169a4231
--- /dev/null
+++ b/pages/unPlanned/request/receiptRequestDetail.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/index.vue b/pages/work/index.vue
deleted file mode 100644
index 1afefc91..00000000
--- a/pages/work/index.vue
+++ /dev/null
@@ -1,183 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 用户管理
-
-
-
-
-
- 角色管理
-
-
-
-
-
- 菜单管理
-
-
-
-
-
- 部门管理
-
-
-
-
-
- 岗位管理
-
-
-
-
-
- 字典管理
-
-
-
-
-
- 参数设置
-
-
-
-
-
- 通知公告
-
-
-
-
-
- 日志管理
-
-
-
-
-
-
-
-
-
-
diff --git a/permission.js b/permission.js
deleted file mode 100644
index a47d9473..00000000
--- a/permission.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { getAccessToken } from '@/utils/auth'
-
-// 登录页面
-const loginPage = "/pages/login"
-
-// 页面白名单
-const whiteList = [
- '/pages/login', '/pages/common/webview/index'
-]
-
-// 检查地址白名单
-function checkWhite(url) {
- const path = url.split('?')[0]
- return whiteList.indexOf(path) !== -1
-}
-
-// 页面跳转验证拦截器
-let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
-list.forEach(item => {
- uni.addInterceptor(item, {
- invoke(to) {
- if (getAccessToken()) {
- if (to.path === loginPage) {
- uni.reLaunch({ url: "/" })
- }
- return true
- } else {
- if (checkWhite(to.url)) {
- return true
- }
- uni.reLaunch({ url: loginPage })
- return false
- }
- },
- fail(err) {
- console.log(err)
- }
- })
-})
diff --git a/platforms/app-plus/feedback/feedback.vue b/platforms/app-plus/feedback/feedback.vue
new file mode 100644
index 00000000..03731665
--- /dev/null
+++ b/platforms/app-plus/feedback/feedback.vue
@@ -0,0 +1,232 @@
+
+
+
+ 问题和意见
+ 快速键入
+
+
+ 图片(选填,提供问题截图,总大小10M以下)
+
+
+
+ 点击预览图片
+ {{ imageList.length }}/5
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+ QQ/邮箱
+
+
+ 应用评分
+
+
+
+ 用户反馈的结果可在app打包后于DCloud开发者中心查看
+
+
+
+
+
+
diff --git a/platforms/app-plus/orientation/orientation.vue b/platforms/app-plus/orientation/orientation.vue
new file mode 100644
index 00000000..ba636c4e
--- /dev/null
+++ b/platforms/app-plus/orientation/orientation.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/platforms/app-plus/proximity/proximity.vue b/platforms/app-plus/proximity/proximity.vue
new file mode 100644
index 00000000..ee4af464
--- /dev/null
+++ b/platforms/app-plus/proximity/proximity.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+ 手机顶部听筒处有传感器监听距离手机屏幕的障碍物,覆盖该传感器会触发本事件变化
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platforms/app-plus/push/push.vue b/platforms/app-plus/push/push.vue
new file mode 100644
index 00000000..91aa675c
--- /dev/null
+++ b/platforms/app-plus/push/push.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+ 透传内容:
+
+
+
+
+
+
+
+
+
diff --git a/platforms/app-plus/shake/shake.vue b/platforms/app-plus/shake/shake.vue
new file mode 100644
index 00000000..9e412df1
--- /dev/null
+++ b/platforms/app-plus/shake/shake.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platforms/app-plus/speech/speech.vue b/platforms/app-plus/speech/speech.vue
new file mode 100644
index 00000000..cae663e5
--- /dev/null
+++ b/platforms/app-plus/speech/speech.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/auth.js b/plugins/auth.js
deleted file mode 100644
index 3b91c14e..00000000
--- a/plugins/auth.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import store from '@/store'
-
-function authPermission(permission) {
- const all_permission = "*:*:*"
- const permissions = store.getters && store.getters.permissions
- if (permission && permission.length > 0) {
- return permissions.some(v => {
- return all_permission === v || v === permission
- })
- } else {
- return false
- }
-}
-
-function authRole(role) {
- const super_admin = "admin"
- const roles = store.getters && store.getters.roles
- if (role && role.length > 0) {
- return roles.some(v => {
- return super_admin === v || v === role
- })
- } else {
- return false
- }
-}
-
-export default {
- // 验证用户是否具备某权限
- hasPermi(permission) {
- return authPermission(permission)
- },
- // 验证用户是否含有指定权限,只需包含其中一个
- hasPermiOr(permissions) {
- return permissions.some(item => {
- return authPermission(item)
- })
- },
- // 验证用户是否含有指定权限,必须全部拥有
- hasPermiAnd(permissions) {
- return permissions.every(item => {
- return authPermission(item)
- })
- },
- // 验证用户是否具备某角色
- hasRole(role) {
- return authRole(role)
- },
- // 验证用户是否含有指定角色,只需包含其中一个
- hasRoleOr(roles) {
- return roles.some(item => {
- return authRole(item)
- })
- },
- // 验证用户是否含有指定角色,必须全部拥有
- hasRoleAnd(roles) {
- return roles.every(item => {
- return authRole(item)
- })
- }
-}
diff --git a/plugins/index.js b/plugins/index.js
deleted file mode 100644
index efbae151..00000000
--- a/plugins/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import tab from './tab'
-import auth from './auth'
-import modal from './modal'
-
-export default {
- install(Vue) {
- // 页签操作
- Vue.prototype.$tab = tab
- // 认证对象
- Vue.prototype.$auth = auth
- // 模态框对象
- Vue.prototype.$modal = modal
- }
-}
diff --git a/plugins/modal.js b/plugins/modal.js
deleted file mode 100644
index 87960fd4..00000000
--- a/plugins/modal.js
+++ /dev/null
@@ -1,74 +0,0 @@
-export default {
- // 消息提示
- msg(content) {
- uni.showToast({
- title: content,
- icon: 'none'
- })
- },
- // 错误消息
- msgError(content) {
- uni.showToast({
- title: content,
- icon: 'error'
- })
- },
- // 成功消息
- msgSuccess(content) {
- uni.showToast({
- title: content,
- icon: 'success'
- })
- },
- // 隐藏消息
- hideMsg(content) {
- uni.hideToast()
- },
- // 弹出提示
- alert(content) {
- uni.showModal({
- title: '提示',
- content: content,
- showCancel: false
- })
- },
- // 确认窗体
- confirm(content) {
- return new Promise((resolve, reject) => {
- uni.showModal({
- title: '系统提示',
- content: content,
- cancelText: '取消',
- confirmText: '确定',
- success: function(res) {
- if (res.confirm) {
- resolve(res.confirm)
- }
- }
- })
- })
- },
- // 提示信息
- showToast(option) {
- if (typeof option === "object") {
- uni.showToast(option)
- } else {
- uni.showToast({
- title: option,
- icon: "none",
- duration: 2500
- })
- }
- },
- // 打开遮罩层
- loading(content) {
- uni.showLoading({
- title: content,
- icon: 'none'
- })
- },
- // 关闭遮罩层
- closeLoading() {
- uni.hideLoading()
- }
-}
diff --git a/plugins/tab.js b/plugins/tab.js
deleted file mode 100644
index 5d1b3058..00000000
--- a/plugins/tab.js
+++ /dev/null
@@ -1,30 +0,0 @@
-export default {
- // 关闭所有页面,打开到应用内的某个页面
- reLaunch(url) {
- return uni.reLaunch({
- url: url
- })
- },
- // 跳转到tabBar页面,并关闭其他所有非tabBar页面
- switchTab(url) {
- return uni.switchTab({
- url: url
- })
- },
- // 关闭当前页面,跳转到应用内的某个页面
- redirectTo(url) {
- return uni.redirectTo({
- url: url
- })
- },
- // 保留当前页面,跳转到应用内的某个页面
- navigateTo(url) {
- return uni.navigateTo({
- url: url
- })
- },
- // 关闭当前页面,返回上一页面或多级页面
- navigateBack() {
- return uni.navigateBack()
- }
-}
diff --git a/router/index.js b/router/index.js
new file mode 100644
index 00000000..af876092
--- /dev/null
+++ b/router/index.js
@@ -0,0 +1,116 @@
+//只要是未登录状态,想要跳转到名单内的路径时,直接跳到登录页。
+// 页面白名单,不受拦截
+import versionTool from '@/libs/versionUpdate.js';
+
+const whiteList = [
+ '/pages/login/index'
+]
+let apages = getCurrentPages()
+console.log("getCurrentPages",apages)
+function hasPermission (url) {
+ console.log('url',url);
+ // let islogin = sessionStorage.getItem("isLogin");
+ let islogin = this.$store.state.hasLogin
+ islogin = Boolean(Number(islogin));//返回布尔值
+ // 在白名单中或有登录判断条件可以直接跳转
+ if(whiteList.indexOf(url) !== -1 || islogin) {
+ return true
+ }
+ return true
+}
+
+uni.addInterceptor('navigateTo', {
+
+ // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
+ invoke (e) {
+ if(!hasPermission(e.url)){
+ uni.reLaunch({
+ url: '/pages/login/index'
+ })
+ return false
+ }
+ return true
+ },
+ success (e) {
+ versionTool.isNewVersion()
+ }
+})
+
+uni.addInterceptor('switchTab', {
+ // tabbar页面跳转前进行拦截
+ invoke (e) {
+ if(!hasPermission(e.url)){
+ uni.reLaunch({
+ url: '/pages/login/index'
+ })
+ return false
+ }
+ return true
+ },
+ success (e) {
+ }
+})
+
+// import modules from './modules'
+// import Vue from 'vue'
+// //这里仅示范npm安装方式的引入,其它方式引入请看最上面【安装】部分
+// import Router from 'uni-simple-router'
+
+// Vue.use(Router)
+// //初始化
+// const router = new Router({
+// routes: [...modules]//路由表
+// });
+
+// //全局路由前置守卫
+// router.beforeEach((to, from, next) => {
+// next()
+// })
+// // 全局路由后置守卫
+// router.afterEach((to, from) => {
+// })
+// export default router;
+
+// import Vue from 'vue'
+// import store from '../store/index.js'
+// import pages from '../pages.js'
+
+// import Router, {
+// RouterMount
+// } from 'uni-simple-router'
+
+
+
+// Vue.use(Router)
+
+// const myRouter =
+// pages().pages.map(item => ({
+// path: `/${item.path}`,
+// meta: item.meta || {}
+// }))
+// //初始化
+// const router = new Router({
+// routes: myRouter
+// });
+
+// //全局路由前置守卫
+// router.beforeEach((to, from, next) => {
+
+// const isLogin = sessionStorage.getItem("isLogin")
+// console.log('路由前置守卫',isLogin)
+// // if (!isLogin && to.meta.needLogin) {
+// if (!isLogin ) {
+// next({
+// path: '/pages/login/index',
+// query: {
+// redirect: to.path
+// }
+// })
+// } else {
+// next()
+// }
+
+// })
+// // 全局路由后置守卫
+// router.afterEach((to, from) => {console.log('路由后置守卫')})
+// export default router;
diff --git a/router/modules/home.js b/router/modules/home.js
new file mode 100644
index 00000000..49586d04
--- /dev/null
+++ b/router/modules/home.js
@@ -0,0 +1,29 @@
+// router/modules/home.js
+const home = [
+ {
+ //注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
+ path: '/pages/index/index',
+ aliasPath:'/', //对于h5端你必须在首页加上aliasPath并设置为/
+ name: 'index',
+ meta: {
+ title: 'WMS仓库管理系统',
+ },
+ },
+ // {
+ // path: '/pages/list/index',
+ // aliasPath:'/'
+ // name: 'list',
+ // meta: {
+ // title: '列表',
+ // },
+ // },
+ {
+ path: '/pages/login/index',
+ aliasPath:'/'
+ name: 'login',
+ meta: {
+ title: '登录',
+ },
+ },
+]
+export default home
\ No newline at end of file
diff --git a/router/modules/index.js b/router/modules/index.js
new file mode 100644
index 00000000..b17abbe7
--- /dev/null
+++ b/router/modules/index.js
@@ -0,0 +1,11 @@
+// router/modules/index.js
+const files = require.context('.', false, /\.js$/)
+const modules = []
+
+files.keys().forEach(key => {
+ if (key === './index.js') return
+ const item = files(key).default
+ modules.push(...item)
+})
+
+export default modules
\ No newline at end of file
diff --git a/router/my_router.js b/router/my_router.js
new file mode 100644
index 00000000..e0370424
--- /dev/null
+++ b/router/my_router.js
@@ -0,0 +1,46 @@
+//只要是未登录状态,想要跳转到名单内的路径时,直接跳到登录页
+// 页面白名单,不受拦截
+const whiteList = [
+ '/pages/login/index'
+]
+
+function hasPermission(url) {
+
+ var isLogin = sessionStorage.getItem("hasLogin");
+ if (isLogin == null) {
+ isLogin = false
+ }
+
+ // 在白名单中或有登录判断条件可以直接跳转
+ if (whiteList.indexOf(url) !== -1 || isLogin) {
+ return true
+ }
+ return false
+}
+uni.addInterceptor('navigateTo', {
+ // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
+ invoke(e) {
+ if (!hasPermission(e.url)) {
+ uni.reLaunch({
+ url: '/pages/login/index'
+ })
+ return false
+ }
+ return true
+ },
+ success(e) {}
+})
+
+uni.addInterceptor('switchTab', {
+ // tabbar页面跳转前进行拦截
+ invoke(e) {
+ if (!hasPermission(e.url)) {
+ uni.reLaunch({
+ url: '/pages/login/index'
+ })
+ return false
+ }
+ return true
+ },
+ success(e) {}
+})
diff --git a/router/router.js b/router/router.js
new file mode 100644
index 00000000..ddc0dce4
--- /dev/null
+++ b/router/router.js
@@ -0,0 +1,20 @@
+// router.js
+import {RouterMount,createRouter} from 'uni-simple-router';
+
+const router = createRouter({
+ platform: process.env.VUE_APP_PLATFORM,
+ routes: [...ROUTES]
+});
+//全局路由前置守卫
+router.beforeEach((to, from, next) => {
+ next();
+});
+// 全局路由后置守卫
+router.afterEach((to, from) => {
+ console.log('跳转结束')
+})
+
+export {
+ router,
+ RouterMount
+}
\ No newline at end of file
diff --git a/static/60x60.png b/static/60x60.png
new file mode 100644
index 00000000..6984932f
Binary files /dev/null and b/static/60x60.png differ
diff --git a/static/Vector.svg b/static/Vector.svg
new file mode 100644
index 00000000..355eefae
--- /dev/null
+++ b/static/Vector.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/api.png b/static/api.png
new file mode 100644
index 00000000..58f93e13
Binary files /dev/null and b/static/api.png differ
diff --git a/static/apiHL.png b/static/apiHL.png
new file mode 100644
index 00000000..f8cbd7d2
Binary files /dev/null and b/static/apiHL.png differ
diff --git a/static/apiIndex.png b/static/apiIndex.png
new file mode 100644
index 00000000..890dba5c
Binary files /dev/null and b/static/apiIndex.png differ
diff --git a/static/app-plus/location@3x.png b/static/app-plus/location@3x.png
new file mode 100644
index 00000000..c195e0ae
Binary files /dev/null and b/static/app-plus/location@3x.png differ
diff --git a/static/app-plus/uni@2x.png b/static/app-plus/uni@2x.png
new file mode 100644
index 00000000..8e3a80f4
Binary files /dev/null and b/static/app-plus/uni@2x.png differ
diff --git a/static/avatar.png b/static/avatar.png
new file mode 100644
index 00000000..cbc3c6fb
Binary files /dev/null and b/static/avatar.png differ
diff --git a/static/bar/fx.png b/static/bar/fx.png
new file mode 100644
index 00000000..3443a85e
Binary files /dev/null and b/static/bar/fx.png differ
diff --git a/static/bar/fxa.png b/static/bar/fxa.png
new file mode 100644
index 00000000..ebd03089
Binary files /dev/null and b/static/bar/fxa.png differ
diff --git a/static/bar/sy.png b/static/bar/sy.png
new file mode 100644
index 00000000..1178f912
Binary files /dev/null and b/static/bar/sy.png differ
diff --git a/static/bar/sy.svg b/static/bar/sy.svg
new file mode 100644
index 00000000..09cbb42c
--- /dev/null
+++ b/static/bar/sy.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/bar/sya.png b/static/bar/sya.png
new file mode 100644
index 00000000..d02d4e69
Binary files /dev/null and b/static/bar/sya.png differ
diff --git a/static/bar/sya.svg b/static/bar/sya.svg
new file mode 100644
index 00000000..29704b21
--- /dev/null
+++ b/static/bar/sya.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/bar/sz.png b/static/bar/sz.png
new file mode 100644
index 00000000..356cac6d
Binary files /dev/null and b/static/bar/sz.png differ
diff --git a/static/bar/sz.svg b/static/bar/sz.svg
new file mode 100644
index 00000000..5a7549be
--- /dev/null
+++ b/static/bar/sz.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/bar/sza.png b/static/bar/sza.png
new file mode 100644
index 00000000..c15ccca9
Binary files /dev/null and b/static/bar/sza.png differ
diff --git a/static/bar/sza.svg b/static/bar/sza.svg
new file mode 100644
index 00000000..57dbaaab
--- /dev/null
+++ b/static/bar/sza.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/bar/wd.png b/static/bar/wd.png
new file mode 100644
index 00000000..e74bee34
Binary files /dev/null and b/static/bar/wd.png differ
diff --git a/static/bar/wda.png b/static/bar/wda.png
new file mode 100644
index 00000000..8f1e1018
Binary files /dev/null and b/static/bar/wda.png differ
diff --git a/static/bar/xx.png b/static/bar/xx.png
new file mode 100644
index 00000000..8f8b45de
Binary files /dev/null and b/static/bar/xx.png differ
diff --git a/static/bar/xx.svg b/static/bar/xx.svg
new file mode 100644
index 00000000..42893c5e
--- /dev/null
+++ b/static/bar/xx.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/bar/xxa.png b/static/bar/xxa.png
new file mode 100644
index 00000000..620435d8
Binary files /dev/null and b/static/bar/xxa.png differ
diff --git a/static/bar/xxa.svg b/static/bar/xxa.svg
new file mode 100644
index 00000000..fb354b3d
--- /dev/null
+++ b/static/bar/xxa.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/c1.png b/static/c1.png
new file mode 100644
index 00000000..9d38fdc4
Binary files /dev/null and b/static/c1.png differ
diff --git a/static/c2.png b/static/c2.png
new file mode 100644
index 00000000..ce956d76
Binary files /dev/null and b/static/c2.png differ
diff --git a/static/c3.png b/static/c3.png
new file mode 100644
index 00000000..216202ad
Binary files /dev/null and b/static/c3.png differ
diff --git a/static/c4.png b/static/c4.png
new file mode 100644
index 00000000..fb8b4770
Binary files /dev/null and b/static/c4.png differ
diff --git a/static/c5.png b/static/c5.png
new file mode 100644
index 00000000..310bfb12
Binary files /dev/null and b/static/c5.png differ
diff --git a/static/c6.png b/static/c6.png
new file mode 100644
index 00000000..c3c45d88
Binary files /dev/null and b/static/c6.png differ
diff --git a/static/c7.png b/static/c7.png
new file mode 100644
index 00000000..a1e73908
Binary files /dev/null and b/static/c7.png differ
diff --git a/static/c8.png b/static/c8.png
new file mode 100644
index 00000000..c32633c0
Binary files /dev/null and b/static/c8.png differ
diff --git a/static/c9.png b/static/c9.png
new file mode 100644
index 00000000..51bcf6a1
Binary files /dev/null and b/static/c9.png differ
diff --git a/static/compass.png b/static/compass.png
new file mode 100644
index 00000000..fba87a58
Binary files /dev/null and b/static/compass.png differ
diff --git a/static/component.png b/static/component.png
new file mode 100644
index 00000000..fbb116d5
Binary files /dev/null and b/static/component.png differ
diff --git a/static/componentHL.png b/static/componentHL.png
new file mode 100644
index 00000000..31f83a02
Binary files /dev/null and b/static/componentHL.png differ
diff --git a/static/componentIndex.png b/static/componentIndex.png
new file mode 100644
index 00000000..8ad05344
Binary files /dev/null and b/static/componentIndex.png differ
diff --git a/static/config.json b/static/config.json
new file mode 100644
index 00000000..787c269f
--- /dev/null
+++ b/static/config.json
@@ -0,0 +1,131 @@
+{
+ "baseInfo": {
+ "companyCode": {
+ "name": "companyCode",
+ "value": "DongYang",
+ "desc": "公司代码"
+ },
+ "warehouseCode": {
+ "name": "warehouseCode",
+ "value": "T8",
+ "desc": "仓库代码"
+ },
+ "dev": {
+ "name": "dev",
+ "value": "http://dev.ccwin-in.com:23132",
+ "desc": "api请求地址"
+ },
+
+ "request_url": {
+ "name": "request_url",
+ "value": "http://dev.ccwin-in.com:25100",
+ "dev":"http://dev.ccwin-in.com:25100",
+ "local":"http://localhost:12080/api",
+ "desc": "api请求地址"
+ },
+ "tenantId": {
+ "name": "tenantId",
+ "value": "1",
+ "desc": "租户id"
+ }
+
+ },
+ "recepit_configList": [
+
+ {
+ "name": "receipt_isEditLocation",
+ "value": true,
+ "desc": "采购收货_实际库位与推荐库位是否一致"
+ },
+ {
+ "name": "receipt_isEditQty",
+ "value": true,
+ "desc": "采购收货_允许编辑数量"
+ },
+ {
+ "name": "receipt_isHandleQtyGreaterRecommendQty",
+ "value": true,
+ "desc": "采购收货_允许实际数量大于推荐数量"
+ },
+ {
+ "name": "receipt_isHandleQtyLessRecommendQty",
+ "value": true,
+ "desc": "采购收货_允许实际数量小于推荐数量"
+ },
+ {
+ "name": "receipt_isContinueScanning",
+ "value": true,
+ "desc": "采购收货_是否连续扫描"
+ },
+ {
+ "name": "receipt_isPartCommit",
+ "value": true,
+ "desc": "采购收货_是否允许部分提交"
+ },
+ {
+ "name": "receipt_isMatchByPartAndBatch",
+ "value": true,
+ "desc": "采购收货_允许模糊匹配(零件+批次)"
+ }
+ ],
+ "feed_configList": [
+
+ {
+ "name": "feed_isEditLocation",
+ "value": true,
+ "desc": "发料_实际库位与推荐库位是否一致"
+ },
+ {
+ "name": "feed_isEditQty",
+ "value": true,
+ "desc": "发料_允许编辑数量"
+ },
+ {
+ "name": "feed_isHandleQtyGreaterRecommendQty",
+ "value": true,
+ "desc": "发料_允许实际数量大于推荐数量"
+ },
+ {
+ "name": "feed_isHandleQtyLessRecommendQty",
+ "value": true,
+ "desc": "发料_允许实际数量小于推荐数量"
+ },
+ {
+ "name": "feed_isContinueScanning",
+ "value": true,
+ "desc": "发料_是否连续扫描"
+ },
+ {
+ "name": "feed_isPartCommit",
+ "value": true,
+ "desc": "发料_是否允许部分提交"
+ },
+ {
+ "name": "feed_isMatchByPartAndBatch",
+ "value": true,
+ "desc": "发料_允许模糊匹配(零件+批次)"
+ },
+ {
+ "name": "feed_isOutIn",
+ "value": true,
+ "desc": "是否按批次先进先出发料"
+ },
+ {
+ "name": "feed_isHandleQtyNoRecommedQty",
+ "value": true,
+ "desc": "实际发料数量是否允许与需求量不同"
+ },
+ {
+ "name": "feed_isScanNoExits",
+ "value": true,
+ "desc": "如果扫描的批次不在列表中,是否允许发料"
+ },
+ {
+ "name": "feed_isScanUpdateCount",
+ "value": true,
+ "desc": "扫描完是否直接修改数量"
+ }
+ ]
+
+
+}
\ No newline at end of file
diff --git a/static/customicons.css b/static/customicons.css
new file mode 100644
index 00000000..14ed5fa8
--- /dev/null
+++ b/static/customicons.css
@@ -0,0 +1,20 @@
+@font-face {
+ font-family: "customicons"; /* Project id 2878519 */
+ src:url('/static/customicons.ttf') format('truetype');
+}
+
+.customicons {
+ font-family: "customicons" !important;
+}
+
+.youxi:before {
+ content: "\e60e";
+}
+
+.wenjian:before {
+ content: "\e60f";
+}
+
+.zhuanfa:before {
+ content: "\e610";
+}
diff --git a/static/customicons.ttf b/static/customicons.ttf
new file mode 100644
index 00000000..a3c8ab9f
Binary files /dev/null and b/static/customicons.ttf differ
diff --git a/static/extui.png b/static/extui.png
new file mode 100644
index 00000000..7508e081
Binary files /dev/null and b/static/extui.png differ
diff --git a/static/extuiHL.png b/static/extuiHL.png
new file mode 100644
index 00000000..612b4999
Binary files /dev/null and b/static/extuiHL.png differ
diff --git a/static/extuiIndex.png b/static/extuiIndex.png
new file mode 100644
index 00000000..dd4d9637
Binary files /dev/null and b/static/extuiIndex.png differ
diff --git a/static/favicon.ico b/static/favicon.ico
deleted file mode 100644
index 6f07782a..00000000
Binary files a/static/favicon.ico and /dev/null differ
diff --git a/static/home-active.png b/static/home-active.png
new file mode 100644
index 00000000..ccba9509
Binary files /dev/null and b/static/home-active.png differ
diff --git a/static/home.png b/static/home.png
new file mode 100644
index 00000000..569c7d08
Binary files /dev/null and b/static/home.png differ
diff --git a/static/icon/iconfont.css b/static/icon/iconfont.css
new file mode 100644
index 00000000..6d78f452
--- /dev/null
+++ b/static/icon/iconfont.css
@@ -0,0 +1,18 @@
+@font-face {
+ font-family: "iconfont";
+ /* Project id */
+ /* src: url('iconfont.ttf?t=1653546564489') format('truetype'); */
+ src: url('@/static/icon/iconfont.ttf') format('truetype');
+}
+
+/* .iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-home:before {
+ content: "\e7c6";
+} */
diff --git a/static/icon/iconfont.ttf b/static/icon/iconfont.ttf
new file mode 100644
index 00000000..ddc7c080
Binary files /dev/null and b/static/icon/iconfont.ttf differ
diff --git a/static/icon/iconfont_filter.css b/static/icon/iconfont_filter.css
new file mode 100644
index 00000000..980b6ae6
--- /dev/null
+++ b/static/icon/iconfont_filter.css
@@ -0,0 +1,17 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 4087030 */
+ src: url('@/static/icon/iconfont_filter.ttf') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-guolv:before {
+ content: "\e6e2";
+}
+
diff --git a/static/icon/iconfont_filter.ttf b/static/icon/iconfont_filter.ttf
new file mode 100644
index 00000000..aa26b102
Binary files /dev/null and b/static/icon/iconfont_filter.ttf differ
diff --git a/static/icon_personal_name.png b/static/icon_personal_name.png
new file mode 100644
index 00000000..88746da4
Binary files /dev/null and b/static/icon_personal_name.png differ
diff --git a/static/icon_personal_password.png b/static/icon_personal_password.png
new file mode 100644
index 00000000..56112873
Binary files /dev/null and b/static/icon_personal_password.png differ
diff --git a/static/icon_personal_setting.png b/static/icon_personal_setting.png
new file mode 100644
index 00000000..7508cf67
Binary files /dev/null and b/static/icon_personal_setting.png differ
diff --git a/static/iconfont.css b/static/iconfont.css
new file mode 100644
index 00000000..18cf80a4
--- /dev/null
+++ b/static/iconfont.css
@@ -0,0 +1,32 @@
+@font-face {
+ font-family: "iconfont"; /* Project id */
+ src: url('@/static/iconfont.ttf') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-link:before {
+ content: "\e772";
+}
+
+.icon-poweroff:before {
+ content: "\e774";
+}
+
+.icon-safety-certificate:before {
+ content: "\e776";
+}
+
+.icon-chart-pie-alt:before {
+ content: "\e78c";
+}
+
+.icon-kongxincai:before {
+ content: "\e642";
+}
diff --git a/static/iconfont.ttf b/static/iconfont.ttf
new file mode 100644
index 00000000..2b132b60
Binary files /dev/null and b/static/iconfont.ttf differ
diff --git a/static/iconfont/iconfont.ttf b/static/iconfont/iconfont.ttf
new file mode 100644
index 00000000..60c76173
Binary files /dev/null and b/static/iconfont/iconfont.ttf differ
diff --git a/static/icons/badge.png b/static/icons/badge.png
new file mode 100644
index 00000000..b32a7a54
Binary files /dev/null and b/static/icons/badge.png differ
diff --git a/static/icons/black_count.svg b/static/icons/black_count.svg
new file mode 100644
index 00000000..7122e627
--- /dev/null
+++ b/static/icons/black_count.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/button.png b/static/icons/button.png
new file mode 100644
index 00000000..461fe674
Binary files /dev/null and b/static/icons/button.png differ
diff --git a/static/icons/calendar.png b/static/icons/calendar.png
new file mode 100644
index 00000000..e8beb9cb
Binary files /dev/null and b/static/icons/calendar.png differ
diff --git a/static/icons/card.png b/static/icons/card.png
new file mode 100644
index 00000000..8426e99a
Binary files /dev/null and b/static/icons/card.png differ
diff --git a/static/icons/checkmark-circle.svg b/static/icons/checkmark-circle.svg
new file mode 100644
index 00000000..d16c84ec
--- /dev/null
+++ b/static/icons/checkmark-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/close-circle.svg b/static/icons/close-circle.svg
new file mode 100644
index 00000000..55c1ffe5
--- /dev/null
+++ b/static/icons/close-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/close-circle2.svg b/static/icons/close-circle2.svg
new file mode 100644
index 00000000..48be7518
--- /dev/null
+++ b/static/icons/close-circle2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/close.svg b/static/icons/close.svg
new file mode 100644
index 00000000..e6a22727
--- /dev/null
+++ b/static/icons/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/collapse.png b/static/icons/collapse.png
new file mode 100644
index 00000000..87da4bba
Binary files /dev/null and b/static/icons/collapse.png differ
diff --git a/static/icons/color.png b/static/icons/color.png
new file mode 100644
index 00000000..a7741436
Binary files /dev/null and b/static/icons/color.png differ
diff --git a/static/icons/combox.png b/static/icons/combox.png
new file mode 100644
index 00000000..c1cb6607
Binary files /dev/null and b/static/icons/combox.png differ
diff --git a/static/icons/countdown.png b/static/icons/countdown.png
new file mode 100644
index 00000000..aa4bf107
Binary files /dev/null and b/static/icons/countdown.png differ
diff --git a/static/icons/data-checkbox.png b/static/icons/data-checkbox.png
new file mode 100644
index 00000000..748bdcbe
Binary files /dev/null and b/static/icons/data-checkbox.png differ
diff --git a/static/icons/data-picker.png b/static/icons/data-picker.png
new file mode 100644
index 00000000..57129643
Binary files /dev/null and b/static/icons/data-picker.png differ
diff --git a/static/icons/dateformat.png b/static/icons/dateformat.png
new file mode 100644
index 00000000..097cbe76
Binary files /dev/null and b/static/icons/dateformat.png differ
diff --git a/static/icons/datetime-picker.png b/static/icons/datetime-picker.png
new file mode 100644
index 00000000..24753fd1
Binary files /dev/null and b/static/icons/datetime-picker.png differ
diff --git a/static/icons/drawer.png b/static/icons/drawer.png
new file mode 100644
index 00000000..73a98023
Binary files /dev/null and b/static/icons/drawer.png differ
diff --git a/static/icons/easyinput.png b/static/icons/easyinput.png
new file mode 100644
index 00000000..569ea580
Binary files /dev/null and b/static/icons/easyinput.png differ
diff --git a/static/icons/error-circle.svg b/static/icons/error-circle.svg
new file mode 100644
index 00000000..effaa054
--- /dev/null
+++ b/static/icons/error-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/fab.png b/static/icons/fab.png
new file mode 100644
index 00000000..e953d904
Binary files /dev/null and b/static/icons/fab.png differ
diff --git a/static/icons/fav.png b/static/icons/fav.png
new file mode 100644
index 00000000..a51153c9
Binary files /dev/null and b/static/icons/fav.png differ
diff --git a/static/icons/file-picker.png b/static/icons/file-picker.png
new file mode 100644
index 00000000..3424795f
Binary files /dev/null and b/static/icons/file-picker.png differ
diff --git a/static/icons/font.png b/static/icons/font.png
new file mode 100644
index 00000000..610983b1
Binary files /dev/null and b/static/icons/font.png differ
diff --git a/static/icons/forms.png b/static/icons/forms.png
new file mode 100644
index 00000000..8bc60b47
Binary files /dev/null and b/static/icons/forms.png differ
diff --git a/static/icons/goods-nav.png b/static/icons/goods-nav.png
new file mode 100644
index 00000000..83ae3f99
Binary files /dev/null and b/static/icons/goods-nav.png differ
diff --git a/static/icons/grid.png b/static/icons/grid.png
new file mode 100644
index 00000000..e50cb7f9
Binary files /dev/null and b/static/icons/grid.png differ
diff --git a/static/icons/group.png b/static/icons/group.png
new file mode 100644
index 00000000..9fe980b9
Binary files /dev/null and b/static/icons/group.png differ
diff --git a/static/icons/icon_customer.svg b/static/icons/icon_customer.svg
new file mode 100644
index 00000000..1ec26047
--- /dev/null
+++ b/static/icons/icon_customer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icon_date.svg b/static/icons/icon_date.svg
new file mode 100644
index 00000000..fd7b17c2
--- /dev/null
+++ b/static/icons/icon_date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icon_eye-fill.svg b/static/icons/icon_eye-fill.svg
new file mode 100644
index 00000000..6cabb848
--- /dev/null
+++ b/static/icons/icon_eye-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icon_eye-off-outline.svg b/static/icons/icon_eye-off-outline.svg
new file mode 100644
index 00000000..a99c7e5b
--- /dev/null
+++ b/static/icons/icon_eye-off-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icon_filter.svg b/static/icons/icon_filter.svg
new file mode 100644
index 00000000..a916a83f
--- /dev/null
+++ b/static/icons/icon_filter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/iconfont.ttf b/static/icons/iconfont.ttf
new file mode 100644
index 00000000..d9c6e1a5
Binary files /dev/null and b/static/icons/iconfont.ttf differ
diff --git a/static/icons/icons.png b/static/icons/icons.png
new file mode 100644
index 00000000..d354ccd0
Binary files /dev/null and b/static/icons/icons.png differ
diff --git a/static/icons/icons_camera.svg b/static/icons/icons_camera.svg
new file mode 100644
index 00000000..4c05bd83
--- /dev/null
+++ b/static/icons/icons_camera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icons_close-circle.svg b/static/icons/icons_close-circle.svg
new file mode 100644
index 00000000..01bb8783
--- /dev/null
+++ b/static/icons/icons_close-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icons_close.svg b/static/icons/icons_close.svg
new file mode 100644
index 00000000..5574d0bb
--- /dev/null
+++ b/static/icons/icons_close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icons_edit.svg b/static/icons/icons_edit.svg
new file mode 100644
index 00000000..e81fde4e
--- /dev/null
+++ b/static/icons/icons_edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/icons_scan_close.svg b/static/icons/icons_scan_close.svg
new file mode 100644
index 00000000..15a32b8a
--- /dev/null
+++ b/static/icons/icons_scan_close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/indexed-list.png b/static/icons/indexed-list.png
new file mode 100644
index 00000000..dd94bb0a
Binary files /dev/null and b/static/icons/indexed-list.png differ
diff --git a/static/icons/is_scaned.svg b/static/icons/is_scaned.svg
new file mode 100644
index 00000000..bbf15494
--- /dev/null
+++ b/static/icons/is_scaned.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/light_count.svg b/static/icons/light_count.svg
new file mode 100644
index 00000000..0e4b9ab9
--- /dev/null
+++ b/static/icons/light_count.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/link.png b/static/icons/link.png
new file mode 100644
index 00000000..de0f33ff
Binary files /dev/null and b/static/icons/link.png differ
diff --git a/static/icons/list.png b/static/icons/list.png
new file mode 100644
index 00000000..688602e1
Binary files /dev/null and b/static/icons/list.png differ
diff --git a/static/icons/load-more.png b/static/icons/load-more.png
new file mode 100644
index 00000000..6f45cc4f
Binary files /dev/null and b/static/icons/load-more.png differ
diff --git a/static/icons/nav-bar.png b/static/icons/nav-bar.png
new file mode 100644
index 00000000..5157ead2
Binary files /dev/null and b/static/icons/nav-bar.png differ
diff --git a/static/icons/no_scaned.svg b/static/icons/no_scaned.svg
new file mode 100644
index 00000000..3dce4972
--- /dev/null
+++ b/static/icons/no_scaned.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/notice-bar.png b/static/icons/notice-bar.png
new file mode 100644
index 00000000..1f73775f
Binary files /dev/null and b/static/icons/notice-bar.png differ
diff --git a/static/icons/number-box.png b/static/icons/number-box.png
new file mode 100644
index 00000000..c454a03d
Binary files /dev/null and b/static/icons/number-box.png differ
diff --git a/static/icons/pagination.png b/static/icons/pagination.png
new file mode 100644
index 00000000..b516577b
Binary files /dev/null and b/static/icons/pagination.png differ
diff --git a/static/icons/plus.svg b/static/icons/plus.svg
new file mode 100644
index 00000000..d8c2ef6a
--- /dev/null
+++ b/static/icons/plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/popup.png b/static/icons/popup.png
new file mode 100644
index 00000000..1058ca41
Binary files /dev/null and b/static/icons/popup.png differ
diff --git a/static/icons/question-circle.svg b/static/icons/question-circle.svg
new file mode 100644
index 00000000..1829a603
--- /dev/null
+++ b/static/icons/question-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/radius.png b/static/icons/radius.png
new file mode 100644
index 00000000..2a173ca5
Binary files /dev/null and b/static/icons/radius.png differ
diff --git a/static/icons/rate.png b/static/icons/rate.png
new file mode 100644
index 00000000..2c582066
Binary files /dev/null and b/static/icons/rate.png differ
diff --git a/static/icons/row.png b/static/icons/row.png
new file mode 100644
index 00000000..48620d80
Binary files /dev/null and b/static/icons/row.png differ
diff --git a/static/icons/search-bar.png b/static/icons/search-bar.png
new file mode 100644
index 00000000..6a82efd1
Binary files /dev/null and b/static/icons/search-bar.png differ
diff --git a/static/icons/search.svg b/static/icons/search.svg
new file mode 100644
index 00000000..0de882b5
--- /dev/null
+++ b/static/icons/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons/section.png b/static/icons/section.png
new file mode 100644
index 00000000..69dffeb2
Binary files /dev/null and b/static/icons/section.png differ
diff --git a/static/icons/segmented-control.png b/static/icons/segmented-control.png
new file mode 100644
index 00000000..5cbe60d5
Binary files /dev/null and b/static/icons/segmented-control.png differ
diff --git a/static/icons/space.png b/static/icons/space.png
new file mode 100644
index 00000000..38c30e0d
Binary files /dev/null and b/static/icons/space.png differ
diff --git a/static/icons/steps.png b/static/icons/steps.png
new file mode 100644
index 00000000..142ea741
Binary files /dev/null and b/static/icons/steps.png differ
diff --git a/static/icons/swipe-action.png b/static/icons/swipe-action.png
new file mode 100644
index 00000000..204b7f9e
Binary files /dev/null and b/static/icons/swipe-action.png differ
diff --git a/static/icons/swiper-dot.png b/static/icons/swiper-dot.png
new file mode 100644
index 00000000..7d682697
Binary files /dev/null and b/static/icons/swiper-dot.png differ
diff --git a/static/icons/tag.png b/static/icons/tag.png
new file mode 100644
index 00000000..fe8f27de
Binary files /dev/null and b/static/icons/tag.png differ
diff --git a/static/icons/title.png b/static/icons/title.png
new file mode 100644
index 00000000..298336c3
Binary files /dev/null and b/static/icons/title.png differ
diff --git a/static/icons/transition.png b/static/icons/transition.png
new file mode 100644
index 00000000..48248027
Binary files /dev/null and b/static/icons/transition.png differ
diff --git a/static/icons/warning.svg b/static/icons/warning.svg
new file mode 100644
index 00000000..a5170200
--- /dev/null
+++ b/static/icons/warning.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons_ui/default_blank.png b/static/icons_ui/default_blank.png
new file mode 100644
index 00000000..a9f0fdaa
Binary files /dev/null and b/static/icons_ui/default_blank.png differ
diff --git a/static/icons_ui/default_data.png b/static/icons_ui/default_data.png
new file mode 100644
index 00000000..939913ab
Binary files /dev/null and b/static/icons_ui/default_data.png differ
diff --git a/static/icons_ui/default_notpassed.png b/static/icons_ui/default_notpassed.png
new file mode 100644
index 00000000..b78385be
Binary files /dev/null and b/static/icons_ui/default_notpassed.png differ
diff --git a/static/icons_ui/icon_add.svg b/static/icons_ui/icon_add.svg
new file mode 100644
index 00000000..5edc0379
--- /dev/null
+++ b/static/icons_ui/icon_add.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_apply_num.svg b/static/icons_ui/icon_apply_num.svg
new file mode 100644
index 00000000..9c098c4f
--- /dev/null
+++ b/static/icons_ui/icon_apply_num.svg
@@ -0,0 +1,13 @@
+
diff --git a/static/icons_ui/icon_asn.svg b/static/icons_ui/icon_asn.svg
new file mode 100644
index 00000000..e1ab37d5
--- /dev/null
+++ b/static/icons_ui/icon_asn.svg
@@ -0,0 +1,12 @@
+
diff --git a/static/icons_ui/icon_avn.svg b/static/icons_ui/icon_avn.svg
new file mode 100644
index 00000000..d2694bc0
--- /dev/null
+++ b/static/icons_ui/icon_avn.svg
@@ -0,0 +1,12 @@
+
diff --git a/static/icons_ui/icon_buy_num.svg b/static/icons_ui/icon_buy_num.svg
new file mode 100644
index 00000000..9a6f3632
--- /dev/null
+++ b/static/icons_ui/icon_buy_num.svg
@@ -0,0 +1,13 @@
+
diff --git a/static/icons_ui/icon_camera_black.svg b/static/icons_ui/icon_camera_black.svg
new file mode 100644
index 00000000..94c440c0
--- /dev/null
+++ b/static/icons_ui/icon_camera_black.svg
@@ -0,0 +1,8 @@
+
diff --git a/static/icons_ui/icon_camera_white.svg b/static/icons_ui/icon_camera_white.svg
new file mode 100644
index 00000000..8bdb5dc3
--- /dev/null
+++ b/static/icons_ui/icon_camera_white.svg
@@ -0,0 +1,8 @@
+
diff --git a/static/icons_ui/icon_close.svg b/static/icons_ui/icon_close.svg
new file mode 100644
index 00000000..7c0e9dd9
--- /dev/null
+++ b/static/icons_ui/icon_close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons_ui/icon_customer.svg b/static/icons_ui/icon_customer.svg
new file mode 100644
index 00000000..ced7ba78
--- /dev/null
+++ b/static/icons_ui/icon_customer.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_date.svg b/static/icons_ui/icon_date.svg
new file mode 100644
index 00000000..de352cd9
--- /dev/null
+++ b/static/icons_ui/icon_date.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_down.svg b/static/icons_ui/icon_down.svg
new file mode 100644
index 00000000..95a4c411
--- /dev/null
+++ b/static/icons_ui/icon_down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons_ui/icon_erp.svg b/static/icons_ui/icon_erp.svg
new file mode 100644
index 00000000..385359dd
--- /dev/null
+++ b/static/icons_ui/icon_erp.svg
@@ -0,0 +1,11 @@
+
diff --git a/static/icons_ui/icon_form.svg b/static/icons_ui/icon_form.svg
new file mode 100644
index 00000000..d6fc9f2b
--- /dev/null
+++ b/static/icons_ui/icon_form.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_kw.svg b/static/icons_ui/icon_kw.svg
new file mode 100644
index 00000000..54f3ffc5
--- /dev/null
+++ b/static/icons_ui/icon_kw.svg
@@ -0,0 +1,10 @@
+
diff --git a/static/icons_ui/icon_kw_blue.svg b/static/icons_ui/icon_kw_blue.svg
new file mode 100644
index 00000000..23f200dc
--- /dev/null
+++ b/static/icons_ui/icon_kw_blue.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_kw_use.svg b/static/icons_ui/icon_kw_use.svg
new file mode 100644
index 00000000..f0f037aa
--- /dev/null
+++ b/static/icons_ui/icon_kw_use.svg
@@ -0,0 +1,10 @@
+
diff --git a/static/icons_ui/icon_login_password.svg b/static/icons_ui/icon_login_password.svg
new file mode 100644
index 00000000..4ece043e
--- /dev/null
+++ b/static/icons_ui/icon_login_password.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_login_user.svg b/static/icons_ui/icon_login_user.svg
new file mode 100644
index 00000000..a628595f
--- /dev/null
+++ b/static/icons_ui/icon_login_user.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_notpass.svg b/static/icons_ui/icon_notpass.svg
new file mode 100644
index 00000000..9c4ea07a
--- /dev/null
+++ b/static/icons_ui/icon_notpass.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_num.svg b/static/icons_ui/icon_num.svg
new file mode 100644
index 00000000..75ba5108
--- /dev/null
+++ b/static/icons_ui/icon_num.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_passed.svg b/static/icons_ui/icon_passed.svg
new file mode 100644
index 00000000..5a064710
--- /dev/null
+++ b/static/icons_ui/icon_passed.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_pc.svg b/static/icons_ui/icon_pc.svg
new file mode 100644
index 00000000..95698a04
--- /dev/null
+++ b/static/icons_ui/icon_pc.svg
@@ -0,0 +1,10 @@
+
diff --git a/static/icons_ui/icon_ponumber.svg b/static/icons_ui/icon_ponumber.svg
new file mode 100644
index 00000000..3f1e82dc
--- /dev/null
+++ b/static/icons_ui/icon_ponumber.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_prod_line.svg b/static/icons_ui/icon_prod_line.svg
new file mode 100644
index 00000000..eabccd58
--- /dev/null
+++ b/static/icons_ui/icon_prod_line.svg
@@ -0,0 +1,12 @@
+
diff --git a/static/icons_ui/icon_qiju_end.svg b/static/icons_ui/icon_qiju_end.svg
new file mode 100644
index 00000000..b1780e42
--- /dev/null
+++ b/static/icons_ui/icon_qiju_end.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_qiju_num.svg b/static/icons_ui/icon_qiju_num.svg
new file mode 100644
index 00000000..3879b8e1
--- /dev/null
+++ b/static/icons_ui/icon_qiju_num.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_qiju_start.svg b/static/icons_ui/icon_qiju_start.svg
new file mode 100644
index 00000000..d2b3dc43
--- /dev/null
+++ b/static/icons_ui/icon_qiju_start.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_return_num.svg b/static/icons_ui/icon_return_num.svg
new file mode 100644
index 00000000..5677a551
--- /dev/null
+++ b/static/icons_ui/icon_return_num.svg
@@ -0,0 +1,12 @@
+
diff --git a/static/icons_ui/icon_scan_white.svg b/static/icons_ui/icon_scan_white.svg
new file mode 100644
index 00000000..a661468f
--- /dev/null
+++ b/static/icons_ui/icon_scan_white.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_send_request.svg b/static/icons_ui/icon_send_request.svg
new file mode 100644
index 00000000..f352b54c
--- /dev/null
+++ b/static/icons_ui/icon_send_request.svg
@@ -0,0 +1,12 @@
+
diff --git a/static/icons_ui/icon_senditem.svg b/static/icons_ui/icon_senditem.svg
new file mode 100644
index 00000000..2f8404b1
--- /dev/null
+++ b/static/icons_ui/icon_senditem.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_supplier.svg b/static/icons_ui/icon_supplier.svg
new file mode 100644
index 00000000..f0991f87
--- /dev/null
+++ b/static/icons_ui/icon_supplier.svg
@@ -0,0 +1,11 @@
+
diff --git a/static/icons_ui/icon_take_photo.svg b/static/icons_ui/icon_take_photo.svg
new file mode 100644
index 00000000..e6421d31
--- /dev/null
+++ b/static/icons_ui/icon_take_photo.svg
@@ -0,0 +1,8 @@
+
diff --git a/static/icons_ui/icon_tasknum.svg b/static/icons_ui/icon_tasknum.svg
new file mode 100644
index 00000000..247dbf27
--- /dev/null
+++ b/static/icons_ui/icon_tasknum.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_tenant.svg b/static/icons_ui/icon_tenant.svg
new file mode 100644
index 00000000..7707804c
--- /dev/null
+++ b/static/icons_ui/icon_tenant.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/icons_ui/icon_time.svg b/static/icons_ui/icon_time.svg
new file mode 100644
index 00000000..a7063175
--- /dev/null
+++ b/static/icons_ui/icon_time.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_tm.svg b/static/icons_ui/icon_tm.svg
new file mode 100644
index 00000000..669bfcb1
--- /dev/null
+++ b/static/icons_ui/icon_tm.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/icons_ui/icon_xm.svg b/static/icons_ui/icon_xm.svg
new file mode 100644
index 00000000..80425fc9
--- /dev/null
+++ b/static/icons_ui/icon_xm.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icon_xm_blue.svg b/static/icons_ui/icon_xm_blue.svg
new file mode 100644
index 00000000..468012f2
--- /dev/null
+++ b/static/icons_ui/icon_xm_blue.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/icons_common_recceipt.svg b/static/icons_ui/icons_common_recceipt.svg
new file mode 100644
index 00000000..78ee356d
--- /dev/null
+++ b/static/icons_ui/icons_common_recceipt.svg
@@ -0,0 +1,8 @@
+
diff --git a/static/icons_ui/icons_common_sjadd.svg b/static/icons_ui/icons_common_sjadd.svg
new file mode 100644
index 00000000..2f67b516
--- /dev/null
+++ b/static/icons_ui/icons_common_sjadd.svg
@@ -0,0 +1,9 @@
+
diff --git a/static/icons_ui/label_scx.svg b/static/icons_ui/label_scx.svg
new file mode 100644
index 00000000..31d0882f
--- /dev/null
+++ b/static/icons_ui/label_scx.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/icons_ui/login_bg.png b/static/icons_ui/login_bg.png
new file mode 100644
index 00000000..a062de19
Binary files /dev/null and b/static/icons_ui/login_bg.png differ
diff --git a/static/icons_ui/popup_bot_bg.png b/static/icons_ui/popup_bot_bg.png
new file mode 100644
index 00000000..e024500f
Binary files /dev/null and b/static/icons_ui/popup_bot_bg.png differ
diff --git a/static/image-active.png b/static/image-active.png
new file mode 100644
index 00000000..407cabb8
Binary files /dev/null and b/static/image-active.png differ
diff --git a/static/image.png b/static/image.png
new file mode 100644
index 00000000..008a677c
Binary files /dev/null and b/static/image.png differ
diff --git a/static/image/uniui-header-bg.png b/static/image/uniui-header-bg.png
new file mode 100644
index 00000000..aa3827ce
Binary files /dev/null and b/static/image/uniui-header-bg.png differ
diff --git a/static/image/uniui-logo.png b/static/image/uniui-logo.png
new file mode 100644
index 00000000..5a3f0a8a
Binary files /dev/null and b/static/image/uniui-logo.png differ
diff --git a/static/image_marked.svg b/static/image_marked.svg
new file mode 100644
index 00000000..6dcb132c
--- /dev/null
+++ b/static/image_marked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/images/banner/banner01.jpg b/static/images/banner/banner01.jpg
deleted file mode 100644
index fdb1e167..00000000
Binary files a/static/images/banner/banner01.jpg and /dev/null differ
diff --git a/static/images/banner/banner02.jpg b/static/images/banner/banner02.jpg
deleted file mode 100644
index 1086afd3..00000000
Binary files a/static/images/banner/banner02.jpg and /dev/null differ
diff --git a/static/images/banner/banner03.jpg b/static/images/banner/banner03.jpg
deleted file mode 100644
index 092a5fc2..00000000
Binary files a/static/images/banner/banner03.jpg and /dev/null differ
diff --git a/static/images/default.jpg b/static/images/default.jpg
deleted file mode 100644
index aa0237bb..00000000
Binary files a/static/images/default.jpg and /dev/null differ
diff --git a/static/images/message.svg b/static/images/message.svg
new file mode 100644
index 00000000..28380e52
--- /dev/null
+++ b/static/images/message.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/images/tabbar/home.png b/static/images/tabbar/home.png
deleted file mode 100644
index 50acdfdd..00000000
Binary files a/static/images/tabbar/home.png and /dev/null differ
diff --git a/static/images/tabbar/home_.png b/static/images/tabbar/home_.png
deleted file mode 100644
index a408f71b..00000000
Binary files a/static/images/tabbar/home_.png and /dev/null differ
diff --git a/static/images/tabbar/mine.png b/static/images/tabbar/mine.png
deleted file mode 100644
index f13fe44d..00000000
Binary files a/static/images/tabbar/mine.png and /dev/null differ
diff --git a/static/images/tabbar/mine_.png b/static/images/tabbar/mine_.png
deleted file mode 100644
index 8a0a742f..00000000
Binary files a/static/images/tabbar/mine_.png and /dev/null differ
diff --git a/static/images/tabbar/work.png b/static/images/tabbar/work.png
deleted file mode 100644
index 21e130d8..00000000
Binary files a/static/images/tabbar/work.png and /dev/null differ
diff --git a/static/images/tabbar/work_.png b/static/images/tabbar/work_.png
deleted file mode 100644
index 80b979c5..00000000
Binary files a/static/images/tabbar/work_.png and /dev/null differ
diff --git a/static/index.html b/static/index.html
deleted file mode 100644
index a7af653b..00000000
--- a/static/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
- <%= htmlWebpackPlugin.options.title %>
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/static/location.png b/static/location.png
new file mode 100644
index 00000000..c195e0ae
Binary files /dev/null and b/static/location.png differ
diff --git a/static/login.png b/static/login.png
new file mode 100644
index 00000000..3cc9c2f9
Binary files /dev/null and b/static/login.png differ
diff --git a/static/logo.png b/static/logo.png
index b4270c06..b5771e20 100644
Binary files a/static/logo.png and b/static/logo.png differ
diff --git a/static/logo200.png b/static/logo200.png
deleted file mode 100644
index ffa99882..00000000
Binary files a/static/logo200.png and /dev/null differ
diff --git a/static/menu.png b/static/menu.png
new file mode 100644
index 00000000..a3a92c19
Binary files /dev/null and b/static/menu.png differ
diff --git a/static/menus/count.svg b/static/menus/count.svg
new file mode 100644
index 00000000..ee864718
--- /dev/null
+++ b/static/menus/count.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/createTP.svg b/static/menus/createTP.svg
new file mode 100644
index 00000000..6390c693
--- /dev/null
+++ b/static/menus/createTP.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/deliver.svg b/static/menus/deliver.svg
new file mode 100644
index 00000000..7353500c
--- /dev/null
+++ b/static/menus/deliver.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/deliverAll.svg b/static/menus/deliverAll.svg
new file mode 100644
index 00000000..f8c24f50
--- /dev/null
+++ b/static/menus/deliverAll.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/deliverFG.svg b/static/menus/deliverFG.svg
new file mode 100644
index 00000000..febc8664
--- /dev/null
+++ b/static/menus/deliverFG.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/deliverMany.svg b/static/menus/deliverMany.svg
new file mode 100644
index 00000000..c5ef91e4
--- /dev/null
+++ b/static/menus/deliverMany.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/deliverTF.svg b/static/menus/deliverTF.svg
new file mode 100644
index 00000000..db51bc21
--- /dev/null
+++ b/static/menus/deliverTF.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/dy_menu/menu_cw_allot.svg b/static/menus/dy_menu/menu_cw_allot.svg
new file mode 100644
index 00000000..e4774d4e
--- /dev/null
+++ b/static/menus/dy_menu/menu_cw_allot.svg
@@ -0,0 +1,10 @@
+
diff --git a/static/menus/dy_menu/menu_cw_in.svg b/static/menus/dy_menu/menu_cw_in.svg
new file mode 100644
index 00000000..5d21e7f6
--- /dev/null
+++ b/static/menus/dy_menu/menu_cw_in.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/menus/dy_menu/menu_cw_out.svg b/static/menus/dy_menu/menu_cw_out.svg
new file mode 100644
index 00000000..a8233bec
--- /dev/null
+++ b/static/menus/dy_menu/menu_cw_out.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/menus/dy_menu/menu_cw_yk.svg b/static/menus/dy_menu/menu_cw_yk.svg
new file mode 100644
index 00000000..9716d16b
--- /dev/null
+++ b/static/menus/dy_menu/menu_cw_yk.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/menus/dy_menu/menu_fh.svg b/static/menus/dy_menu/menu_fh.svg
new file mode 100644
index 00000000..94a101ed
--- /dev/null
+++ b/static/menus/dy_menu/menu_fh.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/menus/dy_menu/menu_fl.svg b/static/menus/dy_menu/menu_fl.svg
new file mode 100644
index 00000000..3f09ef4e
--- /dev/null
+++ b/static/menus/dy_menu/menu_fl.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/menus/dy_menu/menu_fl_bcp.svg b/static/menus/dy_menu/menu_fl_bcp.svg
new file mode 100644
index 00000000..b79d0cab
--- /dev/null
+++ b/static/menus/dy_menu/menu_fl_bcp.svg
@@ -0,0 +1,7 @@
+
diff --git a/static/menus/dy_menu/menu_hsl_adjust.svg b/static/menus/dy_menu/menu_hsl_adjust.svg
new file mode 100644
index 00000000..6c7895e9
--- /dev/null
+++ b/static/menus/dy_menu/menu_hsl_adjust.svg
@@ -0,0 +1,13 @@
+
diff --git a/static/menus/dy_menu/menu_hsl_in.svg b/static/menus/dy_menu/menu_hsl_in.svg
new file mode 100644
index 00000000..f8adb460
--- /dev/null
+++ b/static/menus/dy_menu/menu_hsl_in.svg
@@ -0,0 +1,7 @@
+
diff --git a/static/menus/dy_menu/menu_kc_refer.svg b/static/menus/dy_menu/menu_kc_refer.svg
new file mode 100644
index 00000000..f355227e
--- /dev/null
+++ b/static/menus/dy_menu/menu_kc_refer.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_return_sjh.svg b/static/menus/dy_menu/menu_return_sjh.svg
new file mode 100644
index 00000000..a1fde345
--- /dev/null
+++ b/static/menus/dy_menu/menu_return_sjh.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_return_sjq.svg b/static/menus/dy_menu/menu_return_sjq.svg
new file mode 100644
index 00000000..527515d4
--- /dev/null
+++ b/static/menus/dy_menu/menu_return_sjq.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/menus/dy_menu/menu_search_kw.svg b/static/menus/dy_menu/menu_search_kw.svg
new file mode 100644
index 00000000..aad9b859
--- /dev/null
+++ b/static/menus/dy_menu/menu_search_kw.svg
@@ -0,0 +1,8 @@
+
diff --git a/static/menus/dy_menu/menu_search_lj.svg b/static/menus/dy_menu/menu_search_lj.svg
new file mode 100644
index 00000000..fb40fa7a
--- /dev/null
+++ b/static/menus/dy_menu/menu_search_lj.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/menus/dy_menu/menu_sh_receipt.svg b/static/menus/dy_menu/menu_sh_receipt.svg
new file mode 100644
index 00000000..b9a745fa
--- /dev/null
+++ b/static/menus/dy_menu/menu_sh_receipt.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_sj_add.svg b/static/menus/dy_menu/menu_sj_add.svg
new file mode 100644
index 00000000..48ec86ca
--- /dev/null
+++ b/static/menus/dy_menu/menu_sj_add.svg
@@ -0,0 +1,6 @@
+
diff --git a/static/menus/dy_menu/menu_sj_bcp.svg b/static/menus/dy_menu/menu_sj_bcp.svg
new file mode 100644
index 00000000..86986733
--- /dev/null
+++ b/static/menus/dy_menu/menu_sj_bcp.svg
@@ -0,0 +1,9 @@
+
diff --git a/static/menus/dy_menu/menu_sj_execute.svg b/static/menus/dy_menu/menu_sj_execute.svg
new file mode 100644
index 00000000..69c0b50c
--- /dev/null
+++ b/static/menus/dy_menu/menu_sj_execute.svg
@@ -0,0 +1,7 @@
+
diff --git a/static/menus/dy_menu/menu_tk.svg b/static/menus/dy_menu/menu_tk.svg
new file mode 100644
index 00000000..9a0ac6df
--- /dev/null
+++ b/static/menus/dy_menu/menu_tk.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_yl_del.svg b/static/menus/dy_menu/menu_yl_del.svg
new file mode 100644
index 00000000..ab829ec3
--- /dev/null
+++ b/static/menus/dy_menu/menu_yl_del.svg
@@ -0,0 +1,7 @@
+
diff --git a/static/menus/dy_menu/menu_ylzf.svg b/static/menus/dy_menu/menu_ylzf.svg
new file mode 100644
index 00000000..ef4d4d30
--- /dev/null
+++ b/static/menus/dy_menu/menu_ylzf.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_zjfl.svg b/static/menus/dy_menu/menu_zjfl.svg
new file mode 100644
index 00000000..c708575b
--- /dev/null
+++ b/static/menus/dy_menu/menu_zjfl.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/dy_menu/menu_zjtk.svg b/static/menus/dy_menu/menu_zjtk.svg
new file mode 100644
index 00000000..8a25306d
--- /dev/null
+++ b/static/menus/dy_menu/menu_zjtk.svg
@@ -0,0 +1,5 @@
+
diff --git a/static/menus/hold.svg b/static/menus/hold.svg
new file mode 100644
index 00000000..547ca8d9
--- /dev/null
+++ b/static/menus/hold.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/inspect.svg b/static/menus/inspect.svg
new file mode 100644
index 00000000..a98a13ef
--- /dev/null
+++ b/static/menus/inspect.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/instruments.svg b/static/menus/instruments.svg
new file mode 100644
index 00000000..f93946b3
--- /dev/null
+++ b/static/menus/instruments.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/issue.svg b/static/menus/issue.svg
new file mode 100644
index 00000000..f57f384d
--- /dev/null
+++ b/static/menus/issue.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/issueByFIFO.svg b/static/menus/issueByFIFO.svg
new file mode 100644
index 00000000..2f2a1e50
--- /dev/null
+++ b/static/menus/issueByFIFO.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/location.svg b/static/menus/location.svg
new file mode 100644
index 00000000..dd72a99f
--- /dev/null
+++ b/static/menus/location.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/merge.svg b/static/menus/merge.svg
new file mode 100644
index 00000000..3cc8bca1
--- /dev/null
+++ b/static/menus/merge.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/part.svg b/static/menus/part.svg
new file mode 100644
index 00000000..3a455a69
--- /dev/null
+++ b/static/menus/part.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/parts.svg b/static/menus/parts.svg
new file mode 100644
index 00000000..6b49534d
--- /dev/null
+++ b/static/menus/parts.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/product_receipt.svg b/static/menus/product_receipt.svg
new file mode 100644
index 00000000..4ddb8016
--- /dev/null
+++ b/static/menus/product_receipt.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/product_recycle.svg b/static/menus/product_recycle.svg
new file mode 100644
index 00000000..6752439d
--- /dev/null
+++ b/static/menus/product_recycle.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/product_recycle11.svg b/static/menus/product_recycle11.svg
new file mode 100644
index 00000000..8aae1e6b
--- /dev/null
+++ b/static/menus/product_recycle11.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/putaway.svg b/static/menus/putaway.svg
new file mode 100644
index 00000000..7ec5134c
--- /dev/null
+++ b/static/menus/putaway.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/putawayjob.svg b/static/menus/putawayjob.svg
new file mode 100644
index 00000000..4d5996c0
--- /dev/null
+++ b/static/menus/putawayjob.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/receipt.svg b/static/menus/receipt.svg
new file mode 100644
index 00000000..b3307462
--- /dev/null
+++ b/static/menus/receipt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/receiptOrder.svg b/static/menus/receiptOrder.svg
new file mode 100644
index 00000000..56cbe823
--- /dev/null
+++ b/static/menus/receiptOrder.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/receiptRandom.svg b/static/menus/receiptRandom.svg
new file mode 100644
index 00000000..8ee13c3b
--- /dev/null
+++ b/static/menus/receiptRandom.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/receipt_tj_mes.svg b/static/menus/receipt_tj_mes.svg
new file mode 100644
index 00000000..b7848de6
--- /dev/null
+++ b/static/menus/receipt_tj_mes.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/replen.svg b/static/menus/replen.svg
new file mode 100644
index 00000000..d45ff091
--- /dev/null
+++ b/static/menus/replen.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/returnAfterPutaway.svg b/static/menus/returnAfterPutaway.svg
new file mode 100644
index 00000000..60734ce9
--- /dev/null
+++ b/static/menus/returnAfterPutaway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/returnBeforPutaway.svg b/static/menus/returnBeforPutaway.svg
new file mode 100644
index 00000000..9ecb6f9e
--- /dev/null
+++ b/static/menus/returnBeforPutaway.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/scrap.svg b/static/menus/scrap.svg
new file mode 100644
index 00000000..22f9694f
--- /dev/null
+++ b/static/menus/scrap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/stockReturn.svg b/static/menus/stockReturn.svg
new file mode 100644
index 00000000..d696b142
--- /dev/null
+++ b/static/menus/stockReturn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/transfer.svg b/static/menus/transfer.svg
new file mode 100644
index 00000000..c790a66b
--- /dev/null
+++ b/static/menus/transfer.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/transferIssue.svg b/static/menus/transferIssue.svg
new file mode 100644
index 00000000..5b1396a8
--- /dev/null
+++ b/static/menus/transferIssue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/transferNoLocation.svg b/static/menus/transferNoLocation.svg
new file mode 100644
index 00000000..8f35c29a
--- /dev/null
+++ b/static/menus/transferNoLocation.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/transferReceipt.svg b/static/menus/transferReceipt.svg
new file mode 100644
index 00000000..7af2832d
--- /dev/null
+++ b/static/menus/transferReceipt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/menus/unissue.svg b/static/menus/unissue.svg
new file mode 100644
index 00000000..4852d4af
--- /dev/null
+++ b/static/menus/unissue.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/unpick.svg b/static/menus/unpick.svg
new file mode 100644
index 00000000..a25c5ed0
--- /dev/null
+++ b/static/menus/unpick.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/menus/unreceipt.svg b/static/menus/unreceipt.svg
new file mode 100644
index 00000000..95ad6272
--- /dev/null
+++ b/static/menus/unreceipt.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/static/nav.png b/static/nav.png
new file mode 100644
index 00000000..57b420b8
Binary files /dev/null and b/static/nav.png differ
diff --git a/static/no_more.png b/static/no_more.png
new file mode 100644
index 00000000..8bca5fed
Binary files /dev/null and b/static/no_more.png differ
diff --git a/static/pause.png b/static/pause.png
new file mode 100644
index 00000000..9acb73de
Binary files /dev/null and b/static/pause.png differ
diff --git a/static/play.png b/static/play.png
new file mode 100644
index 00000000..982f2f27
Binary files /dev/null and b/static/play.png differ
diff --git a/static/plus.png b/static/plus.png
new file mode 100644
index 00000000..73ddfe38
Binary files /dev/null and b/static/plus.png differ
diff --git a/static/record.png b/static/record.png
new file mode 100644
index 00000000..a62ef816
Binary files /dev/null and b/static/record.png differ
diff --git a/static/refresher_loading.gif b/static/refresher_loading.gif
new file mode 100644
index 00000000..1ee754f3
Binary files /dev/null and b/static/refresher_loading.gif differ
diff --git a/static/shuijiao.jpg b/static/shuijiao.jpg
new file mode 100644
index 00000000..b654b9cd
Binary files /dev/null and b/static/shuijiao.jpg differ
diff --git a/static/star-active.png b/static/star-active.png
new file mode 100644
index 00000000..9ca15ab8
Binary files /dev/null and b/static/star-active.png differ
diff --git a/static/star.png b/static/star.png
new file mode 100644
index 00000000..40eb2324
Binary files /dev/null and b/static/star.png differ
diff --git a/static/stop.png b/static/stop.png
new file mode 100644
index 00000000..9e65f3e8
Binary files /dev/null and b/static/stop.png differ
diff --git a/static/template.png b/static/template.png
new file mode 100644
index 00000000..409ec9b9
Binary files /dev/null and b/static/template.png differ
diff --git a/static/templateHL.png b/static/templateHL.png
new file mode 100644
index 00000000..40184485
Binary files /dev/null and b/static/templateHL.png differ
diff --git a/static/templateIndex.png b/static/templateIndex.png
new file mode 100644
index 00000000..7c986eac
Binary files /dev/null and b/static/templateIndex.png differ
diff --git a/static/trash.png b/static/trash.png
new file mode 100644
index 00000000..83d68f3a
Binary files /dev/null and b/static/trash.png differ
diff --git a/static/uni.png b/static/uni.png
new file mode 100644
index 00000000..8e3a80f4
Binary files /dev/null and b/static/uni.png differ
diff --git a/static/uni.ttf b/static/uni.ttf
new file mode 100644
index 00000000..60a1968d
Binary files /dev/null and b/static/uni.ttf differ
diff --git a/static/version.json b/static/version.json
new file mode 100644
index 00000000..05c4a4c7
--- /dev/null
+++ b/static/version.json
@@ -0,0 +1,3 @@
+{
+ "version": "02.24.2"
+}
\ No newline at end of file
diff --git a/static/video/error.wav b/static/video/error.wav
new file mode 100644
index 00000000..b89de3e2
Binary files /dev/null and b/static/video/error.wav differ
diff --git a/store/getters.js b/store/getters.js
index 88547941..e5dbfae7 100644
--- a/store/getters.js
+++ b/store/getters.js
@@ -1,8 +1,10 @@
const getters = {
+ id:id=>state.user.id,
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
roles: state => state.user.roles,
- permissions: state => state.user.permissions
+ permissions: state => state.user.permissions,
+ hasLogin:state=>state.user.hasLogin
}
export default getters
diff --git a/store/index.js b/store/index.js
index 83a9db56..ec5bd8f2 100644
--- a/store/index.js
+++ b/store/index.js
@@ -1,15 +1,10 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
import user from '@/store/modules/user'
import getters from './getters'
-
-Vue.use(Vuex)
-
-const store = new Vuex.Store({
+import { createStore } from "vuex";
+const store = createStore({
modules: {
user
},
getters
-})
-
-export default store
+});
+export default store;
\ No newline at end of file
diff --git a/store/modules/user.js b/store/modules/user.js
index 7d03c1a2..10ff141c 100644
--- a/store/modules/user.js
+++ b/store/modules/user.js
@@ -1,98 +1,128 @@
import config from '@/config'
-import storage from '@/utils/storage'
-import constant from '@/utils/constant'
-import { login, logout, getInfo } from '@/api/login'
-import { setToken, removeToken } from '@/utils/auth'
+import storage from '@/common/utils/storage'
+import {
+ login,
+ logout,
+ getPermissionInfo,
+ getTenantInfo
+} from '@/api/request2'
-const baseUrl = config.baseUrl
const user = {
- state: {
- id: 0, // 用户编号
- name: storage.get(constant.name),
- avatar: storage.get(constant.avatar),
- roles: storage.get(constant.roles),
- permissions: storage.get(constant.permissions)
- },
+ state: {
+ id: 0, // 用户编号
+ name: storage.getStorage(storage.constant.name),
+ avatar: storage.getStorage(storage.constant.avatar),
+ roles: storage.getStorage(storage.constant.roles),
+ permissions: storage.getStorage(storage.constant.permissions)
+ },
- mutations: {
- SET_ID: (state, id) => {
- state.id = id
- },
- SET_NAME: (state, name) => {
- state.name = name
- storage.set(constant.name, name)
- },
- SET_AVATAR: (state, avatar) => {
- state.avatar = avatar
- storage.set(constant.avatar, avatar)
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles
- storage.set(constant.roles, roles)
- },
- SET_PERMISSIONS: (state, permissions) => {
- state.permissions = permissions
- storage.set(constant.permissions, permissions)
- }
- },
+ mutations: {
+ SET_ID: (state, id) => {
+ state.id = id
+ },
+ SET_NAME: (state, name) => {
+ state.name = name
+ storage.setStorage(storage.constant.name, name)
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar
+ storage.setStorage(storage.constant.avatar, avatar)
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles
+ storage.setStorage(storage.constant.roles, roles)
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions
+ storage.setStorage(storage.constant.permissions, permissions)
+ },
- actions: {
- // 登录
- Login({ commit }, userInfo) {
- const username = userInfo.username.trim()
- const password = userInfo.password
- const captchaVerification = userInfo.captchaVerification
- return new Promise((resolve, reject) => {
- login(username, password, captchaVerification).then(res => {
- res = res.data;
- // 设置 token
- setToken(res)
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
- },
+ },
- // 获取用户信息
- GetInfo({ commit, state }) {
- return new Promise((resolve, reject) => {
- getInfo().then(res => {
- res = res.data; // 读取 data 数据
- const user = res.user
- const avatar = (user == null || user.avatar === "" || user.avatar == null) ? require("@/static/images/profile.jpg") : user.avatar
- const nickname = (user == null || user.nickname === "" || user.nickname == null) ? "" : user.nickname
- if (res.roles && res.roles.length > 0) {
- commit('SET_ROLES', res.roles)
- commit('SET_PERMISSIONS', res.permissions)
- } else {
- commit('SET_ROLES', ['ROLE_DEFAULT'])
- }
- commit('SET_NAME', nickname)
- commit('SET_AVATAR', avatar)
- resolve(res)
- }).catch(error => {
- reject(error)
- })
- })
- },
+ actions: {
+ // 登录
+ Login({
+ commit
+ }, userInfo) {
+ const username = userInfo.username
+ const password = userInfo.password
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+
+ return new Promise((resolve, reject) => {
+ login(username, password, code, uuid).then(res => {
+ if(res.data){
+ res = res.data;
+ // 设置 token
+ storage.setStorage(storage.constant.token,res.accessToken)
+ resolve(res)
+ }else {
+ uni.showToast({
+ title:res.msg
+ })
+ }
+
+ }).catch(error => {
+ reject(error)
+ uni.showToast({
+ title:error
+ })
+ })
+ })
+ },
- // 退出系统
- LogOut({ commit, state }) {
- return new Promise((resolve, reject) => {
- logout(state.token).then(() => {
- commit('SET_ROLES', [])
- commit('SET_PERMISSIONS', [])
- removeToken()
- storage.clean()
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
- }
- }
+ // 获取用户信息
+ getPermissionInfo({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ getPermissionInfo().then(res => {
+ res = res.data; // 读取 data 数据
+ const user = res.user
+ const avatar = (user == null || user.avatar === "" || user.avatar == null) ?
+ require("@/static/images/profile.jpg") : user.avatar
+ const nickname = (user == null || user.nickname === "" || user.nickname ==
+ null) ? "" : user.nickname
+ if (res.roles && res.roles.length > 0) {
+ commit('SET_ROLES', res.roles)
+ commit('SET_PERMISSIONS', res.permissions)
+ } else {
+ commit('SET_ROLES', ['ROLE_DEFAULT'])
+ }
+ commit('SET_NAME', nickname)
+ commit('SET_AVATAR', avatar)
+ commit('SET_ID',user.id)
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ uni.showToast({
+ title:"用户信息获取失败"
+ })
+ })
+ })
+ },
+
+ // 退出系统
+ LogOut({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ logout(state.token).then(() => {
+ commit('SET_ROLES', [])
+ commit('SET_PERMISSIONS', [])
+ commit('SET_ID',[])
+ storage.removeStorage(storage.constant.token)
+ storage.clearStorage()
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ }
+ }
}
export default user
diff --git a/template.h5.html b/template.h5.html
new file mode 100644
index 00000000..c79b26a2
--- /dev/null
+++ b/template.h5.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/modalTest.vue b/test/modalTest.vue
new file mode 100644
index 00000000..9110d52a
--- /dev/null
+++ b/test/modalTest.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+ 打开模态框1
+
+
+ 打开模态框2
+
+
+ 打开模态框3
+
+
+ 打开模态框4
+
+
+
+
+
+
+
+
diff --git a/test/pullDownTest.vue b/test/pullDownTest.vue
new file mode 100644
index 00000000..e8c0d1e1
--- /dev/null
+++ b/test/pullDownTest.vue
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/pullDownTest2.vue b/test/pullDownTest2.vue
new file mode 100644
index 00000000..5d7dcc14
--- /dev/null
+++ b/test/pullDownTest2.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+ {{111}}
+
+
+
+
+
+
+
+
+ {{item.label}}
+
+
+ 确定
+
+
+
+
+
+
+
+ 参数配置
+
+
+ 下边框
+
+
+
+ 激活颜色
+
+
+
+ 遮罩是否可点击
+
+
+
+
+
+
+
+
+
diff --git a/test/stockStateTest.vue b/test/stockStateTest.vue
new file mode 100644
index 00000000..20998521
--- /dev/null
+++ b/test/stockStateTest.vue
@@ -0,0 +1,67 @@
+
+
+
+ 打开模态框1
+
+ {{state}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni.scss b/uni.scss
index 5b30ca31..c8987dd8 100644
--- a/uni.scss
+++ b/uni.scss
@@ -1,7 +1,18 @@
/**
- * uni-app内置的常用样式变量
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
*/
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
/* 行为相关颜色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
@@ -22,43 +33,47 @@ $uni-bg-color-hover:#f1f1f1;//点击状态颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
/* 边框颜色 */
-$uni-border-color:#e5e5e5;
+$uni-border-color:#c8c7cc;
/* 尺寸变量 */
/* 文字尺寸 */
-$uni-font-size-sm:12px;
-$uni-font-size-base:14px;
-$uni-font-size-lg:16px;
+$uni-font-size-sm:24rpx;
+$uni-font-size-base:28rpx;
+$uni-font-size-lg:32rpx;
/* 图片尺寸 */
-$uni-img-size-sm:20px;
-$uni-img-size-base:26px;
-$uni-img-size-lg:40px;
+$uni-img-size-sm:40rpx;
+$uni-img-size-base:52rpx;
+$uni-img-size-lg:80rpx;
/* Border Radius */
-$uni-border-radius-sm: 2px;
-$uni-border-radius-base: 3px;
-$uni-border-radius-lg: 6px;
+$uni-border-radius-sm: 4rpx;
+$uni-border-radius-base: 6rpx;
+$uni-border-radius-lg: 12rpx;
$uni-border-radius-circle: 50%;
/* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
+$uni-spacing-row-sm: 10px;
+$uni-spacing-row-base: 20rpx;
+$uni-spacing-row-lg: 30rpx;
/* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
+$uni-spacing-col-sm: 8rpx;
+$uni-spacing-col-base: 16rpx;
+$uni-spacing-col-lg: 24rpx;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
-$uni-font-size-title:20px;
+$uni-font-size-title:40rpx;
$uni-color-subtitle: #555555; // 二级标题颜色
-$uni-font-size-subtitle:26px;
+$uni-font-size-subtitle:36rpx;
$uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:15px;
\ No newline at end of file
+$uni-font-size-paragraph:30rpx;
+//自定义颜色
+$option_detail:#F1A532; //滑动详情蓝色
+
+@import "@/uni_modules/vk-uview-ui/theme.scss";
\ No newline at end of file
diff --git a/uni_modules/uni-badge/components/uni-badge/uni-badge.vue b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
index fcbfe938..1981b4e7 100644
--- a/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
+++ b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
@@ -160,7 +160,7 @@
};
-
diff --git a/uni_modules/uni-forms/components/uni-forms/validate.js b/uni_modules/uni-forms/components/uni-forms/validate.js
index 1834c6cf..69a70db9 100644
--- a/uni_modules/uni-forms/components/uni-forms/validate.js
+++ b/uni_modules/uni-forms/components/uni-forms/validate.js
@@ -446,7 +446,7 @@ class SchemaValidator extends RuleValidator {
}
}
-function Message() {
+function message() {
return {
TAG: "",
default: '验证错误',
@@ -481,6 +481,6 @@ function Message() {
}
-SchemaValidator.message = new Message();
+SchemaValidator.message = new message();
export default SchemaValidator
diff --git a/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
index 20fd54e5..19c08d7a 100644
--- a/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
+++ b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
@@ -68,7 +68,7 @@
}
-
diff --git a/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
index 1d2ac1dc..424430da 100644
--- a/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
+++ b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
@@ -262,7 +262,7 @@
}
-
diff --git a/uni_modules/uni-upgrade-center-app/pages_init.json b/uni_modules/uni-upgrade-center-app/pages_init.json
new file mode 100644
index 00000000..c12164dc
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/pages_init.json
@@ -0,0 +1,18 @@
+{
+ "pages": [{
+ "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup",
+ "style": {
+ "disableScroll": true,
+ "app-plus": {
+ "backgroundColorTop": "transparent",
+ "background": "transparent",
+ "titleNView": false,
+ "scrollIndicator": false,
+ "popGesture": "none",
+ "animationType": "fade-in",
+ "animationDuration": 200
+
+ }
+ }
+ }]
+}
diff --git a/uni_modules/uni-upgrade-center-app/readme.md b/uni_modules/uni-upgrade-center-app/readme.md
new file mode 100644
index 00000000..048fe3a9
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/readme.md
@@ -0,0 +1,126 @@
+## 升级中心 - app插件与 `uni-admin` 版本关系
+
+### `uni-admin >= 1.9.3`:云函数 `checkVersion` 废弃,使用 uni-admin 自带的 `uni-upgrade-center` 云函数。
+
+# uni-upgrade-center - App
+
+### 概述
+
+> 统一管理App及App在`Android`、`iOS`平台上`App安装包`和`wgt资源包`的发布升级
+
+> uni升级中心分为业务插件和后台管理插件。本插件为业务插件,包括uni升级中心客户端检查更新的前后端逻辑。后台管理系统另见 [uni-upgrade-center - Admin](https://ext.dcloud.net.cn/plugin?id=4470)
+
+### uni升级中心 - 客户端检查更新插件
+ - 一键式检查更新,同时支持整包升级与wgt资源包更新
+ - 好看、实用、可自定义的客户端提示框
+
+## 安装指引
+
+1. 依赖数据库`opendb-app-versions`,如果没有此库,请在云服务空间中创建。
+
+2. 使用`HBuilderX 3.1.0+`,因为要使用到`uni_modules`
+
+3. 在插件市场打开本插件页面,在右侧点击`使用 HBuilderX 导入插件`,选择要导入的项目点击确定
+
+4. 绑定一个服务空间
+
+5. 找到`/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version`,右键上传部署
+
+6. 在`pages.json`中添加页面路径。**注:请不要设置为pages.json中第一项**
+```json
+"pages": [
+ // ……其他页面配置
+ {
+ "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup",
+ "style": {
+ "disableScroll": true,
+ "app-plus": {
+ "backgroundColorTop": "transparent",
+ "background": "transparent",
+ "titleNView": false,
+ "scrollIndicator": false,
+ "popGesture": "none",
+ "animationType": "fade-in",
+ "animationDuration": 200
+
+ }
+ }
+ }
+]
+```
+
+7. 将`@/uni_modules/uni-upgrade-center-app/utils/check-update`import到需要用到的地方,调用一下即可
+ 1. 默认使用当前绑定的服务空间,如果要请求其他服务空间,可以使用其他服务空间的 `callFunction`。[详情](https://uniapp.dcloud.io/uniCloud/cf-functions.html#call-by-function-cross-space)
+
+8. 升级弹框可自行编写,也可以使用`uni.showModal`,或使用现有的升级弹框样式,如果不满足UI需求请自行替换资源文件。在`utils/check-update.js`中都有实例。
+
+9. wgt更新时,打包前请务必将manifest.json中的版本修改为更高版本。
+
+### 更新下载安装`check-update.js`
+
+*该函数在utils目录下*
+
+1. 如果是静默更新,则不会打开更新弹框,会在后台下载后安装,下次启动应用生效
+
+2. 如果是 iOS,则会直接打开AppStore的链接
+
+3. 其他情况,会将`check-version`返回的结果保存在localStorage中,并跳转进入`upgrade-popup.vue`打开更新弹框
+
+### 检查更新函数`check-version`
+
+*该函数在uniCloud/cloudfunctions目录下*
+
+1. 使用检查更新需要传递三个参数 `appid`、`appVersion`、`wgtVersion`
+
+2. `appid` 使用 plus.runtime.appid 获取,*注:真机运行时为固定值HBuilder,在调试的时候请使用本地调试云函数*
+
+3. `appVersion` 使用 plus.runtime.version 获取
+
+4. `wgtVersion` 使用 plus.runtime.getProperty(plus.runtime.appid,(wgtInfo) => { wgtInfo.version }) 获取
+
+5. `check-version`云函数内部会自动获取 App 平台
+
+
+**Tips**
+
+1. `check-version`云函数内部有版本对比函数(compare)。
+ - 使用多段式版本格式(如:"3.0.0.0.0.1.0.1", "3.0.0.0.0.1")。如果不满足对比规则,请自行修改。
+ - 如果修改,请将*pages/upgrade-popup.vue*中*compare*函数一并修改
+
+## 项目代码说明
+
+### 更新弹框
+- `upgrade-popup.vue` - 更新应用:
+ - 如果云函数`check-version`返回的参数表明需要更新,则将参数保存在localStorage中,带着键值跳转该页面
+ - 进入时会先从localStorage中尝试取出之前存的安装包路径(此包不会是强制安装类型的包)
+ - 如果有已经保存的包,则和传进来的 `version` 进行比较,如果相等则安装。大于和小于都不进行安装,因为admin端可能会调整包的版本。不符合更新会将此包删除
+ - 如果本地没有包或者包不符合安装条件,则进行下载安装包
+ - 点击下载会有进度条、已下载大小和下载包的大小
+ - 下载完成会提示安装:
+ - 如果是 wgt 包,安装时则会提示 正在安装…… 和 安装完成。安装完成会提示是否重启
+ - 如果是 原生安装包,则直接跳出去覆盖安装
+ - 下载过程中,如果退出会提示是否取消下载。如果是强制更新,则只会提示正在下载请稍后,此时不可退出
+ - 如果是下载完成了没有安装就退出,则会将下载完成的包保存在本地。将包的本地路径和包version保存在localStorage中
+
+### 工具类 utils
+- `call-check-version`
+ - 请求云函数`check-version`拿取版本检测结果
+- `check-update`
+ - 调用`call-check-version`并根据结果判断是否显示更新弹框
+
+### 云函数
+- `check-version` - 检查应用更新:
+ - 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
+ - 先从数据库取出所有该平台(会从上下文读取平台信息)的所有线上发行更新
+ - 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
+ - 使用上一步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新。必须同时大于这两项,因为上一次可能是wgt热更新,否则返回暂无更新
+ - 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
+ - 返回结果:
+
+ |code|message|
+ |:-:|:-:|
+ |0|当前版本已经是最新的,不需要更新|
+ |101|wgt更新|
+ |102|整包更新|
+ |-101|暂无更新或检查appid是否填写正确|
+ |-102|请检查传参是否填写正确|
\ No newline at end of file
diff --git a/uni_modules/uni-upgrade-center-app/static/app_update_close.png b/uni_modules/uni-upgrade-center-app/static/app_update_close.png
new file mode 100644
index 00000000..8b2ffe62
Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/static/app_update_close.png differ
diff --git a/uni_modules/uni-upgrade-center-app/static/bg_top.png b/uni_modules/uni-upgrade-center-app/static/bg_top.png
new file mode 100644
index 00000000..015f698c
Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/static/bg_top.png differ
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json
new file mode 100644
index 00000000..78ff505f
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json
@@ -0,0 +1,9 @@
+// 本文件中的json内容将在云函数【运行】时作为参数传给云函数。
+
+// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam
+
+{
+ "appid": "__YOUR_APPID__",
+ "appVersion": "2.2.0",
+ "wgtVersion": "2.2.2"
+}
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js
new file mode 100644
index 00000000..b46f10b2
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js
@@ -0,0 +1,167 @@
+'use strict';
+exports.main = async (event, context) => {
+ /**
+ * 检测升级 使用说明
+ * 上传包:
+ * 1. 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
+ * 2. 先从数据库取出所有该平台(从上下文读取平台信息,默认 Andriod)的所有线上发行更新
+ * 3. 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
+ * 4. 使用上步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新,必须同时大于这两项,否则返回暂无更新
+ * 5. 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
+ */
+
+ let {
+ appid,
+ appVersion,
+ wgtVersion,
+ } = event;
+
+ const platform_Android = 'Android';
+ const platform_iOS = 'iOS';
+ const package_app = 'native_app';
+ const package_wgt = 'wgt';
+ const app_version_db_name = 'opendb-app-versions'
+
+ let platform = platform_Android;
+
+ // 云函数URL化请求
+ if (event.headers) {
+ let body;
+ try {
+ if (event.httpMethod.toLocaleLowerCase() === 'get') {
+ body = event.queryStringParameters;
+ } else {
+ body = JSON.parse(event.body);
+ }
+ } catch (e) {
+ return {
+ code: 500,
+ msg: '请求错误'
+ };
+ }
+
+ appid = body.appid;
+ appVersion = body.appVersion;
+ wgtVersion = body.wgtVersion;
+
+ platform = /iPhone|iPad/.test(event.headers) ? platform_iOS : platform_Android;
+ } else if (context.OS) {
+ platform = context.OS === 'android'
+ ? platform_Android
+ : context.OS === 'ios'
+ ? platform_iOS
+ : platform_Android;
+ }
+
+ if (appid && appVersion && wgtVersion && platform) {
+ const collection = uniCloud.database().collection(app_version_db_name);
+
+ const record = await collection.where({
+ appid,
+ platform,
+ stable_publish: true
+ })
+ .orderBy('create_date', 'desc')
+ .get();
+
+ if (record && record.data && record.data.length > 0) {
+ const appVersionInDb = record.data.find(item => item.type === package_app) || {};
+ const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {};
+ const hasAppPackage = !!Object.keys(appVersionInDb).length;
+ const hasWgtPackage = !!Object.keys(wgtVersionInDb).length;
+
+ // 取两个版本中版本号最大的包,版本一样,使用wgt包
+ let stablePublishDb = hasAppPackage
+ ? hasWgtPackage
+ ? compare(wgtVersionInDb.version, appVersionInDb.version) >= 0
+ ? wgtVersionInDb
+ : appVersionInDb
+ : appVersionInDb
+ : wgtVersionInDb;
+
+ const {
+ version,
+ min_uni_version
+ } = stablePublishDb;
+
+ // 库中的version必须满足同时大于appVersion和wgtVersion才行,因为上次更新可能是wgt更新
+ const appUpdate = compare(version, appVersion) === 1; // app包可用更新
+ const wgtUpdate = compare(version, wgtVersion) === 1; // wgt包可用更新
+
+ if (Object.keys(stablePublishDb).length && appUpdate && wgtUpdate) {
+ // 判断是否可用wgt更新
+ if (min_uni_version && compare(min_uni_version, appVersion) < 1) {
+ return {
+ code: 101,
+ message: 'wgt更新',
+ ...stablePublishDb
+ };
+ } else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) {
+ return {
+ code: 102,
+ message: '整包更新',
+ ...appVersionInDb
+ };
+ }
+ }
+
+ return {
+ code: 0,
+ message: '当前版本已经是最新的,不需要更新'
+ };
+ }
+
+ return {
+ code: -101,
+ message: '暂无更新或检查appid是否填写正确'
+ };
+ }
+
+ return {
+ code: -102,
+ message: '请检查传参是否填写正确'
+ };
+};
+
+/**
+ * 对比版本号,如需要,请自行修改判断规则
+ * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
+ * @param {Object} v1
+ * @param {Object} v2
+ * v1 > v2 return 1
+ * v1 < v2 return -1
+ * v1 == v2 return 0
+ */
+function compare(v1 = '0', v2 = '0') {
+ v1 = String(v1).split('.')
+ v2 = String(v2).split('.')
+ const minVersionLens = Math.min(v1.length, v2.length);
+
+ let result = 0;
+ for (let i = 0; i < minVersionLens; i++) {
+ const curV1 = Number(v1[i])
+ const curV2 = Number(v2[i])
+
+ if (curV1 > curV2) {
+ result = 1
+ break;
+ } else if(curV1 < curV2) {
+ result = -1
+ break;
+ }
+ }
+
+ if (result === 0 && (v1.length !== v2.length)) {
+ const v1BiggerThenv2 = v1.length > v2.length;
+ const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
+ for (let i = minVersionLens; i < maxLensVersion.length; i++) {
+ const curVersion = Number(maxLensVersion[i])
+ if (curVersion > 0) {
+ v1BiggerThenv2 ? result = 1 : result = -1
+ break;
+ }
+ }
+ }
+
+ return result;
+}
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json
new file mode 100644
index 00000000..f5e08907
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json
@@ -0,0 +1,14 @@
+// 本文件中的json内容将在云对象【运行】时作为参数传给云对象。
+// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam
+{
+ // 调用云对象的方法名称
+ "method": "checkVersion",
+ // 传递给调用方法的参数列表
+ "params": [
+ {
+ "appid": "__UNI__HelloUNIApp",
+ "appVersion": "1.0.0",
+ "wgtVersion": "1.0.0"
+ }
+ ]
+}
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js
new file mode 100644
index 00000000..fe3549e3
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js
@@ -0,0 +1,148 @@
+// 开发文档: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
+module.exports = {
+ checkVersion: async function(event) {
+ /**
+ * 检测升级 使用说明
+ * 上传包:
+ * 1. 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传
+ * 2. 先从数据库取出所有该平台(从上下文读取平台信息,默认 Andriod)的所有线上发行更新
+ * 3. 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新
+ * 4. 使用上步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新,必须同时大于这两项,否则返回暂无更新
+ * 5. 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion
+ */
+
+ const clientInfo = this.getClientInfo()
+
+ let {
+ appid,
+ appVersion,
+ wgtVersion,
+ } = event;
+
+ const platform_Android = 'Android';
+ const platform_iOS = 'iOS';
+ const package_app = 'native_app';
+ const package_wgt = 'wgt';
+ const app_version_db_name = 'opendb-app-versions'
+
+ let platform = platform_Android;
+
+ platform = clientInfo.OS === 'android' ?
+ platform_Android :
+ clientInfo.OS === 'ios' ?
+ platform_iOS :
+ platform_Android;
+
+ if (appid && appVersion && wgtVersion && platform) {
+ const collection = uniCloud.database().collection(app_version_db_name);
+
+ const record = await collection.where({
+ appid,
+ platform,
+ stable_publish: true
+ })
+ .orderBy('create_date', 'desc')
+ .get();
+
+ if (record && record.data && record.data.length > 0) {
+ const appVersionInDb = record.data.find(item => item.type === package_app) || {};
+ const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {};
+ const hasAppPackage = !!Object.keys(appVersionInDb).length;
+ const hasWgtPackage = !!Object.keys(wgtVersionInDb).length;
+
+ // 取两个版本中版本号最大的包,版本一样,使用wgt包
+ let stablePublishDb = hasAppPackage ?
+ hasWgtPackage ?
+ compare(wgtVersionInDb.version, appVersionInDb.version) >= 0 ?
+ wgtVersionInDb :
+ appVersionInDb :
+ appVersionInDb :
+ wgtVersionInDb;
+
+ const {
+ version,
+ min_uni_version
+ } = stablePublishDb;
+
+ // 库中的version必须满足同时大于appVersion和wgtVersion才行,因为上次更新可能是wgt更新
+ const appUpdate = compare(version, appVersion) === 1; // app包可用更新
+ const wgtUpdate = compare(version, wgtVersion) === 1; // wgt包可用更新
+
+ if (Object.keys(stablePublishDb).length && appUpdate && wgtUpdate) {
+ // 判断是否可用wgt更新
+ if (min_uni_version && compare(min_uni_version, appVersion) < 1) {
+ return {
+ code: 101,
+ message: 'wgt更新',
+ ...stablePublishDb
+ };
+ } else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) {
+ return {
+ code: 102,
+ message: '整包更新',
+ ...appVersionInDb
+ };
+ }
+ }
+
+ return {
+ code: 0,
+ message: '当前版本已经是最新的,不需要更新'
+ };
+ }
+
+ return {
+ code: -101,
+ message: '暂无更新或检查appid是否填写正确'
+ };
+ }
+
+ return {
+ code: -102,
+ message: '请检查传参是否填写正确'
+ };
+ }
+}
+
+/**
+ * 对比版本号,如需要,请自行修改判断规则
+ * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的
+ * @param {Object} v1
+ * @param {Object} v2
+ * v1 > v2 return 1
+ * v1 < v2 return -1
+ * v1 == v2 return 0
+ */
+function compare(v1 = '0', v2 = '0') {
+ v1 = String(v1).split('.')
+ v2 = String(v2).split('.')
+ const minVersionLens = Math.min(v1.length, v2.length);
+
+ let result = 0;
+ for (let i = 0; i < minVersionLens; i++) {
+ const curV1 = Number(v1[i])
+ const curV2 = Number(v2[i])
+
+ if (curV1 > curV2) {
+ result = 1
+ break;
+ } else if (curV1 < curV2) {
+ result = -1
+ break;
+ }
+ }
+
+ if (result === 0 && (v1.length !== v2.length)) {
+ const v1BiggerThenv2 = v1.length > v2.length;
+ const maxLensVersion = v1BiggerThenv2 ? v1 : v2;
+ for (let i = minVersionLens; i < maxLensVersion.length; i++) {
+ const curVersion = Number(maxLensVersion[i])
+ if (curVersion > 0) {
+ v1BiggerThenv2 ? result = 1 : result = -1
+ break;
+ }
+ }
+ }
+
+ return result;
+}
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json
new file mode 100644
index 00000000..e36bef9e
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "checkVersion",
+ "dependencies": {},
+ "extensions": {
+ "uni-cloud-jql": {}
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png
new file mode 100644
index 00000000..8b2ffe62
Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png differ
diff --git a/uni_modules/uni-upgrade-center-app/utils/call-check-version.js b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js
new file mode 100644
index 00000000..de45f009
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js
@@ -0,0 +1,33 @@
+export default function() {
+ // #ifdef APP-PLUS
+ return new Promise((resolve, reject) => {
+ plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
+ const data = {
+ action: 'checkVersion',
+ appid: plus.runtime.appid,
+ appVersion: plus.runtime.version,
+ wgtVersion: widgetInfo.version
+ }
+ console.log("data: ",data);
+ uniCloud.callFunction({
+ name: 'uni-upgrade-center',
+ data,
+ success: (e) => {
+ console.log("e: ", e);
+ resolve(e)
+ },
+ fail: (error) => {
+ reject(error)
+ }
+ })
+ })
+ })
+ // #endif
+ // #ifndef APP-PLUS
+ return new Promise((resolve, reject) => {
+ reject({
+ message: '请在App中使用'
+ })
+ })
+ // #endif
+}
diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update.js b/uni_modules/uni-upgrade-center-app/utils/check-update.js
new file mode 100644
index 00000000..38fe7b06
--- /dev/null
+++ b/uni_modules/uni-upgrade-center-app/utils/check-update.js
@@ -0,0 +1,158 @@
+import callCheckVersion from './call-check-version'
+
+// 推荐再App.vue中使用
+const PACKAGE_INFO_KEY = '__package_info__'
+
+export default function() {
+ // #ifdef APP-PLUS
+ return new Promise((resolve, reject) => {
+ callCheckVersion().then(async (e) => {
+ if (!e.result) return;
+ const {
+ code,
+ message,
+ is_silently, // 是否静默更新
+ url, // 安装包下载地址
+ platform, // 安装包平台
+ type // 安装包类型
+ } = e.result;
+
+ // 此处逻辑仅为实例,可自行编写
+ if (code > 0) {
+ // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
+ const {
+ fileList
+ } = await uniCloud.getTempFileURL({
+ fileList: [url]
+ });
+ if (fileList[0].tempFileURL)
+ e.result.url = fileList[0].tempFileURL;
+
+ resolve(e)
+
+ // 静默更新,只有wgt有
+ if (is_silently) {
+ uni.downloadFile({
+ url: e.result.url,
+ success: res => {
+ if (res.statusCode == 200) {
+ // 下载好直接安装,下次启动生效
+ plus.runtime.install(res.tempFilePath, {
+ force: false
+ });
+ }
+ }
+ });
+ return;
+ }
+
+ /**
+ * 提示升级一
+ * 使用 uni.showModal
+ */
+ // return updateUseModal(e.result)
+
+ /**
+ * 提示升级二
+ * 官方适配的升级弹窗,可自行替换资源适配UI风格
+ */
+ uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
+ uni.navigateTo({
+ url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
+ fail: (err) => {
+ console.error('更新弹框跳转失败', err)
+ uni.removeStorageSync(PACKAGE_INFO_KEY)
+ }
+ })
+
+ return
+ } else if (code < 0) {
+ // TODO 云函数报错处理
+ console.error(message)
+ return reject(e)
+ }
+ return resolve(e)
+ }).catch(err => {
+ // TODO 云函数报错处理
+ console.error(err.message)
+ reject(err)
+ })
+ });
+ // #endif
+}
+
+/**
+ * 使用 uni.showModal 升级
+ */
+function updateUseModal(packageInfo) {
+ const {
+ title, // 标题
+ contents, // 升级内容
+ is_mandatory, // 是否强制更新
+ url, // 安装包下载地址
+ platform, // 安装包平台
+ type // 安装包类型
+ } = packageInfo;
+
+ let isWGT = type === 'wgt'
+ let isiOS = !isWGT ? platform.includes('iOS') : false;
+ let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
+
+ return uni.showModal({
+ title,
+ content: contents,
+ showCancel: !is_mandatory,
+ confirmText,
+ success: res => {
+ if (res.cancel) return;
+
+ // 安装包下载
+ if (isiOS) {
+ plus.runtime.openURL(url);
+ return;
+ }
+
+ uni.showToast({
+ title: '后台下载中……',
+ duration: 1000
+ });
+
+ // wgt 和 安卓下载更新
+ downloadTask = uni.downloadFile({
+ url,
+ success: res => {
+ if (res.statusCode !== 200) {
+ console.error('下载安装包失败', err);
+ return;
+ }
+ // 下载好直接安装,下次启动生效
+ plus.runtime.install(res.tempFilePath, {
+ force: false
+ }, () => {
+ if (is_mandatory) {
+ //更新完重启app
+ plus.runtime.restart();
+ return;
+ }
+ uni.showModal({
+ title: '安装成功是否重启?',
+ success: res => {
+ if (res.confirm) {
+ //更新完重启app
+ plus.runtime.restart();
+ }
+ }
+ });
+ }, err => {
+ uni.showModal({
+ title: '更新失败',
+ content: err
+ .message,
+ showCancel: false
+ });
+ });
+ }
+ });
+ }
+ });
+}
diff --git a/uni_modules/vk-uview-ui/changelog.md b/uni_modules/vk-uview-ui/changelog.md
new file mode 100644
index 00000000..95c58b11
--- /dev/null
+++ b/uni_modules/vk-uview-ui/changelog.md
@@ -0,0 +1,135 @@
+## 1.4.5(2022-12-05)
+* 【修复】`u-row`、`u-col` 使用 `@click.stop` 会报错的问题,同时建议改用 `@click.native.stop` 来代替 `@click.stop`
+## 1.4.4(2022-11-12)
+* 【修复】`u-calendar` `u-modal` `u-picker` `u-popup` 组件在页面进入后马上需要弹窗时,无法正常弹窗的问题。
+## 1.4.3(2022-10-22)
+* 【优化】部分组件的细节
+## 1.4.2(2022-10-15)
+* 【修复】`1.4.1` 引出的 `u-subsection` 的部分问题
+## 1.4.1(2022-10-14)
+* 【修复】`u-count-to` 若设置了千分位符合,会错误显示-的问题
+* 【修复】`u-subsection` 部分细节问题
+## 1.4.0(2022-10-07)
+* 【修复】`u-section` 点击更多,会触发两次事件的问题
+* 【修复】`loadMore` 加载更多,icon-type为circle不会转动的问题
+* 【修复】`u-subsection` current 有转入值时,变更值,样式不更新(需用 `v-model="current"` 代替 `:current="current"`)
+## 1.3.13(2022-09-28)
+* 【修复】`u-avatar-cropper` 组件在vue3中会报错的问题。
+## 1.3.12(2022-08-30)
+* 【优化】`u-keyboard` 组件内部细节。
+## 1.3.11(2022-08-30)
+* 【修复】`u-subsection` 组件的 `list` 属性不支持动态修改的问题。
+## 1.3.10(2022-07-30)
+* 【优化】上传组件部分细节
+## 1.3.9(2022-07-07)
+* 【更新】省市区数据源
+* 【优化】`u-subsection` 组件支持在右上角显示数字角标
+```html
+
+
+
+```
+
+```js
+export default {
+ data() {
+ return {
+ list: [
+ {
+ name: '待发货',
+ num: 10
+ },
+ {
+ name: '待付款',
+ num: 5
+ },
+ {
+ name: '待评价',
+ num: 15
+ }
+ ]
+ }
+ }
+}
+```
+## 1.3.8(2022-06-13)
+* 【优化】组件 `u-icon`,使之更方便的兼容第三方icon(满足规则自动计算customPrefix)
+**规则如下:**
+* 当 `name` 中包含 `-icon-` 字符串时
+* 如 `vk-icon-goods`,则组件的 `customPrefix` 属性自动识别为 `vk-icon` ,`name`属性 自动识别为 `goods`
+* 如 `vk-2-icon-goods-list`,则组件的 `customPrefix` 属性自动识别为 `vk-2-icon` ,`name`属性 自动识别为 `goods-list`
+## 1.3.7(2022-06-10)
+* 【优化】组件 `u-action-sheet` `u-calendar` `u-dropdown-item` `u-field` `u-input` `u-keyboard` `u-modal` `u-radio-group` `u-rate` `u-search` `u-slider` `u-switch` `u-tabbar` `u-waterfall` 在 `vue3` 模式下的细节问题。
+## 1.3.6(2022-06-10)
+* 【优化】组件 `u-action-sheet` `u-calendar` `u-dropdown-item` `u-field` `u-input` `u-keyboard` `u-modal` `u-radio-group` `u-rate` `u-search` `u-slider` `u-switch` `u-tabbar` `u-waterfall` 在 `vue3` 模式下的细节问题。
+## 1.3.5(2022-05-28)
+* 【优化】组件 `u-mask` `u-popup` `u-select` `u-modal` `u-keyboard` `u-calendar` `u-action-sheet` `u-picker` 均新增 `blur` 属性,可用于设置弹出遮罩的模糊度,默认为0(不模糊)
+* ![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-cf0c5e69-620c-4f3c-84ab-f4619262939f/49b773a3-273f-4b1c-95e8-a42dcba1a53c.png)
+## 1.3.4(2022-05-03)
+* 【修复】`u-tabs` 组件细节问题。
+## 1.1.4(2022-03-22)
+* 【修复】`u-field` 组件 `arrowDirection` 属性无效的问题。
+## 1.1.3(2022-03-21)
+* 【优化】部分细节。
+## 1.1.2(2022-03-21)
+* 【优化】部分细节。
+## 1.1.1(2022-03-17)
+* 【优化】部分细节。
+## 1.1.0(2022-03-12)
+* 【重要】`u-picker` 组件新增 `regionDiscern` 方法 智能识别省市区街道地址
+如将字符串 `浙江省杭州市西湖区希望路1333弄是啊我庭12号楼1203` 中识别为
+```json
+{
+ "province": {
+ "code": "330000",
+ "name": "浙江省"
+ },
+ "city": {
+ "code": "330100",
+ "name": "杭州市"
+ },
+ "area": {
+ "code": "330106",
+ "name": "西湖区"
+ },
+ "address": "龙井路1号",
+ "formatted_address": "浙江省杭州市西湖区龙井路1号"
+}
+```
+而组件的 `addressDiscern` 方法还可以识别收货信息,如 `张三 13888888888 上海市嘉定区希望路1333弄是啊我庭12号楼1203` 中识别姓名、手机号、地址(支持多种格式)
+## 1.0.13(2022-03-12)
+* 【优化】部分细节。
+## 1.0.12(2022-03-09)
+* 【修复】`u-radio-group` 在 vue3 模式下,设置默认值可能会无效的问题。
+## 1.0.11(2022-03-07)
+* 【优化】部分细节。
+## 1.0.10(2022-03-05)
+* 【修复】`u-radio` 中的值相等的判断 == 改为 ===
+* 【优化】部分注释的错别字。
+## 1.0.9(2022-03-03)
+* 【修复】`u-parse` 在 vue3模式下编译到app无法正常显示的问题。
+## 1.0.8(2022-02-26)
+* 【优化】`u-form` 组件新增2个属性 `inputAlign` 和 `clearable` 用于统一设置表单内所有 `u-input` 组件的对应属性默认值
+* 【优化】更新城市数据源信息
+## 1.0.7(2022-02-25)
+* 【重要】`u-picker` 组件新增 `addressDiscern` 方法 智能识别收货信息
+
+如在 `张三 13888888888 上海市嘉定区希望路1333弄是啊我庭12号楼1203` 中识别姓名、手机号、地址(支持多种格式)
+即使这样的字符串也能识别 `!!!!~~~$张三~~~上海市嘉定区希望路1333弄是啊我庭12号楼1203【【【【13888888888】`
+## 1.0.6(2022-02-24)
+* 【优化】`u-form-item` 组件的 `prop` 属性支持 a.b 形式
+## 1.0.5(2022-01-11)
+* 【修复】`u-sticky` 组件 在微信小程序中无法正常吸顶的问题
+## 1.0.4(2021-12-31)
+* 【优化】`u-dropdown-item` 组件 0和"" 无法区分的问题。
+* 【修复】`u-modal` 在Vue3版本中使用了mask-close-able属性无效的问题
+## 1.0.3(2021-12-20)
+【优化】u-icon在微信小程序下可能会显示null字符串的问题
+## 1.0.2(2021-12-09)
+* 1、【优化】`u-button` 组件新增 `timerId` 属性
+* 之前的效果是:所有按钮一定时间内只能点击1次(`共用计算时间`)导致点击按钮A后无法马上点击按钮B
+* 优化的效果是:每个按钮一定时间内只能点击1次(`分开计算时间`)且支持设置相同的 timerId 来达到指定按钮 `共用计算时间`
+## 1.0.1(2021-11-22)
+* 修复 u-parse 组件在微信小程序上的显示问题。
+## 1.0.0(2021-11-18)
+uView Vue3.0 横空出世,继承uView1.0意志,再战江湖,风云再起!by vk 2021-11-18
diff --git a/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue b/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue
new file mode 100644
index 00000000..c5261a13
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue
@@ -0,0 +1,246 @@
+
+
+
+ {{ tips.text }}
+
+
+
+ {{ item[labelName] }}
+
+ {{ item.subText }}
+
+
+
+
+
+ {{ cancelText }}
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue b/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue
new file mode 100644
index 00000000..48b3d85f
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+ {{title}}
+
+
+ {{description}}
+
+
+
+
+
+ {{closeText}}
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue b/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
new file mode 100644
index 00000000..a48dd546
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+ 选择图片
+
+
+ 重新选择
+
+ 确定
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js b/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js
new file mode 100644
index 00000000..6dac9008
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js
@@ -0,0 +1,1256 @@
+/**
+ * we-cropper v1.3.9
+ * (c) 2020 dlhandsome
+ * @license MIT
+ */
+'use strict';
+
+var device = void 0;
+var TOUCH_STATE = ['touchstarted', 'touchmoved', 'touchended'];
+
+function firstLetterUpper(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+}
+
+function setTouchState(instance) {
+ var arg = [],
+ len = arguments.length - 1;
+ while (len-- > 0) arg[len] = arguments[len + 1];
+
+ TOUCH_STATE.forEach(function(key, i) {
+ if (arg[i] !== undefined) {
+ instance[key] = arg[i];
+ }
+ });
+}
+
+function validator(instance, o) {
+ Object.defineProperties(instance, o);
+}
+
+function getDevice() {
+ if (!device) {
+ device = uni.getSystemInfoSync();
+ }
+ return device
+}
+
+var tmp = {};
+
+var ref = getDevice();
+var pixelRatio = ref.pixelRatio;
+
+var DEFAULT = {
+ id: {
+ default: 'cropper',
+ get: function get() {
+ return tmp.id
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'string') {
+ console.error(("id:" + value + " is invalid"));
+ }
+ tmp.id = value;
+ }
+ },
+ width: {
+ default: 750,
+ get: function get() {
+ return tmp.width
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("width:" + value + " is invalid"));
+ }
+ tmp.width = value;
+ }
+ },
+ height: {
+ default: 750,
+ get: function get() {
+ return tmp.height
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("height:" + value + " is invalid"));
+ }
+ tmp.height = value;
+ }
+ },
+ pixelRatio: {
+ default: pixelRatio,
+ get: function get() {
+ return tmp.pixelRatio
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("pixelRatio:" + value + " is invalid"));
+ }
+ tmp.pixelRatio = value;
+ }
+ },
+ scale: {
+ default: 2.5,
+ get: function get() {
+ return tmp.scale
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("scale:" + value + " is invalid"));
+ }
+ tmp.scale = value;
+ }
+ },
+ zoom: {
+ default: 5,
+ get: function get() {
+ return tmp.zoom
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'number') {
+ console.error(("zoom:" + value + " is invalid"));
+ } else if (value < 0 || value > 10) {
+ console.error("zoom should be ranged in 0 ~ 10");
+ }
+ tmp.zoom = value;
+ }
+ },
+ src: {
+ default: '',
+ get: function get() {
+ return tmp.src
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'string') {
+ console.error(("src:" + value + " is invalid"));
+ }
+ tmp.src = value;
+ }
+ },
+ cut: {
+ default: {},
+ get: function get() {
+ return tmp.cut
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'object') {
+ console.error(("cut:" + value + " is invalid"));
+ }
+ tmp.cut = value;
+ }
+ },
+ boundStyle: {
+ default: {},
+ get: function get() {
+ return tmp.boundStyle
+ },
+ set: function set(value) {
+ if (typeof(value) !== 'object') {
+ console.error(("boundStyle:" + value + " is invalid"));
+ }
+ tmp.boundStyle = value;
+ }
+ },
+ onReady: {
+ default: null,
+ get: function get() {
+ return tmp.ready
+ },
+ set: function set(value) {
+ tmp.ready = value;
+ }
+ },
+ onBeforeImageLoad: {
+ default: null,
+ get: function get() {
+ return tmp.beforeImageLoad
+ },
+ set: function set(value) {
+ tmp.beforeImageLoad = value;
+ }
+ },
+ onImageLoad: {
+ default: null,
+ get: function get() {
+ return tmp.imageLoad
+ },
+ set: function set(value) {
+ tmp.imageLoad = value;
+ }
+ },
+ onBeforeDraw: {
+ default: null,
+ get: function get() {
+ return tmp.beforeDraw
+ },
+ set: function set(value) {
+ tmp.beforeDraw = value;
+ }
+ }
+};
+
+var ref$1 = getDevice();
+var windowWidth = ref$1.windowWidth;
+
+function prepare() {
+ var self = this;
+
+ // v1.4.0 版本中将不再自动绑定we-cropper实例
+ self.attachPage = function() {
+ var pages = getCurrentPages();
+ // 获取到当前page上下文
+ var pageContext = pages[pages.length - 1];
+ // 把this依附在Page上下文的wecropper属性上,便于在page钩子函数中访问
+ Object.defineProperty(pageContext, 'wecropper', {
+ get: function get() {
+ console.warn(
+ 'Instance will not be automatically bound to the page after v1.4.0\n\n' +
+ 'Please use a custom instance name instead\n\n' +
+ 'Example: \n' +
+ 'this.mycropper = new WeCropper(options)\n\n' +
+ '// ...\n' +
+ 'this.mycropper.getCropperImage()'
+ );
+ return self
+ },
+ configurable: true
+ });
+ };
+
+ self.createCtx = function() {
+ var id = self.id;
+ var targetId = self.targetId;
+
+ if (id) {
+ self.ctx = self.ctx || uni.createCanvasContext(id);
+ self.targetCtx = self.targetCtx || uni.createCanvasContext(targetId);
+ } else {
+ console.error("constructor: create canvas context failed, 'id' must be valuable");
+ }
+ };
+
+ self.deviceRadio = windowWidth / 750;
+}
+
+var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !==
+ 'undefined' ? self : {};
+
+
+
+
+
+function createCommonjsModule(fn, module) {
+ return module = {
+ exports: {}
+ }, fn(module, module.exports), module.exports;
+}
+
+var tools = createCommonjsModule(function(module, exports) {
+ /**
+ * String type check
+ */
+ exports.isStr = function(v) {
+ return typeof v === 'string';
+ };
+ /**
+ * Number type check
+ */
+ exports.isNum = function(v) {
+ return typeof v === 'number';
+ };
+ /**
+ * Array type check
+ */
+ exports.isArr = Array.isArray;
+ /**
+ * undefined type check
+ */
+ exports.isUndef = function(v) {
+ return v === undefined;
+ };
+
+ exports.isTrue = function(v) {
+ return v === true;
+ };
+
+ exports.isFalse = function(v) {
+ return v === false;
+ };
+ /**
+ * Function type check
+ */
+ exports.isFunc = function(v) {
+ return typeof v === 'function';
+ };
+ /**
+ * Quick object check - this is primarily used to tell
+ * Objects from primitive values when we know the value
+ * is a JSON-compliant type.
+ */
+ exports.isObj = exports.isObject = function(obj) {
+ return obj !== null && typeof obj === 'object'
+ };
+
+ /**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ */
+ var _toString = Object.prototype.toString;
+ exports.isPlainObject = function(obj) {
+ return _toString.call(obj) === '[object Object]'
+ };
+
+ /**
+ * Check whether the object has the property.
+ */
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ exports.hasOwn = function(obj, key) {
+ return hasOwnProperty.call(obj, key)
+ };
+
+ /**
+ * Perform no operation.
+ * Stubbing args to make Flow happy without leaving useless transpiled code
+ * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
+ */
+ exports.noop = function(a, b, c) {};
+
+ /**
+ * Check if val is a valid array index.
+ */
+ exports.isValidArrayIndex = function(val) {
+ var n = parseFloat(String(val));
+ return n >= 0 && Math.floor(n) === n && isFinite(val)
+ };
+});
+
+var tools_7 = tools.isFunc;
+var tools_10 = tools.isPlainObject;
+
+var EVENT_TYPE = ['ready', 'beforeImageLoad', 'beforeDraw', 'imageLoad'];
+
+function observer() {
+ var self = this;
+
+ self.on = function(event, fn) {
+ if (EVENT_TYPE.indexOf(event) > -1) {
+ if (tools_7(fn)) {
+ event === 'ready' ?
+ fn(self) :
+ self[("on" + (firstLetterUpper(event)))] = fn;
+ }
+ } else {
+ console.error(("event: " + event + " is invalid"));
+ }
+ return self
+ };
+}
+
+function wxPromise(fn) {
+ return function(obj) {
+ var args = [],
+ len = arguments.length - 1;
+ while (len-- > 0) args[len] = arguments[len + 1];
+
+ if (obj === void 0) obj = {};
+ return new Promise(function(resolve, reject) {
+ obj.success = function(res) {
+ resolve(res);
+ };
+ obj.fail = function(err) {
+ reject(err);
+ };
+ fn.apply(void 0, [obj].concat(args));
+ })
+ }
+}
+
+function draw(ctx, reserve) {
+ if (reserve === void 0) reserve = false;
+
+ return new Promise(function(resolve) {
+ ctx.draw(reserve, resolve);
+ })
+}
+
+var getImageInfo = wxPromise(uni.getImageInfo);
+
+var canvasToTempFilePath = wxPromise(uni.canvasToTempFilePath);
+
+var base64 = createCommonjsModule(function(module, exports) {
+ /*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */
+ (function(root) {
+
+ // Detect free variables `exports`.
+ var freeExports = 'object' == 'object' && exports;
+
+ // Detect free variable `module`.
+ var freeModule = 'object' == 'object' && module &&
+ module.exports == freeExports && module;
+
+ // Detect free variable `global`, from Node.js or Browserified code, and use
+ // it as `root`.
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ var InvalidCharacterError = function(message) {
+ this.message = message;
+ };
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ var error = function(message) {
+ // Note: the error messages used throughout this file match those used by
+ // the native `atob`/`btoa` implementation in Chromium.
+ throw new InvalidCharacterError(message);
+ };
+
+ var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ // http://whatwg.org/html/common-microsyntaxes.html#space-character
+ var REGEX_SPACE_CHARACTERS = /[\t\n\f\r ]/g;
+
+ // `decode` is designed to be fully compatible with `atob` as described in the
+ // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob
+ // The optimized base64-decoding algorithm used is based on @atk’s excellent
+ // implementation. https://gist.github.com/atk/1020396
+ var decode = function(input) {
+ input = String(input)
+ .replace(REGEX_SPACE_CHARACTERS, '');
+ var length = input.length;
+ if (length % 4 == 0) {
+ input = input.replace(/==?$/, '');
+ length = input.length;
+ }
+ if (
+ length % 4 == 1 ||
+ // http://whatwg.org/C#alphanumeric-ascii-characters
+ /[^+a-zA-Z0-9/]/.test(input)
+ ) {
+ error(
+ 'Invalid character: the string to be decoded is not correctly encoded.'
+ );
+ }
+ var bitCounter = 0;
+ var bitStorage;
+ var buffer;
+ var output = '';
+ var position = -1;
+ while (++position < length) {
+ buffer = TABLE.indexOf(input.charAt(position));
+ bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;
+ // Unless this is the first of a group of 4 characters…
+ if (bitCounter++ % 4) {
+ // …convert the first 8 bits to a single ASCII character.
+ output += String.fromCharCode(
+ 0xFF & bitStorage >> (-2 * bitCounter & 6)
+ );
+ }
+ }
+ return output;
+ };
+
+ // `encode` is designed to be fully compatible with `btoa` as described in the
+ // HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa
+ var encode = function(input) {
+ input = String(input);
+ if (/[^\0-\xFF]/.test(input)) {
+ // Note: no need to special-case astral symbols here, as surrogates are
+ // matched, and the input is supposed to only contain ASCII anyway.
+ error(
+ 'The string to be encoded contains characters outside of the ' +
+ 'Latin1 range.'
+ );
+ }
+ var padding = input.length % 3;
+ var output = '';
+ var position = -1;
+ var a;
+ var b;
+ var c;
+ var buffer;
+ // Make sure any padding is handled outside of the loop.
+ var length = input.length - padding;
+
+ while (++position < length) {
+ // Read three bytes, i.e. 24 bits.
+ a = input.charCodeAt(position) << 16;
+ b = input.charCodeAt(++position) << 8;
+ c = input.charCodeAt(++position);
+ buffer = a + b + c;
+ // Turn the 24 bits into four chunks of 6 bits each, and append the
+ // matching character for each of them to the output.
+ output += (
+ TABLE.charAt(buffer >> 18 & 0x3F) +
+ TABLE.charAt(buffer >> 12 & 0x3F) +
+ TABLE.charAt(buffer >> 6 & 0x3F) +
+ TABLE.charAt(buffer & 0x3F)
+ );
+ }
+
+ if (padding == 2) {
+ a = input.charCodeAt(position) << 8;
+ b = input.charCodeAt(++position);
+ buffer = a + b;
+ output += (
+ TABLE.charAt(buffer >> 10) +
+ TABLE.charAt((buffer >> 4) & 0x3F) +
+ TABLE.charAt((buffer << 2) & 0x3F) +
+ '='
+ );
+ } else if (padding == 1) {
+ buffer = input.charCodeAt(position);
+ output += (
+ TABLE.charAt(buffer >> 2) +
+ TABLE.charAt((buffer << 4) & 0x3F) +
+ '=='
+ );
+ }
+
+ return output;
+ };
+
+ var base64 = {
+ 'encode': encode,
+ 'decode': decode,
+ 'version': '0.1.0'
+ };
+
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ typeof undefined == 'function' &&
+ typeof undefined.amd == 'object' &&
+ undefined.amd
+ ) {
+ undefined(function() {
+ return base64;
+ });
+ } else if (freeExports && !freeExports.nodeType) {
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
+ freeModule.exports = base64;
+ } else { // in Narwhal or RingoJS v0.7.0-
+ for (var key in base64) {
+ base64.hasOwnProperty(key) && (freeExports[key] = base64[key]);
+ }
+ }
+ } else { // in Rhino or a web browser
+ root.base64 = base64;
+ }
+
+ }(commonjsGlobal));
+});
+
+function makeURI(strData, type) {
+ return 'data:' + type + ';base64,' + strData
+}
+
+function fixType(type) {
+ type = type.toLowerCase().replace(/jpg/i, 'jpeg');
+ var r = type.match(/png|jpeg|bmp|gif/)[0];
+ return 'image/' + r
+}
+
+function encodeData(data) {
+ var str = '';
+ if (typeof data === 'string') {
+ str = data;
+ } else {
+ for (var i = 0; i < data.length; i++) {
+ str += String.fromCharCode(data[i]);
+ }
+ }
+ return base64.encode(str)
+}
+
+/**
+ * 获取图像区域隐含的像素数据
+ * @param canvasId canvas标识
+ * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标
+ * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标
+ * @param width 将要被提取的图像数据矩形区域的宽度
+ * @param height 将要被提取的图像数据矩形区域的高度
+ * @param done 完成回调
+ */
+function getImageData(canvasId, x, y, width, height, done) {
+ uni.canvasGetImageData({
+ canvasId: canvasId,
+ x: x,
+ y: y,
+ width: width,
+ height: height,
+ success: function success(res) {
+ done(res, null);
+ },
+ fail: function fail(res) {
+ done(null, res);
+ }
+ });
+}
+
+/**
+ * 生成bmp格式图片
+ * 按照规则生成图片响应头和响应体
+ * @param oData 用来描述 canvas 区域隐含的像素数据 { data, width, height } = oData
+ * @returns {*} base64字符串
+ */
+function genBitmapImage(oData) {
+ //
+ // BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx
+ // BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx
+ //
+ var biWidth = oData.width;
+ var biHeight = oData.height;
+ var biSizeImage = biWidth * biHeight * 3;
+ var bfSize = biSizeImage + 54; // total header size = 54 bytes
+
+ //
+ // typedef struct tagBITMAPFILEHEADER {
+ // WORD bfType;
+ // DWORD bfSize;
+ // WORD bfReserved1;
+ // WORD bfReserved2;
+ // DWORD bfOffBits;
+ // } BITMAPFILEHEADER;
+ //
+ var BITMAPFILEHEADER = [
+ // WORD bfType -- The file type signature; must be "BM"
+ 0x42, 0x4D,
+ // DWORD bfSize -- The size, in bytes, of the bitmap file
+ bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff,
+ // WORD bfReserved1 -- Reserved; must be zero
+ 0, 0,
+ // WORD bfReserved2 -- Reserved; must be zero
+ 0, 0,
+ // DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.
+ 54, 0, 0, 0
+ ];
+
+ //
+ // typedef struct tagBITMAPINFOHEADER {
+ // DWORD biSize;
+ // LONG biWidth;
+ // LONG biHeight;
+ // WORD biPlanes;
+ // WORD biBitCount;
+ // DWORD biCompression;
+ // DWORD biSizeImage;
+ // LONG biXPelsPerMeter;
+ // LONG biYPelsPerMeter;
+ // DWORD biClrUsed;
+ // DWORD biClrImportant;
+ // } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+ //
+ var BITMAPINFOHEADER = [
+ // DWORD biSize -- The number of bytes required by the structure
+ 40, 0, 0, 0,
+ // LONG biWidth -- The width of the bitmap, in pixels
+ biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff,
+ // LONG biHeight -- The height of the bitmap, in pixels
+ biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff,
+ // WORD biPlanes -- The number of planes for the target device. This value must be set to 1
+ 1, 0,
+ // WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap
+ // has a maximum of 2^24 colors (16777216, Truecolor)
+ 24, 0,
+ // DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed
+ 0, 0, 0, 0,
+ // DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps
+ biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff,
+ // LONG biXPelsPerMeter, unused
+ 0, 0, 0, 0,
+ // LONG biYPelsPerMeter, unused
+ 0, 0, 0, 0,
+ // DWORD biClrUsed, the number of color indexes of palette, unused
+ 0, 0, 0, 0,
+ // DWORD biClrImportant, unused
+ 0, 0, 0, 0
+ ];
+
+ var iPadding = (4 - ((biWidth * 3) % 4)) % 4;
+
+ var aImgData = oData.data;
+
+ var strPixelData = '';
+ var biWidth4 = biWidth << 2;
+ var y = biHeight;
+ var fromCharCode = String.fromCharCode;
+
+ do {
+ var iOffsetY = biWidth4 * (y - 1);
+ var strPixelRow = '';
+ for (var x = 0; x < biWidth; x++) {
+ var iOffsetX = x << 2;
+ strPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) +
+ fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) +
+ fromCharCode(aImgData[iOffsetY + iOffsetX]);
+ }
+
+ for (var c = 0; c < iPadding; c++) {
+ strPixelRow += String.fromCharCode(0);
+ }
+
+ strPixelData += strPixelRow;
+ } while (--y)
+
+ var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData);
+
+ return strEncoded
+}
+
+/**
+ * 转换为图片base64
+ * @param canvasId canvas标识
+ * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标
+ * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标
+ * @param width 将要被提取的图像数据矩形区域的宽度
+ * @param height 将要被提取的图像数据矩形区域的高度
+ * @param type 转换图片类型
+ * @param done 完成回调
+ */
+function convertToImage(canvasId, x, y, width, height, type, done) {
+ if (done === void 0) done = function() {};
+
+ if (type === undefined) {
+ type = 'png';
+ }
+ type = fixType(type);
+ if (/bmp/.test(type)) {
+ getImageData(canvasId, x, y, width, height, function(data, err) {
+ var strData = genBitmapImage(data);
+ tools_7(done) && done(makeURI(strData, 'image/' + type), err);
+ });
+ } else {
+ console.error('暂不支持生成\'' + type + '\'类型的base64图片');
+ }
+}
+
+var CanvasToBase64 = {
+ convertToImage: convertToImage,
+ // convertToPNG: function (width, height, done) {
+ // return convertToImage(width, height, 'png', done)
+ // },
+ // convertToJPEG: function (width, height, done) {
+ // return convertToImage(width, height, 'jpeg', done)
+ // },
+ // convertToGIF: function (width, height, done) {
+ // return convertToImage(width, height, 'gif', done)
+ // },
+ convertToBMP: function(ref, done) {
+ if (ref === void 0) ref = {};
+ var canvasId = ref.canvasId;
+ var x = ref.x;
+ var y = ref.y;
+ var width = ref.width;
+ var height = ref.height;
+ if (done === void 0) done = function() {};
+
+ return convertToImage(canvasId, x, y, width, height, 'bmp', done)
+ }
+};
+
+function methods() {
+ var self = this;
+
+ var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度
+ var boundHeight = self.height; // 裁剪框默认高度,即整个画布高度
+
+ var id = self.id;
+ var targetId = self.targetId;
+ var pixelRatio = self.pixelRatio;
+
+ var ref = self.cut;
+ var x = ref.x;
+ if (x === void 0) x = 0;
+ var y = ref.y;
+ if (y === void 0) y = 0;
+ var width = ref.width;
+ if (width === void 0) width = boundWidth;
+ var height = ref.height;
+ if (height === void 0) height = boundHeight;
+
+ self.updateCanvas = function(done) {
+ if (self.croperTarget) {
+ // 画布绘制图片
+ self.ctx.drawImage(
+ self.croperTarget,
+ self.imgLeft,
+ self.imgTop,
+ self.scaleWidth,
+ self.scaleHeight
+ );
+ }
+ tools_7(self.onBeforeDraw) && self.onBeforeDraw(self.ctx, self);
+
+ self.setBoundStyle(self.boundStyle); // 设置边界样式
+
+ self.ctx.draw(false, done);
+ return self
+ };
+
+ self.pushOrigin = self.pushOrign = function(src) {
+ self.src = src;
+
+ tools_7(self.onBeforeImageLoad) && self.onBeforeImageLoad(self.ctx, self);
+
+ return getImageInfo({
+ src: src
+ })
+ .then(function(res) {
+ var innerAspectRadio = res.width / res.height;
+ var customAspectRadio = width / height;
+
+ self.croperTarget = res.path;
+
+ if (innerAspectRadio < customAspectRadio) {
+ self.rectX = x;
+ self.baseWidth = width;
+ self.baseHeight = width / innerAspectRadio;
+ self.rectY = y - Math.abs((height - self.baseHeight) / 2);
+ } else {
+ self.rectY = y;
+ self.baseWidth = height * innerAspectRadio;
+ self.baseHeight = height;
+ self.rectX = x - Math.abs((width - self.baseWidth) / 2);
+ }
+
+ self.imgLeft = self.rectX;
+ self.imgTop = self.rectY;
+ self.scaleWidth = self.baseWidth;
+ self.scaleHeight = self.baseHeight;
+
+ self.update();
+
+ return new Promise(function(resolve) {
+ self.updateCanvas(resolve);
+ })
+ })
+ .then(function() {
+ tools_7(self.onImageLoad) && self.onImageLoad(self.ctx, self);
+ })
+ };
+
+ self.removeImage = function() {
+ self.src = '';
+ self.croperTarget = '';
+ return draw(self.ctx)
+ };
+
+ self.getCropperBase64 = function(done) {
+ if (done === void 0) done = function() {};
+
+ CanvasToBase64.convertToBMP({
+ canvasId: id,
+ x: x,
+ y: y,
+ width: width,
+ height: height
+ }, done);
+ };
+
+ self.getCropperImage = function(opt, fn) {
+ var customOptions = opt;
+
+ var canvasOptions = {
+ canvasId: id,
+ x: x,
+ y: y,
+ width: width,
+ height: height
+ };
+
+ var task = function() {
+ return Promise.resolve();
+ };
+
+ if (
+ tools_10(customOptions) &&
+ customOptions.original
+ ) {
+ // original mode
+ task = function() {
+ self.targetCtx.drawImage(
+ self.croperTarget,
+ self.imgLeft * pixelRatio,
+ self.imgTop * pixelRatio,
+ self.scaleWidth * pixelRatio,
+ self.scaleHeight * pixelRatio
+ );
+
+ canvasOptions = {
+ canvasId: targetId,
+ x: x * pixelRatio,
+ y: y * pixelRatio,
+ width: width * pixelRatio,
+ height: height * pixelRatio
+ };
+
+ return draw(self.targetCtx)
+ };
+ }
+
+ return task()
+ .then(function() {
+ if (tools_10(customOptions)) {
+ canvasOptions = Object.assign({}, canvasOptions, customOptions);
+ }
+
+ if (tools_7(customOptions)) {
+ fn = customOptions;
+ }
+
+ var arg = canvasOptions.componentContext ? [canvasOptions, canvasOptions.componentContext] : [canvasOptions];
+
+ return canvasToTempFilePath.apply(null, arg)
+ })
+ .then(function(res) {
+ var tempFilePath = res.tempFilePath;
+
+ return tools_7(fn) ?
+ fn.call(self, tempFilePath, null) :
+ tempFilePath
+ })
+ .catch(function(err) {
+ if (tools_7(fn)) {
+ fn.call(self, null, err);
+ } else {
+ throw err
+ }
+ })
+ };
+}
+
+/**
+ * 获取最新缩放值
+ * @param oldScale 上一次触摸结束后的缩放值
+ * @param oldDistance 上一次触摸结束后的双指距离
+ * @param zoom 缩放系数
+ * @param touch0 第一指touch对象
+ * @param touch1 第二指touch对象
+ * @returns {*}
+ */
+var getNewScale = function(oldScale, oldDistance, zoom, touch0, touch1) {
+ var xMove, yMove, newDistance;
+ // 计算二指最新距离
+ xMove = Math.round(touch1.x - touch0.x);
+ yMove = Math.round(touch1.y - touch0.y);
+ newDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));
+
+ return oldScale + 0.001 * zoom * (newDistance - oldDistance)
+};
+
+function update() {
+ var self = this;
+
+ if (!self.src) {
+ return
+ }
+
+ self.__oneTouchStart = function(touch) {
+ self.touchX0 = Math.round(touch.x);
+ self.touchY0 = Math.round(touch.y);
+ };
+
+ self.__oneTouchMove = function(touch) {
+ var xMove, yMove;
+ // 计算单指移动的距离
+ if (self.touchended) {
+ return self.updateCanvas()
+ }
+ xMove = Math.round(touch.x - self.touchX0);
+ yMove = Math.round(touch.y - self.touchY0);
+
+ var imgLeft = Math.round(self.rectX + xMove);
+ var imgTop = Math.round(self.rectY + yMove);
+
+ self.outsideBound(imgLeft, imgTop);
+
+ self.updateCanvas();
+ };
+
+ self.__twoTouchStart = function(touch0, touch1) {
+ var xMove, yMove, oldDistance;
+
+ self.touchX1 = Math.round(self.rectX + self.scaleWidth / 2);
+ self.touchY1 = Math.round(self.rectY + self.scaleHeight / 2);
+
+ // 计算两指距离
+ xMove = Math.round(touch1.x - touch0.x);
+ yMove = Math.round(touch1.y - touch0.y);
+ oldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove));
+
+ self.oldDistance = oldDistance;
+ };
+
+ self.__twoTouchMove = function(touch0, touch1) {
+ var oldScale = self.oldScale;
+ var oldDistance = self.oldDistance;
+ var scale = self.scale;
+ var zoom = self.zoom;
+
+ self.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1);
+
+ // 设定缩放范围
+ self.newScale <= 1 && (self.newScale = 1);
+ self.newScale >= scale && (self.newScale = scale);
+
+ self.scaleWidth = Math.round(self.newScale * self.baseWidth);
+ self.scaleHeight = Math.round(self.newScale * self.baseHeight);
+ var imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2);
+ var imgTop = Math.round(self.touchY1 - self.scaleHeight / 2);
+
+ self.outsideBound(imgLeft, imgTop);
+
+ self.updateCanvas();
+ };
+
+ self.__xtouchEnd = function() {
+ self.oldScale = self.newScale;
+ self.rectX = self.imgLeft;
+ self.rectY = self.imgTop;
+ };
+}
+
+var handle = {
+ // 图片手势初始监测
+ touchStart: function touchStart(e) {
+ var self = this;
+ var ref = e.touches;
+ var touch0 = ref[0];
+ var touch1 = ref[1];
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, true, null, null);
+
+ // 计算第一个触摸点的位置,并参照改点进行缩放
+ self.__oneTouchStart(touch0);
+
+ // 两指手势触发
+ if (e.touches.length >= 2) {
+ self.__twoTouchStart(touch0, touch1);
+ }
+ },
+
+ // 图片手势动态缩放
+ touchMove: function touchMove(e) {
+ var self = this;
+ var ref = e.touches;
+ var touch0 = ref[0];
+ var touch1 = ref[1];
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, null, true);
+
+ // 单指手势时触发
+ if (e.touches.length === 1) {
+ self.__oneTouchMove(touch0);
+ }
+ // 两指手势触发
+ if (e.touches.length >= 2) {
+ self.__twoTouchMove(touch0, touch1);
+ }
+ },
+
+ touchEnd: function touchEnd(e) {
+ var self = this;
+
+ if (!self.src) {
+ return
+ }
+
+ setTouchState(self, false, false, true);
+ self.__xtouchEnd();
+ }
+};
+
+function cut() {
+ var self = this;
+ var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度
+ var boundHeight = self.height;
+ // 裁剪框默认高度,即整个画布高度
+ var ref = self.cut;
+ var x = ref.x;
+ if (x === void 0) x = 0;
+ var y = ref.y;
+ if (y === void 0) y = 0;
+ var width = ref.width;
+ if (width === void 0) width = boundWidth;
+ var height = ref.height;
+ if (height === void 0) height = boundHeight;
+
+ /**
+ * 设置边界
+ * @param imgLeft 图片左上角横坐标值
+ * @param imgTop 图片左上角纵坐标值
+ */
+ self.outsideBound = function(imgLeft, imgTop) {
+ self.imgLeft = imgLeft >= x ?
+ x :
+ self.scaleWidth + imgLeft - x <= width ?
+ x + width - self.scaleWidth :
+ imgLeft;
+
+ self.imgTop = imgTop >= y ?
+ y :
+ self.scaleHeight + imgTop - y <= height ?
+ y + height - self.scaleHeight :
+ imgTop;
+ };
+
+ /**
+ * 设置边界样式
+ * @param color 边界颜色
+ */
+ self.setBoundStyle = function(ref) {
+ if (ref === void 0) ref = {};
+ var color = ref.color;
+ if (color === void 0) color = '#04b00f';
+ var mask = ref.mask;
+ if (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)';
+ var lineWidth = ref.lineWidth;
+ if (lineWidth === void 0) lineWidth = 1;
+
+ var half = lineWidth / 2;
+ var boundOption = [{
+ start: {
+ x: x - half,
+ y: y + 10 - half
+ },
+ step1: {
+ x: x - half,
+ y: y - half
+ },
+ step2: {
+ x: x + 10 - half,
+ y: y - half
+ }
+ },
+ {
+ start: {
+ x: x - half,
+ y: y + height - 10 + half
+ },
+ step1: {
+ x: x - half,
+ y: y + height + half
+ },
+ step2: {
+ x: x + 10 - half,
+ y: y + height + half
+ }
+ },
+ {
+ start: {
+ x: x + width - 10 + half,
+ y: y - half
+ },
+ step1: {
+ x: x + width + half,
+ y: y - half
+ },
+ step2: {
+ x: x + width + half,
+ y: y + 10 - half
+ }
+ },
+ {
+ start: {
+ x: x + width + half,
+ y: y + height - 10 + half
+ },
+ step1: {
+ x: x + width + half,
+ y: y + height + half
+ },
+ step2: {
+ x: x + width - 10 + half,
+ y: y + height + half
+ }
+ }
+ ];
+
+ // 绘制半透明层
+ self.ctx.beginPath();
+ self.ctx.setFillStyle(mask);
+ self.ctx.fillRect(0, 0, x, boundHeight);
+ self.ctx.fillRect(x, 0, width, y);
+ self.ctx.fillRect(x, y + height, width, boundHeight - y - height);
+ self.ctx.fillRect(x + width, 0, boundWidth - x - width, boundHeight);
+ self.ctx.fill();
+
+ boundOption.forEach(function(op) {
+ self.ctx.beginPath();
+ self.ctx.setStrokeStyle(color);
+ self.ctx.setLineWidth(lineWidth);
+ self.ctx.moveTo(op.start.x, op.start.y);
+ self.ctx.lineTo(op.step1.x, op.step1.y);
+ self.ctx.lineTo(op.step2.x, op.step2.y);
+ self.ctx.stroke();
+ });
+ };
+}
+
+var version = "1.3.9";
+
+var WeCropper = function WeCropper(params) {
+ var self = this;
+ var _default = {};
+
+ validator(self, DEFAULT);
+
+ Object.keys(DEFAULT).forEach(function(key) {
+ _default[key] = DEFAULT[key].default;
+ });
+ Object.assign(self, _default, params);
+
+ self.prepare();
+ self.attachPage();
+ self.createCtx();
+ self.observer();
+ self.cutt();
+ self.methods();
+ self.init();
+ self.update();
+
+ return self
+};
+
+WeCropper.prototype.init = function init() {
+ var self = this;
+ var src = self.src;
+
+ self.version = version;
+
+ typeof self.onReady === 'function' && self.onReady(self.ctx, self);
+
+ if (src) {
+ self.pushOrign(src);
+ } else {
+ self.updateCanvas();
+ }
+ setTouchState(self, false, false, false);
+
+ self.oldScale = 1;
+ self.newScale = 1;
+
+ return self
+};
+
+Object.assign(WeCropper.prototype, handle);
+
+WeCropper.prototype.prepare = prepare;
+WeCropper.prototype.observer = observer;
+WeCropper.prototype.methods = methods;
+WeCropper.prototype.cutt = cut;
+WeCropper.prototype.update = update;
+
+export default WeCropper;
diff --git a/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue b/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue
new file mode 100644
index 00000000..ab21c46f
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue
@@ -0,0 +1,263 @@
+
+
+
+
+ {{ uText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue b/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue
new file mode 100644
index 00000000..7970fc7a
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+ {{tips}}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue b/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue
new file mode 100644
index 00000000..fc99562f
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue
@@ -0,0 +1,216 @@
+
+
+ {{showText}}
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-button/u-button.vue b/uni_modules/vk-uview-ui/components/u-button/u-button.vue
new file mode 100644
index 00000000..2647afc4
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-button/u-button.vue
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue b/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue
new file mode 100644
index 00000000..fe9f2dcd
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue
@@ -0,0 +1,666 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ showTitle }}
+
+
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+ {{startText}}
+ {{endText}}
+
+ {{month}}
+
+
+
+ {{mode == 'date' ? activeDate : startDate}}
+ 至{{endDate}}
+
+
+ 确定
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue
new file mode 100644
index 00000000..e55db268
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue
@@ -0,0 +1,267 @@
+
+ {}">
+
+
+
+ {{ item }}
+
+
+
+
+
+
+ 中
+ /
+ 英
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-card/u-card.vue b/uni_modules/vk-uview-ui/components/u-card/u-card.vue
new file mode 100644
index 00000000..03f9924a
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-card/u-card.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ subTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue b/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue
new file mode 100644
index 00000000..3fbca725
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue
@@ -0,0 +1,70 @@
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue b/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue
new file mode 100644
index 00000000..eb9661bd
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue
new file mode 100644
index 00000000..18c39e76
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue b/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue
new file mode 100644
index 00000000..a0498fee
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue b/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue
new file mode 100644
index 00000000..46e7c181
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-col/u-col.vue b/uni_modules/vk-uview-ui/components/u-col/u-col.vue
new file mode 100644
index 00000000..fc47dfa1
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-col/u-col.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue b/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue
new file mode 100644
index 00000000..963e98fa
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue b/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue
new file mode 100644
index 00000000..f6e4bf02
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue b/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue
new file mode 100644
index 00000000..709ca5c9
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue b/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue
new file mode 100644
index 00000000..0d7cc21b
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue
@@ -0,0 +1,175 @@
+
+
+
+ {{ formattedTime }}
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-count-down/utils.js b/uni_modules/vk-uview-ui/components/u-count-down/utils.js
new file mode 100644
index 00000000..8c750050
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-count-down/utils.js
@@ -0,0 +1,62 @@
+// 补0,如1 -> 01
+function padZero(num, targetLength = 2) {
+ let str = `${num}`
+ while (str.length < targetLength) {
+ str = `0${str}`
+ }
+ return str
+}
+const SECOND = 1000
+const MINUTE = 60 * SECOND
+const HOUR = 60 * MINUTE
+const DAY = 24 * HOUR
+export function parseTimeData(time) {
+ const days = Math.floor(time / DAY)
+ const hours = Math.floor((time % DAY) / HOUR)
+ const minutes = Math.floor((time % HOUR) / MINUTE)
+ const seconds = Math.floor((time % MINUTE) / SECOND)
+ const milliseconds = Math.floor(time % SECOND)
+ return {
+ days,
+ hours,
+ minutes,
+ seconds,
+ milliseconds
+ }
+}
+export function parseFormat(format, timeData) {
+ let {
+ days,
+ hours,
+ minutes,
+ seconds,
+ milliseconds
+ } = timeData
+ // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去
+ if (format.indexOf('DD') === -1) {
+ hours += days * 24
+ } else {
+ // 对天补0
+ format = format.replace('DD', padZero(days))
+ }
+ // 其他同理于DD的格式化处理方式
+ if (format.indexOf('HH') === -1) {
+ minutes += hours * 60
+ } else {
+ format = format.replace('HH', padZero(hours))
+ }
+ if (format.indexOf('mm') === -1) {
+ seconds += minutes * 60
+ } else {
+ format = format.replace('mm', padZero(minutes))
+ }
+ if (format.indexOf('ss') === -1) {
+ milliseconds += seconds * 1000
+ } else {
+ format = format.replace('ss', padZero(seconds))
+ }
+ return format.replace('SSS', padZero(milliseconds, 3))
+}
+export function isSameSecond(time1, time2) {
+ return Math.floor(time1 / 1000) === Math.floor(time2 / 1000)
+}
diff --git a/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue b/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue
new file mode 100644
index 00000000..1825072a
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue
@@ -0,0 +1,266 @@
+
+
+ {{ displayValueCom }}
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue b/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue
new file mode 100644
index 00000000..6f8d7e69
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue
new file mode 100644
index 00000000..6ed9301e
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue
@@ -0,0 +1,148 @@
+
+ {}" @tap.stop.prevent="() => {}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue b/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue
new file mode 100644
index 00000000..b9438b47
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue b/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue
new file mode 100644
index 00000000..2c77b24e
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-field/u-field.vue b/uni_modules/vk-uview-ui/components/u-field/u-field.vue
new file mode 100644
index 00000000..efa31e6a
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-field/u-field.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-form-item/u-form-item.vue b/uni_modules/vk-uview-ui/components/u-form-item/u-form-item.vue
new file mode 100644
index 00000000..c893cfdb
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-form-item/u-form-item.vue
@@ -0,0 +1,509 @@
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ {{label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{validateMessage}}
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-form/u-form.vue b/uni_modules/vk-uview-ui/components/u-form/u-form.vue
new file mode 100644
index 00000000..ce502aec
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-form/u-form.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-full-screen/u-full-screen.vue b/uni_modules/vk-uview-ui/components/u-full-screen/u-full-screen.vue
new file mode 100644
index 00000000..4f7e7d95
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-full-screen/u-full-screen.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-gap/u-gap.vue b/uni_modules/vk-uview-ui/components/u-gap/u-gap.vue
new file mode 100644
index 00000000..6c01f943
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-gap/u-gap.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-grid-item/u-grid-item.vue b/uni_modules/vk-uview-ui/components/u-grid-item/u-grid-item.vue
new file mode 100644
index 00000000..c5b30334
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-grid-item/u-grid-item.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-grid/u-grid.vue b/uni_modules/vk-uview-ui/components/u-grid/u-grid.vue
new file mode 100644
index 00000000..125b6f19
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-grid/u-grid.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-icon/u-icon.vue b/uni_modules/vk-uview-ui/components/u-icon/u-icon.vue
new file mode 100644
index 00000000..ed95a9c6
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-icon/u-icon.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-image/u-image.vue b/uni_modules/vk-uview-ui/components/u-image/u-image.vue
new file mode 100644
index 00000000..a90adbcf
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-image/u-image.vue
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-index-anchor/u-index-anchor.vue b/uni_modules/vk-uview-ui/components/u-index-anchor/u-index-anchor.vue
new file mode 100644
index 00000000..5038827b
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-index-anchor/u-index-anchor.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ {{ index }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-index-list/u-index-list.vue b/uni_modules/vk-uview-ui/components/u-index-list/u-index-list.vue
new file mode 100644
index 00000000..30fcda09
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-index-list/u-index-list.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+ {{indexList[touchmoveIndex]}}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-input/u-input.vue b/uni_modules/vk-uview-ui/components/u-input/u-input.vue
new file mode 100644
index 00000000..df0a12ff
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-input/u-input.vue
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-keyboard/u-keyboard.vue b/uni_modules/vk-uview-ui/components/u-keyboard/u-keyboard.vue
new file mode 100644
index 00000000..d5aee71c
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-keyboard/u-keyboard.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+ {{ cancelBtn ? cancelText : "" }}
+
+
+ {{
+ tips ? tips : mode == "number" ? "数字键盘" : mode == "card" ? "身份证键盘" : "车牌号键盘"
+ }}
+
+
+ {{ confirmBtn ? confirmText : "" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-lazy-load/u-lazy-load.vue b/uni_modules/vk-uview-ui/components/u-lazy-load/u-lazy-load.vue
new file mode 100644
index 00000000..f872922b
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-lazy-load/u-lazy-load.vue
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-line-progress/u-line-progress.vue b/uni_modules/vk-uview-ui/components/u-line-progress/u-line-progress.vue
new file mode 100644
index 00000000..77e2da20
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-line-progress/u-line-progress.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+ {{percent + '%'}}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-line/u-line.vue b/uni_modules/vk-uview-ui/components/u-line/u-line.vue
new file mode 100644
index 00000000..aecc09cb
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-line/u-line.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-link/u-link.vue b/uni_modules/vk-uview-ui/components/u-link/u-link.vue
new file mode 100644
index 00000000..2dd2a735
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-link/u-link.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue b/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue
new file mode 100644
index 00000000..7e044013
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-loading/u-loading.vue b/uni_modules/vk-uview-ui/components/u-loading/u-loading.vue
new file mode 100644
index 00000000..3175c8c7
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-loading/u-loading.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-loadmore/u-loadmore.vue b/uni_modules/vk-uview-ui/components/u-loadmore/u-loadmore.vue
new file mode 100644
index 00000000..e7cbbea5
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-loadmore/u-loadmore.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+ {{ showText }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-mask/u-mask.vue b/uni_modules/vk-uview-ui/components/u-mask/u-mask.vue
new file mode 100644
index 00000000..cd339233
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-mask/u-mask.vue
@@ -0,0 +1,137 @@
+
+ {}" :class="{
+ 'u-mask-zoom': zoom,
+ 'u-mask-show': show
+ }">
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-message-input/u-message-input.vue b/uni_modules/vk-uview-ui/components/u-message-input/u-message-input.vue
new file mode 100644
index 00000000..f4b15685
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-message-input/u-message-input.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+ {{ charArr[index] ? charArr[index] : ''}}
+
+ {{ charArr[index] ? '●' : ''}}
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-modal/u-modal.vue b/uni_modules/vk-uview-ui/components/u-modal/u-modal.vue
new file mode 100644
index 00000000..bf8b4fce
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-modal/u-modal.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-navbar/u-navbar.vue b/uni_modules/vk-uview-ui/components/u-navbar/u-navbar.vue
new file mode 100644
index 00000000..450242e9
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-navbar/u-navbar.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+ {{ backText }}
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-no-network/u-no-network.vue b/uni_modules/vk-uview-ui/components/u-no-network/u-no-network.vue
new file mode 100644
index 00000000..51d9f4f0
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-no-network/u-no-network.vue
@@ -0,0 +1,233 @@
+
+ {}">
+
+
+
+ {{tips}}
+
+
+
+
+ 请检查网络,或前往设置
+
+
+
+ 重试
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-notice-bar/u-notice-bar.vue b/uni_modules/vk-uview-ui/components/u-notice-bar/u-notice-bar.vue
new file mode 100644
index 00000000..f5a05a26
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-notice-bar/u-notice-bar.vue
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-number-box/u-number-box.vue b/uni_modules/vk-uview-ui/components/u-number-box/u-number-box.vue
new file mode 100644
index 00000000..6ceecfc4
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-number-box/u-number-box.vue
@@ -0,0 +1,476 @@
+
+
+
+
+ -
+
+
+
+ +
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-number-keyboard/u-number-keyboard.vue b/uni_modules/vk-uview-ui/components/u-number-keyboard/u-number-keyboard.vue
new file mode 100644
index 00000000..f2d90f20
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-number-keyboard/u-number-keyboard.vue
@@ -0,0 +1,170 @@
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/vk-uview-ui/components/u-parse/libs/CssHandler.js b/uni_modules/vk-uview-ui/components/u-parse/libs/CssHandler.js
new file mode 100644
index 00000000..ad3add02
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-parse/libs/CssHandler.js
@@ -0,0 +1,100 @@
+import cfg from './config.js'
+var isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+
+function CssHandler(tagStyle) {
+ var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
+ for (var item in tagStyle)
+ styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
+ this.styles = styles;
+}
+CssHandler.prototype.getStyle = function(data) {
+ this.styles = new parser(data, this.styles).parse();
+}
+CssHandler.prototype.match = function(name, attrs) {
+ var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
+ if (attrs.class) {
+ var items = attrs.class.split(' ');
+ for (var i = 0, item; item = items[i]; i++)
+ if (tmp = this.styles['.' + item])
+ matched += tmp + ';';
+ }
+ if (tmp = this.styles['#' + attrs.id])
+ matched += tmp + ';';
+ return matched;
+}
+export default CssHandler;
+
+function parser(data, init) {
+ this.data = data;
+ this.floor = 0;
+ this.i = 0;
+ this.list = [];
+ this.res = init;
+ this.state = this.Space;
+}
+parser.prototype.parse = function() {
+ for (var c; c = this.data[this.i]; this.i++)
+ this.state(c);
+ return this.res;
+}
+parser.prototype.section = function() {
+ return this.data.substring(this.start, this.i);
+}
+// 状态机
+parser.prototype.Space = function(c) {
+ if (c == '.' || c == '#' || isLetter(c)) {
+ this.start = this.i;
+ this.state = this.Name;
+ } else if (c == '/' && this.data[this.i + 1] == '*')
+ this.Comment();
+ else if (!cfg.blankChar[c] && c != ';')
+ this.state = this.Ignore;
+}
+parser.prototype.Comment = function() {
+ this.i = this.data.indexOf('*/', this.i) + 1;
+ if (!this.i) this.i = this.data.length;
+ this.state = this.Space;
+}
+parser.prototype.Ignore = function(c) {
+ if (c == '{') this.floor++;
+ else if (c == '}' && !--this.floor) {
+ this.list = [];
+ this.state = this.Space;
+ }
+}
+parser.prototype.Name = function(c) {
+ if (cfg.blankChar[c]) {
+ this.list.push(this.section());
+ this.state = this.NameSpace;
+ } else if (c == '{') {
+ this.list.push(this.section());
+ this.Content();
+ } else if (c == ',') {
+ this.list.push(this.section());
+ this.Comma();
+ } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
+ this.state = this.Ignore;
+}
+parser.prototype.NameSpace = function(c) {
+ if (c == '{') this.Content();
+ else if (c == ',') this.Comma();
+ else if (!cfg.blankChar[c]) this.state = this.Ignore;
+}
+parser.prototype.Comma = function() {
+ while (cfg.blankChar[this.data[++this.i]]);
+ if (this.data[this.i] == '{') this.Content();
+ else {
+ this.start = this.i--;
+ this.state = this.Name;
+ }
+}
+parser.prototype.Content = function() {
+ this.start = ++this.i;
+ if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
+ var content = this.section();
+ for (var i = 0, item; item = this.list[i++];)
+ if (this.res[item]) this.res[item] += ';' + content;
+ else this.res[item] = content;
+ this.list = [];
+ this.state = this.Space;
+}
diff --git a/uni_modules/vk-uview-ui/components/u-parse/libs/MpHtmlParser.js b/uni_modules/vk-uview-ui/components/u-parse/libs/MpHtmlParser.js
new file mode 100644
index 00000000..a829fabe
--- /dev/null
+++ b/uni_modules/vk-uview-ui/components/u-parse/libs/MpHtmlParser.js
@@ -0,0 +1,581 @@
+/**
+ * html 解析器
+ * @tutorial https://github.com/jin-yufeng/Parser
+ * @version 20201029
+ * @author JinYufeng
+ * @listens MIT
+ */
+import cfg from './config.js'
+import CssHandler from './CssHandler.js'
+
+var blankChar = cfg.blankChar
+var windowWidth = uni.getSystemInfoSync().windowWidth;
+var emoji;
+
+function MpHtmlParser(data, options = {}) {
+ this.attrs = {};
+ this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
+ this.data = data;
+ this.domain = options.domain;
+ this.DOM = [];
+ this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
+ options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
+ this.options = options;
+ this.state = this.Text;
+ this.STACK = [];
+ // 工具函数
+ this.bubble = () => {
+ for (var i = this.STACK.length, item; item = this.STACK[--i];) {
+ if (cfg.richOnlyTags[item.name]) return false;
+ item.c = 1;
+ }
+ return true;
+ }
+ this.decode = (val, amp) => {
+ var i = -1,
+ j, en;
+ while (1) {
+ if ((i = val.indexOf('&', i + 1)) == -1) break;
+ if ((j = val.indexOf(';', i + 2)) == -1) break;
+ if (val[i + 1] == '#') {
+ en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
+ if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
+ } else {
+ en = val.substring(i + 1, j);
+ if (cfg.entities[en] || en == amp)
+ val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
+ }
+ }
+ return val;
+ }
+ this.getUrl = url => {
+ if (url[0] == '/') {
+ if (url[1] == '/') url = this.options.prot + ':' + url;
+ else if (this.domain) url = this.domain + url;
+ } else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
+ url = this.domain + '/' + url;
+ return url;
+ }
+ this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');
+ this.section = () => this.data.substring(this.start, this.i);
+ this.parent = () => this.STACK[this.STACK.length - 1];
+ this.siblings = () => this.STACK.length ? this.parent().children : this.DOM;
+}
+MpHtmlParser.prototype.parse = function() {
+ if (emoji) this.data = emoji.parseEmoji(this.data);
+ for (var c; c = this.data[this.i]; this.i++)
+ this.state(c);
+ if (this.state == this.Text) this.setText();
+ while (this.STACK.length) this.popNode(this.STACK.pop());
+ return this.DOM;
+}
+// 设置属性
+MpHtmlParser.prototype.setAttr = function() {
+ var name = this.attrName.toLowerCase(),
+ val = this.attrVal;
+ if (cfg.boolAttrs[name]) this.attrs[name] = 'T';
+ else if (val) {
+ if (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp'));
+ else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');
+ else if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
+ }
+ this.attrVal = '';
+ while (blankChar[this.data[this.i]]) this.i++;
+ if (this.isClose()) this.setNode();
+ else {
+ this.start = this.i;
+ this.state = this.AttrName;
+ }
+}
+// 设置文本节点
+MpHtmlParser.prototype.setText = function() {
+ var back, text = this.section();
+ if (!text) return;
+ text = (cfg.onText && cfg.onText(text, () => back = true)) || text;
+ if (back) {
+ this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
+ let j = this.start + text.length;
+ for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);
+ return;
+ }
+ if (!this.pre) {
+ // 合并空白符
+ var flag, tmp = [];
+ for (let i = text.length, c; c = text[--i];)
+ if (!blankChar[c]) {
+ tmp.unshift(c);
+ if (!flag) flag = 1;
+ } else {
+ if (tmp[0] != ' ') tmp.unshift(' ');
+ if (c == '\n' && flag == void 0) flag = 0;
+ }
+ if (flag == 0) return;
+ text = tmp.join('');
+ }
+ this.siblings().push({
+ type: 'text',
+ text: this.decode(text)
+ });
+}
+// 设置元素节点
+MpHtmlParser.prototype.setNode = function() {
+ var node = {
+ name: this.tagName.toLowerCase(),
+ attrs: this.attrs
+ },
+ close = cfg.selfClosingTags[node.name];
+ if (this.options.nodes.length) node.type = 'node';
+ this.attrs = {};
+ if (!cfg.ignoreTags[node.name]) {
+ // 处理属性
+ var attrs = node.attrs,
+ style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
+ styleObj = {};
+ if (attrs.id) {
+ if (this.options.compress & 1) attrs.id = void 0;
+ else if (this.options.useAnchor) this.bubble();
+ }
+ if ((this.options.compress & 2) && attrs.class) attrs.class = void 0;
+ switch (node.name) {
+ case 'a':
+ case 'ad': // #ifdef APP-PLUS
+ case 'iframe':
+ // #endif
+ this.bubble();
+ break;
+ case 'font':
+ if (attrs.color) {
+ styleObj['color'] = attrs.color;
+ attrs.color = void 0;
+ }
+ if (attrs.face) {
+ styleObj['font-family'] = attrs.face;
+ attrs.face = void 0;
+ }
+ if (attrs.size) {
+ var size = parseInt(attrs.size);
+ if (size < 1) size = 1;
+ else if (size > 7) size = 7;
+ var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
+ styleObj['font-size'] = map[size - 1];
+ attrs.size = void 0;
+ }
+ break;
+ case 'embed':
+ // #ifndef APP-PLUS
+ var src = node.attrs.src || '',
+ type = node.attrs.type || '';
+ if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
+ node.name = 'video';
+ else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
+ '.aac'))
+ node.name = 'audio';
+ else break;
+ if (node.attrs.autostart)
+ node.attrs.autoplay = 'T';
+ node.attrs.controls = 'T';
+ // #endif
+ // #ifdef APP-PLUS
+ this.bubble();
+ break;
+ // #endif
+ case 'video':
+ case 'audio':
+ if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);
+ else this[`${node.name}Num`]++;
+ if (node.name == 'video') {
+ if (this.videoNum > 3)
+ node.lazyLoad = 1;
+ if (attrs.width) {
+ styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
+ attrs.width = void 0;
+ }
+ if (attrs.height) {
+ styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
+ attrs.height = void 0;
+ }
+ }
+ if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
+ attrs.source = [];
+ if (attrs.src) {
+ attrs.source.push(attrs.src);
+ attrs.src = void 0;
+ }
+ this.bubble();
+ break;
+ case 'td':
+ case 'th':
+ if (attrs.colspan || attrs.rowspan)
+ for (var k = this.STACK.length, item; item = this.STACK[--k];)
+ if (item.name == 'table') {
+ item.flag = 1;
+ break;
+ }
+ }
+ if (attrs.align) {
+ if (node.name == 'table') {
+ if (attrs.align == 'center') styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto';
+ else styleObj['float'] = attrs.align;
+ } else styleObj['text-align'] = attrs.align;
+ attrs.align = void 0;
+ }
+ // 压缩 style
+ var styles = style.split(';');
+ style = '';
+ for (var i = 0, len = styles.length; i < len; i++) {
+ var info = styles[i].split(':');
+ if (info.length < 2) continue;
+ let key = info[0].trim().toLowerCase(),
+ value = info.slice(1).join(':').trim();
+ if (value[0] == '-' || value.includes('safe'))
+ style += `;${key}:${value}`;
+ else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
+ styleObj[key] = value;
+ }
+ if (node.name == 'img') {
+ if (attrs.src && !attrs.ignore) {
+ if (this.bubble())
+ attrs.i = (this.imgNum++).toString();
+ else attrs.ignore = 'T';
+ }
+ if (attrs.ignore) {
+ style += ';-webkit-touch-callout:none';
+ styleObj['max-width'] = '100%';
+ }
+ var width;
+ if (styleObj.width) width = styleObj.width;
+ else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : parseFloat(attrs.width) + 'px';
+ if (width) {
+ styleObj.width = width;
+ attrs.width = '100%';
+ if (parseInt(width) > windowWidth) {
+ styleObj.height = '';
+ if (attrs.height) attrs.height = void 0;
+ }
+ }
+ if (styleObj.height) {
+ attrs.height = styleObj.height;
+ styleObj.height = '';
+ } else if (attrs.height && !attrs.height.includes('%'))
+ attrs.height = parseFloat(attrs.height) + 'px';
+ }
+ for (var key in styleObj) {
+ var value = styleObj[key];
+ if (!value) continue;
+ if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
+ // 填充链接
+ if (value.includes('url')) {
+ var j = value.indexOf('(');
+ if (j++ != -1) {
+ while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++;
+ value = value.substr(0, j) + this.getUrl(value.substr(j));
+ }
+ }
+ // 转换 rpx
+ else if (value.includes('rpx'))
+ value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px');
+ else if (key == 'white-space' && value.includes('pre') && !close)
+ this.pre = node.pre = true;
+ style += `;${key}:${value}`;
+ }
+ style = style.substr(1);
+ if (style) attrs.style = style;
+ if (!close) {
+ node.children = [];
+ if (node.name == 'pre' && cfg.highlight) {
+ this.remove(node);
+ this.pre = node.pre = true;
+ }
+ this.siblings().push(node);
+ this.STACK.push(node);
+ } else if (!cfg.filter || cfg.filter(node, this) != false)
+ this.siblings().push(node);
+ } else {
+ if (!close) this.remove(node);
+ else if (node.name == 'source') {
+ var parent = this.parent();
+ if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
+ parent.attrs.source.push(node.attrs.src);
+ } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
+ }
+ if (this.data[this.i] == '/') this.i++;
+ this.start = this.i + 1;
+ this.state = this.Text;
+}
+// 移除标签
+MpHtmlParser.prototype.remove = function(node) {
+ var name = node.name,
+ j = this.i;
+ // 处理 svg
+ var handleSvg = () => {
+ var src = this.data.substring(j, this.i + 1);
+ node.attrs.xmlns = 'http://www.w3.org/2000/svg';
+ for (var key in node.attrs) {
+ if (key == 'viewbox') src = ` viewBox="${node.attrs.viewbox}"` + src;
+ else if (key != 'style') src = ` ${key}="${node.attrs[key]}"` + src;
+ }
+ src = '