Przeglądaj źródła

client-base 插件版本。

杨志杰 3 lat temu
commit
3048b02091
100 zmienionych plików z 1020 dodań i 0 usunięć
  1. 10 0
      .babelrc
  2. 4 0
      .eslintignore
  3. 99 0
      .eslintrc.js
  4. 21 0
      .vscode/launch.json
  5. 23 0
      .vscode/settings.json
  6. 6 0
      bat/build-lib.bat
  7. 6 0
      bat/build.bat
  8. 5 0
      bat/debug-fast.bat
  9. 5 0
      bat/debug.bat
  10. 5 0
      bat/install.bat
  11. 55 0
      package.json
  12. 251 0
      public/htmls/printPage.html
  13. BIN
      public/image/1.png
  14. BIN
      public/image/7726A8AA-33D4-4b19-9534-40557EFC1CD3.png
  15. BIN
      public/image/FA6CD8FE-049C-4988-94A9-8B892E9B6665.png
  16. BIN
      public/image/add_img.png
  17. BIN
      public/image/assetInstance.png
  18. BIN
      public/image/assetLocation.png
  19. BIN
      public/image/back.png
  20. BIN
      public/image/back20.png
  21. BIN
      public/image/cancelFullScreen.png
  22. BIN
      public/image/category.png
  23. BIN
      public/image/computer.png
  24. BIN
      public/image/cooperation.png
  25. BIN
      public/image/count.png
  26. BIN
      public/image/delete.png
  27. BIN
      public/image/depreciationMethodAdjustment.png
  28. BIN
      public/image/document.jpg
  29. BIN
      public/image/examine.png
  30. BIN
      public/image/excel/AddinIcon.png
  31. BIN
      public/image/excel/Button16x16.png
  32. BIN
      public/image/excel/Button32x32.png
  33. BIN
      public/image/excel/Button80x80.png
  34. BIN
      public/image/excel/Close.png
  35. BIN
      public/image/file.png
  36. BIN
      public/image/finished.png
  37. BIN
      public/image/finished2.png
  38. BIN
      public/image/goBack.jpg
  39. BIN
      public/image/imageNotFound.png
  40. BIN
      public/image/incomingInspectionRequest.png
  41. BIN
      public/image/inventory.png
  42. BIN
      public/image/loading.gif
  43. BIN
      public/image/login1.png
  44. BIN
      public/image/login3.png
  45. BIN
      public/image/lost.png
  46. BIN
      public/image/lostReteieve.png
  47. BIN
      public/image/maintain.png
  48. BIN
      public/image/no-data.png
  49. BIN
      public/image/noImage.jpg
  50. BIN
      public/image/numberAdjustment.png
  51. BIN
      public/image/orgnization.png
  52. BIN
      public/image/originalCostIncreases.png
  53. BIN
      public/image/originalCostReduction.png
  54. BIN
      public/image/paste.png
  55. BIN
      public/image/personnelAdjustment.png
  56. BIN
      public/image/play.png
  57. BIN
      public/image/printing.jpg
  58. BIN
      public/image/problem-feedback.png
  59. BIN
      public/image/projectAdjust.png
  60. BIN
      public/image/purchaseRequest.png
  61. BIN
      public/image/purchaseStockIn.png
  62. BIN
      public/image/red.png
  63. BIN
      public/image/repair.png
  64. BIN
      public/image/resizingRateAdjustment.png
  65. BIN
      public/image/scrap.png
  66. BIN
      public/image/secondment.png
  67. BIN
      public/image/showData.png
  68. BIN
      public/image/showRoom.png
  69. BIN
      public/image/shuijiao.jpg
  70. BIN
      public/image/stockin.png
  71. BIN
      public/image/stockout.png
  72. BIN
      public/image/success.png
  73. 1 0
      public/image/svg/and.svg
  74. 1 0
      public/image/svg/case-not-sensitive.svg
  75. 1 0
      public/image/svg/case-sensitive.svg
  76. 0 0
      public/image/svg/noImage.svg
  77. 1 0
      public/image/svg/or.svg
  78. BIN
      public/image/template-logo.png
  79. BIN
      public/image/template-logo_42.png
  80. BIN
      public/image/transfer.png
  81. BIN
      public/image/user.jpg
  82. BIN
      public/image/weixin.png
  83. BIN
      public/image/window/close.png
  84. BIN
      public/image/workOrder.png
  85. BIN
      public/image/workflow/approved.png
  86. BIN
      public/image/workflow/edit.png
  87. BIN
      public/image/workflow/processing.png
  88. BIN
      public/image/workflow/rejected.png
  89. BIN
      public/image/workflow/withdraw.png
  90. BIN
      public/image/yellow.png
  91. BIN
      public/image/加载失败.png
  92. BIN
      public/image/暂无图片.png
  93. 90 0
      public/index-debug.html
  94. 88 0
      public/index-release.html
  95. 58 0
      public/other/prodogTerm.txt
  96. 3 0
      public/other/prodogTerm1.txt
  97. 30 0
      public/test/040601.html
  98. 9 0
      public/test/040601.js
  99. 175 0
      public/test/middleware.html
  100. 73 0
      public/test/test.html

+ 10 - 0
.babelrc

@@ -0,0 +1,10 @@
+{
+  "presets": [
+    "@babel/env",
+    "@vue/babel-preset-jsx"
+    // ["env", { "modules": false }],
+    // "stage-3", 
+    // "es2015"
+  ],
+  "plugins": ["@vue/babel-plugin-jsx"]
+}

+ 4 - 0
.eslintignore

@@ -0,0 +1,4 @@
+/Dictionary/*
+/node_modules/*
+/client-base-v4/.eslintrc.js
+/client-base-v4/.eslintignore

+ 99 - 0
.eslintrc.js

@@ -0,0 +1,99 @@
+module.exports = {
+  // 如果想要在不同的目录中使用不同的 .eslintrc, 就需要在该目录中添加如下的配置项:
+  // 告诉eslint找.eslintrc配置文件不能往父级查找
+  // root: true,
+  // 此项是用来提供插件的,插件名称省略了eslint-plugin-,下面这个配置是用来规范vue的
+  // plugins: ['vue'],
+  extends: [
+    // add more generic rulesets here, such as:
+    'eslint:recommended', // eslint推荐规则预设
+    'plugin:vue/vue3-recommended', // eslint-plugin-vue推荐的适用于vue3的规则预设
+  ],
+  parser: 'vue-eslint-parser',
+  // 自定义 parser
+  parserOptions: {
+    parser: '@babel/eslint-parser',
+    sourceType: 'module',
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+    jquery: true,
+  },
+  rules: {
+    // override/add rules settings here, such as:
+    'vue/no-unused-vars': 'error',
+    // 此规则禁用不必要的分号。
+    'no-extra-semi': 'off',
+    // 该规则强制使用一致的分号
+    semi: ['error', 'always'],
+    // 该规则强制使用一致的反勾号、双引号或单引号。
+    quotes: ['error', 'single'],
+    // 该规则旨在强制使用一致的缩进风格。默认是 4个空格。
+    indent: ['error', 2],
+    // 该规则旨在通过限制代码行的长度来提高代码的可读性和可维护性。
+    // 一行的长度为行中的 Unicode 字符的数量。
+    'max-len': ['error', { code: 185 }],
+    // 这个规则强制在对象和数组字面量中使用一致的拖尾逗号。
+    // "always-multiline" 当最后一个元素或属性与闭括号 ] 或 } 在 不同的行时,要求使用拖尾逗号;当在 同一行时,禁止使用拖尾逗号。
+    'comma-dangle': ['error', 'always-multiline'],
+    // 该规则强制箭头函数单个参数是否要使用圆括号括起来
+    // "as-needed":在可以省略括号的地方强制不使用括号
+    'arrow-parens': ['error', 'as-needed'],
+    // 此规则在单行元素的内容之前和之后强制换行。
+    'vue/singleline-html-element-content-newline': 'off',
+    // 限制每行最多能写多少个属性
+    'vue/max-attributes-per-line': 'off',
+
+    'vue/multi-word-component-names': 'off',
+    // 标签自闭合相关设置
+    'vue/html-self-closing': [
+      'warn',
+      {
+        html: {
+          void: 'always',
+          normal: 'always',
+          component: 'always',
+        },
+      },
+    ],
+
+    'no-unused-vars': [0, {
+      // function 参数未使用不检查
+      'args': 'none',
+    }],
+
+    'vue/v-on-event-hyphenation': ['warn', 'always', {
+      'autofix': true,
+      'ignore': [],
+    }],
+
+    'vue/no-unused-components': 'off',
+    'no-unused-vars': 'off',
+
+    'vue/no-parsing-error': [
+      2, 
+      { 
+        'x-invalid-end-tag': false, 
+      },
+    ],
+
+    'camelcase': [0,{
+      'properties': 'always',
+    }],
+
+  },
+  'globals': {
+    'document': true,
+    'localStorage': true,
+    'window': true,
+    'BootstrapDialog': true,
+    'moment': true,
+    'gantt': true,
+    '__webpack_public_path__': true,
+    'Notify': true,
+    'Vue': true,
+    'Handsontable': true,
+  },
+};

+ 21 - 0
.vscode/launch.json

@@ -0,0 +1,21 @@
+{
+    // 使用 IntelliSense 了解相关属性。 
+    // 悬停以查看现有属性的描述。
+    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "client-base-v4",   // 启动配置名称
+            "type": "node",     // 调试器类型,我们是 Node.js 环境
+            "request": "launch",    // 请求方式,有 launch(启动) 和 attach(附加) 两种
+            "cwd": "${workspaceRoot}",
+            "runtimeExecutable": "npm", // 任务运行工具,'npm', 'mocha', 'gulp' 等
+            // 启动我们的 egg-bin debug 并默认是 brk
+            "runtimeArgs": [ "run", "dev"],
+            // 日志输出到 Terminal,否则启动期的日志看不到
+            "console": "integratedTerminal",
+            // 自动 attach 子进程 
+            "autoAttachChildProcesses": true
+        }
+    ]
+}

+ 23 - 0
.vscode/settings.json

@@ -0,0 +1,23 @@
+// 将设置放入此文件中以覆盖默认值和用户设置。
+{
+      "files.exclude": {
+            "**/node_modules": true,
+            "**/build": true,
+            "**/package-lock.json": true
+      },
+      "search.exclude": {
+            "**/node_modules": true,
+            "**/build": true,
+            "**/package-lock.json": true
+      },
+      // 保存后自动修复格式  
+      "editor.codeActionsOnSave": {
+            "source.fixAll.eslint": true
+      },
+      // 添加vue支持  
+      "eslint.validate": [
+            "javascript",
+            "javascriptreact",
+            "vue"
+      ]
+}

+ 6 - 0
bat/build-lib.bat

@@ -0,0 +1,6 @@
+set current_path="%~dp0"
+cd %current_path%
+cd ..
+rmdir /s/q dist
+npm run build-lib
+pause

+ 6 - 0
bat/build.bat

@@ -0,0 +1,6 @@
+set current_path="%~dp0"
+cd %current_path%
+cd ..
+rmdir /s/q dist
+npm run build
+pause

+ 5 - 0
bat/debug-fast.bat

@@ -0,0 +1,5 @@
+set current_path="%~dp0"
+cd %current_path%
+cd ..
+npm run dev-vite
+pause

+ 5 - 0
bat/debug.bat

@@ -0,0 +1,5 @@
+set current_path="%~dp0"
+cd %current_path%
+cd ..
+npm run dev
+pause

+ 5 - 0
bat/install.bat

@@ -0,0 +1,5 @@
+set current_path="%~dp0"
+cd %current_path%
+cd ..
+npm install -registry=https://registry.npm.taobao.org
+pause

+ 55 - 0
package.json

@@ -0,0 +1,55 @@
+{
+  "name": "client-base-v4",
+  "description": "Leanwo Prodog Client",
+  "version": "1.0.0",
+  "author": "yangzhijie1488 <yangzhijie1488@163.com>",
+  "private": true,
+  "scripts": {
+    "dev": "cross-env webpack serve --config ./webpack.dev.js",
+    "build-lib": "cross-env NODE_ENV=production webpack --progress --config ./webpack.lib.js",
+    "build": "cross-env NODE_ENV=production webpack --mode=production --config ./webpack.prod.js --progress"
+  },
+  "peerDependencies": {
+    "@leanwo/lowcode-utils": "^1.5.4",
+    "@leanwo/lowcode-vue-renderer": "^1.5.8",
+    "ant-design-vue": "^3.2.15",
+    "click-outside-vue3": "^4.0.1",
+    "dayjs": "^1.11.6",
+    "dingtalk-jsapi": "^2.10.3",
+    "moment": "^2.29.4",
+    "pc-component-v3": "^1.0.39",
+    "v-tooltip": "^4.0.0-beta.17",
+    "vue-request": "^1.2.4",
+    "vue-select": "^4.0.0-beta.6",
+    "vuedraggable": "^4.1.0",
+    "uuid": "^8.3.2"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.17.5",
+    "@babel/eslint-parser": "^7.17.0",
+    "@babel/preset-env": "^7.16.11",
+    "@intlify/vue-i18n-loader": "^4.2.0",
+    "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
+    "@vue/babel-plugin-jsx": "^1.1.1",
+    "@vue/babel-preset-jsx": "^1.4.0",
+    "babel-loader": "^8.2.3",
+    "clean-webpack-plugin": "^4.0.0",
+    "copy-webpack-plugin": "^11.0.0",
+    "cross-env": "^7.0.3",
+    "css-loader": "^6.7.0",
+    "eslint": "^8.10.0",
+    "eslint-plugin-vue": "^8.5.0",
+    "eslint-webpack-plugin": "^3.1.1",
+    "file-loader": "^6.2.0",
+    "html-webpack-plugin": "^5.5.0",
+    "mini-css-extract-plugin": "^2.6.0",
+    "style-loader": "^3.3.1",
+    "terser-webpack-plugin": "^5.3.6",
+    "vue-loader": "^17.0.0",
+    "webpack": "^5.70.0",
+    "webpack-bundle-analyzer": "^4.7.0",
+    "webpack-cli": "^4.9.2",
+    "webpack-dev-server": "^4.7.4",
+    "webpack-merge": "^5.8.0"
+  }
+}

+ 251 - 0
public/htmls/printPage.html

@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title></title>
+		<link rel="stylesheet" href="../css/bootstrap.min.css">
+		<link rel="stylesheet" href="../css/bootstrap-dialog.min.css">
+	</head>
+	<body id="mc">
+		<div id="content" class="container-fluid">
+			<canvas id="canvas" width="1490" height="10000" style="border:1px solid #d3d3d3;" ref="canvas"></canvas>
+		</div>
+		<script src="../js/jquery.min.js"></script>
+		<script src="../js/bootstrap.min.js"></script>
+		<script src="../js/bootstrap-dialog.min.js"></script>
+		<script src="/static/JsBarcode/JsBarcode.all.js"></script>
+		<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
+
+		<script type="text/javascript">
+			var content = new Vue({
+				el: "#content",
+				data: function() {
+					return {
+						img: new Image(), // 背景图片缓存
+						context: {}, // canvas对象
+						HEIGHT: 0,
+						printPages: [{
+								//纸张宽度
+								paperWidth: 500,
+								//纸张高度
+								paperHeight: 300,
+								//纸张间距
+								paperMargin: 10,
+								//打印元素
+								printItems: [{
+									//内容
+									content: '内容1苏覅是否会第三方的',
+									//隐藏内容
+									hideTitle: '456',
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '文本',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 10,
+									//上边距
+									top: 10,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: undefined
+								}, {
+									//内容
+									content: '123456789',
+									//隐藏内容
+									hideTitle: '789',
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '条形码',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 10,
+									//上边距
+									top: 30,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: 'CODE128'
+								}, {
+									//内容
+									content: undefined,
+									//隐藏内容
+									hideTitle: undefined,
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '二维码',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 260,
+									//上边距
+									top: 30,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: undefined
+								}]
+							},
+							{
+								//纸张宽度
+								paperWidth: 500,
+								//纸张高度
+								paperHeight: 300,
+								//纸张间距
+								paperMargin: 10,
+								//打印元素
+								printItems: [{
+									//内容
+									content: '内容2',
+									//隐藏内容
+									hideTitle: '456',
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '文本',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 10,
+									//上边距
+									top: 10,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: undefined
+								}, {
+									//内容
+									content: '1234567890',
+									//隐藏内容
+									hideTitle: '789',
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '条形码',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 10,
+									//上边距
+									top: 30,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: 'CODE128'
+								}, {
+									//内容
+									content: undefined,
+									//隐藏内容
+									hideTitle: undefined,
+									//格式(文本,条形码,二维码,EPC).
+									displayType: '二维码',
+									//显示.
+									enabled: true,
+									//左边距
+									left: 260,
+									//上边距
+									top: 30,
+									//宽度
+									width: 200,
+									//高度
+									height: 100,
+									//码字 Code-128  Ean-13
+									barCodeType: undefined
+								}]
+							}
+						]
+					}
+				},
+				methods: {
+					draw: function() {
+						var _self = this;
+						var h = 0;
+						var h1 = 0;
+						if (_self.printPages != null && _self.printPages.length > 0) {
+							for (var index = 0; index < _self.printPages.length; index++) {
+								h += _self.printPages[index].paperMargin;
+								h1 = h;
+								//设置坐标,长宽
+								this.rect(h,_self.printPages[index]);
+								h += _self.printPages[index].paperHeight;
+								var PrintItems = _self.printPages[index].printItems;
+								if (PrintItems != null && PrintItems.length > 0) {
+									for (var x = 0; x < PrintItems.length; x++) {
+										var LEFT = 30 + PrintItems[x].left;
+										var TOP = h1 + PrintItems[x].top;
+										if (PrintItems[x].displayType == '文本') {
+											this.content(PrintItems[x], LEFT, TOP);
+										}
+										if (PrintItems[x].displayType == '条形码') {
+											this.barcode(PrintItems[x], LEFT, TOP);
+										}
+										if (PrintItems[x].displayType == '二维码') {
+											this.QRcode(PrintItems[x], LEFT, TOP);
+										}
+									}
+								}
+
+							}
+						}
+					},
+					rect: function(h,printPage) {
+						//设置矩形坐标,长宽
+						this.context.rect(30, h, printPage.paperWidth, printPage.paperHeight);
+						this.context.stroke();
+					},
+					content: function(printItem, LEFT, TOP) { 
+						//添加文本
+						this.context.font = "10px Georgia";
+						this.context.fillText(printItem.content, LEFT, TOP);
+					},
+					barcode: function(printItem, LEFT, TOP) {
+						//添加条形码
+						var barcode = new Image;
+						var str = printItem.content,
+							options = {
+								format: printItem.barCodeType,
+								displayValue: true,
+								fontSize: 18,
+								height: 100
+							};
+						JsBarcode(barcode, str, options); //原生
+						// 图片加载完成后执行
+						barcode.onload = () => {
+							this.context.drawImage(barcode, LEFT, TOP, printItem.width, printItem.height);
+						}
+					},
+					QRcode: function(printItem, LEFT, TOP) {
+						//添加二维码
+						var img = new Image;
+						// 获取图片地址
+						img.src = "../image/template-logo.png";
+
+						// 图片加载完成后执行
+						img.onload = () => {
+							this.context.drawImage(img, LEFT, TOP, printItem.width, printItem.height);
+						}
+					}
+				},
+				mounted: function() {
+					var _self = this;
+					const canvas = this.$refs.canvas;
+					this.context = canvas.getContext('2d')
+
+					if (_self.printPages != null && _self.printPages.length > 0) {
+						for (var index = 0; index < _self.printPages.length; index++) {
+							_self.HEIGHT += _self.printPages[index].paperMargin + _self.printPages[index].paperHeight;
+						}
+					}
+					this.draw();
+				}
+			})
+		</script>
+	</body>
+
+</html>

BIN
public/image/1.png


BIN
public/image/7726A8AA-33D4-4b19-9534-40557EFC1CD3.png


BIN
public/image/FA6CD8FE-049C-4988-94A9-8B892E9B6665.png


BIN
public/image/add_img.png


BIN
public/image/assetInstance.png


BIN
public/image/assetLocation.png


BIN
public/image/back.png


BIN
public/image/back20.png


BIN
public/image/cancelFullScreen.png


BIN
public/image/category.png


BIN
public/image/computer.png


BIN
public/image/cooperation.png


BIN
public/image/count.png


BIN
public/image/delete.png


BIN
public/image/depreciationMethodAdjustment.png


BIN
public/image/document.jpg


BIN
public/image/examine.png


BIN
public/image/excel/AddinIcon.png


BIN
public/image/excel/Button16x16.png


BIN
public/image/excel/Button32x32.png


BIN
public/image/excel/Button80x80.png


BIN
public/image/excel/Close.png


BIN
public/image/file.png


BIN
public/image/finished.png


BIN
public/image/finished2.png


BIN
public/image/goBack.jpg


BIN
public/image/imageNotFound.png


BIN
public/image/incomingInspectionRequest.png


BIN
public/image/inventory.png


BIN
public/image/loading.gif


BIN
public/image/login1.png


BIN
public/image/login3.png


BIN
public/image/lost.png


BIN
public/image/lostReteieve.png


BIN
public/image/maintain.png


BIN
public/image/no-data.png


BIN
public/image/noImage.jpg


BIN
public/image/numberAdjustment.png


BIN
public/image/orgnization.png


BIN
public/image/originalCostIncreases.png


BIN
public/image/originalCostReduction.png


BIN
public/image/paste.png


BIN
public/image/personnelAdjustment.png


BIN
public/image/play.png


BIN
public/image/printing.jpg


BIN
public/image/problem-feedback.png


BIN
public/image/projectAdjust.png


BIN
public/image/purchaseRequest.png


BIN
public/image/purchaseStockIn.png


BIN
public/image/red.png


BIN
public/image/repair.png


BIN
public/image/resizingRateAdjustment.png


BIN
public/image/scrap.png


BIN
public/image/secondment.png


BIN
public/image/showData.png


BIN
public/image/showRoom.png


BIN
public/image/shuijiao.jpg


BIN
public/image/stockin.png


BIN
public/image/stockout.png


BIN
public/image/success.png


+ 1 - 0
public/image/svg/and.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="1600347099664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3110" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M515.072 297.856l0.16-0.128 0.736 0.512A291.36 291.36 0 0 1 678.4 249.184c159.712 0 289.152 127.232 289.152 284.192 0 156.928-129.44 284.192-289.152 284.192a291.008 291.008 0 0 1-162.624-49.216 290.88 290.88 0 0 1-162.656 49.216C193.44 817.536 64 690.24 64 533.344c0-156.96 129.44-284.192 289.152-284.192 59.968 0 115.712 17.952 161.92 48.704z m-29.28 447.264c-59.52-52.032-97.056-127.904-97.056-212.448 0-84.064 37.152-159.616 96.224-211.648a255.136 255.136 0 0 0-131.808-36.352c-139.744 0-253.024 111.328-253.024 248.672 0 137.312 113.312 248.672 253.024 248.672 48.64 0 94.08-13.504 132.64-36.896z m60.224-423.68c58.816 52.032 95.744 127.392 95.744 211.328 0 84.256-37.312 159.936-96.64 212a255.36 255.36 0 0 0 133.28 37.248c139.776 0 253.024-111.328 253.024-248.672S818.176 284.672 678.4 284.672c-48.512 0-93.888 13.44-132.384 36.768z" fill="#A85EEF" p-id="3111"></path></svg>

+ 1 - 0
public/image/svg/case-not-sensitive.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="1600349012368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17402" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M704 896H602.496l-72.512-210.24H233.856L165.376 896H64L334.848 128h98.24L704 896zM501.44 598.976L394.048 279.68c-3.392-10.176-7.04-28.096-11.008-53.504h-2.304c-3.392 23.168-7.232 40.96-11.456 53.504L262.72 598.976h238.72zM735.04 604.48C766.72 585.472 803.328 576 844.736 576c76.8 0 115.2 38.656 115.2 116.032v196.736h-55.872v-47.232h-1.408c-22.08 36.352-54.592 54.464-97.6 54.464-30.976 0-55.488-8-73.728-24.064-18.24-16-27.392-37.696-27.392-64.896 0-57.216 35.264-90.368 105.664-99.84l94.464-12.672c0-49.92-21.504-74.88-64.512-74.88-38.208 0-73.024 12.288-104.512 36.992v-52.16z m94.464 140.672c-26.112 3.328-44.096 9.536-54.016 18.816-9.92 9.216-14.784 22.08-14.784 38.656 0 14.528 5.376 26.368 16.128 35.648 10.752 9.216 24.96 13.824 42.56 13.824 24.64 0 44.864-8.32 60.8-24.896 15.872-16.576 23.872-37.376 23.872-62.464v-29.312l-74.56 9.728z" p-id="17403"></path></svg>

+ 1 - 0
public/image/svg/case-sensitive.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="1600349017792" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17532" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M1014.208 898.666667h-52.629333l-101.76-261.781334h-187.648l-18.325334-48.085333h187.114667L670.442667 146.986667 577.066667 387.562667l-25.237334-66.090667 93.866667-239.552h48.469333l2.666667 6.762667 317.376 809.984zM374.186667 81.92l319.978666 816.746667h-52.586666l-101.781334-261.781334h-379.733333l-101.76 261.781334H5.696l320-816.746667h48.490667z m-23.744 65.088L178.965333 588.8H520.96L350.442667 147.008z" fill="#222222" p-id="17533"></path></svg>

Plik diff jest za duży
+ 0 - 0
public/image/svg/noImage.svg


+ 1 - 0
public/image/svg/or.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="1600347179634" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8405" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M486.528 790.016A289.28 289.28 0 0 1 64 533.344a289.152 289.152 0 0 1 422.496-256.64 324.768 324.768 0 0 0-125.344 256.64c0 104.256 49.056 197.056 125.376 256.672z m37.152-23.168a288.896 288.896 0 0 0 118.624-233.504 288.928 288.928 0 0 0-118.624-233.568 284.384 284.384 0 0 0-121.888 233.568 284.448 284.448 0 0 0 121.888 233.504z m26.208-492.608a288 288 0 0 1 128.576-30.048 289.216 289.216 0 1 1-128.576 548.256 324.64 324.64 0 0 0 128.576-259.072 324.992 324.992 0 0 0-128.576-259.136z" fill="#A85EEF" p-id="8406"></path></svg>

BIN
public/image/template-logo.png


BIN
public/image/template-logo_42.png


BIN
public/image/transfer.png


BIN
public/image/user.jpg


BIN
public/image/weixin.png


BIN
public/image/window/close.png


BIN
public/image/workOrder.png


BIN
public/image/workflow/approved.png


BIN
public/image/workflow/edit.png


BIN
public/image/workflow/processing.png


BIN
public/image/workflow/rejected.png


BIN
public/image/workflow/withdraw.png


BIN
public/image/yellow.png


BIN
public/image/加载失败.png


BIN
public/image/暂无图片.png


+ 90 - 0
public/index-debug.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+	
+    <!-- hard fixed by jack 20200613 -->
+	<!-- 在部署 http 网站的时候,要把下面的一行配置注释掉 -->
+	
+	<!-- 加这个的原因是 asset.html 要访问 websocket,其中 websocket 是本地的ws不是wss,如果网页是通过https访问的,那么也要求websocket是 ws的 -->
+	<!-- 把http请求转化为https请求。这样就不会再出现Mixed Content的错误了。 
+	<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">-->
+	<title>prodog</title>
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/font-awesome/css/font-awesome.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/bootstrap/dist/css/bootstrap.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/bootstrap/dist/css//bootstrap-theme.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/bootstrap3-dialog/dist/css/bootstrap-dialog.css">
+	
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/layui/dist/css/layui.css">
+
+
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/cropper/dist/cropper.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/animate.css/animate.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/colResizable/colResizable-1.6.css">
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="/static/jQuery-ResizableColumns/jQuery.resizableColumns.css">
+
+
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/jquery/dist/jquery.js"></script>
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/jquery.cookie/jquery.cookie.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/table-fixer.jquery/table-fixer.jquery.js"></script>
+
+	
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/cropper/dist/cropper.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/bootstrap/dist/js/bootstrap.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/bootstrap3-dialog/dist/js/bootstrap-dialog.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/colResizable/colResizable-1.6.js"></script>
+
+	
+
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/jQuery-ResizableColumns/jQuery.resizableColumns.js"></script>
+	<!-- <script src="../static/js/api.js"></script> -->
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/moment/moment.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/moment/dist/locale/zh-cn.js"></script>
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/reconnecting-websocket/reconnecting-websocket.js"></script>
+	
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/layui/dist/layui.js"></script>
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
+
+	<!--VueJS has 2 different versions: the full version and the runtime version. 'unsafe-eval' is only needed for the full version of VueJS; the runtime version doesn't need it. 
+	The runtime-only build is fully CSP-compliant. When using the runtime-only build with Webpack + vue-loader or Browserify + vueify, your templates will be precompiled into render functions which work perfectly in CSP environments. -->
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/vue/dist/vue.global.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/vue-i18n/dist/vue-i18n.global.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/vuex/dist/vuex.global.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/vue-router/dist/vue-router.global.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/dayjs/dayjs.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/axios/dist/axios.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="/static/sortablejs/Sortable.js"></script>
+	
+
+	
+
+	
+	<script nonce="*NONCE_TOKEN*"  type="text/javascript">
+		moment.locale('zh');
+		
+		var nonce_token = "*NONCE_TOKEN*";
+	</script>
+</head>
+
+<body>
+	<div id="app">
+	</div>
+
+	<script defer="defer" nonce="*NONCE_TOKEN*"  src="/static/echarts/dist/echarts.min.js"></script>
+	<!-- <script src="../static/js/fullscreen-api.js"></script> -->
+	<!-- <script src="../static/js/problem-feedback-api.js"></script> -->
+
+</body>
+
+</html>

+ 88 - 0
public/index-release.html

@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+	
+    <!-- hard fixed by jack 20200613 -->
+	<!-- 在部署 http 网站的时候,要把下面的一行配置注释掉 -->
+	
+	<!-- 加这个的原因是 asset.html 要访问 websocket,其中 websocket 是本地的ws不是wss,如果网页是通过https访问的,那么也要求websocket是 ws的 -->
+	<!-- 把http请求转化为https请求。这样就不会再出现Mixed Content的错误了。 
+	<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">-->
+	<title>prodog</title>
+	<!-- Office JavaScript API -->
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/font-awesome.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/bootstrap.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/bootstrap-theme.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/bootstrap-dialog.min.css">
+
+
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/cropper.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/animate.min.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/common.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/colResizable-1.6.css">
+
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/jQuery.resizableColumns.css">
+	<link nonce="*NONCE_TOKEN_CSS*" rel="stylesheet" type="text/css" href="../static/css/jquery.treegrid.css">
+	<!-- <link rel="stylesheet" type="text/css" media="screen" href="../static/plugin/converse_7.0.4/dist/converse.min.css"> -->
+
+
+
+	<script nonce="*NONCE_TOKEN*" src="../static/js/jquery.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/jquery.cookie.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/jquery.treegrid.min.js" defer="defer"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/jquery.treegrid.bootstrap3.js" defer="defer"></script>
+
+	
+	<script nonce="*NONCE_TOKEN*" src="../static/js/cropper.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/bootstrap.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/bootstrap-dialog.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/table-fixer.jquery.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/colResizable-1.6.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/jQuery.resizableColumns.js"></script>
+	<!-- <script src="../static/js/api.js"></script> -->
+
+	<script nonce="*NONCE_TOKEN*" src="../static/js/es6-promise.auto.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/moment.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/moment.zh-cn.js"></script>
+
+	<script nonce="*NONCE_TOKEN*" src="../static/js/browser.js"></script>
+	<script nonce="*NONCE_TOKEN*" src="../static/js/reconnecting-websocket.js"></script>
+	
+	<script nonce="*NONCE_TOKEN*" src="../static/plugin/layer-v3.5.1/layer.js"></script>
+
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
+
+	<!--VueJS has 2 different versions: the full version and the runtime version. 'unsafe-eval' is only needed for the full version of VueJS; the runtime version doesn't need it. 
+	The runtime-only build is fully CSP-compliant. When using the runtime-only build with Webpack + vue-loader or Browserify + vueify, your templates will be precompiled into render functions which work perfectly in CSP environments. -->
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/vue/dist/vue.runtime.global.prod.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/vue-i18n/dist/vue-i18n.runtime.global.prod.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/vuex/vuex.global.prod.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/vue-router/dist/vue-router.global.prod.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/dayjs@1.8.21/dayjs.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/axios@0.24.0/dist/axios.min.js"></script>
+	<script nonce="*NONCE_TOKEN*" type="text/javascript" src="../static/plugin/sortablejs@1.15.0/Sortable.min.js"></script>
+	
+	
+	<script nonce="*NONCE_TOKEN*"  type="text/javascript">
+		moment.locale('zh');
+
+		var nonce_token = "*NONCE_TOKEN*";
+	</script>
+</head>
+
+<body>
+	<div id="app">
+	</div>
+
+	<script defer="defer" nonce="*NONCE_TOKEN*"  src="../static/js/echarts.min.js"></script>
+	<!-- <script src="../static/js/fullscreen-api.js"></script> -->
+	<!-- <script src="../static/js/problem-feedback-api.js"></script> -->
+
+</body>
+
+</html>

+ 58 - 0
public/other/prodogTerm.txt

@@ -0,0 +1,58 @@
+<h2 align="center">Prodog服务条款</h2>
+<p>
+欢迎阅读上海联物物料管理系统(Prodog)服务条款协议(下称“本协议”)。本协议阐述之条款和条件适用于您使用Prodog所提供的各种工具和服务(下称“服务”)。
+<h3>1	接受条款</h3>
+以任何方式进入Prodog即表示您同意自己已经与Prodog订立本协议,且您将受本协议的条款和条件(“条款”) 约束。Prodog可随时自行全权决定更改“条款”。您应在第一次登录后仔细阅读修订后的“条款”,并有权选择停止继续使用“服务”;一旦您继续使用“服务”,则表示您已接受经修订的“条款”,当您与Prodog发生争议时,应以最新的服务协议为准。除另行明确声明外,任何使“服务”范围扩大或功能增强的新内容均受本协议约束。除非经Prodog的授权高层管理人员签订书面协议,本协议不得另行作出修订。
+<h3>2	谁可使用Prodog</h3>
+“服务”仅供能够根据相关法律订立具有法律约束力的合约的个人或公司使用。因此,您的年龄必须在十八周岁或以上,才可使用本公司服务。如不符合本项条件,请勿使用“服务”。Prodog可随时自行全权决定拒绝向任何人士提供“服务”。“服务”不会提供给被暂时或永久中止资格的Prodog会员。
+<h3>3	收费</h3>
+本公司保留在根据第1条通知您后,收取“服务”费用的权利。您因进行交易、向本公司获取有偿服务或接触本公司服务器而发生的所有应纳税赋,以及相关硬件、软件、通讯、网络服务及其他方面的费用均由您自行承担。本公司保留在无须发出书面通知,仅在Prodog公示的情况下,暂时或永久地更改或停止部分或全部“服务”的权利。
+<h3>4	您的资料和供买卖的物品</h3>
+“您的资料”包括您在注册、交易或列举物品过程中、在任何公开信息场合或通过任何电子邮件形式,向本公司或其他用户提供的任何资料,包括数据、文本、软件、音乐、声响、照片、图画、影像、词句或其他材料。您应对“您的资料”负全部责任,而本公司仅作为您在网上发布和刊登“您的资料”的被动渠道。但是,倘若本公司认为“您的资料”可能使本公司承担任何法律或道义上的责任,或可能使本公司 (全部或部分地) 失去本公司的互联网服务供应商或其他供应商的服务,或您未在Prodog规定的期限内登录或再次登录网站,则本公司可自行全权决定对“您的资料”采取本公司认为必要或适当的任何行动,包括但不限于删除该类资料。您特此保证,您对提交给Prodog的“您的资料”拥有全部权利,包括全部版权。您确认,Prodog没有责任去认定或决定您提交给本公司的资料哪些是应当受到保护的,对享有“服务”的其他用户使用“您的资料”,本公司也不必负责。
+<h4>4.1	注册义务</h4>
+如您在Prodog注册,您同意:(a) 根据会员注册页面所刊载的会员资料表格的要求,提供关于您或贵公司的真实、准确、完整和反映当前情况的资料;(b) 维持并及时更新会员资料,使其保持真实、准确、完整和反映当前情况。倘若您提供任何不真实、不准确、不完整或不能反映当前情况的资料,或Prodog有合理理由怀疑该等资料不真实、不准确、不完整或不能反映当前情况,Prodog有权暂停或终止您的注册身份及资料,并拒绝您在目前或将来对“服务”(或其任何部份) 以任何形式使用。如您代表一家公司或其他法律主体在本公司登记,则您声明和保证,您有权使该公司或其他法律主体受本协议“条款”约束。
+<h4>4.2	会员注册名、密码和保密</h4>
+在登记过程中,您将选择会员注册名和密码。您须自行负责对您的会员注册名和密码保密,且须对您在会员注册名和密码下发生的所有活动承担责任。您同意:(a) 如发现任何人未经授权使用您的会员注册名或密码,或发生违反保密规定的任何其他情况,您会立即通知Prodog;及 (b) 确保您在每个上网时段结束时,以正确步骤离开网站。Prodog不能也不会对因您未能遵守本款规定而发生的任何损失或损毁负责。
+<h4>4.3	关于您的资料的规则</h4>
+您同意,“您的资料”和您供在Prodog上交易的任何“物品”(泛指一切可供依法交易的、有形的或无形的、以各种形态存在的某种具体的物品,或某种权利或利益,或某种票据或证券,或某种服务或行为。本协议中“物品”一词均含此义)
+
+a. 不会有欺诈成份,与售卖伪造或盗窃无涉。
+b. 不会侵犯任何第三者对该物品享有的物权,或版权、专利、商标、商业秘密或其他知识产权,或隐私权、名誉权。
+c. 不会违反任何法律、法规、条例或规章 (包括但不限于关于规范出口管理、贸易配额、保护消费者、不正当竞争或虚假广告的法律、法规、条例或规章)。
+d. 不会含有诽谤(包括商业诽谤)、非法恐吓或非法骚扰的内容。
+e. 不会含有淫秽、或包含任何儿童色情内容。
+f. 不会含有蓄意毁坏、恶意干扰、秘密地截取或侵占任何系统、数据或个人资料的任何病毒、伪装破坏程序、电脑蠕虫、定时程序炸弹或其他电脑程序。
+g. 不会直接或间接与下述各项货物或服务连接,或包含对下述各项货物或服务的描述:(i) 本协议项下禁止的货物或服务;或 (ii) 您无权连接或包含的货物或服务。此外,您同意不会:(h) 在与任何连锁信件、大量胡乱邮寄的电子邮件、滥发电子邮件或任何复制或多余的信息有关的方面使用“服务”;(i) 未经其他人士同意,利用“服务”收集其他人士的电子邮件地址及其他资料;或 (j) 利用“服务”制作虚假的电子邮件地址,或以其他形式试图在发送人的身份或信息的来源方面误导其他人士。
+<h4>4.4	被禁止物品</h4>
+您不得在本公司网站公布或通过本公司网站买卖:(a) 可能使本公司违反任何相关法律、法规、条例或规章的任何物品;或 (b) Prodog认为应禁止或不适合通过本网站买卖的任何物品。
+<h3>5	您授予本公司的许可使用权</h3>
+您授予本公司独家的、全球通用的、永久的、免费的许可使用权利 (并有权在多个层面对该权利进行再授权),使本公司有权(全部或部份地) 使用、复制、修订、改写、发布、翻译、分发、执行和展示"您的资料"或制作其派生作品,和/或以现在已知或日后开发的任何形式、媒体或技术,将"您的资料"纳入其他作品内。
+<h3>6	隐私</h3>
+尽管有第6条所规定的许可使用权,Prodog将仅根据本公司的隐私声明使用“您的资料”。本公司隐私声明的全部条款属于本协议的一部份,因此,您必须仔细阅读。请注意,您一旦自愿地在Prodog交易地点披露“您的资料”,该等资料即可能被其他人士获取和使用。
+<h3>7	终止或访问限制</h3>
+您同意,在Prodog未向您收费的情况下,Prodog可自行全权决定以任何理由 (包括但不限于Prodog认为您已违反本协议的字面意义和精神,或您以不符合本协议的字面意义和精神的方式行事,或您在超过90天的时间内未以您的账号及密码登录网站) 终止您的“服务”密码、账户 (或其任何部份) 或您对“服务”的使用,并删除和丢弃您在使用“服务”中提交的 “您的资料”。您同意,在Prodog向您收费的情况下,Prodog应基于合理的怀疑且经电子邮件通知的情况下实施上述终止服务的行为。Prodog同时可自行全权决定,在发出通知或不发出通知的情况下,随时停止提供“服务”或其任何部份。您同意,根据本协议的任何规定终止您使用“服务”之措施可在不发出事先通知的情况下实施,并承认和同意,Prodog可立即使您的账户无效,或撤销您的账户以及在您的账户内的所有相关资料和档案,和/或禁止您进一步接入该等档案或“服务”。账号终止后,Prodog没有义务为您保留原账号中或与之相关的任何信息,或转发任何未曾阅读或发送的信息给您或第三方。此外,您同意,Prodog不会就终止您接入“服务”而对您或任何第三者承担任何责任。第9、10、11和19各条应在本协议终止后继续有效。
+<h3>8	违反规则会有什么后果</h3>
+在不限制其他补救措施的前提下,发生下述任一情况,本公司可立即发出警告,暂时中止、永久中止或终止您的会员资格,删除您的任何现有数据信息,以及您在网站上展示的任何其他资料:(i) 您违反本协议;(ii) 本公司无法核实或鉴定您向本公司提供的任何资料;或 (iii) 本公司相信您的行为可能会使您、本公司用户或通过本公司或本公司网站提供服务的第三者服务供应商发生任何法律责任。在不限制任何其他补救措施的前提下,倘若发现您从事涉及本公司网站的诈骗活动,Prodog可暂停或终止您的账户。
+<h3>9	服务“按现状”提供</h3>
+本公司会尽一切努力使您在使用Prodog的过程中得到乐趣。遗憾的是,本公司不能随时预见到任何技术上的问题或其他困难。该等困难可能会导致数据损失或其他服务中断。为此,您明确理解和同意,您使用“服务”的风险由您自行承担。“服务”以“按现状”和“按可得到”的基础提供。Prodog明确声明不作出任何种类的所有明示或暗示的保证,包括但不限于关于适销性、适用于某一特定用途和无侵权行为等方面的保证。Prodog对下述内容不作保证:(i)“服务”会符合您的要求;(ii)“服务”不会中断,且适时、安全和不带任何错误;(iii) 通过使用“服务”而可能获取的结果将是准确或可信赖的;及 (iv) 您通过“服务”而购买或获取的任何产品、服务、资料或其他材料的质量将符合您的预期。通过使用“服务”而下载或以其他形式获取任何材料是由您自行全权决定进行的,且与此有关的风险由您自行承担,对于因您下载任何该等材料而发生的您的电脑系统的任何损毁或任何数据损失,您将自行承担责任。您从Prodog或通过或从“服务”获取的任何口头或书面意见或资料,均不产生未在本协议内明确载明的任何保证。
+<h3>10	责任范围</h3>
+您明确理解和同意,Prodog不对因下述任一情况而发生的任何损害赔偿承担责任,包括但不限于利润、商誉、使用、数据等方面的损失或其他无形损失的损害赔偿 (无论Prodog是否已被告知该等损害赔偿的可能性):(i) 使用或未能使用“服务”;(ii) 因通过或从“服务”购买或获取任何货物、样品、数据、资料或服务,或通过或从“服务”接收任何信息或缔结任何交易所产生的获取替代货物和服务的费用;(iii) 未经批准接入或更改您的传输资料或数据;(iv) 任何第三者对“服务”的声明或关于“服务”的行为;或 (v) 因任何原因而引起的与“服务”有关的任何其他事宜,包括疏忽。
+<h3>11	赔偿</h3>
+您同意,因您违反本协议或经在此提及而纳入本协议的其他文件,或因您违反了法律或侵害了第三方的权利,而使第三方对Prodog及其子公司、分公司、董事、职员、代理人提出索赔要求(包括司法费用和其他专业人士的费用),您必须赔偿给Prodog及其分公司、董事、职员、代理人,使其等免遭损失。
+<h3>12	遵守法律</h3>
+您应遵守与您使用“服务”的所有相关的法律、法规、条例和规章。
+<h3>13	广告和金融服务</h3>
+您与在“服务”上或通过“服务”物色的刊登广告人士通讯或进行业务往来或参与其推广活动,包括就相关货物或服务付款和交付相关货物或服务,以及与该等业务往来相关的任何其他条款、条件、保证或声明,仅限于在您和该刊登广告人士之间发生。您同意,对于因任何该等业务往来或因在“服务”上出现该等刊登广告人士而发生的任何种类的任何损失或损毁,Prodog无需负责或承担任何责任。您如打算通过“服务”创设或参与与任何公司、股票行情、投资或证券有关的任何服务,或通过“服务”收取或要求与任何公司、股票行情、投资或证券有关的任何新闻信息、警戒性信息或其他资料,敬请注意,Prodog不会就通过“服务”传送的任何该等资料的准确性、有用性或可用性、可获利性负责或承担任何责任,且不会对根据该等资料而作出的任何交易或投资决策负责或承担任何责任。
+<h3>14	链接</h3>
+“服务”或第三者均可提供与其他互联网网站或资源的链接。由于Prodog并不控制该等网站和资源,您承认并同意,Prodog并不对该等外在网站或资源的可用性负责,且不认可该等网站或资源上或可从该等网站或资源获取的任何内容、宣传、产品、服务或其他材料,也不对其等负责或承担任何责任。您进一步承认和同意,对于任何因使用或信赖从此类网站或资源上获取的此类内容、宣传、产品、服务或其他材料而造成(或声称造成)的任何直接或间接损失,Prodog均不承担责任。
+<h3>15	通知</h3>
+除非另有明确规定,任何通知应以电子邮件形式发送,或 (就您而言) 发送到您在登记过程中向Prodog提供的电子邮件地址,或有关方指明的该等其他地址。在电子邮件发出二十四 (24) 小时后,通知应被视为已送达,除非发送人被告知相关电子邮件地址已作废。或者,本公司可通过邮资预付挂号邮件并要求回执的方式,将通知发到您在登记过程中向Prodog提供的地址。在该情况下,在付邮当日三 (3) 天后通知被视为已送达。
+<h3>16	不可抗力</h3>
+对于因本公司合理控制范围以外的原因,包括但不限于自然灾害、罢工或骚乱、物质短缺或定量配给、暴动、战争行为、政府行为、通讯或其他设施故障或严重伤亡事故等,致使本公司延迟或未能履约的,Prodog不对您承担任何责任。
+<h3>17	转让</h3>
+Prodog转让本协议无需经您同意。
+<h3>18	其他规定</h3>
+本协议取代您和Prodog先前就相同事项订立的任何书面或口头协议。本协议各方面应受中华人民共和国大陆地区法律的管辖。倘若本协议任何规定被裁定为无效或不可强制执行,该项规定应被撤销,而其余规定应予执行。条款标题仅为方便参阅而设,并不以任何方式界定、限制、解释或描述该条款的范围或限度。本公司未就您或其他人士的某项违约行为采取行动,并不表明本公司撤回就任何继后或类似的违约事件采取行动的权利。
+<h3>19	诉讼</h3>
+因本协议或本公司服务所引起或与其有关的任何争议应向上海市闵行区人民法院提起诉讼,并以中华人民共和国法律为管辖法律。
+</p>

+ 3 - 0
public/other/prodogTerm1.txt

@@ -0,0 +1,3 @@
+我了解公司需要收集我的个人信息,例如姓名、电子邮件地址,以便为我的系统创建帐户。 我同意为此目的收集、使用和处理我的个人信息。
+
+I understand that company needs to collect my personal information, such as name, email address, for the purpose of creating my account for this system. I consent to the collection, use and handling of my personal information for this purpose.

+ 30 - 0
public/test/040601.html

@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <title>测试界面</title>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <script type="module">
+        
+        //import test from './040601.js';
+        //test();
+
+        function done() {
+            import('./040601.js').then(({ test }) => {
+                test();
+            }).catch(error => {
+                console.log(error);
+            });
+        }
+
+        done();
+    </script>
+</head>
+
+<body>
+    <div>111</div>
+</body>
+
+</html>

+ 9 - 0
public/test/040601.js

@@ -0,0 +1,9 @@
+/**
+* 尊敬的用户,你好:页面 JS 面板是高阶用法,一般不建议普通用户使用,如需使用,请确定你具备研发背景,能够自我排查问题。当然,你也可以咨询身边的技术顾问或者联系宜搭平台的技术支持获得服务(可能收费)。
+* 我们可以用 JS 面板来开发一些定制度高功能,比如:调用阿里云接口用来做图像识别、上报用户使用数据(如加载完成打点)等等。
+* 你可以点击面板上方的 「使用帮助」了解。
+*/
+
+export function test() {
+    console.log(`「页面 JS」:当前页面地址 ${location.href}`);
+}

+ 175 - 0
public/test/middleware.html

@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <title>测试界面</title>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <style type="text/css">
+
+    </style>
+    <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
+    <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/locale/zh-cn.js"></script>
+    <script type="text/javascript">
+        // 方块的宽度、高度
+        const rectHeight = 15;
+        const rectWidth = 15;
+
+        // 起始点的上坐标和左坐标
+        const startTop = 100;
+        const startLeft = 100;
+
+        // 每行最多显示的方块数量
+        const lineCount = 600;
+
+        let startTimeSec = null;
+        let endTimeSec = null;
+
+        /**
+         * 初始化界面
+         */
+        function init(startTime, endTime) {
+            
+
+            // 开始时间、结束时间的秒数
+            startTimeSec = Math.ceil(moment(startTime).valueOf() / 1000);
+            endTimeSec = Math.ceil(moment(endTime).valueOf() / 1000);
+
+            // 结束时间-开始时间的间隔秒数
+            let interval = endTimeSec - startTimeSec;
+
+            var myCanvas = document.getElementById("myCanvas");
+            myCanvas.width = lineCount * rectWidth + startLeft * 2;
+            myCanvas.height = startTop * 2 + (Math.ceil(interval / lineCount) * (rectHeight + 2) * 2);
+
+            var ctx = myCanvas.getContext("2d");
+            ctx.fillStyle="#FF0000";
+            for (let index = 0; index <= interval; index ++) {
+                let lineIndex = Math.floor(index / lineCount);
+                let columnIndex = index % lineCount;
+
+                let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
+                let rectLeft = startLeft + (rectWidth * columnIndex);
+
+                ctx.rect(rectLeft, rectTop, rectWidth, rectHeight);
+                ctx.rect(rectLeft, rectTop + rectHeight - 1, rectWidth, rectHeight);
+
+                if(columnIndex === 0){
+                    let currentSec = (startTimeSec + index) * 1000;
+                    let text = moment(currentSec).format('YYYY-MM-DD HH:mm:ss');
+                    ctx.fillText(text, 0, rectTop + 10);
+                }
+            }
+            ctx.stroke();
+        }
+
+        /**
+         * 绘制事件
+         */
+        function drawEvent(dataArray) {
+            var myCanvas = document.getElementById("myCanvas");
+            var ctx = myCanvas.getContext("2d");
+
+            for(let index = 0; index < dataArray.length; index ++){
+                let data = dataArray[index];
+                let sec = Math.ceil(moment(data).valueOf() / 1000);
+
+                let interval = sec - startTimeSec;
+                if(interval < 0){
+                    continue;
+                }
+
+                let lineIndex = Math.floor(interval / lineCount);
+                let columnIndex = interval % lineCount;
+
+                let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
+                let rectLeft = startLeft + (rectWidth * columnIndex);
+
+                ctx.fillRect(rectLeft, rectTop, rectWidth, rectHeight);
+            }
+            ctx.stroke();
+        }
+
+        /**
+         * 绘制过滤事件
+         */
+        function drawEventFilter(filterArray){
+            var myCanvas = document.getElementById("myCanvas");
+            var ctx = myCanvas.getContext("2d");
+
+            for(let index = 0; index < filterArray.length; index ++){
+                let data = filterArray[index];
+
+                let startSec = Math.ceil(moment(data.start).valueOf() / 1000);
+                let endSec = Math.ceil(moment(data.end).valueOf() / 1000);
+
+                let intervalStart = startSec - startTimeSec;
+                intervalStart = (intervalStart <= 0) ? 0 : intervalStart;
+                let intervalEnd = endSec - startTimeSec;
+                intervalEnd = (intervalEnd <= 0) ? 0 : intervalEnd;
+
+                for (let index = intervalStart; index <= intervalEnd; index ++) {
+                    let lineIndex = Math.floor(index / lineCount);
+                    let columnIndex = index % lineCount;
+
+                    let rectTop = startTop + lineIndex * (rectHeight + 2) * 2;
+                    let rectLeft = startLeft + (rectWidth * columnIndex);
+
+                    ctx.fillRect(rectLeft, rectTop + rectHeight - 1, rectWidth, rectHeight);
+                }
+            }
+            ctx.stroke();
+        }
+    </script>
+</head>
+
+<body>
+    <canvas id="myCanvas" width="20000" height="500" style="border:1px solid #000000;">
+    </canvas>
+</body>
+
+<script>
+    // 第一步,给定事件区间
+    init('2021-09-01 00:00:00', '2021-09-02 00:00:00');
+
+    // 给出Event数据,并进行绘制
+    let dataArray = [];
+    for(let i = 0; i < 100; i ++){
+        dataArray.push('2021-09-01 00:00:00');
+        dataArray.push('2021-09-01 00:00:01');
+        dataArray.push('2021-09-01 00:00:02');
+        dataArray.push('2021-09-01 00:00:03');
+        dataArray.push('2021-09-01 00:00:04');
+        dataArray.push('2021-09-01 00:00:06');
+        dataArray.push('2021-09-01 00:01:00');
+        dataArray.push('2021-09-01 00:01:01');
+        dataArray.push('2021-09-01 00:01:02');
+        dataArray.push('2021-09-01 09:59:59');
+        dataArray.push('2021-09-01 10:00:00');
+        dataArray.push('2021-09-01 10:00:01');
+        dataArray.push('2021-09-01 10:00:02');
+        dataArray.push('2021-09-01 10:00:03');
+        dataArray.push('2021-09-02 00:00:00');
+    }
+    drawEvent(dataArray);
+
+    // 给出EventFilter数据,并进行绘制
+    let filterArray = [];
+    filterArray.push({
+        start: '2021-09-01 00:00:00',
+        end: '2021-09-01 00:00:05',
+    });
+    filterArray.push({
+        start: '2021-09-01 00:10:00',
+        end: '2021-09-01 00:10:15',
+    });
+    filterArray.push({
+        start: '2021-09-01 00:20:00',
+        end: '2021-09-01 00:20:35',
+    });
+    drawEventFilter(filterArray);
+
+</script>
+
+</html>

+ 73 - 0
public/test/test.html

@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <title>测试界面</title>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <style type="text/css">
+        form {
+            display: flex;
+            align-items: center;
+        }
+
+        input {
+            flex-grow: 1;
+        }
+
+        #box {
+            display: flex;
+            flex-direction: row;
+            flex-wrap: wrap-reverse;
+            justify-content: flex-end;
+            align-content: center;
+            width: 500px;
+            border: 1px solid red;
+        }
+
+        .inner {
+            width: 100px;
+            height: 100px;
+            background: #8a4182;
+            margin: 10px;
+        }
+    </style>
+
+    <script type="text/javascript">
+        var blob = new Blob();
+        let type = (typeof blob);
+        console.log(typeof blob);
+        console.log(blob.name);
+        console.log(typeof blob.name);
+
+        var v1 = {};
+        var v2 = {};
+        console.log("v1 === v2 %o", v1 === v2);
+        
+        var v2 = v1;
+        console.log("v1 === v2 %o", v1 === v2);
+    </script>
+</head>
+
+<body>
+    <form>
+        <input type="email" name="email">
+        <button type="submit">
+            <svg width="200" height="200">
+                <image x="0" y="0" width="200" height="200" xlink:href="./image/repair.png" />
+            </svg>
+        </button>
+    </form>
+
+    <div id="box">
+        <div class="inner">1</div>
+        <div class="inner">2</div>
+        <div class="inner">3</div>
+        <div class="inner">4</div>
+        <div class="inner">5</div>
+        <div class="inner">6</div>
+    </div>
+</body>
+
+</html>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików