plg-xiongt 2 tháng trước cách đây
mục cha
commit
72be2298f5
100 tập tin đã thay đổi với 5843 bổ sung0 xóa
  1. 29 0
      upcloud-wms-qingniu-web/.gitignore
  2. 19 0
      upcloud-wms-qingniu-web/.prettierrc
  3. 3 0
      upcloud-wms-qingniu-web/Dockerfile
  4. 9 0
      upcloud-wms-qingniu-web/README.md
  5. 42 0
      upcloud-wms-qingniu-web/babel.config.js
  6. 49 0
      upcloud-wms-qingniu-web/config/plugin.config.js
  7. 115 0
      upcloud-wms-qingniu-web/config/themePluginConfig.js
  8. 52 0
      upcloud-wms-qingniu-web/dataApiToNumScript.js
  9. 4 0
      upcloud-wms-qingniu-web/deploy.js
  10. BIN
      upcloud-wms-qingniu-web/dist.tar
  11. 31 0
      upcloud-wms-qingniu-web/docs/add-page-loading-animate.md
  12. 69 0
      upcloud-wms-qingniu-web/docs/main.html
  13. 38 0
      upcloud-wms-qingniu-web/docs/webpack-bundle-analyzer.md
  14. 23 0
      upcloud-wms-qingniu-web/jest.config.js
  15. 32 0
      upcloud-wms-qingniu-web/nginxtest.yml
  16. 87 0
      upcloud-wms-qingniu-web/package.json
  17. 10 0
      upcloud-wms-qingniu-web/pipeline_control.yaml
  18. BIN
      upcloud-wms-qingniu-web/public/favicon.ico
  19. 133 0
      upcloud-wms-qingniu-web/public/index.html
  20. BIN
      upcloud-wms-qingniu-web/public/load.gif
  21. BIN
      upcloud-wms-qingniu-web/public/logo_blue.png
  22. 598 0
      upcloud-wms-qingniu-web/public/printTemplate/acceptanceCheckSheet.grf
  23. 442 0
      upcloud-wms-qingniu-web/public/printTemplate/curingSheet.grf
  24. 489 0
      upcloud-wms-qingniu-web/public/printTemplate/inventorySheet.grf
  25. 506 0
      upcloud-wms-qingniu-web/public/printTemplate/printOnShelf.grf
  26. 564 0
      upcloud-wms-qingniu-web/public/printTemplate/receiptSheet.grf
  27. 366 0
      upcloud-wms-qingniu-web/public/printTemplate/shiftSheet.grf
  28. 40 0
      upcloud-wms-qingniu-web/public/scanBatch.html
  29. BIN
      upcloud-wms-qingniu-web/public/期初库存导入模板.xlsx
  30. 11 0
      upcloud-wms-qingniu-web/sh.exe.stackdump
  31. 36 0
      upcloud-wms-qingniu-web/src/App.vue
  32. 73 0
      upcloud-wms-qingniu-web/src/api/index.js
  33. 19 0
      upcloud-wms-qingniu-web/src/api/lang.js
  34. 91 0
      upcloud-wms-qingniu-web/src/api/login.js
  35. 70 0
      upcloud-wms-qingniu-web/src/api/manage.js
  36. BIN
      upcloud-wms-qingniu-web/src/assets/20230223154621.png
  37. BIN
      upcloud-wms-qingniu-web/src/assets/Shape.png
  38. 8 0
      upcloud-wms-qingniu-web/src/assets/WechatIMG196.svg
  39. BIN
      upcloud-wms-qingniu-web/src/assets/admin/bgoms.png
  40. BIN
      upcloud-wms-qingniu-web/src/assets/admin/code_plg.png
  41. BIN
      upcloud-wms-qingniu-web/src/assets/admin/head-top.png
  42. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it01.png
  43. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it02.png
  44. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it03.png
  45. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it04.png
  46. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it05.png
  47. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it06.png
  48. BIN
      upcloud-wms-qingniu-web/src/assets/admin/it07.png
  49. BIN
      upcloud-wms-qingniu-web/src/assets/admin/login_bg.png
  50. BIN
      upcloud-wms-qingniu-web/src/assets/admin/login_bg_n.png
  51. BIN
      upcloud-wms-qingniu-web/src/assets/admin/oms-center.png
  52. BIN
      upcloud-wms-qingniu-web/src/assets/admin/oms-left.png
  53. BIN
      upcloud-wms-qingniu-web/src/assets/admin/order.png
  54. BIN
      upcloud-wms-qingniu-web/src/assets/admin/person.png
  55. BIN
      upcloud-wms-qingniu-web/src/assets/admin/slogn_blue.png
  56. BIN
      upcloud-wms-qingniu-web/src/assets/admin/slogn_white.png
  57. BIN
      upcloud-wms-qingniu-web/src/assets/admin/systeminfo.png
  58. 69 0
      upcloud-wms-qingniu-web/src/assets/background.svg
  59. BIN
      upcloud-wms-qingniu-web/src/assets/check-circle-o.png
  60. 12 0
      upcloud-wms-qingniu-web/src/assets/css/font.less
  61. 93 0
      upcloud-wms-qingniu-web/src/assets/css/reset.less
  62. BIN
      upcloud-wms-qingniu-web/src/assets/default_user_icon.jpg
  63. BIN
      upcloud-wms-qingniu-web/src/assets/enterprise.png
  64. BIN
      upcloud-wms-qingniu-web/src/assets/font/Alibaba-PuHuiTi-Regular.otf
  65. BIN
      upcloud-wms-qingniu-web/src/assets/font/Montserrat-SemiBold.otf
  66. 1 0
      upcloud-wms-qingniu-web/src/assets/icons/bx-analyse.svg
  67. BIN
      upcloud-wms-qingniu-web/src/assets/ill_log_in_2.png
  68. 13 0
      upcloud-wms-qingniu-web/src/assets/ill_log_in_2.svg
  69. BIN
      upcloud-wms-qingniu-web/src/assets/logo.png
  70. 10 0
      upcloud-wms-qingniu-web/src/assets/logo.svg
  71. 18 0
      upcloud-wms-qingniu-web/src/assets/logo2.svg
  72. 18 0
      upcloud-wms-qingniu-web/src/assets/logo3.svg
  73. BIN
      upcloud-wms-qingniu-web/src/assets/noAuthorized.png
  74. BIN
      upcloud-wms-qingniu-web/src/assets/noAuthorized_bg.png
  75. BIN
      upcloud-wms-qingniu-web/src/assets/provided.png
  76. BIN
      upcloud-wms-qingniu-web/src/assets/provided_w.png
  77. BIN
      upcloud-wms-qingniu-web/src/assets/queren.png
  78. BIN
      upcloud-wms-qingniu-web/src/assets/search.png
  79. BIN
      upcloud-wms-qingniu-web/src/assets/suoqu.png
  80. 9 0
      upcloud-wms-qingniu-web/src/assets/title.svg
  81. 173 0
      upcloud-wms-qingniu-web/src/blocks/CascaderZone/index.js
  82. 221 0
      upcloud-wms-qingniu-web/src/blocks/CascaderZone/index.search.js
  83. 60 0
      upcloud-wms-qingniu-web/src/blocks/CascaderZone/wms.index.js
  84. 29 0
      upcloud-wms-qingniu-web/src/blocks/ImgsUpload/api.js
  85. 100 0
      upcloud-wms-qingniu-web/src/blocks/ImgsUpload/index.vue
  86. 165 0
      upcloud-wms-qingniu-web/src/blocks/ImgsUpload/upload.vue
  87. 166 0
      upcloud-wms-qingniu-web/src/blocks/ImgsUpload/view.vue
  88. 110 0
      upcloud-wms-qingniu-web/src/blocks/PictureView/PictureView.vue
  89. 5 0
      upcloud-wms-qingniu-web/src/blocks/PictureView/index.js
  90. 47 0
      upcloud-wms-qingniu-web/src/blocks/SwitchValue.vue
  91. 5 0
      upcloud-wms-qingniu-web/src/blocks/index.js
  92. 89 0
      upcloud-wms-qingniu-web/src/components/ArticleListContent/ArticleListContent.vue
  93. 3 0
      upcloud-wms-qingniu-web/src/components/ArticleListContent/index.js
  94. 24 0
      upcloud-wms-qingniu-web/src/components/AvatarList/Item.jsx
  95. 72 0
      upcloud-wms-qingniu-web/src/components/AvatarList/List.jsx
  96. 9 0
      upcloud-wms-qingniu-web/src/components/AvatarList/index.js
  97. 60 0
      upcloud-wms-qingniu-web/src/components/AvatarList/index.less
  98. 64 0
      upcloud-wms-qingniu-web/src/components/AvatarList/index.md
  99. 27 0
      upcloud-wms-qingniu-web/src/components/ConfigProvider/index.js
  100. 113 0
      upcloud-wms-qingniu-web/src/components/Dialog.js

+ 29 - 0
upcloud-wms-qingniu-web/.gitignore

@@ -0,0 +1,29 @@
+.DS_Store
+node_modules
+_plglib
+/dist
+/vue.config
+.history
+__*
+
+
+# local env files
+.env.local
+.env.*.local
+
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+/.vscode/*.json
+/yarn.lock

+ 19 - 0
upcloud-wms-qingniu-web/.prettierrc

@@ -0,0 +1,19 @@
+{
+  "arrowParens": "always",
+  "bracketSameLine": false,
+  "bracketSpacing": true,
+  "embeddedLanguageFormatting": "auto",
+  "htmlWhitespaceSensitivity": "css",
+  "insertPragma": false,
+  "jsxSingleQuote": false,
+  "proseWrap": "preserve",
+  "quoteProps": "as-needed",
+  "requirePragma": false,
+  "semi": true,
+  "singleQuote": false,
+  "tabWidth": 2,
+  "trailingComma": "es5",
+  "useTabs": false,
+  "vueIndentScriptAndStyle": false,
+  "printWidth": 200
+}

+ 3 - 0
upcloud-wms-qingniu-web/Dockerfile

@@ -0,0 +1,3 @@
+FROM harbor.cloud.prolog.org/base-solution/nginx:bate
+
+COPY dist /usr/share/nginx/html/

+ 9 - 0
upcloud-wms-qingniu-web/README.md

@@ -0,0 +1,9 @@
+# .gitignore 生效
+```
+# 让其对已经跟踪的文件也起作用
+git rm -r --cached .                #清除缓存 -r 表示递归删除(如果有文件夹的话) . 表示所有文件
+
+git status --ignored                  #查看一下具体效果
+git add .                             #重新trace file
+git commit -m "update .gitignore"     #提交和注释
+```

+ 42 - 0
upcloud-wms-qingniu-web/babel.config.js

@@ -0,0 +1,42 @@
+const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
+
+const plugins = []
+if (IS_PROD) {
+  plugins.push('transform-remove-console')
+}
+
+// lazy load ant-design-vue
+// if your use import on Demand, Use this code
+plugins.push(
+  [
+    'import',
+    {
+      libraryName: 'ant-design-vue',
+      libraryDirectory: 'es',
+      style: true // `style: true` 会加载 less 文件
+    }
+  ],
+  [
+    'import',
+    {
+      libraryName: 'plglib',
+      libraryDirectory: 'components',
+      style: 'css' // `style: true` 会加载 less 文件
+    },
+    'plglib'
+  ]
+)
+
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset',
+    [
+      '@babel/preset-env',
+      {
+        useBuiltIns: 'entry',
+        corejs: 3
+      }
+    ]
+  ],
+  plugins
+}

+ 49 - 0
upcloud-wms-qingniu-web/config/plugin.config.js

@@ -0,0 +1,49 @@
+const ThemeColorReplacer = require('webpack-theme-color-replacer')
+const generate = require('@ant-design/colors/lib/generate').default
+
+const getAntdSerials = (color) => {
+  // 淡化(即less的tint)
+  const lightens = new Array(9).fill().map((t, i) => {
+    return ThemeColorReplacer.varyColor.lighten(color, i / 10)
+  })
+  const colorPalettes = generate(color)
+  const rgb = ThemeColorReplacer.varyColor.toNum3(color.replace('#', '')).join(',')
+  return lightens.concat(colorPalettes).concat(rgb)
+}
+
+const themePluginOption = {
+  fileName: 'css/theme-colors-[contenthash:8].css',
+  matchColors: getAntdSerials('#1890ff'), // 主色系列
+  // 改变样式选择器,解决样式覆盖问题
+  changeSelector (selector) {
+    switch (selector) {
+      case '.ant-calendar-today .ant-calendar-date':
+        return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector
+      case '.ant-btn:focus,.ant-btn:hover':
+        return '.ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger)'
+      case '.ant-btn.active,.ant-btn:active':
+        return '.ant-btn.active:not(.ant-btn-primary):not(.ant-btn-danger),.ant-btn:active:not(.ant-btn-primary):not(.ant-btn-danger)'
+      case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon':
+      case '.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon':
+        return ':not(.ant-steps-item-process)' + selector
+      // fixed https://github.com/vueComponent/ant-design-vue-pro/issues/876
+      case '.ant-steps-item-process .ant-steps-item-icon':
+        return ':not(.ant-steps-item-custom)' + selector
+      case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover':
+      case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover':
+        return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover'
+      case '.ant-menu-horizontal > .ant-menu-item-selected > a':
+      case '.ant-menu-horizontal>.ant-menu-item-selected>a':
+        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item-selected > a'
+      case '.ant-menu-horizontal > .ant-menu-item > a:hover':
+      case '.ant-menu-horizontal>.ant-menu-item>a:hover':
+        return '.ant-menu-horizontal:not(ant-menu-light):not(.ant-menu-dark) > .ant-menu-item > a:hover'
+      default :
+        return selector
+    }
+  }
+}
+
+const createThemeColorReplacerPlugin = () => new ThemeColorReplacer(themePluginOption)
+
+module.exports = createThemeColorReplacerPlugin

+ 115 - 0
upcloud-wms-qingniu-web/config/themePluginConfig.js

@@ -0,0 +1,115 @@
+export default {
+  theme: [
+    {
+      key: 'dark',
+      fileName: 'dark.css',
+      theme: 'dark'
+    },
+    {
+      key: '#F5222D',
+      fileName: '#F5222D.css',
+      modifyVars: {
+        '@primary-color': '#F5222D'
+      }
+    },
+    {
+      key: '#FA541C',
+      fileName: '#FA541C.css',
+      modifyVars: {
+        '@primary-color': '#FA541C'
+      }
+    },
+    {
+      key: '#FAAD14',
+      fileName: '#FAAD14.css',
+      modifyVars: {
+        '@primary-color': '#FAAD14'
+      }
+    },
+    {
+      key: '#13C2C2',
+      fileName: '#13C2C2.css',
+      modifyVars: {
+        '@primary-color': '#13C2C2'
+      }
+    },
+    {
+      key: '#52C41A',
+      fileName: '#52C41A.css',
+      modifyVars: {
+        '@primary-color': '#52C41A'
+      }
+    },
+    {
+      key: '#2F54EB',
+      fileName: '#2F54EB.css',
+      modifyVars: {
+        '@primary-color': '#2F54EB'
+      }
+    },
+    {
+      key: '#722ED1',
+      fileName: '#722ED1.css',
+      modifyVars: {
+        '@primary-color': '#722ED1'
+      }
+    },
+
+    {
+      key: '#F5222D',
+      theme: 'dark',
+      fileName: 'dark-#F5222D.css',
+      modifyVars: {
+        '@primary-color': '#F5222D'
+      }
+    },
+    {
+      key: '#FA541C',
+      theme: 'dark',
+      fileName: 'dark-#FA541C.css',
+      modifyVars: {
+        '@primary-color': '#FA541C'
+      }
+    },
+    {
+      key: '#FAAD14',
+      theme: 'dark',
+      fileName: 'dark-#FAAD14.css',
+      modifyVars: {
+        '@primary-color': '#FAAD14'
+      }
+    },
+    {
+      key: '#13C2C2',
+      theme: 'dark',
+      fileName: 'dark-#13C2C2.css',
+      modifyVars: {
+        '@primary-color': '#13C2C2'
+      }
+    },
+    {
+      key: '#52C41A',
+      theme: 'dark',
+      fileName: 'dark-#52C41A.css',
+      modifyVars: {
+        '@primary-color': '#52C41A'
+      }
+    },
+    {
+      key: '#2F54EB',
+      theme: 'dark',
+      fileName: 'dark-#2F54EB.css',
+      modifyVars: {
+        '@primary-color': '#2F54EB'
+      }
+    },
+    {
+      key: '#722ED1',
+      theme: 'dark',
+      fileName: 'dark-#722ED1.css',
+      modifyVars: {
+        '@primary-color': '#722ED1'
+      }
+    }
+  ]
+}

+ 52 - 0
upcloud-wms-qingniu-web/dataApiToNumScript.js

@@ -0,0 +1,52 @@
+const fs = require("fs");
+
+const asd = /id: (["'][\w\d]+["']),(\n?\s+(.+)){0,2}\n?\s+params:\s/;
+const asdg = /id: ["'][\w\d]+["'],(\n?\s+(.+)){0,2}\n?\s+params:\s/g;
+
+class Main {
+  pathList = [];
+  pathListLength = 0;
+
+  read_dir(path) {
+    this.__read(path);
+    this.handleFile();
+  }
+
+  __read(path) {
+    fs.readdirSync(path).forEach(filename => {
+      let sub_path = path + '/' + filename;
+      let stat = fs.statSync(sub_path);
+      if (stat.isDirectory()) {
+        this.__read(sub_path);
+      } else if (stat.isFile()) {
+        if (!this.pathList.some(tt => tt === sub_path)) {
+          this.pathList.push(sub_path);
+        }
+      }
+    });
+    this.pathListLength = this.pathList.length
+  }
+
+  handleFile() {
+    let path = this.pathList.pop();
+    let content = fs.readFileSync(path, {
+      encoding: 'utf-8',
+    });
+    this.appendProps(path, content);
+    console.log(`正在替换${this.pathListLength - this.pathList.length}/${this.pathListLength}`)
+    if (this.pathList.length > 0) this.handleFile();
+  }
+
+  appendProps(path, content) {
+    if (!asd.test(content)) { return; }
+    let newContent = content.replace(asdg, (substring) => {
+      return substring.replace('id:', "num:");
+    });
+    fs.writeFileSync(path, newContent);
+  }
+
+}
+
+let main = new Main();
+main.read_dir('/Users/mlie/Documents/prolog/upcloud-wms-hnsy-web/src/views/kzyWMS');
+main.read_dir('/Users/mlie/Documents/prolog/upcloud-wms-hnsy-web/src/views/EIS');

+ 4 - 0
upcloud-wms-qingniu-web/deploy.js

@@ -0,0 +1,4 @@
+var tar = require('tar-fs')
+var fs = require('fs')
+
+tar.pack('./dist').pipe(fs.createWriteStream('dist.tar'))

BIN
upcloud-wms-qingniu-web/dist.tar


+ 31 - 0
upcloud-wms-qingniu-web/docs/add-page-loading-animate.md

@@ -0,0 +1,31 @@
+为首屏增加 加载动画
+====
+
+
+
+## 需求
+
+> 为了缓解用户第一次访问时,加载 JS 过大所导致用户等待白屏时间过长导致的用户体验不好,进行的一个优化动效。
+
+
+
+## 实现方案
+
+1. 将 动画加载 dom 元素放在 #app 内,Vue 生命周期开始时,会自动清掉 #app 下的所有元素。
+2. 将 动画加载 dom 元素放在 body 下,Vue 生命周期开始时 App.vue (created, mounted) 调用 `@/utils/utll` 下的 removeLoadingAnimate(#id, timeout) 则会移除加载动画
+
+最后一步:
+​	将样式插入到 `public/index.html` 文件的 `<head></head>` 最好写成内联 `<style>动画样式</style>` 
+
+
+
+----
+
+目前提供有两个样式,均在 `public/loading` 文件夹内。且 pro 已经默认使用了一套 loading 动画方案,可以直接参考 `public/index.html`
+
+
+## 写在最后
+
+目前 pro 有页面 overflow 显示出浏览器滚动条时,页面会抖动一下的问题。
+
+欢迎各位提供能解决的方案和实现 demo。如果在条件允许的情况下,建议请直接使用 pro 进行改造,也欢迎直接 PR 到 pro 的仓库

+ 69 - 0
upcloud-wms-qingniu-web/docs/main.html

@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en" id="plg_app">
+<head>
+  <meta charset="UTF-8">
+  <!--     <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ -->
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
+  <title>菠菜云运维管理平台</title>
+
+  <link rel="stylesheet" href="./prologui/dist/vendors/layui-master/dist/css/layui.rem.css" />
+  <link rel="stylesheet" href="./prologui/dist/css/prolog.all-0.0.1.css" />
+  <!-- 页面上使用css文件 -->
+  <link rel="stylesheet" href="./styles/dist_css/style.css" />
+  <link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_799562_g9fbb4vlkl4.css" />
+
+
+  <script src="./prologui/dist/vendors/jquery/jquery-3.3.1.min.js"></script>
+  <script src="./prologui/dist/vendors/echarts/dist/echarts.js"></script>
+  <script src="./prologui/dist/vendors/layui-master/dist/layui.all.js"></script>
+
+
+  <script src="./prologui/dist/vendors/vipspa-master/build/vipspa.js"></script>
+  <script src="./prologui/dist/vendors/dhtmlx/grid/codebase/dhtmlxgrid.js"></script>
+  <script src="./prologui/dist/vendors/dhtmlx/form/codebase/dhtmlxform.js"></script>
+  <script src="./prologui/dist/vendors/zTree_v3/js/jquery.ztree.core.min.js"></script>
+  <script src="./prologui/dist/js/prolog.min-0.0.1.js"></script>
+  <script src="./javascripts/api/index.js"></script>
+  <script src="./javascripts/util.js"></script>
+  <script src="./javascripts/adminPlant.js"></script>
+  <!-- 国际化插件 -->
+  <script src="./prologui/dist/vendors/jquery-i18next/lib/i18next.min.js"></script>
+  <script src="./prologui/dist/vendors/jquery-i18next/lib/i18nextXHRBackend.js"></script>
+  <script src="./prologui/dist/vendors/jquery-i18next/lib/i18nextBrowserLanguageDetector.js"></script>
+  <script src="./prologui/dist/vendors/jquery-i18next/lib/jquery-i18next.min.js"></script>
+  <script src="./javascripts/language/index.js"></script>
+  <script>
+  window.global_fun={}
+
+  </script>
+  <style>
+    body{
+      padding:0px;
+      background:rgb(240, 242, 245);
+    }
+    .plg-tab-container{padding: 0px;}
+  </style>
+</head>
+
+<body class="layui-layout-admin">
+</body>
+<script>
+  var path = window.location.hash;
+  path='../jq/'+path.substring(1);
+  $.ajax({
+    url:path,
+    type:'GET',
+    dataType:'html',
+    data:{},
+    success:function(data){
+      debugger
+      $("body").html(data);
+    }
+  });
+</script>
+
+
+</html>

+ 38 - 0
upcloud-wms-qingniu-web/docs/webpack-bundle-analyzer.md

@@ -0,0 +1,38 @@
+先增加依赖
+
+```bash
+// npm
+$ npm install --save-dev webpack-bundle-analyzer
+
+// or yarn
+$ yarn add webpack-bundle-analyzer -D
+```
+
+配置文件 `vue.config.js` 增加 `configureWebpack.plugins` 参数
+
+```
+const path = require('path')
+const webpack = require('webpack')
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
+
+function resolve (dir) {
+  return path.join(__dirname, dir)
+}
+
+// vue.config.js
+module.exports = {
+  configureWebpack: {
+    plugins: [
+      // Ignore all locale files of moment.js
+      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
+      // 依赖大小分析工具
+      new BundleAnalyzerPlugin(),
+    ]
+  },
+
+
+  ...
+}
+```
+
+启动 `cli` 的 `build` 命令进行项目编译,编译完成时,会自动运行一个 http://localhost:8888 的地址,完整显示了支持库依赖

+ 23 - 0
upcloud-wms-qingniu-web/jest.config.js

@@ -0,0 +1,23 @@
+module.exports = {
+  moduleFileExtensions: [
+    'js',
+    'jsx',
+    'json',
+    'vue'
+  ],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest'
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1'
+  },
+  snapshotSerializers: [
+    'jest-serializer-vue'
+  ],
+  testMatch: [
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
+  ],
+  testURL: 'http://localhost/'
+}

+ 32 - 0
upcloud-wms-qingniu-web/nginxtest.yml

@@ -0,0 +1,32 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+    name: nginxtest-config
+    namespace: kzytest
+data:
+  default.conf: |
+                server {
+                        listen       80;
+                        server_name  localhost;
+                        charset utf-8;
+                        location / {
+                            index index.html;
+                            root /usr/share/nginx/html;   
+                            try_files $uri $uri/ /index.html =404;
+                        }
+
+                        location ^~/japi/ {
+                          proxy_pass   http://192.168.1.88:30022/;
+                        }
+
+                        location ^~/api/ {
+                          proxy_pass  http://192.168.1.88:30022/;
+                          proxy_set_header  X-Real-IP $remote_addr;
+                        }
+
+                        error_page   500 502 503 504  /50x.html;
+                        location = /50x.html {
+                                root   html;
+                        }
+ 
+                }

+ 87 - 0
upcloud-wms-qingniu-web/package.json

@@ -0,0 +1,87 @@
+{
+  "name": "plglib-wms",
+  "version": "1.0.0",
+  "private": true,
+  "scripts": {
+    "serve": "cross-env vue-cli-service serve",
+    "build": "vue-cli-service build && node deploy.js",
+    "test:unit": "vue-cli-service test:unit",
+    "lint": "vue-cli-service lint",
+    "build:preview": "vue-cli-service build --mode preview ",
+    "lint:nofix": "vue-cli-service lint --no-fix",
+    "test:plglib": "vue-cli-service serve --mode plglib",
+    "upplglib": "node updatePlglib",
+    "deploy": "npm run build"
+  },
+  "dependencies": {
+    "ant-design-vue": "^1.7.2",
+    "axios": "^0.19.0",
+    "core-js": "^3.1.2",
+    "echarts": "^5.1.1",
+    "enquire.js": "^2.1.6",
+    "lodash.clonedeep": "^4.5.0",
+    "lodash.difference": "^4.5.0",
+    "lodash.get": "^4.4.2",
+    "lodash.pick": "^4.4.0",
+    "lodash.omit": "^4.5.0",
+    "md5": "^2.2.1",
+    "moment": "^2.24.0",
+    "monaco-editor": "^0.22.3",
+    "nprogress": "^0.2.0",
+    "pinyin-match": "^1.2.1",
+    "plglib": "^2.0.1",
+    "plglib-echarts": "^2.0.1",
+    "quagga": "^0.12.1",
+    "store": "^2.0.12",
+    "v-viewer": "^1.5.1",
+    "viser-vue": "^2.4.6",
+    "vue": "^2.7.0",
+    "vue-baidu-map": "^0.21.22",
+    "vue-clipboard2": "^0.2.1",
+    "vue-container-query": "^0.1.0",
+    "vue-copy-to-clipboard": "^1.0.3",
+    "vue-cropper": "0.4.9",
+    "vue-i18n": "^8.17.4",
+    "vue-json-editor": "^1.4.3",
+    "vue-json-viewer": "^2.2.18",
+    "vue-ls": "^3.2.2",
+    "vue-quill-editor": "^3.0.6",
+    "vue-router": "^3.1.2",
+    "vue-svg-component-runtime": "^1.0.1",
+    "vuedraggable": "^2.24.3",
+    "vuex": "^3.6.2",
+    "wangeditor": "^3.1.1",
+    "plg-platform-setting": "^1.0.2"
+  },
+  "devDependencies": {
+    "@ant-design/colors": "^3.2.1",
+    "@vue/cli-plugin-babel": "^4.0.4",
+    "@vue/cli-plugin-eslint": "^4.0.4",
+    "@vue/cli-plugin-router": "^4.0.4",
+    "@vue/cli-plugin-unit-jest": "^4.0.4",
+    "@vue/cli-plugin-vuex": "^4.0.4",
+    "@vue/cli-service": "^4.0.4",
+    "@vue/eslint-config-standard": "^4.0.0",
+    "@vue/test-utils": "^1.0.0-beta.29",
+    "babel-eslint": "^10.0.1",
+    "babel-plugin-import": "^1.12.2",
+    "babel-plugin-transform-remove-console": "^6.9.4",
+    "cross-env": "^7.0.3",
+    "eslint": "^5.16.0",
+    "eslint-plugin-html": "^5.0.0",
+    "eslint-plugin-vue": "^5.2.3",
+    "git-revision-webpack-plugin": "^3.0.6",
+    "less": "^3.0.4",
+    "less-loader": "^5.0.0",
+    "monaco-editor-webpack-plugin": "^3.1.0",
+    "opencollective": "^1.0.3",
+    "opencollective-postinstall": "^2.0.2",
+    "tar-fs": "^2.1.1",
+    "vue-svg-icon-loader": "^2.1.1",
+    "vue-template-compiler": "^2.7.0",
+    "webpack": "4.46.0",
+    "webpack-bundle-analyzer": "^4.3.0",
+    "webpack-cli": "^4.6.0",
+    "webpack-theme-color-replacer": "^1.3.12"
+  }
+}

+ 10 - 0
upcloud-wms-qingniu-web/pipeline_control.yaml

@@ -0,0 +1,10 @@
+#代码缓存开关 true开 false关
+BUILD_CACHE=true
+#代码编辑开关  ture开  false关
+BUILD_CODE=true
+#代码扫描开关 true扫描 false不扫描
+SONAR_SCAN=false
+#构建镜像开关 true构建 false不构建
+BUILD_IMAGE=true
+#发布开关 true发布 False不发布
+DEPLOY=true

BIN
upcloud-wms-qingniu-web/public/favicon.ico


+ 133 - 0
upcloud-wms-qingniu-web/public/index.html

@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html lang="zh-cmn-Hans">
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+  <title>login for Upcloud Solution</title>
+  <link rel="stylesheet" href="//at.alicdn.com/t/font_2436719_5x981id8c69.css">
+  <!-- <script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=vfZgs8WTqtPblvooiR0Qo4Zo2M0qxinS"></script> -->
+  <style>
+    #loading-mask {
+      position: fixed;
+      left: 0;
+      top: 0;
+      height: 100%;
+      width: 100%;
+      background: #fff;
+      user-select: none;
+      z-index: 9999;
+      overflow: hidden;
+    }
+
+    .loading-wrapper {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -100%);
+    }
+
+    .loading-dot {
+      animation: antRotate 1.2s infinite linear;
+      transform: rotate(45deg);
+      position: relative;
+      display: inline-block;
+      font-size: 64px;
+      width: 64px;
+      height: 64px;
+      box-sizing: border-box;
+    }
+
+    .loading-dot i {
+      width: 22px;
+      height: 22px;
+      position: absolute;
+      display: block;
+      background-color: #1890ff;
+      border-radius: 100%;
+      transform: scale(0.75);
+      transform-origin: 50% 50%;
+      opacity: 0.3;
+      animation: antSpinMove 1s infinite linear alternate;
+    }
+
+    .loading-dot i:nth-child(1) {
+      top: 0;
+      left: 0;
+    }
+
+    .loading-dot i:nth-child(2) {
+      top: 0;
+      right: 0;
+      -webkit-animation-delay: 0.4s;
+      animation-delay: 0.4s;
+    }
+
+    .loading-dot i:nth-child(3) {
+      right: 0;
+      bottom: 0;
+      -webkit-animation-delay: 0.8s;
+      animation-delay: 0.8s;
+    }
+
+    .loading-dot i:nth-child(4) {
+      bottom: 0;
+      left: 0;
+      -webkit-animation-delay: 1.2s;
+      animation-delay: 1.2s;
+    }
+
+    @keyframes antRotate {
+      to {
+        -webkit-transform: rotate(405deg);
+        transform: rotate(405deg);
+      }
+    }
+
+    @-webkit-keyframes antRotate {
+      to {
+        -webkit-transform: rotate(405deg);
+        transform: rotate(405deg);
+      }
+    }
+
+    @keyframes antSpinMove {
+      to {
+        opacity: 1;
+      }
+    }
+
+    @-webkit-keyframes antSpinMove {
+      to {
+        opacity: 1;
+      }
+    }
+  </style>
+  <!-- require cdn assets css -->
+  <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
+    <link rel="stylesheet" href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" />
+    <% } %>
+</head>
+
+<body>
+  <noscript>
+    <strong>系统需要脚本支持,请勿限制</strong>
+  </noscript>
+  <div id="app">
+    <div id="loading-mask">
+      <div class="loading-wrapper">
+        <img style="width:60px;" src="<%= BASE_URL %>load.gif" />
+      </div>
+    </div>
+  </div>
+  </div>
+  <!-- require cdn assets js -->
+  <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
+    <script type="text/javascript" src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
+    <% } %>
+      <!-- built files will be auto injected -->
+</body>
+
+</html>

BIN
upcloud-wms-qingniu-web/public/load.gif


BIN
upcloud-wms-qingniu-web/public/logo_blue.png


+ 598 - 0
upcloud-wms-qingniu-web/public/printTemplate/acceptanceCheckSheet.grf

@@ -0,0 +1,598 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"Size":256,
+		"Width":30,
+		"Height":9.3,
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"oddCaseQty"
+				},
+				{
+					"Name":"pieceQty"
+				},
+				{
+					"Name":"expiredDate"
+				},
+				{
+					"Name":"specification"
+				},
+				{
+					"Name":"oddPieceQty"
+				},
+				{
+					"Name":"conversionRate"
+				},
+				{
+					"Name":"itemNum"
+				},
+				{
+					"Name":"badQty"
+				},
+				{
+					"Name":"manufacturerName"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"uom"
+				},
+				{
+					"Name":"productionDate"
+				},
+				{
+					"Name":"lpQty"
+				},
+				{
+					"Name":"manufacturerLotNum"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column2",
+				"Width":2.77813
+			},
+			{
+				"Name":"Column3",
+				"Width":3.78354
+			},
+			{
+				"Name":"Column4",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column5",
+				"Width":2.61938
+			},
+			{
+				"Name":"Column13",
+				"Width":3.20146
+			},
+			{
+				"Name":"Column6",
+				"Width":1.19063
+			},
+			{
+				"Name":"Column14",
+				"Width":1.21708
+			},
+			{
+				"Name":"Column7",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column9",
+				"Width":2.38125
+			},
+			{
+				"Name":"Column10",
+				"Width":2.40771
+			},
+			{
+				"Name":"Column8",
+				"Width":1.5875
+			},
+			{
+				"Name":"Column11",
+				"Width":1.40229
+			},
+			{
+				"Name":"Column15",
+				"Width":1.40229
+			},
+			{
+				"Name":"Column16",
+				"Width":1.21708
+			}
+		],
+		"ColumnContent":{
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnContentCell":[
+				{
+					"Column":"Column2",
+					"DataField":"itemNum"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"specification"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"manufacturerName"
+				},
+				{
+					"Column":"Column13",
+					"DataField":"manufacturerLotNum"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"oddPieceQty"
+				},
+				{
+					"Column":"Column14",
+					"DataField":"oddCaseQty"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"pieceQty"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"productionDate"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"expiredDate"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"uom"
+				},
+				{
+					"Column":"Column11",
+					"DataField":"conversionRate"
+				},
+				{
+					"Column":"Column15",
+					"DataField":"lpQty"
+				},
+				{
+					"Column":"Column16",
+					"DataField":"badQty"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品规格"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产厂家"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column13",
+					"TextAlign":"MiddleCenter",
+					"Text":"批号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"零散数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column14",
+					"TextAlign":"MiddleCenter",
+					"Text":"整件数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产日期"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"有效期至"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装单位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column11",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column15",
+					"TextAlign":"MiddleCenter",
+					"Text":"合格数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column16",
+					"TextAlign":"MiddleCenter",
+					"Text":"不合格数"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":2.98979,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox6",
+					"Left":0.105833,
+					"Top":2.16958,
+					"Width":1.905,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"供应商名称:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"vendorName",
+					"Left":2.01083,
+					"Top":2.16958,
+					"Width":3.70417,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"companyName",
+					"Left":8.59896,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":21.4313,
+					"Top":0.873125,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":23.4421,
+					"Top":0.873125,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox24",
+					"Left":7.09083,
+					"Top":2.16958,
+					"Width":2.09021,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"联系人电话:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"vendorPhone",
+					"Left":9.15458,
+					"Top":2.16958,
+					"Width":4.52438,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":7.01146,
+					"Top":0.873125,
+					"Width":2.19604,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"仓库:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"warehouseName",
+					"Left":9.2075,
+					"Top":0.873125,
+					"Width":4.39208,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox35",
+					"Left":21.4313,
+					"Top":2.16958,
+					"Width":1.95792,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"收货人:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"rcvUser",
+					"Left":23.3892,
+					"Top":2.16958,
+					"Width":3.81,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox36",
+					"Left":0.105833,
+					"Top":0.0529167,
+					"Width":1.905,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"备注:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"remark",
+					"Left":2.01083,
+					"Top":0.0529167,
+					"Width":3.70417,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox38",
+					"Left":0.079375,
+					"Top":0.687917,
+					"Width":1.93146,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"单据编号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"rqcNo",
+					"Left":2.01083,
+					"Top":0.687917,
+					"Width":3.67771,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox40",
+					"Left":13.9965,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"验收单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox41",
+					"Left":21.4577,
+					"Top":1.53458,
+					"Width":1.93146,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"暂存区:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"preAreaName",
+					"Left":23.3892,
+					"Top":1.53458,
+					"Width":3.81,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":21.6165,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"质检员:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"rqcUser",
+					"Left":24.0771,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 442 - 0
upcloud-wms-qingniu-web/public/printTemplate/curingSheet.grf

@@ -0,0 +1,442 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"locatorName"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"qualityStatus"
+				},
+				{
+					"Name":"manufacturerName"
+				},
+				{
+					"Name":"itemCode"
+				},
+				{
+					"Name":"showProductionDate"
+				},
+				{
+					"Name":"itemHealthCategoryName"
+				},
+				{
+					"Name":"remark"
+				},
+				{
+					"Name":"upkeepQty"
+				},
+				{
+					"Name":"showExpiredDate"
+				},
+				{
+					"Name":"lotNum"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column1",
+				"Width":0.978958
+			},
+			{
+				"Name":"Column2",
+				"Width":1.98438
+			},
+			{
+				"Name":"Column3",
+				"Width":2.01083
+			},
+			{
+				"Name":"Column4",
+				"Width":2.01083
+			},
+			{
+				"Name":"Column5",
+				"Width":1.98438
+			},
+			{
+				"Name":"Column6",
+				"Width":1.61396
+			},
+			{
+				"Name":"Column7",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column8",
+				"Width":1.5875
+			},
+			{
+				"Name":"Column9",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column10",
+				"Width":1.61396
+			},
+			{
+				"Name":"Column11",
+				"Width":1.5875
+			},
+			{
+				"Name":"Column12",
+				"Width":1
+			}
+		],
+		"ColumnContent":{
+			"Font":{
+				"Name":"宋体",
+				"Size":90000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnContentCell":[
+				{
+					"Column":"Column1",
+					"FreeCell":true,
+					"Control":[
+						{
+							"Type":"SystemVarBox",
+							"Name":"SystemVarBox12",
+							"Anchor":"[Left|Top|Right|Bottom]",
+							"Dock":"Fill",
+							"Center":"Both",
+							"TextAlign":"MiddleCenter",
+							"SystemVar":"RowNo"
+						}
+					]
+				},
+				{
+					"Column":"Column2",
+					"DataField":"itemCode"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"itemHealthCategoryName"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"locatorName"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"upkeepQty"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"lotNum"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"manufacturerName"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"showProductionDate"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"showExpiredDate"
+				},
+				{
+					"Column":"Column11",
+					"DataField":"qualityStatus"
+				},
+				{
+					"Column":"Column12",
+					"WordWrap":true,
+					"CanGrow":true,
+					"DataField":"remark"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"Font":{
+				"Name":"宋体",
+				"Size":90000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column1",
+					"TextAlign":"MiddleCenter",
+					"Text":"序号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编码"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品大类"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"货位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"养护数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"批号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产厂家"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产日期"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"有效期至"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column11",
+					"TextAlign":"MiddleCenter",
+					"Text":"质量状况"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column12",
+					"TextAlign":"MiddleCenter",
+					"Text":"备注"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":2.40771,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox6",
+					"Left":0.105833,
+					"Top":1.5875,
+					"Width":1.5875,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"养护单号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"billNo",
+					"Left":1.69333,
+					"Top":1.5875,
+					"Width":4.02167,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox8",
+					"Left":7.19667,
+					"Top":0.396875,
+					"Width":5.34458,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"养护单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":14.261,
+					"Top":1.5875,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":16.2719,
+					"Top":1.5875,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox24",
+					"Left":10.2658,
+					"Top":1.5875,
+					"Width":1.00542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"货主:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"cargoOwnerName",
+					"Left":11.2448,
+					"Top":1.5875,
+					"Width":2.96333,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":5.82083,
+					"Top":1.5875,
+					"Width":0.873125,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"仓库:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"warehouseName",
+					"Left":6.6675,
+					"Top":1.5875,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":13.4673,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"养护员:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"operBy",
+					"Left":15.9279,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 489 - 0
upcloud-wms-qingniu-web/public/printTemplate/inventorySheet.grf

@@ -0,0 +1,489 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"itemCode"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"itemHealthCategory"
+				},
+				{
+					"Name":"warehouseLocatorCode"
+				},
+				{
+					"Name":"uom"
+				},
+				{
+					"Name":"conversionRate"
+				},
+				{
+					"Name":"pieceQuantityAccount"
+				},
+				{
+					"Name":"manufacturerLotNum"
+				},
+				{
+					"Name":"manufacturerName"
+				},
+				{
+					"Name":"batchProductionDateShow"
+				},
+				{
+					"Name":"batchExpiredDateShow"
+				},
+				{
+					"Name":"stockStatusName"
+				},
+				{
+					"Name":"operBy"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column1",
+				"Width":0.978958
+			},
+			{
+				"Name":"Column2",
+				"Width":1.98438
+			},
+			{
+				"Name":"Column3",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column4",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column5",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column13",
+				"Width":1.21708
+			},
+			{
+				"Name":"Column6",
+				"Width":1.19063
+			},
+			{
+				"Name":"Column14",
+				"Width":1.21708
+			},
+			{
+				"Name":"Column7",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column8",
+				"Width":1.5875
+			},
+			{
+				"Name":"Column9",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column10",
+				"Width":1.61396
+			},
+			{
+				"Name":"Column11",
+				"Width":1.19063
+			}
+		],
+		"ColumnContent":{
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnContentCell":[
+				{
+					"Column":"Column1",
+					"FreeCell":true,
+					"Control":[
+						{
+							"Type":"SystemVarBox",
+							"Name":"SystemVarBox12",
+							"Anchor":"[Left|Top|Right|Bottom]",
+							"Dock":"Fill",
+							"Center":"Both",
+							"TextAlign":"MiddleCenter",
+							"SystemVar":"RowNo"
+						}
+					]
+				},
+				{
+					"Column":"Column2",
+					"DataField":"itemCode"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"itemHealthCategory"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"warehouseLocatorCode"
+				},
+				{
+					"Column":"Column13",
+					"DataField":"uom"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"conversionRate"
+				},
+				{
+					"Column":"Column14",
+					"DataField":"pieceQuantityAccount"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"manufacturerLotNum"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"manufacturerName"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"batchProductionDateShow"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"batchExpiredDateShow"
+				},
+				{
+					"Column":"Column11",
+					"DataField":"stockStatusName"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column1",
+					"TextAlign":"MiddleCenter",
+					"Text":"序号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编码"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品大类"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"货位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column13",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装单位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column14",
+					"TextAlign":"MiddleCenter",
+					"Text":"库存数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"批号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产厂家"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产日期"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"有效期至"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column11",
+					"TextAlign":"MiddleCenter",
+					"Text":"质量状况"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":3.20146,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox6",
+					"Left":0.105833,
+					"Top":1.5875,
+					"Width":1.5875,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"盘点单号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"checkHeaderId",
+					"Left":1.69333,
+					"Top":1.5875,
+					"Width":4.02167,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox8",
+					"Left":7.19667,
+					"Top":0.396875,
+					"Width":5.34458,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"盘点单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":14.261,
+					"Top":1.5875,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":16.2719,
+					"Top":1.5875,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox24",
+					"Left":0.105833,
+					"Top":2.24896,
+					"Width":1.00542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"货主:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"cargoOwnerName",
+					"Left":1.08479,
+					"Top":2.24896,
+					"Width":4.52438,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":5.82083,
+					"Top":1.5875,
+					"Width":0.873125,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"仓库:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"warehouseName",
+					"Left":6.6675,
+					"Top":1.5875,
+					"Width":4.33917,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox35",
+					"Left":5.84729,
+					"Top":2.27542,
+					"Width":1.64042,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"盘点方式:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"checkMethodName",
+					"Left":7.46125,
+					"Top":2.27542,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":13.4673,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"盘点员:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"operBy",
+					"Left":15.9279,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 506 - 0
upcloud-wms-qingniu-web/public/printTemplate/printOnShelf.grf

@@ -0,0 +1,506 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"Size":256,
+		"Width":30,
+		"Height":9.3,
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"itemNum"
+				},
+				{
+					"Name":"whAreaName"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"oddCaseQty"
+				},
+				{
+					"Name":"whLocatorCodeRecommend"
+				},
+				{
+					"Name":"pieceQty"
+				},
+				{
+					"Name":"specification"
+				},
+				{
+					"Name":"manufacturerLotNum"
+				},
+				{
+					"Name":"manufacturerName"
+				},
+				{
+					"Name":"containerCode"
+				},
+				{
+					"Name":"oddPieceQty"
+				},
+				{
+					"Name":"whLocatorCode"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column2",
+				"Width":2.77813
+			},
+			{
+				"Name":"Column3",
+				"Width":3.78354
+			},
+			{
+				"Name":"Column4",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column5",
+				"Width":2.61938
+			},
+			{
+				"Name":"Column13",
+				"Width":3.20146
+			},
+			{
+				"Name":"Column6",
+				"Width":1.19063
+			},
+			{
+				"Name":"Column14",
+				"Width":1.21708
+			},
+			{
+				"Name":"Column7",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column9",
+				"Width":2.59292
+			},
+			{
+				"Name":"Column10",
+				"Width":2.59292
+			},
+			{
+				"Name":"Column8",
+				"Width":2.40771
+			},
+			{
+				"Name":"Column11",
+				"Width":3.01625
+			}
+		],
+		"ColumnContent":{
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnContentCell":[
+				{
+					"Column":"Column2",
+					"DataField":"itemNum"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"specification"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"manufacturerName"
+				},
+				{
+					"Column":"Column13",
+					"DataField":"manufacturerLotNum"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"oddPieceQty"
+				},
+				{
+					"Column":"Column14",
+					"DataField":"oddCaseQty"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"pieceQty"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"whLocatorCodeRecommend"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"whLocatorCode"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"containerCode"
+				},
+				{
+					"Column":"Column11",
+					"DataField":"whLocatorCode"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"计量规格"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产厂家"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column13",
+					"TextAlign":"MiddleCenter",
+					"Text":"批号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"零散数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column14",
+					"TextAlign":"MiddleCenter",
+					"Text":"整件数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"推荐货位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"实际货位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"托盘号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column11",
+					"TextAlign":"MiddleCenter",
+					"Text":"库区"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":2.98979,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox6",
+					"Left":0.105833,
+					"Top":2.16958,
+					"Width":1.905,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"采购单号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"poNo",
+					"Left":2.01083,
+					"Top":2.16958,
+					"Width":3.70417,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"companyName",
+					"Left":8.59896,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":21.4313,
+					"Top":0.873125,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":23.4421,
+					"Top":0.873125,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":7.01146,
+					"Top":0.873125,
+					"Width":2.19604,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"供应商:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"vendorName",
+					"Left":9.2075,
+					"Top":0.873125,
+					"Width":4.39208,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox38",
+					"Left":0.079375,
+					"Top":0.687917,
+					"Width":1.93146,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"单据编号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"billNo",
+					"Left":2.01083,
+					"Top":0.687917,
+					"Width":3.67771,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox40",
+					"Left":13.9965,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"上架单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox41",
+					"Left":21.4577,
+					"Top":1.53458,
+					"Width":1.93146,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"上架时间:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"inStockTime",
+					"Left":23.3892,
+					"Top":1.40229,
+					"Width":3.81,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":21.6165,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"质检员:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"operBy",
+					"Left":24.0771,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox43",
+					"Left":0.211667,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"备注:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox44",
+					"Left":2.67229,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 564 - 0
upcloud-wms-qingniu-web/public/printTemplate/receiptSheet.grf

@@ -0,0 +1,564 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"Size":256,
+		"Width":30,
+		"Height":9.3,
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"itemNum"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"oddCaseQty"
+				},
+				{
+					"Name":"productionDate"
+				},
+				{
+					"Name":"uom"
+				},
+				{
+					"Name":"pieceQty"
+				},
+				{
+					"Name":"expiredDate"
+				},
+				{
+					"Name":"manufacturerLotNum"
+				},
+				{
+					"Name":"manufacturerName"
+				},
+				{
+					"Name":"specification"
+				},
+				{
+					"Name":"oddPieceQty"
+				},
+				{
+					"Name":"conversionRate"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column2",
+				"Width":2.77813
+			},
+			{
+				"Name":"Column3",
+				"Width":3.78354
+			},
+			{
+				"Name":"Column4",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column5",
+				"Width":2.61938
+			},
+			{
+				"Name":"Column13",
+				"Width":3.20146
+			},
+			{
+				"Name":"Column6",
+				"Width":1.19063
+			},
+			{
+				"Name":"Column14",
+				"Width":1.21708
+			},
+			{
+				"Name":"Column7",
+				"Width":1.79917
+			},
+			{
+				"Name":"Column9",
+				"Width":2.59292
+			},
+			{
+				"Name":"Column10",
+				"Width":2.59292
+			},
+			{
+				"Name":"Column8",
+				"Width":2.40771
+			},
+			{
+				"Name":"Column11",
+				"Width":3.01625
+			}
+		],
+		"ColumnContent":{
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnContentCell":[
+				{
+					"Column":"Column2",
+					"DataField":"itemNum"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"specification"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"manufacturerName"
+				},
+				{
+					"Column":"Column13",
+					"DataField":"manufacturerLotNum"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"oddPieceQty"
+				},
+				{
+					"Column":"Column14",
+					"DataField":"oddCaseQty"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"pieceQty"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"productionDate"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"expiredDate"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"uom"
+				},
+				{
+					"Column":"Column11",
+					"DataField":"conversionRate"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"Font":{
+				"Name":"宋体",
+				"Size":75000,
+				"Weight":400,
+				"Charset":134
+			},
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品规格"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产厂家"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column13",
+					"TextAlign":"MiddleCenter",
+					"Text":"批号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"零散数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column14",
+					"TextAlign":"MiddleCenter",
+					"Text":"整件数"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"生产日期"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"有效期至"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装单位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column11",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装数"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":2.98979,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox6",
+					"Left":0.105833,
+					"Top":1.79917,
+					"Width":1.905,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"供应商名称:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"vendorName",
+					"Left":2.01083,
+					"Top":1.79917,
+					"Width":3.70417,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"companyName",
+					"Left":8.59896,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":21.4313,
+					"Top":0.873125,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":23.4421,
+					"Top":0.873125,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":7.01146,
+					"Top":0.873125,
+					"Width":2.19604,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"仓库:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"warehouseName",
+					"Left":9.2075,
+					"Top":0.873125,
+					"Width":4.39208,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox38",
+					"Left":0.079375,
+					"Top":0.873125,
+					"Width":1.93146,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"收货单号:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"rcvNo",
+					"Left":2.01083,
+					"Top":0.873125,
+					"Width":3.67771,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox40",
+					"Left":13.9965,
+					"Width":5.3975,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"收货单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox41",
+					"Left":21.4048,
+					"Top":1.77271,
+					"Width":1.98438,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"联系人电话:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"vendorPhone",
+					"Left":23.3892,
+					"Top":1.77271,
+					"Width":3.81,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox45",
+					"Left":0.211667,
+					"Top":0.185208,
+					"Width":1.79917,
+					"Height":0.608542,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"备注:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"remark",
+					"Left":2.01083,
+					"Top":0.185208,
+					"Width":3.78354,
+					"Height":0.582083,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":21.6165,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"录单人:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"operaterUser",
+					"Left":24.0771,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox43",
+					"Left":0.211667,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"收货人:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"rcvUser",
+					"Left":2.67229,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox47",
+					"Left":11.3242,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"供应商签字:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox48",
+					"Left":13.7848,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 366 - 0
upcloud-wms-qingniu-web/public/printTemplate/shiftSheet.grf

@@ -0,0 +1,366 @@
+{
+	"Version":"6.5.0.0",
+	"Font":{
+		"Name":"宋体",
+		"Size":105000,
+		"Weight":400,
+		"Charset":134
+	},
+	"Printer":{
+		"LeftMargin":0.5,
+		"TopMargin":0.8,
+		"RightMargin":0.5,
+		"BottomMargin":0.5
+	},
+	"DetailGrid":{
+		"Recordset":{
+			"Field":[
+				{
+					"Name":"itemCode"
+				},
+				{
+					"Name":"itemName"
+				},
+				{
+					"Name":"uom"
+				},
+				{
+					"Name":"caseConversionRate"
+				},
+				{
+					"Name":"oddPieceQuantity"
+				},
+				{
+					"Name":"outWarehouseAreaCategory"
+				},
+				{
+					"Name":"inWarehouseAreaCategory"
+				},
+				{
+					"Name":"outLocatorCode"
+				},
+				{
+					"Name":"inLocatorCode"
+				}
+			]
+		},
+		"Column":[
+			{
+				"Name":"Column1",
+				"Width":0.978958
+			},
+			{
+				"Name":"Column2",
+				"Width":2.40771
+			},
+			{
+				"Name":"Column3",
+				"Width":2.59292
+			},
+			{
+				"Name":"Column4",
+				"Width":2.01083
+			},
+			{
+				"Name":"Column5",
+				"Width":1.98438
+			},
+			{
+				"Name":"Column6",
+				"Width":1.61396
+			},
+			{
+				"Name":"Column7",
+				"Width":2.38125
+			},
+			{
+				"Name":"Column8",
+				"Width":2.19604
+			},
+			{
+				"Name":"Column9",
+				"Width":2.01083
+			},
+			{
+				"Name":"Column10",
+				"Width":1.79917
+			}
+		],
+		"ColumnContent":{
+			"Height":0.608542,
+			"ColumnContentCell":[
+				{
+					"Column":"Column1",
+					"FreeCell":true,
+					"Control":[
+						{
+							"Type":"SystemVarBox",
+							"Name":"SystemVarBox12",
+							"Anchor":"[Left|Top|Right|Bottom]",
+							"Dock":"Fill",
+							"Center":"Both",
+							"TextAlign":"MiddleCenter",
+							"SystemVar":"RowNo"
+						}
+					]
+				},
+				{
+					"Column":"Column2",
+					"DataField":"itemCode"
+				},
+				{
+					"Column":"Column3",
+					"DataField":"itemName"
+				},
+				{
+					"Column":"Column4",
+					"DataField":"uom"
+				},
+				{
+					"Column":"Column5",
+					"DataField":"caseConversionRate"
+				},
+				{
+					"Column":"Column6",
+					"DataField":"oddPieceQuantity"
+				},
+				{
+					"Column":"Column7",
+					"DataField":"outWarehouseAreaCategory"
+				},
+				{
+					"Column":"Column8",
+					"DataField":"inWarehouseAreaCategory"
+				},
+				{
+					"Column":"Column9",
+					"DataField":"outLocatorCode"
+				},
+				{
+					"Column":"Column10",
+					"DataField":"inLocatorCode"
+				}
+			]
+		},
+		"ColumnTitle":{
+			"Height":0.608542,
+			"ColumnTitleCell":[
+				{
+					"GroupTitle":false,
+					"Column":"Column1",
+					"TextAlign":"MiddleCenter",
+					"Text":"序号"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column2",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品编码"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column3",
+					"TextAlign":"MiddleCenter",
+					"Text":"商品名称"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column4",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装单位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column5",
+					"TextAlign":"MiddleCenter",
+					"Text":"包装数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column6",
+					"TextAlign":"MiddleCenter",
+					"Text":"数量"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column7",
+					"TextAlign":"MiddleCenter",
+					"Text":"原区域"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column8",
+					"TextAlign":"MiddleCenter",
+					"Text":"目标区域"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column9",
+					"TextAlign":"MiddleCenter",
+					"Text":"移除货位"
+				},
+				{
+					"GroupTitle":false,
+					"Column":"Column10",
+					"TextAlign":"MiddleCenter",
+					"Text":"移入货位"
+				}
+			]
+		}
+	},
+	"ReportHeader":[
+		{
+			"Name":"ReportHeader1",
+			"Height":2.40771,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox8",
+					"Left":7.19667,
+					"Top":0.396875,
+					"Width":5.34458,
+					"Height":0.8,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":180000,
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"移位单"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox11",
+					"Left":14.261,
+					"Top":1.5875,
+					"Width":2,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"打印时间:"
+				},
+				{
+					"Type":"SystemVarBox",
+					"Name":"SystemVarBox2",
+					"Left":16.2719,
+					"Top":1.5875,
+					"Width":3.78354,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Format":"yyyy/MM/dd HH:mm:ss",
+					"SystemVar":"CurrentDateTime"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox24",
+					"Left":4.52438,
+					"Top":1.5875,
+					"Width":1.00542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"货主:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"cargoOwnerName",
+					"Left":5.50333,
+					"Top":1.5875,
+					"Width":2.96333,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox34",
+					"Left":0.079375,
+					"Top":1.5875,
+					"Width":0.873125,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleRight",
+					"Text":"仓库:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"warehouseName",
+					"Left":0.926042,
+					"Top":1.5875,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"Before",
+			"RepeatOnPage":true
+		}
+	],
+	"ReportFooter":[
+		{
+			"Name":"ReportFooter1",
+			"Height":1.00542,
+			"Control":[
+				{
+					"Type":"StaticBox",
+					"Name":"StaticBox22",
+					"Left":13.4673,
+					"Top":0.211667,
+					"Width":2.5,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Bold":true,
+						"Charset":134
+					},
+					"TextAlign":"MiddleCenter",
+					"Text":"操作员:"
+				},
+				{
+					"Type":"StaticBox",
+					"Name":"operBy",
+					"Left":15.9279,
+					"Top":0.211667,
+					"Width":3.54542,
+					"Height":0.6,
+					"Font":{
+						"Name":"微软雅黑",
+						"Size":105000,
+						"Weight":400,
+						"Charset":134
+					}
+				}
+			],
+			"NewPage":"After"
+		}
+	]
+}

+ 40 - 0
upcloud-wms-qingniu-web/public/scanBatch.html

@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8">
+		<style>
+			html,body { width: 100%; height: 100%; overflow: hidden; margin: 0; padding: 0; }
+			textarea {
+				    width: 99%;
+				    height: 99%;
+				    margin: 0;
+				    padding:10px;
+					box-sizing: border-box;
+					border: 1px solid #dcdfe6;
+			}
+		</style>
+		<title></title>
+	</head>
+	<body>
+		<textarea id="scanVal" onkeydown="myFunction(event)"  placeholder="请扫描单个或多个监管码"></textarea>
+	</body>
+	<script type="text/javascript">
+		// 自动聚焦
+		document.getElementById("scanVal").focus();
+		
+		function myFunction(event){
+			var x = event.keyCode;
+			    if (x == 13) {  // 13 是 回车 键
+			        console.log ("你按下了回车键!");
+					
+			  window.parent.postMessage({  //参数是对象
+					   cmd: '***',
+					   params: {
+						 success: true              
+					   }
+				   }, '*');
+			    }
+		}
+		
+	</script>
+</html>

BIN
upcloud-wms-qingniu-web/public/期初库存导入模板.xlsx


+ 11 - 0
upcloud-wms-qingniu-web/sh.exe.stackdump

@@ -0,0 +1,11 @@
+Stack trace:
+Frame        Function    Args
+00000010002  0018006021E (00180241C10, 001802340B9, 00000010002, 000FFFFBA40)
+00000010002  00180048859 (00000000001, 00180328B20, 00000000001, 00180328B20)
+00000010002  00180048892 (00000000001, 00180328E30, 00000010002, 00000000008)
+00000010002  001800598BC (001800C0322, 00000000000, 00000000000, 00000000000)
+000FFFFCCD0  0018005994E (000FFFFCDF0, 000FFFFCCD0, FFFFFFFFFFFFFFD8, 00000000000)
+000FFFFCCD0  00180048FE1 (00000000000, 00000000000, 00000000000, 00000000000)
+00000000000  00180047963 (00000000000, 00000000000, 00000000000, 00000000000)
+000FFFFFFF0  00180047A14 (00000000000, 00000000000, 00000000000, 00000000000)
+End of stack trace

+ 36 - 0
upcloud-wms-qingniu-web/src/App.vue

@@ -0,0 +1,36 @@
+<template>
+  <a-config-provider :locale="locale">
+    <div id="app">
+      <router-view />
+    </div>
+  </a-config-provider>
+</template>
+
+<script>
+import { domTitle, setDocumentTitle } from '@/utils/domUtil'
+import { i18nRender } from '@/locales'
+import zhCN from '@/locales/lang/zh-CN'
+import enUS from '@/locales/lang/en-US'
+
+export default {
+  data() {
+    return {}
+  },
+  mounted(){
+
+      //document.body.style.zoom =1.2
+
+  },
+  computed: {
+    locale() {
+      // 只是为了切换语言时,更新标题
+      const { title } = this.$route.meta
+      title && setDocumentTitle(`${i18nRender(title)} - ${domTitle}`)
+      const { lang } = this.$store.getters
+      const antLocale = require(`@/locales/lang/${lang}`).default.antLocale
+
+      return antLocale
+    },
+  },
+}
+</script>

+ 73 - 0
upcloud-wms-qingniu-web/src/api/index.js

@@ -0,0 +1,73 @@
+const powerService = '/api/service-platform-power-base'
+const filePropsBaseUrl = '/api/service-filemanagement'
+const oms = '/api/upcloud-base-chain'
+
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import Vue from 'vue'
+
+const api = {
+  //'/api/auth/login'
+  Login: '/api/auth/login',
+  Logout: '/api/auth/logout',
+  ForgePassword: '/api/auth/forge-password',
+  Register: '/api/auth/register',
+  SendSms: '/api/account/sms',
+  SendSmsErr: '/api/account/sms_err',
+  // get my info
+  UserInfo: powerService + '/user/info',
+  PlatformSettings: {
+    baseUrl: powerService
+  },
+  //图片文件上传接口
+  fileProps: {
+    baseUrl: filePropsBaseUrl,
+    uploadFile: filePropsBaseUrl + '/file/uploadfile',
+    /**获取文件图片 */
+    getImages(id) {
+      const token = Vue.ls.get(ACCESS_TOKEN)
+      return filePropsBaseUrl + '/file/view/' + id + '?access_token=' + token
+    }
+  },
+  enterprise: {
+    baseUrl: powerService,
+    list: powerService + '/enterprise/search',
+    pwdReset: '/api/service-platform-power-base/userpower/updatePassword' // 企业用户密码重置
+  },
+  //仓配物流基础
+  warehouseBase: {
+    baseUrl: '/api/upcloud-wms-base'
+  },
+  // 获取商品资料 品类
+  goods: {
+    detail: '/api/upcloud-base-item/item/master/info',
+    category: '/api/upcloud-base-item/item/category/query',
+    levelAdd: '/api/upcloud-base-item/item/category/add',
+    levelEdit: '/api/upcloud-base-item/item/category/edit',
+    levelDel: '/api/upcloud-base-item/item/category/del',
+
+    dataAdd: '/api/upcloud-base-item/item/master/add', // 新增商品资料
+    dataEdit: '/api/upcloud-base-item/item/master/edit' // 修改商品资料
+  },
+  // 供应商
+  supplier: {
+    add: '/api/upcloud-base-chain/suppliermst/add', // 新增供应商
+    edit: '/api/upcloud-base-chain/suppliermst/update', // 修改供应商
+    detail: '/api/upcloud-base-chain/suppliermst' // 获取供应商详情
+  },
+  // 客户
+  customer: {
+    add: '/api/upcloud-base-chain/customermst/add', // 新增客户
+    edit: '/api/upcloud-base-chain/customermst/update', // 修改客户
+    detail: '/api/upcloud-base-chain/customermst' // 获取供应商详情
+  },
+  // 货主
+  shipper: {
+    add: '/api/upcloud-base-chain/cargoownermst/add', // 新增货主
+    edit: '/api/upcloud-base-chain/cargoownermst/update', // 修改客户
+    detail: '/api/upcloud-base-chain/cargoownermst' // 获取供应商详情
+  },
+  OMS: {
+    baseUrl: oms
+  }
+}
+export default api

+ 19 - 0
upcloud-wms-qingniu-web/src/api/lang.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+import qs from 'qs'
+
+const langApi = {
+  lang: '/api/service-internationalize-platform/pageLanguage/internationalize'
+}
+
+/**
+ * login func
+ * @param parameter
+ * @returns {*}
+ */
+export function loadLangData(parameter) {
+  return request({
+    url: langApi.lang,
+    method: 'get',
+    params: parameter
+  })
+}

+ 91 - 0
upcloud-wms-qingniu-web/src/api/login.js

@@ -0,0 +1,91 @@
+import request from '@/utils/request'
+import qs from 'qs'
+const powerService = '/api/service-platform-power-base'
+
+const userApi = {
+  Login: '/api/auth/login',
+  Logout: '/api/auth/logout',
+  UserMenu: '/api/user/nav',
+  //UserInfo: powerService + '/user/info',
+  UserInfo: '/api/user/info',
+  Renew: '/api/token/refresh',
+  UpdateUserInfo: powerService + '/userpower/updatePassword'
+}
+
+/**
+ * login func
+ * parameter: {
+ *     username: '',
+ *     password: '',
+ *     remember_me: true,
+ *     captcha: '12345'
+ * }
+ * @param parameter
+ * @returns {*}
+ */
+export function login(parameter) {
+  return request({
+    url: userApi.Login,
+    method: 'post',
+    data: qs.stringify(parameter),
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded'
+    }
+  })
+}
+
+export function getInfo() {
+  return request({
+    url: userApi.UserInfo,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * token 续订
+ */
+export function tokenRenew() {
+  return request({
+    url: userApi.Renew,
+    method: 'get'
+  })
+}
+
+export function getSmsCaptcha(parameter) {
+  return axios({
+    url: api.SendSms,
+    method: 'post',
+    data: parameter
+  })
+}
+
+export function getCurrentUserNav() {
+  return request({
+    url: userApi.UserMenu,
+    method: 'get'
+  })
+}
+
+export function logout() {
+  return request({
+    url: userApi.Logout,
+    method: 'post',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+export function setUserInfo(parameter) {
+  return request({
+    url: userApi.UpdateUserInfo,
+    method: 'post',
+    data: qs.stringify(parameter),
+    headers: {
+      'content-type': 'application/x-www-form-urlencoded'
+    }
+  })
+}

+ 70 - 0
upcloud-wms-qingniu-web/src/api/manage.js

@@ -0,0 +1,70 @@
+import request from '@/utils/request'
+
+const api = {
+  user: '/user',
+  role: '/role',
+  service: '/service',
+  permission: '/permission',
+  permissionNoPager: '/permission/no-pager',
+  orgTree: '/org/tree'
+}
+
+export default api
+
+export function getUserList (parameter) {
+  return request({
+    url: api.user,
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function getRoleList (parameter) {
+  return request({
+    url: api.role,
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function getServiceList (parameter) {
+  return request({
+    url: api.service,
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function getPermissions (parameter) {
+  return request({
+    url: api.permissionNoPager,
+    method: 'get',
+    params: parameter
+  })
+}
+
+export function getOrgTree (parameter) {
+  return request({
+    url: api.orgTree,
+    method: 'get',
+    params: parameter
+  })
+}
+
+// id == 0 add     post
+// id != 0 update  put
+export function saveService (parameter) {
+  return request({
+    url: api.service,
+    method: parameter.id === 0 ? 'post' : 'put',
+    data: parameter
+  })
+}
+
+export function saveSub (sub) {
+  return request({
+    url: '/sub',
+    method: sub.id === 0 ? 'post' : 'put',
+    data: sub
+  })
+}

BIN
upcloud-wms-qingniu-web/src/assets/20230223154621.png


BIN
upcloud-wms-qingniu-web/src/assets/Shape.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 8 - 0
upcloud-wms-qingniu-web/src/assets/WechatIMG196.svg


BIN
upcloud-wms-qingniu-web/src/assets/admin/bgoms.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/code_plg.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/head-top.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it01.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it02.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it03.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it04.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it05.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it06.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/it07.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/login_bg.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/login_bg_n.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/oms-center.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/oms-left.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/order.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/person.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/slogn_blue.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/slogn_white.png


BIN
upcloud-wms-qingniu-web/src/assets/admin/systeminfo.png


+ 69 - 0
upcloud-wms-qingniu-web/src/assets/background.svg

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
+    <title>Group 21</title>
+    <desc>Created with Sketch.</desc>
+    <defs></defs>
+    <g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
+            <g id="Group-21" transform="translate(77.000000, 73.000000)">
+                <g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
+                    <ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
+                    <ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
+                    <path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
+                    <path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
+                    <path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
+                    <path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
+                    <g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
+                        <ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
+                        <path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
+                    </g>
+                </g>
+                <g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
+                    <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
+                    <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
+                    <ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
+                    <ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
+                    <path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
+                    <g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
+                        <ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
+                        <path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
+                    </g>
+                    <ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
+                    <ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
+                    <ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
+                    <path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
+                </g>
+                <g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
+                    <ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
+                    <g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
+                        <ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
+                        <path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
+                    </g>
+                    <path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
+                    <ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
+                    <ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
+                    <path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
+                </g>
+                <g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
+                    <g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
+                        <circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
+                        <path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
+                    </g>
+                    <circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
+                    <path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
+                    <path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
+                    <polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
+                    <path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
+                    <path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
+                    <path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
+                    <circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
+                    <circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
+                    <circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
+                    <circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
+                    <circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
upcloud-wms-qingniu-web/src/assets/check-circle-o.png


+ 12 - 0
upcloud-wms-qingniu-web/src/assets/css/font.less

@@ -0,0 +1,12 @@
+@font-face {
+    font-family: plgFont1;
+    src: url("../font/Montserrat-SemiBold.otf");
+     font-weight: bold;
+  }
+
+  @font-face {
+    font-family: alibabaPHFont1;
+    src: url("../font/Alibaba-PuHuiTi-Regular.otf");
+     font-weight: bold;
+  }
+  

+ 93 - 0
upcloud-wms-qingniu-web/src/assets/css/reset.less

@@ -0,0 +1,93 @@
+.min-line {
+  .ant-form-item {
+    margin-bottom: 0;
+  }
+}
+.ant-modal-confirm .ant-modal-body {
+  padding: 24px @modal-body-padding @modal-body-padding;
+}
+
+.ant-modal-close-x {
+  line-height: 46px;
+  height: 46px;
+}
+
+.ant-modal-header {
+  padding: @drawer-header-padding;
+}
+
+.ant-tabs,
+.ant-tabs-nav-container,
+.ant-menu-vertical .ant-menu-item,
+.ant-menu-vertical-left .ant-menu-item,
+.ant-menu-vertical-right .ant-menu-item,
+.ant-menu-inline .ant-menu-item,
+.ant-menu-vertical .ant-menu-submenu-title,
+.ant-menu-vertical-left .ant-menu-submenu-title,
+.ant-menu-vertical-right .ant-menu-submenu-title,
+.ant-menu-inline .ant-menu-submenu-title {
+  font-size: 14px;
+}
+
+.mb-20 {
+  margin-bottom: 20px;
+}
+.mb-15 {
+  margin-bottom: 15px;
+}
+.mb-10 {
+  margin-bottom: 10px;
+}
+.mb-5 {
+  margin-bottom: 5px;
+}
+
+.mr-20 {
+  margin-right: 20px;
+}
+.mr-15 {
+  margin-right: 15px;
+}
+.mr-10 {
+  margin-right: 10px;
+}
+.mr-5 {
+  margin-right: 5px;
+}
+.ant-input-clear-icon {
+  color: rgba(0, 0, 0, 0.4)!important;
+}
+.pointer {
+  cursor: pointer;
+}
+
+.text-nowrap {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.f-12 {
+  font-size: 12px;
+}
+.f-14 {
+  font-size: 14px;
+}
+.contnet_load {
+  position: absolute;
+  z-index: 2;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  background: rgba(255, 255, 255, 0.6);
+  img {
+    margin-top: 33%;
+  }
+}
+.delete {
+  color: red;
+  &:active,
+  &:hover {
+    color: rgba(red, 0.5);
+  }
+}

BIN
upcloud-wms-qingniu-web/src/assets/default_user_icon.jpg


BIN
upcloud-wms-qingniu-web/src/assets/enterprise.png


BIN
upcloud-wms-qingniu-web/src/assets/font/Alibaba-PuHuiTi-Regular.otf


BIN
upcloud-wms-qingniu-web/src/assets/font/Montserrat-SemiBold.otf


+ 1 - 0
upcloud-wms-qingniu-web/src/assets/icons/bx-analyse.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1551058675966" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7872" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M85.333333 512h85.333334a340.736 340.736 0 0 1 99.712-241.621333 337.493333 337.493333 0 0 1 108.458666-72.96 346.453333 346.453333 0 0 1 261.546667-1.749334A106.154667 106.154667 0 0 0 746.666667 298.666667C805.802667 298.666667 853.333333 251.136 853.333333 192S805.802667 85.333333 746.666667 85.333333c-29.397333 0-55.978667 11.776-75.221334 30.933334-103.722667-41.514667-222.848-40.874667-325.76 2.517333a423.594667 423.594667 0 0 0-135.68 91.264 423.253333 423.253333 0 0 0-91.306666 135.637333A426.88 426.88 0 0 0 85.333333 512z m741.248 133.205333c-17.109333 40.618667-41.685333 77.141333-72.96 108.416s-67.797333 55.850667-108.458666 72.96a346.453333 346.453333 0 0 1-261.546667 1.749334A106.154667 106.154667 0 0 0 277.333333 725.333333C218.197333 725.333333 170.666667 772.864 170.666667 832S218.197333 938.666667 277.333333 938.666667c29.397333 0 55.978667-11.776 75.221334-30.933334A425.173333 425.173333 0 0 0 512 938.666667a425.941333 425.941333 0 0 0 393.258667-260.352A426.325333 426.325333 0 0 0 938.666667 512h-85.333334a341.034667 341.034667 0 0 1-26.752 133.205333z" p-id="7873"></path><path d="M512 318.378667c-106.752 0-193.621333 86.869333-193.621333 193.621333S405.248 705.621333 512 705.621333s193.621333-86.869333 193.621333-193.621333S618.752 318.378667 512 318.378667z m0 301.909333c-59.690667 0-108.288-48.597333-108.288-108.288S452.309333 403.712 512 403.712s108.288 48.597333 108.288 108.288-48.597333 108.288-108.288 108.288z" p-id="7874"></path></svg>

BIN
upcloud-wms-qingniu-web/src/assets/ill_log_in_2.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 13 - 0
upcloud-wms-qingniu-web/src/assets/ill_log_in_2.svg


BIN
upcloud-wms-qingniu-web/src/assets/logo.png


+ 10 - 0
upcloud-wms-qingniu-web/src/assets/logo.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="120px" height="84px" viewBox="0 0 120 84" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 62 (91390) - https://sketch.com -->
+    <g id="UPCloud-logo" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g>
+            <path d="M92.4719239,16.0069621 L112.369956,27.6141472 C116.910017,30.2625163 119.701746,35.1230206 119.701746,40.3790661 L119.701746,68.8360085 C119.701746,76.9976689 113.085413,83.6140019 104.923753,83.6140019 L63.5453715,83.6140019 C56.382868,83.6140019 50.4104911,78.5184643 49.0555483,71.7546967 C52.8083067,74.4202435 57.4267299,75.9883264 62.4043102,75.9883264 C74.8641496,75.9883264 85.0735212,66.1627658 85.0735212,53.9024573 L85.0735212,53.9024573 L85.0735212,37.3423344 C85.0735212,35.1478255 83.2945202,33.3688245 81.1000112,33.3688245 L81.1000112,33.3688245 L70.7688854,33.3688245 L70.7688854,53.9024573 L70.7677134,54.033209 C70.6928018,58.2100387 67.0357139,61.6836906 62.4043102,61.6836906 C57.7246628,61.6836906 54.0397351,58.1372941 54.0397351,53.9024573 L54.0397351,53.9024573 L54.0397351,33.3688245 L50.5363344,33.3680583 C51.8051151,31.0139933 53.7100741,29.0077858 56.0991688,27.6141472 L75.9972005,16.0069621 C81.0874031,13.0376772 87.3817212,13.0376772 92.4719239,16.0069621 Z" id="形状结合" fill="#007AFF"></path>
+            <path d="M44.9167012,3.11724906 L64.6983112,17.1292228 C68.6096689,19.8997678 70.9343681,24.3952404 70.9343681,29.1884271 L70.934,33.3685887 L70.7688854,33.3688245 L70.7688854,53.9024573 L70.7677134,54.033209 C70.6928018,58.2100387 67.0357139,61.6836906 62.4043102,61.6836906 C57.7246628,61.6836906 54.0397351,58.1372941 54.0397351,53.9024573 L54.0397351,53.9024573 L54.0397351,33.3688245 L43.7086093,33.3688245 C41.5141003,33.3688245 39.7350993,35.1478255 39.7350993,37.3423344 L39.7350993,37.3423344 L39.7350993,53.9024573 L39.7381542,54.2695288 C39.8445421,60.6566637 42.7224548,66.3574263 47.2328726,70.3140979 L14.7779934,70.3138079 C6.61633299,70.3138079 2.84766359e-15,63.6974749 0,55.5358145 L0,29.1884271 C4.74207444e-15,24.3952404 2.32469924,19.8997678 6.23605694,17.1292228 L26.0176669,3.11724906 C31.6791452,-0.892964715 39.255223,-0.892964715 44.9167012,3.11724906 Z" id="形状结合" fill="#FAD20C"></path>
+        </g>
+    </g>
+</svg>

+ 18 - 0
upcloud-wms-qingniu-web/src/assets/logo2.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="29px" height="30px" viewBox="0 0 29 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 62 (91390) - https://sketch.com -->
+    <title>UPCloud solution  logo</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="菜单" transform="translate(-25.000000, -17.000000)" fill="#FFFFFF">
+            <g id="编组" transform="translate(25.000000, 17.000000)">
+                <path d="M15.5755845,0.396892077 L27.3302501,7.84365796 C28.0696645,8.31208862 28.5177866,9.12646036 28.5177866,10.0017665 L28.5177866,22.9393389 C28.5177866,24.3502785 27.373994,25.4940711 25.9630543,25.4940711 L2.55473227,25.4940711 C1.1437926,25.4940711 6.16879485e-16,24.3502785 0,22.9393389 L0,9.99586607 C-5.5088882e-16,9.12378107 0.44485349,8.31194186 1.17988575,7.84262339 L12.8335422,0.40175798 C13.6691793,-0.131796739 14.738059,-0.133693524 15.5755845,0.396892077 Z M3.25672804,9.29707437 L3.22387486,9.29665422 C2.51437376,9.29665422 1.93920949,9.8718185 1.93920949,10.5813196 L1.93920949,10.5813196 L1.93920949,22.9397835 C1.93920949,23.4364343 2.34182448,23.8390492 2.83847525,23.8390492 L2.83847525,23.8390492 L26.1185419,23.8390492 C26.2622691,23.8390492 26.4035631,23.8019514 26.528752,23.7313454 C26.9304445,23.5047926 27.0724233,22.9954992 26.8458706,22.5938067 L26.8458706,22.5938067 L23.6864579,16.9919669 C21.2819804,12.7286751 16.8622119,9.99321246 11.974008,9.7429515 L11.974008,9.7429515 L3.28955973,9.29833455 C3.26768268,9.29721451 3.24578056,9.29665422 3.22387486,9.29665422 Z" id="形状结合"></path>
+                <path d="M16.0355877,25.4940711 L12.600776,25.4940711 C11.7648462,25.4940711 11.0869565,24.825348 11.0869565,24.0007218 L11.0869565,23.8339921 L17.5494071,23.8339921 L17.5494071,24.0007218 C17.5494071,24.825348 16.8715174,25.4940711 16.0355877,25.4940711" id="Fill-3备份-3"></path>
+                <path d="M10.1976285,26.916996 C10.1976285,26.4585779 10.5692498,26.0869565 11.027668,26.0869565 L17.6679842,26.0869565 C18.1264024,26.0869565 18.4980237,26.4585779 18.4980237,26.916996 C18.4980237,27.3754142 18.1264024,27.7470356 17.6679842,27.7470356 L11.027668,27.7470356 C10.5692498,27.7470356 10.1976285,27.3754142 10.1976285,26.916996 Z" id="Fill-5备份-3"></path>
+                <path d="M11.2648221,29.1699605 C11.2648221,28.7115423 11.6364435,28.3399209 12.0948617,28.3399209 L16.3636364,28.3399209 C16.8220545,28.3399209 17.1936759,28.7115423 17.1936759,29.1699605 C17.1936759,29.6283786 16.8220545,30 16.3636364,30 L12.0948617,30 C11.6364435,30 11.2648221,29.6283786 11.2648221,29.1699605 Z" id="Fill-5备份-4"></path>
+                <path d="M16.4936116,22.6482213 C16.1800755,22.6482213 15.8767714,22.4799633 15.718907,22.1849656 C15.4912462,21.7588577 15.6531302,21.2293184 16.0806795,21.0024251 C17.3677123,20.3191956 18.1672659,18.9622058 18.1672659,17.4606307 C18.1672659,15.2696348 16.4541456,13.4872655 14.3478261,13.4872655 C12.241872,13.4872655 10.5287517,15.2696348 10.5287517,17.4606307 C10.5287517,18.8718855 11.2585088,20.1899065 12.4337211,20.8997221 C12.8477495,21.149924 12.980034,21.6874755 12.7289858,22.1001082 C12.4779377,22.5127409 11.9385679,22.6445794 11.524174,22.3943776 C9.82822872,21.3698976 8.77470356,19.4789982 8.77470356,17.4606307 C8.77470356,14.3059754 11.274953,11.7391304 14.3478261,11.7391304 C17.4210646,11.7391304 19.9209486,14.3059754 19.9209486,17.4606307 C19.9209486,19.60938 18.7654694,21.5578221 16.9050821,22.5455184 C16.7738939,22.6150796 16.6328392,22.6482213 16.4936116,22.6482213" id="Fill-9备份-3"></path>
+                <path d="M12.0224217,17.4901186 C11.7021187,17.4901186 11.4426877,17.2269219 11.4426877,16.9019695 C11.4426877,15.5264358 12.6188231,14.4071146 14.0645348,14.4071146 C14.3848378,14.4071146 14.6442688,14.6703113 14.6442688,14.9948961 C14.6442688,15.3198485 14.3848378,15.5830452 14.0645348,15.5830452 C13.2579798,15.5830452 12.6021558,16.1748702 12.6021558,16.9019695 C12.6021558,17.2269219 12.3423625,17.4901186 12.0224217,17.4901186" id="Fill-11备份-3"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 18 - 0
upcloud-wms-qingniu-web/src/assets/logo3.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="250px" height="250px" viewBox="0 0 250 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 62 (91390) - https://sketch.com -->
+    <title>upcloud</title>
+    <desc>Created with Sketch.</desc>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="画板备份-11" transform="translate(-109.000000, -2016.000000)">
+            <g id="编组-7" transform="translate(109.000000, 2016.000000)">
+                <g id="编组-2备份">
+                    <g id="编组">
+                        <path d="M25,0 C38.6690476,0 49.775881,10.9701429 49.9966507,24.5865793 L50,25 L50,125.445302 C50,149.500777 61.3079695,170.911388 78.8933331,184.64648 L40.3339002,217.446524 C16.0061792,195.027189 0.593044594,163.073628 0.0167455195,127.513221 L0,125.445302 L0,25 C0,11.1928813 11.1928813,0 25,0 Z M225,0 C238.669048,0 249.775881,10.9701429 249.996651,24.5865793 L250,25 L250,125.445302 C250,161.598766 234.664417,194.170325 210.145215,217.002687 L171.626865,184.236484 C188.613821,170.726697 199.612239,149.999309 199.989951,126.686559 L200,125.445302 L200,25 C200,11.1928813 211.192881,0 225,0 Z" id="形状结合" fill="#FFFFFF" fill-rule="nonzero"></path>
+                        <path d="M125,175.5 L183,223.890655 L164.906152,227.2773 L164.726027,244.010136 C151.484018,248.003379 138.242009,250 125,250 C111.757991,250 98.5159817,248.003379 85.2739726,244.010136 L85.2739726,227.2773 L67,223.890655 L125,175.5 Z" id="矩形" fill="#FF553D"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
upcloud-wms-qingniu-web/src/assets/noAuthorized.png


BIN
upcloud-wms-qingniu-web/src/assets/noAuthorized_bg.png


BIN
upcloud-wms-qingniu-web/src/assets/provided.png


BIN
upcloud-wms-qingniu-web/src/assets/provided_w.png


BIN
upcloud-wms-qingniu-web/src/assets/queren.png


BIN
upcloud-wms-qingniu-web/src/assets/search.png


BIN
upcloud-wms-qingniu-web/src/assets/suoqu.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 9 - 0
upcloud-wms-qingniu-web/src/assets/title.svg


+ 173 - 0
upcloud-wms-qingniu-web/src/blocks/CascaderZone/index.js

@@ -0,0 +1,173 @@
+import { Cascader, Icon } from 'ant-design-vue'
+// console.log(Cascader.props)
+export default {
+  name: 'pCascaderZone',
+  //extends: Cascader,
+  props: {
+    ...Cascader.props,
+    url: { type: String, default: '/api/oms-std-maindata/zone/get-by-pid' },
+    placeholder: { type: String, default: '省/市/区/乡(镇)街道' },
+    method: { type: String, default: 'post' },
+    paramKey: { type: String, default: 'fatherid' },
+    baseId: { type: String, default: '01' },
+    paramValue: { type: String | Array },
+    fieldNames: {
+      type: Object,
+      default() {
+        return { label: 'zname', value: 'zoneid', children: 'children' }
+      }
+    }
+  },
+
+  data() {
+    return {
+      vOptions: this.options,
+      vParams: { [this.paramKey]: this.paramValue },
+      inputValue: this.value,
+      ext: true,
+      loading: false,
+      visible: false
+    }
+  },
+
+  created() {},
+  watch: {
+    paramValue(v) {
+      this.getTreeList && this.getTreeList([this.baseId, ...v])
+    },
+    options(value) {
+      this.vOptions = value
+    }
+  },
+  mounted() {
+    if (this.paramValue && this.options.length == 0) {
+      this.getTreeList([this.baseId, ...this.paramValue])
+    } else if (this.options.length == 0) {
+      this.getTreeList([this.baseId])
+    }
+  },
+  methods: {
+    resultTreeNodes(data, key) {
+      let map = {}
+      data.forEach(item => {
+        delete item.children
+        map[item[key]] = item
+      })
+      let value = []
+      data.forEach(item => {
+        var p = map[item[this.paramKey]]
+        if (p) {
+          if (!p.children) {
+            p.children = []
+          }
+          p.children.push(item)
+        } else {
+          if (item[this.paramKey] == this.baseId) {
+            value.push(item)
+          }
+        }
+      }, this)
+      return value
+    },
+    getTreeList(params) {
+      this.getZone({ [this.paramKey]: params.join(',') }).then(data => {
+        this.vOptions = this.resultTreeNodes(data, this.fieldNames.value)
+      })
+    },
+
+    getZone(params) {
+      let _this = this
+
+      const { url, method } = this
+      let config = {
+        url,
+        method
+      }
+
+      if (method == 'post') {
+        config.data = params
+      } else if (method == 'get') {
+        config.params = params
+      }
+      this.loading = true
+      return this.axios(config)
+        .then(respose => {
+          this.loading = false
+          if (respose.success) {
+            respose.data.forEach(item => {
+              if (item.zlevel < 5) {
+                item.isLeaf = false
+              } else {
+                item.isLeaf = true
+              }
+            })
+            return respose.data
+          } else {
+            _this.$error({ content: respose.message })
+          }
+        })
+        .catch(err => {
+          _this.$error({ content: JSON.stringify(err) })
+        })
+    },
+    handleLoadData(selectedOptions) {
+      let targetOption = null
+      if (selectedOptions.length > 0) {
+        targetOption = selectedOptions[selectedOptions.length - 1]
+        targetOption.loading = true
+        this.vParams = { [this.paramKey]: targetOption[this.fieldNames.value] }
+      }
+
+      return this.getZone(this.vParams).then(data => {
+        if (targetOption && selectedOptions.length > 0) {
+          targetOption.loading = false
+          targetOption.children = data
+          this.vOptions = [...this.vOptions]
+        } else {
+          this.vOptions = data
+        }
+        this.$emit('loadData', this.vOptions)
+      })
+    },
+    onChange(...args) {
+      this.$emit('change', args)
+    },
+
+    onPopupVisibleChange(open) {
+      if (this.disabled) return
+      this.visible = open
+      this.$emit('popupVisibleChange', this.visible)
+    }
+  },
+  render(h) {
+    const { fieldNames, placeholder, value, disabled } = this.$props
+    let config = {
+      props: {
+        ...this.$props,
+        disabled,
+        options: this.vOptions,
+        placeholder,
+        fieldNames,
+        changeOnSelect: true,
+        value,
+        popupVisible: this.visible,
+        loadData: this.handleLoadData
+      },
+      scopedSlots: {
+        suffixIcon: () => {
+          return this._c(Icon, {
+            props: {
+              type: this.loading ? 'loading' : this.visible ? 'up' : 'down'
+            }
+          })
+        }
+      },
+      on: {
+        change: this.onChange,
+        popupVisibleChange: this.onPopupVisibleChange
+      }
+    }
+
+    return h(Cascader, config)
+  }
+}

+ 221 - 0
upcloud-wms-qingniu-web/src/blocks/CascaderZone/index.search.js

@@ -0,0 +1,221 @@
+import { Cascader, Icon } from 'ant-design-vue'
+import Vue from 'vue'
+const PinyinMatch = require('pinyin-match').default
+
+export default {
+  name: 'pCascaderZone',
+  //extends: Cascader,
+  props: {
+    ...Cascader.props,
+    url: { type: String, default: '/api/oms-std-maindata/zone/get-by-pid' },
+    placeholder: { type: String, default: '省/市/区/乡(镇)街道' },
+    method: { type: String, default: 'post' },
+    paramKey: { type: String, default: 'fatherid' },
+    baseId: { type: String, default: '01' },
+    paramValue: { type: String | Array },
+    fieldNames: {
+      type: Object,
+      default() {
+        return { label: 'zname', value: 'zoneid', children: 'children' }
+      }
+    }
+  },
+  data() {
+    return {
+      vOptions: this.options,
+      vParams: { [this.paramKey]: this.paramValue },
+      inputValue: this.value,
+      ext: true,
+      loading: false,
+      visible: false,
+      menusVNode: null
+    }
+  },
+  created() {},
+  watch: {
+    paramValue(v) {
+      if (!this.disabled) {
+        this.getTreeList && this.getTreeList([this.baseId, ...v])
+      }
+    },
+    options(value) {
+      this.vOptions = value
+    }
+  },
+  mounted() {
+    if (this.paramValue && this.options.length == 0) {
+      this.getTreeList([this.baseId, ...this.paramValue])
+    } else if (this.options.length == 0) {
+      this.getTreeList([this.baseId])
+    }
+  },
+  methods: {
+    resultTreeNodes(data, key) {
+      let map = {}
+      data.forEach(item => {
+        delete item.children
+        map[item[key]] = item
+      })
+      let value = []
+      data.forEach(item => {
+        var p = map[item[this.paramKey]]
+        if (p) {
+          if (!p.children) {
+            p.children = []
+          }
+          p.children.push(item)
+        } else {
+          if (item[this.paramKey] == this.baseId) {
+            value.push(item)
+          }
+        }
+      }, this)
+
+      this.resetOption = () => {
+        let value = [...value]
+        return value
+      }
+      return value
+    },
+    getTreeList(params) {
+      this.getZone({ [this.paramKey]: params.join(',') }).then(data => {
+        this.vOptions = this.resultTreeNodes(data, this.fieldNames.value)
+      })
+    },
+
+    getZone(params) {
+      let _this = this
+      const { url, method } = this
+      let config = {
+        url,
+        method
+      }
+      if (method == 'post') {
+        config.data = params
+      } else if (method == 'get') {
+        config.params = params
+      }
+      this.loading = true
+      return this.axios(config)
+        .then(respose => {
+          this.loading = false
+          if (respose.success) {
+            respose.data.forEach(item => {
+              if (item.zlevel < 5) {
+                item.isLeaf = false
+              } else {
+                item.isLeaf = true
+              }
+            })
+            return respose.data
+          } else {
+            _this.$error({ content: respose.message })
+          }
+        })
+        .catch(err => {
+          _this.$error({ content: JSON.stringify(err) })
+        })
+    },
+    handleLoadData(selectedOptions) {
+      let targetOption = null
+      if (selectedOptions.length > 0) {
+        targetOption = selectedOptions[selectedOptions.length - 1]
+        targetOption.loading = true
+        this.vParams = { [this.paramKey]: targetOption[this.fieldNames.value] }
+      }
+
+      return this.getZone(this.vParams)
+        .then(data => {
+          if (targetOption && selectedOptions.length > 0) {
+            targetOption.loading = false
+            targetOption.children = data
+            this.vOptions = [...this.vOptions]
+          } else {
+            this.vOptions = data
+          }
+          this.$emit('loadData', this.vOptions)
+        })
+        .then(() => {
+          this.$nextTick(() => {
+            this.renderSearchInput()
+          })
+        })
+    },
+    onChange(...args) {
+      this.$emit('change', args)
+      this.renderSearchInput()
+    },
+    renderSearchInput() {
+      if (this.menusVNode) {
+        let ele = this.menusVNode.$el.querySelector('.ant-cascader-menus-content')
+        Array.prototype.slice.call(ele.children).forEach(eleChild => {
+          if (!eleChild.querySelector('input')) {
+            let MyComponent = Vue.extend({
+              render(h) {
+                return h('p-input')
+              }
+            })
+            MyComponent = new MyComponent().$mount()
+            eleChild.insertBefore(MyComponent.$el, eleChild.firstElementChild)
+          }
+        })
+      }
+    },
+    onPopupVisibleChange(open) {
+      this.visible = open
+      if (open && !this.menusVNode) {
+        this.$nextTick(() => {
+          this.menusVNode = this.$children[0].$children[0].$children[0].$children[0].$children[2].$children[0].$children[0]
+          this.renderSearchInput()
+        })
+      }
+
+      this.$emit('popupVisibleChange', this.visible)
+    },
+    onSearch(inputValue) {
+      let path = [...this.vOptions]
+      let filterMenus = path.filter(option => {
+        let pingying = PinyinMatch.match(option[this.fieldNames.label], inputValue)
+        if (pingying && pingying.length > 0) {
+          return option
+        }
+      }, this)
+      this.vOptions = [...this.vOptions]
+    },
+
+    resetOption() {
+      return []
+    }
+  },
+  render(h) {
+    const { fieldNames, placeholder, value } = this.$props
+    let config = {
+      props: {
+        ...this.$props,
+        options: this.vOptions,
+        placeholder,
+        fieldNames,
+        changeOnSelect: true,
+        value,
+        popupVisible: this.visible,
+        loadData: this.handleLoadData,
+        showSearch: false
+      },
+      scopedSlots: {
+        suffixIcon: () => {
+          return this._c(Icon, {
+            props: {
+              type: this.loading ? 'loading' : this.visible ? 'up' : 'down'
+            }
+          })
+        }
+      },
+      on: {
+        change: this.onChange,
+        popupVisibleChange: this.onPopupVisibleChange
+      }
+    }
+
+    return h(Cascader, config)
+  }
+}

+ 60 - 0
upcloud-wms-qingniu-web/src/blocks/CascaderZone/wms.index.js

@@ -0,0 +1,60 @@
+import pCascaderZone from './index'
+
+export default {
+  name: 'pCascaderZoneWms',
+  mixins: [pCascaderZone],
+  props: {
+    url: { type: String, default: '/api/upcloud-base-common/region/children2' },
+    placeholder: { type: String, default: '省/市/区' },
+    method: { type: String, default: 'get' },
+    paramKey: { type: String, default: 'fatherName' },
+    paramValue: { type: String | Array },
+    baseId: { type: String, default: '中国' },
+    fieldNames: {
+      type: Object,
+      default() {
+        return { label: 'regionsName', value: 'regionsName', children: 'children' }
+      }
+    }
+  },
+
+  methods: {
+    getZone(params) {
+      let _this = this
+      const { url, method } = this
+      if (this.disabled || !url) return
+
+      let config = {
+        url,
+        method
+      }
+      if (method == 'post') {
+        config.data = params
+      } else if (method == 'get') {
+        config.params = params
+      }
+      this.loading = true
+      return this.axios(config)
+        .then(respose => {
+          this.loading = false
+          if (respose.success) {
+            respose.data.forEach(item => {
+              if (item.levelId < 3) {
+                item.isLeaf = false
+              } else {
+                item.isLeaf = true
+              }
+            })
+            return respose.data
+          } else {
+            _this.$error({ content: respose.message })
+          }
+        })
+        .catch(err => {
+          this.loading = false
+
+          //   _this.$error({ content: JSON.stringify(err) })
+        })
+    }
+  }
+}

+ 29 - 0
upcloud-wms-qingniu-web/src/blocks/ImgsUpload/api.js

@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+import qs from 'qs'
+
+const api = {
+  queryItem: '/api/oms-std-maindata/sysFile/querySysPicture',
+
+  uploadItem: '/api/oms-std-business/biz-file/upload'
+}
+
+export function queryList(parameter) {
+  return request({
+    url: api.queryItem,
+    method: 'post',
+    data: parameter
+  })
+}
+
+export function uploadItem(parameter) {
+  return request({
+    url: api.uploadItem,
+    method: 'post',
+    header: {
+      'Content-Type': 'application/x-www-form-urlencoded'
+    },
+    // data: qs.stringify(parameter)
+    data: parameter,
+    timeout: 36000000
+  })
+}

+ 100 - 0
upcloud-wms-qingniu-web/src/blocks/ImgsUpload/index.vue

@@ -0,0 +1,100 @@
+<template>
+  <p-modal :title="isView?$lang('查看图片'):$lang('上传图片')"
+           :visible="value"
+           :width="isView?580:900"
+           :confirm-loading="confirmLoading"
+           @ok="handleOk"
+           @cancel="handleCancel">
+    <div class="box"
+         v-if="value">
+      <div class="box-left">
+        <p-view ref="view"
+                :uploadId="id" />
+      </div>
+      <div v-if="!isView"
+           class="box-right">
+        <p-upload :uploadId="id"
+                  @uploadEnd="uploadEnd" />
+      </div>
+    </div>
+  </p-modal>
+</template>
+
+<script>
+import PUpload from "./upload";
+import PView from "./view";
+
+export default {
+
+  components: {
+    'p-upload': PUpload,
+    'p-view': PView
+  },
+
+  props: {
+    value: {
+      type: Boolean,
+      default: false
+    },
+    id: {
+      type: String,
+      default: ''//1000000035
+    },
+    isView: {
+      type: Boolean,
+      default: false
+    }
+  },
+
+  data() {
+    return {
+      confirmLoading: false,
+    }
+  },
+
+  methods: {
+
+    uploadEnd() {
+      this.$refs.view.queryList();
+    },
+
+    handleOk(e) {
+      this.$emit('completed')
+      this.handleCancel();
+    },
+    handleCancel(e) {
+      this.$emit('input', false)
+      this.confirmLoading = false;
+    },
+
+  }
+
+}
+</script>
+
+<style scoped>
+.box {
+  overflow: hidden;
+  height: 50vh;
+}
+.box > div {
+  padding: 10px 15px;
+  height: 100%;
+  overflow: hidden;
+  box-sizing: border-box;
+  background: #f7f7f7;
+}
+.box > div > h2 {
+  margin-bottom: 20px;
+  font-size: 14px;
+  color: #333333;
+}
+.box-left {
+  float: left;
+  width: 550px;
+}
+.box-right {
+  float: right;
+  width: calc(100% - 560px);
+}
+</style>

+ 165 - 0
upcloud-wms-qingniu-web/src/blocks/ImgsUpload/upload.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="upload">
+    <h2 style="margin-bottom:20px;font-size:14px;color:#333333;">
+      {{$lang('上传')}}
+    </h2>
+    <div class="upload-list">
+      <div v-for="item of fileList"
+           :key="item.uid"
+           class="img-item">
+        <a-avatar :size="38"
+                  :src="item.url"
+                  shape="square" />
+        <span>{{item.name}}</span>
+        <a-icon type="delete"
+                @click="handleRemove(item)" />
+      </div>
+
+      <a-upload name="file"
+                style="width:100%;display:block;"
+                listType="picture"
+                :accept="accept"
+                :file-list="[]"
+                :multiple="true"
+                :before-upload="beforeUpload"
+                @change="fileChange">
+        <p-button style="width:270px;"
+                  type="dashed">
+          <a-icon type="plus" />添加
+        </p-button>
+      </a-upload>
+    </div>
+
+    <p-button type="primary"
+              class="btn"
+              :loading="confirmLoading"
+              @click="handleOk">上传图片</p-button>
+
+  </div>
+</template>
+
+<script>
+import { uploadItem } from "./api";
+
+function getFileURL(file) {
+  let getUrl = null;
+  if (window.createObjectURL !== undefined) { // basic
+    getUrl = window.createObjectURL(file);
+  } else if (window.URL !== undefined) { // mozilla(firefox)
+    getUrl = window.URL.createObjectURL(file);
+  } else if (window.webkitURL !== undefined) { // webkit or chrome
+    getUrl = window.webkitURL.createObjectURL(file);
+  }
+  return getUrl;
+}
+
+export default {
+
+  props: {
+    uploadId: {
+      type: String,
+      default: ''
+    },
+    accept: {
+      type: String,
+      default: '.jpg,.png'
+    },
+  },
+
+  data() {
+    return {
+      fileList: [],
+      confirmLoading: false,
+    };
+  },
+
+  methods: {
+
+    beforeUpload(file) {
+      file.url = getFileURL(file);
+      this.fileList = [...this.fileList, file];
+      // console.log(this.fileList)
+      return false;
+    },
+
+    handleRemove(file) {
+      const index = this.fileList.indexOf(file);
+      const newFileList = this.fileList.slice();
+      newFileList.splice(index, 1);
+      this.fileList = newFileList;
+    },
+
+    handleOk() {
+      if (this.fileList.length === 0) {
+        this.error = '请选择上传文件';
+        return;
+      }
+      const enterpriseId = this.$store.state.user.info.enterpriseId;
+      let uploadList = [];
+      this.fileList.forEach(file => {
+        let formData = new FormData();
+        formData.append('files', file)
+        formData.append('bizId', this.uploadId)
+        formData.append('bizType', 0)
+        formData.append('enterpriseid', enterpriseId)
+        uploadList.push(uploadItem(formData));
+      });
+      this.confirmLoading = true;
+      Promise.all(uploadList).then(res => {
+        this.fileList = [];
+        this.uploadEnd(res);
+      });
+    },
+
+    uploadEnd(resList) {
+      this.confirmLoading = false;
+      let errItem = resList.find(tt => !tt.success);
+      if (errItem) {
+        this.error = errItem.message;
+      }
+      this.$emit('uploadEnd');
+    },
+
+    fileChange() {
+      this.error = '';
+    },
+
+  }
+
+}
+</script>
+
+<style scoped>
+.upload {
+  position: relative;
+  height: 100%;
+}
+.upload-list {
+  height: calc(100% - 80px);
+  padding-right: 10px;
+  overflow-y: auto;
+}
+.btn {
+  width: 100%;
+  position: absolute;
+  bottom: 0;
+}
+.img-item {
+  padding: 4px;
+  margin-bottom: 8px;
+  border: 1px solid #e5e5e5;
+  background: #fff;
+  overflow: hidden;
+}
+.img-item span {
+  padding-left: 10px;
+  color: #333;
+}
+.img-item i {
+  margin-top: 12px;
+  float: right;
+  font-size: 16px;
+  color: #666;
+  cursor: pointer;
+}
+</style>

+ 166 - 0
upcloud-wms-qingniu-web/src/blocks/ImgsUpload/view.vue

@@ -0,0 +1,166 @@
+<template>
+  <div style="height: 100%;overflow-y: auto;">
+
+    <h2 style="margin-bottom:20px;font-size:14px;color:#333333;">
+      {{$lang('图片')}}
+    </h2>
+
+    <viewer :options="opts"
+            :images="fileList.map(t => t.fileUrl)"
+            class="viewer"
+            @inited="inited"
+            ref="viewer">
+      <template slot-scope="scope">
+        <div class="img-list"
+             ref="imglist">
+          <div v-for="(item,i) of fileList"
+               :key="i"
+               class="img-item">
+            <a-avatar :size="90"
+                      :src="item.fileUrl"
+                      shape="square" />
+            <div class="img-item-ops">
+              <div>
+                <a-icon type="eye"
+                        @click="toView(i)" />
+              </div>
+            </div>
+          </div>
+        </div>
+      </template>
+    </viewer>
+
+    <!-- <div class="img-list"
+         ref="imglist">
+      <div v-for="(item,i) of fileList"
+           :key="i"
+           class="img-item">
+        <a-avatar :size="90"
+                  :src="item.fileUrl"
+                  shape="square" />
+        <div class="img-item-ops">
+          <div>
+            <a-icon type="eye"
+                    @click="toView(i)" />
+            <a-icon type="printer" />
+            <a-icon type="delete" />
+          </div>
+        </div>
+      </div>
+    </div> -->
+
+  </div>
+</template>
+
+<script>
+import 'viewerjs/dist/viewer.css'
+import Viewer from "v-viewer"
+//import Viewer from "v-viewer/src/component.vue"
+import { queryList } from "./api";
+
+export default {
+  components: {
+    viewer: Viewer
+  },
+
+  props: {
+    uploadId: {
+      type: String,
+      default: ''
+    },
+  },
+
+  data() {
+    return {
+      fileList: [],
+      opts: {
+        "inline": false, "button": true,
+        "navbar": false, "title": false,
+        "toolbar": true, "tooltip": false,
+        "movable": false, "zoomable": true,
+        "rotatable": false, "scalable": false,
+        "transition": true, "fullscreen": true,
+        "keyboard": false,
+        // "url": "data-source"
+      }
+    };
+  },
+
+  created() {
+    this.queryList();
+  },
+
+  methods: {
+
+    queryList() {
+      queryList({
+        bizId: this.uploadId,
+        bizType: 0,
+        enterpriseid: this.$store.state.user.info.enterpriseId,
+      }).then(res => {
+        if (!res.success) {
+          this.$message.error(res.message)
+          return
+        }
+        this.fileList = res.data;
+      });
+    },
+
+    inited(viewer) {
+      this.$viewer = viewer
+    },
+
+    toView(i) {
+      console.log(this.$viewer)
+      this.$viewer.show();
+    },
+
+  },
+
+}
+</script>
+
+<style scoped>
+.img-list {
+  display: flex;
+  flex-wrap: wrap;
+}
+.img-item {
+  position: relative;
+  flex: 0 0 90px;
+  border: 1px solid #dfdfdf;
+  margin-right: 10px;
+  margin-bottom: 10px;
+}
+.img-item:nth-child(5n) {
+  margin-right: 0px;
+}
+.img-item-ops {
+  display: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.4);
+}
+.img-item-ops > div {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 26px;
+  line-height: 26px;
+  background: rgba(0, 0, 0, 0.5);
+  text-align: center;
+}
+.img-item-ops > div > i {
+  margin: 0px 10px 0;
+  font-size: 14px;
+  color: #fff;
+  cursor: pointer;
+}
+.img-item:hover .img-item-ops {
+  display: block;
+}
+</style>

+ 110 - 0
upcloud-wms-qingniu-web/src/blocks/PictureView/PictureView.vue

@@ -0,0 +1,110 @@
+<template>
+  <p-card>
+    <div slot="title" style="display: flex; align-items: center; cursor: pointer" @click="backPage('back')">
+      <a-icon type="arrow-left" style="color: #1990ff" class="mr-10" />
+      {{title}}
+    </div>
+    <p-table-edit
+      :row-select-type="1"
+      dragging
+      :rowSelectType="false"
+      ref="cardTable"
+      :bordered="true"
+      rowKey="id"
+      auto-width
+      :remoteUrl="remoteUrl"
+      :remoteData="remoteUrl.params"
+      :editor-row-table="false"
+      :data-source="list"
+      :columns="columns"
+    >
+      <span slot="action" slot-scope="text, record">
+        <div style="display: flex">
+          <div>
+            <a @click="upLoadChange(text, record)" style="margin-right: 10px">上传</a>
+            <imgsUpload v-model="isUpload" :id="uploadId" :isView="lookats"></imgsUpload>
+          </div>
+          <div>
+            <a @click="grid2Main03Table_checkClick(text, record)">查看</a>
+          </div>
+        </div>
+      </span>
+    </p-table-edit>
+  </p-card>
+</template>
+<script>
+import imgsUpload from '@/blocks/ImgsUpload/index'
+
+export default {
+  components: { imgsUpload },
+  props: {
+    pUrl: {
+      type: String,
+      default: '/api/oms-std-maindata/pubCertificate/pubCertificateQuery/v1.0'
+    },
+    params: {
+      type: Object,
+      default() {
+        return {}
+      }
+    },
+    columns: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      remoteUrl: {
+        url: this.pUrl,
+        params: this.params,
+        headers: {
+          'Content-Type': 'application/JSON'
+        },
+        method: 'post',
+        timeout: 30000,
+      },
+      isUpload: false,
+      lookats: false,
+      uploadId: '',
+      list: []
+    }
+  },
+  created() {},
+  watch: {
+    // params: {
+    //   handler(newVal, oldVal) {
+    //   },
+    //   deep: true,
+    //   immediate: true
+    // },
+  },
+  computed: {},
+  methods: {
+    upLoadChange(text, record) {
+      this.uploadId = record.id
+      this.isUpload = true
+      this.lookats = false
+    },
+    grid2Main03Table_checkClick(text, record) {
+      this.uploadId = record.id
+      this.isUpload = true
+      this.lookats = true
+    },
+    backPage() {
+      this.$emit('back')
+    }
+  }
+}
+</script>
+<style lang="less">
+.ant-upload-list-text {
+  display: none;
+}
+</style>

+ 5 - 0
upcloud-wms-qingniu-web/src/blocks/PictureView/index.js

@@ -0,0 +1,5 @@
+import PictureView from "./PictureView.vue";
+
+export default [
+  PictureView
+];

+ 47 - 0
upcloud-wms-qingniu-web/src/blocks/SwitchValue.vue

@@ -0,0 +1,47 @@
+<template>
+  <a-switch :checked='replacechecked'
+            :disabled="disabled"
+            @change="change"></a-switch>
+</template>
+<script>
+export default {
+  name: 'SwitchValue',
+  props: {
+    value: {},
+    checked: {},
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    defaultvalue: {
+      type: Object,
+      default() {
+        return {
+          on: 1,
+          off: 0
+        }
+      }
+    }
+
+
+  },
+  computed: {
+    replacechecked() {
+      return this.value === this.defaultvalue.on ? true : false
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  mounted() { },
+  methods: {
+    change(checked) {
+      this.$emit('change', checked ? this.defaultvalue.on : this.defaultvalue.off)
+      this.$emit('input', checked ? this.defaultvalue.on : this.defaultvalue.off)
+    },
+  }
+}
+</script>
+<style lang='less'>
+</style>

+ 5 - 0
upcloud-wms-qingniu-web/src/blocks/index.js

@@ -0,0 +1,5 @@
+import SwitchValue from "./SwitchValue.vue";
+
+export default [
+  SwitchValue
+];

+ 89 - 0
upcloud-wms-qingniu-web/src/components/ArticleListContent/ArticleListContent.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="antd-pro-components-article-list-content-index-listContent">
+    <div class="description">
+      <slot>
+        {{ description }}
+      </slot>
+    </div>
+    <div class="extra">
+      <a-avatar :src="avatar" size="small" />
+      <a :href="href">{{ owner }}</a> 发布在 <a :href="href">{{ href }}</a>
+      <em>{{ updateAt | moment }}</em>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'ArticleListContent',
+  props: {
+    prefixCls: {
+      type: String,
+      default: 'antd-pro-components-article-list-content-index-listContent'
+    },
+    description: {
+      type: String,
+      default: ''
+    },
+    owner: {
+      type: String,
+      required: true
+    },
+    avatar: {
+      type: String,
+      required: true
+    },
+    href: {
+      type: String,
+      required: true
+    },
+    updateAt: {
+      type: String,
+      required: true
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+@import '../index.less';
+
+.antd-pro-components-article-list-content-index-listContent {
+  .description {
+    max-width: 720px;
+    line-height: 22px;
+  }
+  .extra {
+    margin-top: 16px;
+    color: @text-color-secondary;
+    line-height: 22px;
+
+    & /deep/ .ant-avatar {
+      position: relative;
+      top: 1px;
+      width: 20px;
+      height: 20px;
+      margin-right: 8px;
+      vertical-align: top;
+    }
+
+    & > em {
+      margin-left: 16px;
+      color: @disabled-color;
+      font-style: normal;
+    }
+  }
+}
+
+@media screen and (max-width: @screen-xs) {
+  .antd-pro-components-article-list-content-index-listContent {
+    .extra {
+      & > em {
+        display: block;
+        margin-top: 8px;
+        margin-left: 0;
+      }
+    }
+  }
+}
+</style>

+ 3 - 0
upcloud-wms-qingniu-web/src/components/ArticleListContent/index.js

@@ -0,0 +1,3 @@
+import ArticleListContent from './ArticleListContent'
+
+export default ArticleListContent

+ 24 - 0
upcloud-wms-qingniu-web/src/components/AvatarList/Item.jsx

@@ -0,0 +1,24 @@
+import PropTypes from 'ant-design-vue/es/_util/vue-types'
+import { Tooltip, Avatar } from 'ant-design-vue'
+import { getSlotOptions } from 'ant-design-vue/lib/_util/props-util'
+import { warning } from 'ant-design-vue/lib/vc-util/warning'
+
+export const AvatarListItemProps = {
+  tips: PropTypes.string.def(null),
+  src: PropTypes.string.def('')
+}
+
+const Item = {
+  __ANT_AVATAR_CHILDREN: true,
+  name: 'AvatarListItem',
+  props: AvatarListItemProps,
+  created () {
+    warning(getSlotOptions(this.$parent).__ANT_AVATAR_LIST, 'AvatarListItem must be a subcomponent of AvatarList')
+  },
+  render () {
+    const AvatarDom = <Avatar size={this.$parent.size} src={this.src} />
+    return this.tips && <Tooltip title={this.tips}>{AvatarDom}</Tooltip> || <AvatarDom />
+  }
+}
+
+export default Item

+ 72 - 0
upcloud-wms-qingniu-web/src/components/AvatarList/List.jsx

@@ -0,0 +1,72 @@
+import './index.less'
+
+import PropTypes from 'ant-design-vue/es/_util/vue-types'
+import Avatar from 'ant-design-vue/es/avatar'
+import Item from './Item.jsx'
+import { filterEmpty } from '@/components/_util/util'
+
+/**
+ * size: `number`、 `large`、`small`、`default` 默认值: default
+ * maxLength: number
+ * excessItemsStyle: CSSProperties
+ */
+const AvatarListProps = {
+  prefixCls: PropTypes.string.def('ant-pro-avatar-list'),
+  size: {
+    validator: val => {
+      return typeof val === 'number' || ['small', 'large', 'default'].includes(val)
+    },
+    default: 'default'
+  },
+  maxLength: PropTypes.number.def(0),
+  excessItemsStyle: PropTypes.object.def({
+    color: '#f56a00',
+    backgroundColor: '#fde3cf'
+  })
+}
+
+const AvatarList = {
+  __ANT_AVATAR_LIST: true,
+  Item,
+  name: 'AvatarList',
+  props: AvatarListProps,
+  render (h) {
+    const { prefixCls, size } = this.$props
+    const className = {
+      [`${prefixCls}`]: true,
+      [`${size}`]: true
+    }
+    const items = filterEmpty(this.$slots.default)
+    const itemsDom = items && items.length ? <ul class={`${prefixCls}-items`}>{this.getItems(items)}</ul> : null
+
+    return (
+      <div class={className}>
+        {itemsDom}
+      </div>
+    )
+  },
+  methods: {
+    getItems (items) {
+      const className = {
+        [`${this.prefixCls}-item`]: true,
+        [`${this.size}`]: true
+      }
+      const totalSize = items.length
+
+      if (this.maxLength > 0) {
+        items = items.slice(0, this.maxLength)
+        items.push((<Avatar size={this.size} style={this.excessItemsStyle}>{`+${totalSize - this.maxLength}`}</Avatar>))
+      }
+      return items.map((item) => (
+        <li class={className}>{item}</li>
+      ))
+    }
+  }
+}
+
+AvatarList.install = function (Vue) {
+  Vue.component(AvatarList.name, AvatarList)
+  Vue.component(AvatarList.Item.name, AvatarList.Item)
+}
+
+export default AvatarList

+ 9 - 0
upcloud-wms-qingniu-web/src/components/AvatarList/index.js

@@ -0,0 +1,9 @@
+import AvatarList from './List'
+import Item from './Item'
+
+export {
+  AvatarList,
+  Item as AvatarListItem
+}
+
+export default AvatarList

+ 60 - 0
upcloud-wms-qingniu-web/src/components/AvatarList/index.less

@@ -0,0 +1,60 @@
+@import "../index";
+
+@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list";
+@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item";
+
+.@{avatar-list-prefix-cls} {
+  display: inline-block;
+
+  ul {
+    list-style: none;
+    display: inline-block;
+    padding: 0;
+    margin: 0 0 0 8px;
+    font-size: 0;
+  }
+}
+
+.@{avatar-list-item-prefix-cls} {
+  display: inline-block;
+  font-size: @font-size-base;
+  margin-left: -8px;
+  width: @avatar-size-base;
+  height: @avatar-size-base;
+
+  :global {
+    .ant-avatar {
+      border: 1px solid #fff;
+      cursor: pointer;
+    }
+  }
+
+  &.large {
+    width: @avatar-size-lg;
+    height: @avatar-size-lg;
+  }
+
+  &.small {
+    width: @avatar-size-sm;
+    height: @avatar-size-sm;
+  }
+
+  &.mini {
+    width: 20px;
+    height: 20px;
+
+    :global {
+      .ant-avatar {
+        width: 20px;
+        height: 20px;
+        line-height: 20px;
+
+        .ant-avatar-string {
+          font-size: 12px;
+          line-height: 18px;
+        }
+      }
+    }
+  }
+}
+

+ 64 - 0
upcloud-wms-qingniu-web/src/components/AvatarList/index.md

@@ -0,0 +1,64 @@
+# AvatarList 用户头像列表
+
+
+一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。
+
+
+
+引用方式:
+
+```javascript
+import AvatarList from '@/components/AvatarList'
+const AvatarListItem = AvatarList.Item
+
+export default {
+    components: {
+        AvatarList,
+        AvatarListItem
+    }
+}
+```
+
+
+
+## 代码演示  [demo](https://pro.loacg.com/test/home)
+
+```html
+<avatar-list size="mini">
+    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
+    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+</avatar-list>
+```
+或
+```html
+<avatar-list :max-length="3">
+    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
+    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
+</avatar-list>
+```
+
+
+
+## API
+
+### AvatarList
+
+| 参数               | 说明       | 类型                                 | 默认值       |
+| ---------------- | -------- | ---------------------------------- | --------- |
+| size             | 头像大小     | `large`、`small` 、`mini`, `default` | `default` |
+| maxLength        | 要显示的最大项目 | number                             | -         |
+| excessItemsStyle | 多余的项目风格  | CSSProperties                      | -         |
+
+### AvatarList.Item
+
+| 参数   | 说明     | 类型        | 默认值 |
+| ---- | ------ | --------- | --- |
+| tips | 头像展示文案 | string | -   |
+| src  | 头像图片连接 | string    | -   |
+

+ 27 - 0
upcloud-wms-qingniu-web/src/components/ConfigProvider/index.js

@@ -0,0 +1,27 @@
+import PropTypes from 'ant-design-vue/es/_util/vue-types'
+
+const ProConfigProviderProps = {
+  i18nRender: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]).def(false),
+  contentWidth: PropTypes.oneOf(['Fluid', 'Fixed']).def('Fluid'),
+  breadcrumbRender: PropTypes.func,
+}
+
+const ConfigProvider = {
+  name: 'ProConfigProvider',
+  props: ProConfigProviderProps,
+  provide () {
+    const _self = this
+    return {
+      locale: _self.$props.i18nRender,
+      contentWidth: _self.$props.contentWidth,
+      breadcrumbRender: _self.$props.breadcrumbRender,
+    }
+  },
+  render () {
+    const { $scopedSlots } = this
+    const children = this.children || $scopedSlots.default
+    return children()
+  }
+}
+
+export default ConfigProvider

+ 113 - 0
upcloud-wms-qingniu-web/src/components/Dialog.js

@@ -0,0 +1,113 @@
+import Modal from 'ant-design-vue/es/modal'
+export default (Vue) => {
+  function dialog (component, componentProps, modalProps) {
+    const _vm = this
+    modalProps = modalProps || {}
+    if (!_vm || !_vm._isVue) {
+      return
+    }
+    let dialogDiv = document.querySelector('body>div[type=dialog]')
+    if (!dialogDiv) {
+      dialogDiv = document.createElement('div')
+      dialogDiv.setAttribute('type', 'dialog')
+      document.body.appendChild(dialogDiv)
+    }
+
+    const handle = function (checkFunction, afterHandel) {
+      if (checkFunction instanceof Function) {
+        const res = checkFunction()
+        if (res instanceof Promise) {
+          res.then(c => {
+            c && afterHandel()
+          })
+        } else {
+          res && afterHandel()
+        }
+      } else {
+        // checkFunction && afterHandel()
+        checkFunction || afterHandel()
+      }
+    }
+
+    const dialogInstance = new Vue({
+      data () {
+        return {
+          visible: true
+        }
+      },
+      router: _vm.$router,
+      store: _vm.$store,
+      mounted () {
+        this.$on('close', (v) => {
+          this.handleClose()
+        })
+      },
+      methods: {
+        handleClose () {
+          handle(this.$refs._component.onCancel, () => {
+            this.visible = false
+            this.$refs._component.$emit('close')
+            this.$refs._component.$emit('cancel')
+            dialogInstance.$destroy()
+          })
+        },
+        handleOk () {
+          handle(this.$refs._component.onOK || this.$refs._component.onOk, () => {
+            this.visible = false
+            this.$refs._component.$emit('close')
+            this.$refs._component.$emit('ok')
+            dialogInstance.$destroy()
+          })
+        }
+      },
+      render: function (h) {
+        const that = this
+        const modalModel = modalProps && modalProps.model
+        if (modalModel) {
+          delete modalProps.model
+        }
+        const ModalProps = Object.assign({}, modalModel && { model: modalModel } || {}, {
+          attrs: Object.assign({}, {
+            ...(modalProps.attrs || modalProps)
+          }, {
+            visible: this.visible
+          }),
+          on: Object.assign({}, {
+            ...(modalProps.on || modalProps)
+          }, {
+            ok: () => {
+              that.handleOk()
+            },
+            cancel: () => {
+              that.handleClose()
+            }
+          })
+        })
+
+        const componentModel = componentProps && componentProps.model
+        if (componentModel) {
+          delete componentProps.model
+        }
+        const ComponentProps = Object.assign({}, componentModel && { model: componentModel } || {}, {
+          ref: '_component',
+          attrs: Object.assign({}, {
+            ...((componentProps && componentProps.attrs) || componentProps)
+          }),
+          on: Object.assign({}, {
+            ...((componentProps && componentProps.on) || componentProps)
+          })
+        })
+
+        return h(Modal, ModalProps, [h(component, ComponentProps)])
+      }
+    }).$mount(dialogDiv)
+  }
+
+  Object.defineProperty(Vue.prototype, '$dialog', {
+    get: () => {
+      return function () {
+        dialog.apply(this, arguments)
+      }
+    }
+  })
+}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác