linan 4 năm trước cách đây
commit
fd7afd7d1d
100 tập tin đã thay đổi với 21790 bổ sung0 xóa
  1. 2 0
      .browserslistrc
  2. 3 0
      .env.development
  3. 3 0
      .env.production
  4. 18 0
      .eslintrc.js
  5. 20 0
      .gitignore
  6. 17 0
      .vscode/cc.code-snippets
  7. 4 0
      .vscode/settings.json
  8. 3 0
      README.md
  9. 3 0
      babel.config.js
  10. 995 0
      element-variables.scss
  11. 4990 0
      package-lock.json
  12. 44 0
      package.json
  13. 5 0
      postcss.config.js
  14. BIN
      public/favicon.ico
  15. BIN
      public/favicon副.ico
  16. 22 0
      public/index.html
  17. 387 0
      public/libs/H264SPSParser.js
  18. 667 0
      public/libs/H264Session.js
  19. 108 0
      public/libs/videoWorker.js
  20. 24 0
      src/App.vue
  21. 11 0
      src/api/login.js
  22. 5 0
      src/assets/css/reset.scss
  23. BIN
      src/assets/deliveryRoom_1.png
  24. BIN
      src/assets/deliveryRoom_2.png
  25. BIN
      src/assets/deliveryRoom_3.png
  26. BIN
      src/assets/deliveryRoom_4.png
  27. BIN
      src/assets/login_bg.jpg
  28. BIN
      src/assets/logo.png
  29. 1 0
      src/assets/logo2.png
  30. 22 0
      src/main.js
  31. 11 0
      src/module.js
  32. 43 0
      src/router/index.js
  33. 295 0
      src/router/routes.js
  34. 38 0
      src/sdk/ajax.js
  35. 4 0
      src/sdk/config.js
  36. 24 0
      src/store/index.js
  37. 7 0
      src/store/store-module.js
  38. 226 0
      src/views/Home/Home.vue
  39. 358 0
      src/views/Home/mencCofig.js
  40. 159 0
      src/views/Login/Login.vue
  41. 176 0
      src/views/antiepidemic/illnessLog.vue
  42. 176 0
      src/views/antiepidemic/immuneLog.vue
  43. 176 0
      src/views/antiepidemic/immunePlan.vue
  44. 176 0
      src/views/antiepidemic/immuneProce.vue
  45. 161 0
      src/views/breed/collectSeedLog.vue
  46. 154 0
      src/views/breed/matingLog.vue
  47. 158 0
      src/views/breed/matingSuccLog.vue
  48. 175 0
      src/views/breed/offFieldLog.vue
  49. 159 0
      src/views/breed/parturitionLog.vue
  50. 158 0
      src/views/breed/pregnancyTestLog.vue
  51. 161 0
      src/views/breed/seedSheepFile.vue
  52. 175 0
      src/views/breed/shiftFieldLog.vue
  53. 160 0
      src/views/breed/weaningLog.vue
  54. 175 0
      src/views/cultivateSeed/gradeAssess.vue
  55. 176 0
      src/views/cultivateSeed/sub/virtualMating.vue
  56. 175 0
      src/views/device/deviceFault.vue
  57. 30 0
      src/views/device/environmentMonitoring.vue
  58. 30 0
      src/views/device/video.vue
  59. 175 0
      src/views/fileInfo/areaInfo.vue
  60. 81 0
      src/views/fileInfo/enterpriseInfo.vue
  61. 92 0
      src/views/fileInfo/pastureInfo.vue
  62. 172 0
      src/views/fileInfo/workerInfo.vue
  63. 177 0
      src/views/harmless/harmlessConfirm.vue
  64. 30 0
      src/views/harmless/intelligentHint.vue
  65. 205 0
      src/views/index/Index.vue
  66. 123 0
      src/views/index/charts/chart_a.vue
  67. 77 0
      src/views/index/charts/chart_b.vue
  68. 30 0
      src/views/material/basicsInfo.vue
  69. 177 0
      src/views/material/materialInStore.vue
  70. 177 0
      src/views/material/materialOutStore.vue
  71. 177 0
      src/views/material/storeList.vue
  72. 177 0
      src/views/production/batch.vue
  73. 177 0
      src/views/production/carefulFeed.vue
  74. 177 0
      src/views/production/dieWeedOut.vue
  75. 177 0
      src/views/production/earTag.vue
  76. 177 0
      src/views/production/examiningReport.vue
  77. 177 0
      src/views/production/productionWarn.vue
  78. 175 0
      src/views/production/shiftField.vue
  79. 115 0
      src/views/template/Aa.vue
  80. 20 0
      src/views/template/Ab.vue
  81. 26 0
      src/views/template/Ac.vue
  82. 20 0
      src/views/template/Ad.vue
  83. 19 0
      src/views/template/Ae.vue
  84. 310 0
      src/views/template/Af.vue
  85. 343 0
      theme/alert.css
  86. 136 0
      theme/aside.css
  87. 1467 0
      theme/autocomplete.css
  88. 284 0
      theme/avatar.css
  89. 273 0
      theme/backtop.css
  90. 290 0
      theme/badge.css
  91. 1244 0
      theme/base.css
  92. 0 0
      theme/breadcrumb-item.css
  93. 287 0
      theme/breadcrumb.css
  94. 0 0
      theme/button-group.css
  95. 762 0
      theme/button.css
  96. 1065 0
      theme/calendar.css
  97. 271 0
      theme/card.css
  98. 291 0
      theme/carousel-item.css
  99. 367 0
      theme/carousel.css
  100. 0 0
      theme/cascader-panel.css

+ 2 - 0
.browserslistrc

@@ -0,0 +1,2 @@
+> 1%
+last 2 versions

+ 3 - 0
.env.development

@@ -0,0 +1,3 @@
+# 本地开发模式
+# 以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。
+VUE_APP_TITLE=vue-module

+ 3 - 0
.env.production

@@ -0,0 +1,3 @@
+# 生产模式
+# 以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。
+VUE_APP_TITLE=vue-module

+ 18 - 0
.eslintrc.js

@@ -0,0 +1,18 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  extends: ['plugin:vue/essential'],
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
+  },
+  parserOptions: {
+    parser: 'babel-eslint'
+  },
+  globals: {
+    'AMap': false,
+    'AMapUI': false
+  }
+}

+ 20 - 0
.gitignore

@@ -0,0 +1,20 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 17 - 0
.vscode/cc.code-snippets

@@ -0,0 +1,17 @@
+{
+	// Place your huimv.cloud.client 工作区 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 
+	// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 
+	// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 
+	// used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 
+	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 
+	// Placeholders with the same ids are connected.
+	// Example:
+	"Print to console": {
+		"scope": "javascript,typescript",
+		"prefix": "cc",
+		"body": [
+			"console.log($1)",
+		],
+		"description": "Log output to console"
+	}
+}

+ 4 - 0
.vscode/settings.json

@@ -0,0 +1,4 @@
+{
+  "prettier.semi": false,
+  "prettier.singleQuote": true
+}

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+# vue-module
+
+适用于[vue-module-loader](https://github.com/mqhe2007/vue-module-loader)的微前端模块工程

+ 3 - 0
babel.config.js

@@ -0,0 +1,3 @@
+module.exports = {
+  presets: ["@vue/cli-plugin-babel/preset"]
+};

+ 995 - 0
element-variables.scss

@@ -0,0 +1,995 @@
+/* Element Chalk Variables */
+
+// Special comment for theme configurator
+// type|skipAutoTranslation|Category|Order
+// skipAutoTranslation 1
+
+/* Transition
+-------------------------- */
+$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
+$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
+$--fade-linear-transition: opacity 200ms linear !default;
+$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
+$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
+$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
+
+/* Color
+-------------------------- */
+/// color|1|Brand Color|0
+// $--color-primary: #409EFF !default;
+$--color-primary: #029B62 !default;
+/// color|1|Background Color|4
+$--color-white: #FFFFFF !default;
+/// color|1|Background Color|4
+$--color-black: #000000 !default;
+$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
+$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
+$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
+$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
+$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
+$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
+$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
+$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
+$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
+/// color|1|Functional Color|1
+$--color-success: #67C23A !default;
+/// color|1|Functional Color|1
+$--color-warning: #E6A23C !default;
+/// color|1|Functional Color|1
+$--color-danger: #F56C6C !default;
+/// color|1|Functional Color|1
+$--color-info: #909399 !default;
+
+$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
+$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
+$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
+$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
+
+$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
+$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
+$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
+$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
+/// color|1|Font Color|2
+$--color-text-primary: #303133 !default;
+/// color|1|Font Color|2
+$--color-text-regular: #606266 !default;
+/// color|1|Font Color|2
+$--color-text-secondary: #909399 !default;
+/// color|1|Font Color|2
+$--color-text-placeholder: #C0C4CC !default;
+/// color|1|Border Color|3
+$--border-color-base: #DCDFE6 !default;
+/// color|1|Border Color|3
+$--border-color-light: #E4E7ED !default;
+/// color|1|Border Color|3
+$--border-color-lighter: #EBEEF5 !default;
+/// color|1|Border Color|3
+$--border-color-extra-light: #F2F6FC !default;
+
+// Background
+/// color|1|Background Color|4
+$--background-color-base: #F5F7FA !default;
+
+/* Link
+-------------------------- */
+$--link-color: $--color-primary-light-2 !default;
+$--link-hover-color: $--color-primary !default;
+
+/* Border
+-------------------------- */
+$--border-width-base: 1px !default;
+$--border-style-base: solid !default;
+$--border-color-hover: $--color-text-placeholder !default;
+$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
+/// borderRadius|1|Radius|0
+$--border-radius-base: 4px !default;
+/// borderRadius|1|Radius|0
+$--border-radius-small: 2px !default;
+/// borderRadius|1|Radius|0
+$--border-radius-circle: 100% !default;
+/// borderRadius|1|Radius|0
+$--border-radius-zero: 0 !default;
+
+// Box-shadow
+/// boxShadow|1|Shadow|1
+$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
+// boxShadow|1|Shadow|1
+$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
+/// boxShadow|1|Shadow|1
+$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
+
+/* Fill
+-------------------------- */
+$--fill-base: $--color-white !default;
+
+/* Typography
+-------------------------- */
+$--font-path: 'fonts' !default;
+$--font-display: 'auto' !default;
+/// fontSize|1|Font Size|0
+$--font-size-extra-large: 20px !default;
+/// fontSize|1|Font Size|0
+$--font-size-large: 18px !default;
+/// fontSize|1|Font Size|0
+$--font-size-medium: 16px !default;
+/// fontSize|1|Font Size|0
+$--font-size-base: 14px !default;
+/// fontSize|1|Font Size|0
+$--font-size-small: 13px !default;
+/// fontSize|1|Font Size|0
+$--font-size-extra-small: 12px !default;
+/// fontWeight|1|Font Weight|1
+$--font-weight-primary: 500 !default;
+/// fontWeight|1|Font Weight|1
+$--font-weight-secondary: 100 !default;
+/// fontLineHeight|1|Line Height|2
+$--font-line-height-primary: 24px !default;
+/// fontLineHeight|1|Line Height|2
+$--font-line-height-secondary: 16px !default;
+$--font-color-disabled-base: #bbb !default;
+/* Size
+-------------------------- */
+$--size-base: 14px !default;
+
+/* z-index
+-------------------------- */
+$--index-normal: 1 !default;
+$--index-top: 1000 !default;
+$--index-popper: 2000 !default;
+
+/* Disable base
+-------------------------- */
+$--disabled-fill-base: $--background-color-base !default;
+$--disabled-color-base: $--color-text-placeholder !default;
+$--disabled-border-base: $--border-color-light !default;
+
+/* Icon
+-------------------------- */
+$--icon-color: #666 !default;
+$--icon-color-base: $--color-info !default;
+
+/* Checkbox
+-------------------------- */
+/// fontSize||Font|1
+$--checkbox-font-size: 14px !default;
+/// fontWeight||Font|1
+$--checkbox-font-weight: $--font-weight-primary !default;
+/// color||Color|0
+$--checkbox-font-color: $--color-text-regular !default;
+$--checkbox-input-height: 14px !default;
+$--checkbox-input-width: 14px !default;
+/// borderRadius||Border|2
+$--checkbox-border-radius: $--border-radius-small !default;
+/// color||Color|0
+$--checkbox-background-color: $--color-white !default;
+$--checkbox-input-border: $--border-base !default;
+
+/// color||Color|0
+$--checkbox-disabled-border-color: $--border-color-base !default;
+$--checkbox-disabled-input-fill: #edf2fc !default;
+$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
+
+$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
+$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
+$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
+
+/// color||Color|0
+$--checkbox-checked-font-color: $--color-primary !default;
+$--checkbox-checked-input-border-color: $--color-primary !default;
+/// color||Color|0
+$--checkbox-checked-background-color: $--color-primary !default;
+$--checkbox-checked-icon-color: $--fill-base !default;
+
+$--checkbox-input-border-color-hover: $--color-primary !default;
+/// height||Other|4
+$--checkbox-bordered-height: 40px !default;
+/// padding||Spacing|3
+$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
+/// padding||Spacing|3
+$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
+/// padding||Spacing|3
+$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
+/// padding||Spacing|3
+$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
+$--checkbox-bordered-medium-input-height: 14px !default;
+$--checkbox-bordered-medium-input-width: 14px !default;
+/// height||Other|4
+$--checkbox-bordered-medium-height: 36px !default;
+$--checkbox-bordered-small-input-height: 12px !default;
+$--checkbox-bordered-small-input-width: 12px !default;
+/// height||Other|4
+$--checkbox-bordered-small-height: 32px !default;
+$--checkbox-bordered-mini-input-height: 12px !default;
+$--checkbox-bordered-mini-input-width: 12px !default;
+/// height||Other|4
+$--checkbox-bordered-mini-height: 28px !default;
+
+/// color||Color|0
+$--checkbox-button-checked-background-color: $--color-primary !default;
+/// color||Color|0
+$--checkbox-button-checked-font-color: $--color-white !default;
+/// color||Color|0
+$--checkbox-button-checked-border-color: $--color-primary !default;
+
+
+
+/* Radio
+-------------------------- */
+/// fontSize||Font|1
+$--radio-font-size: $--font-size-base !default;
+/// fontWeight||Font|1
+$--radio-font-weight: $--font-weight-primary !default;
+/// color||Color|0
+$--radio-font-color: $--color-text-regular !default;
+$--radio-input-height: 14px !default;
+$--radio-input-width: 14px !default;
+/// borderRadius||Border|2
+$--radio-input-border-radius: $--border-radius-circle !default;
+/// color||Color|0
+$--radio-input-background-color: $--color-white !default;
+$--radio-input-border: $--border-base !default;
+/// color||Color|0
+$--radio-input-border-color: $--border-color-base !default;
+/// color||Color|0
+$--radio-icon-color: $--color-white !default;
+
+$--radio-disabled-input-border-color: $--disabled-border-base !default;
+$--radio-disabled-input-fill: $--disabled-fill-base !default;
+$--radio-disabled-icon-color: $--disabled-fill-base !default;
+
+$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
+$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
+$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
+
+/// color||Color|0
+$--radio-checked-font-color: $--color-primary !default;
+/// color||Color|0
+$--radio-checked-input-border-color: $--color-primary !default;
+/// color||Color|0
+$--radio-checked-input-background-color: $--color-white !default;
+/// color||Color|0
+$--radio-checked-icon-color: $--color-primary !default;
+
+$--radio-input-border-color-hover: $--color-primary !default;
+
+$--radio-bordered-height: 40px !default;
+$--radio-bordered-padding: 12px 20px 0 10px !default;
+$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
+$--radio-bordered-small-padding: 8px 15px 0 10px !default;
+$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
+$--radio-bordered-medium-input-height: 14px !default;
+$--radio-bordered-medium-input-width: 14px !default;
+$--radio-bordered-medium-height: 36px !default;
+$--radio-bordered-small-input-height: 12px !default;
+$--radio-bordered-small-input-width: 12px !default;
+$--radio-bordered-small-height: 32px !default;
+$--radio-bordered-mini-input-height: 12px !default;
+$--radio-bordered-mini-input-width: 12px !default;
+$--radio-bordered-mini-height: 28px !default;
+
+/// fontSize||Font|1
+$--radio-button-font-size: $--font-size-base !default;
+/// color||Color|0
+$--radio-button-checked-background-color: $--color-primary !default;
+/// color||Color|0
+$--radio-button-checked-font-color: $--color-white !default;
+/// color||Color|0
+$--radio-button-checked-border-color: $--color-primary !default;
+$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
+
+/* Select
+-------------------------- */
+$--select-border-color-hover: $--border-color-hover !default;
+$--select-disabled-border: $--disabled-border-base !default;
+/// fontSize||Font|1
+$--select-font-size: $--font-size-base !default;
+$--select-close-hover-color: $--color-text-secondary !default;
+
+$--select-input-color: $--color-text-placeholder !default;
+$--select-multiple-input-color: #666 !default;
+/// color||Color|0
+$--select-input-focus-border-color: $--color-primary !default;
+/// fontSize||Font|1
+$--select-input-font-size: 14px !default;
+
+$--select-option-color: $--color-text-regular !default;
+$--select-option-disabled-color: $--color-text-placeholder !default;
+$--select-option-disabled-background: $--color-white !default;
+/// height||Other|4
+$--select-option-height: 34px !default;
+$--select-option-hover-background: $--background-color-base !default;
+/// color||Color|0
+$--select-option-selected-font-color: $--color-primary !default;
+$--select-option-selected-hover: $--background-color-base !default;
+
+$--select-group-color: $--color-info !default;
+$--select-group-height: 30px !default;
+$--select-group-font-size: 12px !default;
+
+$--select-dropdown-background: $--color-white !default;
+$--select-dropdown-shadow: $--box-shadow-light !default;
+$--select-dropdown-empty-color: #999 !default;
+/// height||Other|4
+$--select-dropdown-max-height: 274px !default;
+$--select-dropdown-padding: 6px 0 !default;
+$--select-dropdown-empty-padding: 10px 0 !default;
+$--select-dropdown-border: solid 1px $--border-color-light !default;
+
+/* Alert
+-------------------------- */
+$--alert-padding: 8px 16px !default;
+/// borderRadius||Border|2
+$--alert-border-radius: $--border-radius-base !default;
+/// fontSize||Font|1
+$--alert-title-font-size: 13px !default;
+/// fontSize||Font|1
+$--alert-description-font-size: 12px !default;
+/// fontSize||Font|1
+$--alert-close-font-size: 12px !default;
+/// fontSize||Font|1
+$--alert-close-customed-font-size: 13px !default;
+
+$--alert-success-color: $--color-success-lighter !default;
+$--alert-info-color: $--color-info-lighter !default;
+$--alert-warning-color: $--color-warning-lighter !default;
+$--alert-danger-color: $--color-danger-lighter !default;
+
+/// height||Other|4
+$--alert-icon-size: 16px !default;
+/// height||Other|4
+$--alert-icon-large-size: 28px !default;
+
+/* MessageBox
+-------------------------- */
+/// color||Color|0
+$--messagebox-title-color: $--color-text-primary !default;
+$--msgbox-width: 420px !default;
+$--msgbox-border-radius: 4px !default;
+/// fontSize||Font|1
+$--messagebox-font-size: $--font-size-large !default;
+/// fontSize||Font|1
+$--messagebox-content-font-size: $--font-size-base !default;
+/// color||Color|0
+$--messagebox-content-color: $--color-text-regular !default;
+/// fontSize||Font|1
+$--messagebox-error-font-size: 12px !default;
+$--msgbox-padding-primary: 15px !default;
+/// color||Color|0
+$--messagebox-success-color: $--color-success !default;
+/// color||Color|0
+$--messagebox-info-color: $--color-info !default;
+/// color||Color|0
+$--messagebox-warning-color: $--color-warning !default;
+/// color||Color|0
+$--messagebox-danger-color: $--color-danger !default;
+
+/* Message
+-------------------------- */
+$--message-shadow: $--box-shadow-base !default;
+$--message-min-width: 380px !default;
+$--message-background-color: #edf2fc !default;
+$--message-padding: 15px 15px 15px 20px !default;
+/// color||Color|0
+$--message-close-icon-color: $--color-text-placeholder !default;
+/// height||Other|4
+$--message-close-size: 16px !default;
+/// color||Color|0
+$--message-close-hover-color: $--color-text-secondary !default;
+
+/// color||Color|0
+$--message-success-font-color: $--color-success !default;
+/// color||Color|0
+$--message-info-font-color: $--color-info !default;
+/// color||Color|0
+$--message-warning-font-color: $--color-warning !default;
+/// color||Color|0
+$--message-danger-font-color: $--color-danger !default;
+
+/* Notification
+-------------------------- */
+$--notification-width: 330px !default;
+/// padding||Spacing|3
+$--notification-padding: 14px 26px 14px 13px !default;
+$--notification-radius: 8px !default;
+$--notification-shadow: $--box-shadow-light !default;
+/// color||Color|0
+$--notification-border-color: $--border-color-lighter !default;
+$--notification-icon-size: 24px !default;
+$--notification-close-font-size: $--message-close-size !default;
+$--notification-group-margin-left: 13px !default;
+$--notification-group-margin-right: 8px !default;
+/// fontSize||Font|1
+$--notification-content-font-size: $--font-size-base !default;
+/// color||Color|0
+$--notification-content-color: $--color-text-regular !default;
+/// fontSize||Font|1
+$--notification-title-font-size: 16px !default;
+/// color||Color|0
+$--notification-title-color: $--color-text-primary !default;
+
+/// color||Color|0
+$--notification-close-color: $--color-text-secondary !default;
+/// color||Color|0
+$--notification-close-hover-color: $--color-text-regular !default;
+
+/// color||Color|0
+$--notification-success-icon-color: $--color-success !default;
+/// color||Color|0
+$--notification-info-icon-color: $--color-info !default;
+/// color||Color|0
+$--notification-warning-icon-color: $--color-warning !default;
+/// color||Color|0
+$--notification-danger-icon-color: $--color-danger !default;
+
+/* Input
+-------------------------- */
+$--input-font-size: $--font-size-base !default;
+/// color||Color|0
+$--input-font-color: $--color-text-regular !default;
+/// height||Other|4
+$--input-width: 140px !default;
+/// height||Other|4
+$--input-height: 40px !default;
+$--input-border: $--border-base !default;
+$--input-border-color: $--border-color-base !default;
+/// borderRadius||Border|2
+$--input-border-radius: $--border-radius-base !default;
+$--input-border-color-hover: $--border-color-hover !default;
+/// color||Color|0
+$--input-background-color: $--color-white !default;
+$--input-fill-disabled: $--disabled-fill-base !default;
+$--input-color-disabled: $--font-color-disabled-base !default;
+/// color||Color|0
+$--input-icon-color: $--color-text-placeholder !default;
+/// color||Color|0
+$--input-placeholder-color: $--color-text-placeholder !default;
+$--input-max-width: 314px !default;
+
+$--input-hover-border: $--border-color-hover !default;
+$--input-clear-hover-color: $--color-text-secondary !default;
+
+$--input-focus-border: $--color-primary !default;
+$--input-focus-fill: $--color-white !default;
+
+$--input-disabled-fill: $--disabled-fill-base !default;
+$--input-disabled-border: $--disabled-border-base !default;
+$--input-disabled-color: $--disabled-color-base !default;
+$--input-disabled-placeholder-color: $--color-text-placeholder !default;
+
+/// fontSize||Font|1
+$--input-medium-font-size: 14px !default;
+/// height||Other|4
+$--input-medium-height: 36px !default;
+/// fontSize||Font|1
+$--input-small-font-size: 13px !default;
+/// height||Other|4
+$--input-small-height: 32px !default;
+/// fontSize||Font|1
+$--input-mini-font-size: 12px !default;
+/// height||Other|4
+$--input-mini-height: 28px !default;
+
+/* Cascader
+-------------------------- */
+/// color||Color|0
+$--cascader-menu-font-color: $--color-text-regular !default;
+/// color||Color|0
+$--cascader-menu-selected-font-color: $--color-primary !default;
+$--cascader-menu-fill: $--fill-base !default;
+$--cascader-menu-font-size: $--font-size-base !default;
+$--cascader-menu-radius: $--border-radius-base !default;
+$--cascader-menu-border: solid 1px $--border-color-light !default;
+$--cascader-menu-shadow: $--box-shadow-light !default;
+$--cascader-node-background-hover: $--background-color-base !default;
+$--cascader-node-color-disabled:$--color-text-placeholder !default;
+$--cascader-color-empty:$--color-text-placeholder !default;
+$--cascader-tag-background: #f0f2f5;
+
+/* Group
+-------------------------- */
+$--group-option-flex: 0 0 (1/5) * 100% !default;
+$--group-option-offset-bottom: 12px !default;
+$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
+$--group-title-color: $--color-black !default;
+$--group-title-font-size: $--font-size-base !default;
+$--group-title-width: 66px !default;
+
+/* Tab
+-------------------------- */
+$--tab-font-size: $--font-size-base !default;
+$--tab-border-line: 1px solid #e4e4e4 !default;
+$--tab-header-color-active: $--color-text-secondary !default;
+$--tab-header-color-hover: $--color-text-regular !default;
+$--tab-header-color: $--color-text-regular !default;
+$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
+$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
+$--tab-vertical-header-width: 90px !default;
+$--tab-vertical-header-count-color: $--color-white !default;
+$--tab-vertical-header-count-fill: $--color-text-secondary !default;
+
+/* Button
+-------------------------- */
+/// fontSize||Font|1
+$--button-font-size: $--font-size-base !default;
+/// fontWeight||Font|1
+$--button-font-weight: $--font-weight-primary !default;
+/// borderRadius||Border|2
+$--button-border-radius: $--border-radius-base !default;
+/// padding||Spacing|3
+$--button-padding-vertical: 12px !default;
+/// padding||Spacing|3
+$--button-padding-horizontal: 20px !default;
+
+/// fontSize||Font|1
+$--button-medium-font-size: $--font-size-base !default;
+/// borderRadius||Border|2
+$--button-medium-border-radius: $--border-radius-base !default;
+/// padding||Spacing|3
+$--button-medium-padding-vertical: 10px !default;
+/// padding||Spacing|3
+$--button-medium-padding-horizontal: 20px !default;
+
+/// fontSize||Font|1
+$--button-small-font-size: 12px !default;
+$--button-small-border-radius: #{$--border-radius-base - 1} !default;
+/// padding||Spacing|3
+$--button-small-padding-vertical: 9px !default;
+/// padding||Spacing|3
+$--button-small-padding-horizontal: 15px !default;
+/// fontSize||Font|1
+$--button-mini-font-size: 12px !default;
+$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
+/// padding||Spacing|3
+$--button-mini-padding-vertical: 7px !default;
+/// padding||Spacing|3
+$--button-mini-padding-horizontal: 15px !default;
+
+/// color||Color|0
+$--button-default-font-color: $--color-text-regular !default;
+/// color||Color|0
+$--button-default-background-color: $--color-white !default;
+/// color||Color|0
+$--button-default-border-color: $--border-color-base !default;
+
+/// color||Color|0
+$--button-disabled-font-color: $--color-text-placeholder !default;
+/// color||Color|0
+$--button-disabled-background-color: $--color-white !default;
+/// color||Color|0
+$--button-disabled-border-color: $--border-color-lighter !default;
+
+/// color||Color|0
+$--button-primary-border-color: $--color-primary !default;
+/// color||Color|0
+$--button-primary-font-color: $--color-white !default;
+/// color||Color|0
+$--button-primary-background-color: $--color-primary !default;
+/// color||Color|0
+$--button-success-border-color: $--color-success !default;
+/// color||Color|0
+$--button-success-font-color: $--color-white !default;
+/// color||Color|0
+$--button-success-background-color: $--color-success !default;
+/// color||Color|0
+$--button-warning-border-color: $--color-warning !default;
+/// color||Color|0
+$--button-warning-font-color: $--color-white !default;
+/// color||Color|0
+$--button-warning-background-color: $--color-warning !default;
+/// color||Color|0
+$--button-danger-border-color: $--color-danger !default;
+/// color||Color|0
+$--button-danger-font-color: $--color-white !default;
+/// color||Color|0
+$--button-danger-background-color: $--color-danger !default;
+/// color||Color|0
+$--button-info-border-color: $--color-info !default;
+/// color||Color|0
+$--button-info-font-color: $--color-white !default;
+/// color||Color|0
+$--button-info-background-color: $--color-info !default;
+
+$--button-hover-tint-percent: 20% !default;
+$--button-active-shade-percent: 10% !default;
+
+
+/* cascader
+-------------------------- */
+$--cascader-height: 200px !default;
+
+/* Switch
+-------------------------- */
+/// color||Color|0
+$--switch-on-color: $--color-primary !default;
+/// color||Color|0
+$--switch-off-color: $--border-color-base !default;
+/// fontSize||Font|1
+$--switch-font-size: $--font-size-base !default;
+$--switch-core-border-radius: 10px !default;
+// height||Other|4 TODO: width 代码写死的40px 所以下面这三个属性都没意义
+$--switch-width: 40px !default;
+// height||Other|4
+$--switch-height: 20px !default;
+// height||Other|4
+$--switch-button-size: 16px !default;
+
+/* Dialog
+-------------------------- */
+$--dialog-background-color: $--color-white !default;
+$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
+/// fontSize||Font|1
+$--dialog-title-font-size: $--font-size-large !default;
+/// fontSize||Font|1
+$--dialog-content-font-size: 14px !default;
+/// fontLineHeight||LineHeight|2
+$--dialog-font-line-height: $--font-line-height-primary !default;
+/// padding||Spacing|3
+$--dialog-padding-primary: 20px !default;
+
+/* Table
+-------------------------- */
+/// color||Color|0
+$--table-border-color: $--border-color-lighter !default;
+$--table-border: 1px solid $--table-border-color !default;
+/// color||Color|0
+$--table-font-color: $--color-text-regular !default;
+/// color||Color|0
+$--table-header-font-color: $--color-text-secondary !default;
+/// color||Color|0
+$--table-row-hover-background-color: $--background-color-base !default;
+$--table-current-row-background-color: $--color-primary-light-9 !default;
+/// color||Color|0
+$--table-header-background-color: $--color-white !default;
+$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
+
+/* Pagination
+-------------------------- */
+/// fontSize||Font|1
+$--pagination-font-size: 13px !default;
+/// color||Color|0
+$--pagination-background-color: $--color-white !default;
+/// color||Color|0
+$--pagination-font-color: $--color-text-primary !default;
+$--pagination-border-radius: 3px !default;
+/// color||Color|0
+$--pagination-button-color: $--color-text-primary !default;
+/// height||Other|4
+$--pagination-button-width: 35.5px !default;
+/// height||Other|4
+$--pagination-button-height: 28px !default;
+/// color||Color|0
+$--pagination-button-disabled-color: $--color-text-placeholder !default;
+/// color||Color|0
+$--pagination-button-disabled-background-color: $--color-white !default;
+/// color||Color|0
+$--pagination-hover-color: $--color-primary !default;
+
+/* Popup
+-------------------------- */
+/// color||Color|0
+$--popup-modal-background-color: $--color-black !default;
+/// opacity||Other|1
+$--popup-modal-opacity: 0.5 !default;
+
+/* Popover
+-------------------------- */
+/// color||Color|0
+$--popover-background-color: $--color-white !default;
+/// fontSize||Font|1
+$--popover-font-size: $--font-size-base !default;
+/// color||Color|0
+$--popover-border-color: $--border-color-lighter !default;
+$--popover-arrow-size: 6px !default;
+/// padding||Spacing|3
+$--popover-padding: 12px !default;
+$--popover-padding-large: 18px 20px !default;
+/// fontSize||Font|1
+$--popover-title-font-size: 16px !default;
+/// color||Color|0
+$--popover-title-font-color: $--color-text-primary !default;
+
+/* Tooltip
+-------------------------- */
+/// color|1|Color|0
+$--tooltip-fill: $--color-text-primary !default;
+/// color|1|Color|0
+$--tooltip-color: $--color-white !default;
+/// fontSize||Font|1
+$--tooltip-font-size: 12px !default;
+/// color||Color|0
+$--tooltip-border-color: $--color-text-primary !default;
+$--tooltip-arrow-size: 6px !default;
+/// padding||Spacing|3
+$--tooltip-padding: 10px !default;
+
+/* Tag
+-------------------------- */
+/// color||Color|0
+$--tag-info-color: $--color-info !default;
+/// color||Color|0
+$--tag-primary-color: $--color-primary !default;
+/// color||Color|0
+$--tag-success-color: $--color-success !default;
+/// color||Color|0
+$--tag-warning-color: $--color-warning !default;
+/// color||Color|0
+$--tag-danger-color: $--color-danger !default;
+/// fontSize||Font|1
+$--tag-font-size: 12px !default;
+$--tag-border-radius: 4px !default;
+$--tag-padding: 0 10px !default;
+
+/* Tree
+-------------------------- */
+/// color||Color|0
+$--tree-node-hover-background-color: $--background-color-base !default;
+/// color||Color|0
+$--tree-font-color: $--color-text-regular !default;
+/// color||Color|0
+$--tree-expand-icon-color: $--color-text-placeholder !default;
+
+/* Dropdown
+-------------------------- */
+$--dropdown-menu-box-shadow: $--box-shadow-light !default;
+$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
+$--dropdown-menuItem-hover-color: $--link-color !default;
+
+/* Badge
+-------------------------- */
+/// color||Color|0
+$--badge-background-color: $--color-danger !default;
+$--badge-radius: 10px !default;
+/// fontSize||Font|1
+$--badge-font-size: 12px !default;
+/// padding||Spacing|3
+$--badge-padding: 6px !default;
+/// height||Other|4
+$--badge-size: 18px !default;
+
+/* Card
+--------------------------*/
+/// color||Color|0
+$--card-border-color: $--border-color-lighter !default;
+$--card-border-radius: 4px !default;
+/// padding||Spacing|3
+$--card-padding: 20px !default;
+
+/* Slider
+--------------------------*/
+/// color||Color|0
+$--slider-main-background-color: $--color-primary !default;
+/// color||Color|0
+$--slider-runway-background-color: $--border-color-light !default;
+$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
+$--slider-stop-background-color: $--color-white !default;
+$--slider-disable-color: $--color-text-placeholder !default;
+$--slider-margin: 16px 0 !default;
+$--slider-border-radius: 3px !default;
+/// height|1|Other|4
+$--slider-height: 6px !default;
+/// height||Other|4
+$--slider-button-size: 16px !default;
+$--slider-button-wrapper-size: 36px !default;
+$--slider-button-wrapper-offset: -15px !default;
+
+/* Steps
+--------------------------*/
+$--steps-border-color: $--disabled-border-base !default;
+$--steps-border-radius: 4px !default;
+$--steps-padding: 20px !default;
+
+/* Menu
+--------------------------*/
+/// fontSize||Font|1
+$--menu-item-font-size: $--font-size-base !default;
+/// color||Color|0
+$--menu-item-font-color: $--color-text-primary !default;
+/// color||Color|0
+$--menu-background-color: $--color-white !default;
+$--menu-item-hover-fill: $--color-primary-light-9 !default;
+
+/* Rate
+--------------------------*/
+$--rate-height: 20px !default;
+/// fontSize||Font|1
+$--rate-font-size: $--font-size-base !default;
+/// height||Other|3
+$--rate-icon-size: 18px !default;
+/// margin||Spacing|2
+$--rate-icon-margin: 6px !default;
+$--rate-icon-color: $--color-text-placeholder !default;
+
+/* DatePicker
+--------------------------*/
+$--datepicker-font-color: $--color-text-regular !default;
+/// color|1|Color|0
+$--datepicker-off-font-color: $--color-text-placeholder !default;
+/// color||Color|0
+$--datepicker-header-font-color: $--color-text-regular !default;
+$--datepicker-icon-color: $--color-text-primary !default;
+$--datepicker-border-color: $--disabled-border-base !default;
+$--datepicker-inner-border-color: #e4e4e4 !default;
+/// color||Color|0
+$--datepicker-inrange-background-color: $--border-color-extra-light !default;
+/// color||Color|0
+$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default;
+/// color||Color|0
+$--datepicker-active-color: $--color-primary !default;
+/// color||Color|0
+$--datepicker-hover-font-color: $--color-primary !default;
+$--datepicker-cell-hover-color: #fff !default;
+
+/* Loading
+--------------------------*/
+/// height||Other|4
+$--loading-spinner-size: 42px !default;
+/// height||Other|4
+$--loading-fullscreen-spinner-size: 50px !default;
+
+/* Scrollbar
+--------------------------*/
+$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
+$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
+
+/* Carousel
+--------------------------*/
+/// fontSize||Font|1
+$--carousel-arrow-font-size: 12px !default;
+$--carousel-arrow-size: 36px !default;
+$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
+$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
+/// width||Other|4
+$--carousel-indicator-width: 30px !default;
+/// height||Other|4
+$--carousel-indicator-height: 2px !default;
+$--carousel-indicator-padding-horizontal: 4px !default;
+$--carousel-indicator-padding-vertical: 12px !default;
+$--carousel-indicator-out-color: $--border-color-hover !default;
+
+/* Collapse
+--------------------------*/
+/// color||Color|0
+$--collapse-border-color: $--border-color-lighter !default;
+/// height||Other|4
+$--collapse-header-height: 48px !default;
+/// color||Color|0
+$--collapse-header-background-color: $--color-white !default;
+/// color||Color|0
+$--collapse-header-font-color: $--color-text-primary !default;
+/// fontSize||Font|1
+$--collapse-header-font-size: 13px !default;
+/// color||Color|0
+$--collapse-content-background-color: $--color-white !default;
+/// fontSize||Font|1
+$--collapse-content-font-size: 13px !default;
+/// color||Color|0
+$--collapse-content-font-color: $--color-text-primary !default;
+
+/* Transfer
+--------------------------*/
+$--transfer-border-color: $--border-color-lighter !default;
+$--transfer-border-radius: $--border-radius-base !default;
+/// height||Other|4
+$--transfer-panel-width: 200px !default;
+/// height||Other|4
+$--transfer-panel-header-height: 40px !default;
+/// color||Color|0
+$--transfer-panel-header-background-color: $--background-color-base !default;
+/// height||Other|4
+$--transfer-panel-footer-height: 40px !default;
+/// height||Other|4
+$--transfer-panel-body-height: 246px !default;
+/// height||Other|4
+$--transfer-item-height: 30px !default;
+/// height||Other|4
+$--transfer-filter-height: 32px !default;
+
+/* Header
+  --------------------------*/
+$--header-padding: 0 20px !default;
+
+/* Footer
+--------------------------*/
+$--footer-padding: 0 20px !default;
+
+/* Main
+--------------------------*/
+$--main-padding: 20px !default;
+
+/* Timeline
+--------------------------*/
+$--timeline-node-size-normal: 12px !default;
+$--timeline-node-size-large: 14px !default;
+$--timeline-node-color: $--border-color-light !default;
+
+/* Backtop
+--------------------------*/
+/// color||Color|0
+$--backtop-background-color: $--color-white !default;
+/// color||Color|0
+$--backtop-font-color: $--color-primary !default;
+/// color||Color|0
+$--backtop-hover-background-color: $--border-color-extra-light !default;
+
+/* Link
+--------------------------*/
+/// fontSize||Font|1
+$--link-font-size: $--font-size-base !default;
+/// fontWeight||Font|1
+$--link-font-weight: $--font-weight-primary !default;
+/// color||Color|0
+$--link-default-font-color: $--color-text-regular !default;
+/// color||Color|0
+$--link-default-active-color: $--color-primary !default;
+/// color||Color|0
+$--link-disabled-font-color: $--color-text-placeholder !default;
+/// color||Color|0
+$--link-primary-font-color: $--color-primary !default;
+/// color||Color|0
+$--link-success-font-color: $--color-success !default;
+/// color||Color|0
+$--link-warning-font-color: $--color-warning !default;
+/// color||Color|0
+$--link-danger-font-color: $--color-danger !default;
+/// color||Color|0
+$--link-info-font-color: $--color-info !default;
+/* Calendar
+--------------------------*/
+/// border||Other|4
+$--calendar-border: $--table-border !default;
+/// color||Other|4
+$--calendar-selected-background-color: #F2F8FE !default;
+$--calendar-cell-width: 85px !default;
+
+/* Form
+-------------------------- */
+/// fontSize||Font|1
+$--form-label-font-size: $--font-size-base !default;
+
+/* Avatar
+--------------------------*/
+/// color||Color|0
+$--avatar-font-color: #fff !default;
+/// color||Color|0
+$--avatar-background-color: #C0C4CC !default;
+/// fontSize||Font Size|1
+$--avatar-text-font-size: 14px !default;
+/// fontSize||Font Size|1
+$--avatar-icon-font-size: 18px !default;
+/// borderRadius||Border|2
+$--avatar-border-radius: $--border-radius-base !default;
+/// size|1|Avatar Size|3
+$--avatar-large-size: 40px !default;
+/// size|1|Avatar Size|3
+$--avatar-medium-size: 36px !default;
+/// size|1|Avatar Size|3
+$--avatar-small-size: 28px !default;
+
+/* Break-point
+--------------------------*/
+$--sm: 768px !default;
+$--md: 992px !default;
+$--lg: 1200px !default;
+$--xl: 1920px !default;
+
+$--breakpoints: (
+  'xs' : (max-width: $--sm - 1),
+  'sm' : (min-width: $--sm),
+  'md' : (min-width: $--md),
+  'lg' : (min-width: $--lg),
+  'xl' : (min-width: $--xl)
+);
+
+$--breakpoints-spec: (
+  'xs-only' : (max-width: $--sm - 1),
+  'sm-and-up' : (min-width: $--sm),
+  'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})",
+  'sm-and-down': (max-width: $--md - 1),
+  'md-and-up' : (min-width: $--md),
+  'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})",
+  'md-and-down': (max-width: $--lg - 1),
+  'lg-and-up' : (min-width: $--lg),
+  'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})",
+  'lg-and-down': (max-width: $--xl - 1),
+  'xl-only' : (min-width: $--xl),
+);

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 4990 - 0
package-lock.json


+ 44 - 0
package.json

@@ -0,0 +1,44 @@
+{
+  "name": "test-vmc",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve -mode development",
+    "build:app": "vue-cli-service build -mode production",
+    "build:module": "vue-cli-service build --target lib src/module.js"
+  },
+  "dependencies": {
+    "cnpm": "^6.1.1",
+    "core-js": "^3.3.2",
+    "element-china-area-data": "^5.0.1",
+    "element-ui": "^2.13.2",
+    "vue": "^2.6.10",
+    "vue-module-loader": "^1.0.3",
+    "vue-router": "^3.1.3",
+    "vuex": "^3.0.1"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^4.0.0",
+    "@vue/cli-plugin-eslint": "^4.0.0",
+    "@vue/cli-plugin-router": "^4.0.0",
+    "@vue/cli-plugin-vuex": "^4.0.0",
+    "@vue/cli-service": "^4.0.0",
+    "@vue/eslint-config-prettier": "^5.0.0",
+    "axios": "^0.19.2",
+    "babel-eslint": "^10.0.3",
+    "element-theme-chalk": "^2.13.2",
+    "eslint": "^5.16.0",
+    "eslint-plugin-prettier": "^3.1.1",
+    "eslint-plugin-vue": "^5.0.0",
+    "node-sass": "^4.14.1",
+    "prettier": "^1.18.2",
+    "sass-loader": "^9.0.0",
+    "sass-resources-loader": "^2.0.3",
+    "stylus": "^0.54.7",
+    "stylus-loader": "^3.0.2",
+    "vue-axios": "^2.1.5",
+    "vue-template-compiler": "^2.6.10"
+  },
+  "description": "test",
+  "author": "ln"
+}

+ 5 - 0
postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+};

BIN
public/favicon.ico


BIN
public/favicon副.ico


+ 22 - 0
public/index.html

@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<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">
+	<!--引入UI组件库(1.1版本) -->
+	<title>慧牧科技——云服务平台</title>
+</head>
+
+<body>
+	<noscript>
+		<strong>We're sorry but admincraft-module doesn't work properly without JavaScript enabled. Please enable it to
+			continue.</strong>
+	</noscript>
+	<div id="app"></div>
+	<!-- built files will be auto injected -->
+</body>
+
+</html>

+ 387 - 0
public/libs/H264SPSParser.js

@@ -0,0 +1,387 @@
+//import Map from './Map.js';
+
+let BITWISE0x00000007 = 0x00000007;
+let BITWISE0x7 = 0x7;
+let BITWISE2 = 2;
+let BITWISE3 = 3;
+let BITWISE4 = 4;
+let BITWISE5 = 5;
+let BITWISE6 = 6;
+let BITWISE8 = 8;
+let BITWISE12 = 12;
+let BITWISE15 = 15;
+let BITWISE16 = 16;
+let BITWISE32 = 32;
+let BITWISE64 = 64;
+let BITWISE255 = 255;
+let BITWISE256 = 256;
+
+function H264SPSParser() {
+    let vBitCount = 0;
+    let spsMap = null;
+    let fps = null;
+
+
+    function constructor() {
+        spsMap = new Map();
+    }
+
+    constructor.prototype = {
+        parse (pSPSBytes) {
+            //console.log("=========================SPS START=========================");
+            vBitCount = 0;
+            spsMap.clear();
+
+            // forbidden_zero_bit, nal_ref_idc, nal_unit_type
+            spsMap.set("forbidden_zero_bit", readBits(pSPSBytes, 1));
+            spsMap.set("nal_ref_idc", readBits(pSPSBytes, BITWISE2));
+            spsMap.set("nal_unit_type", readBits(pSPSBytes, BITWISE5));
+
+            // profile_idc
+            spsMap.set("profile_idc", readBits(pSPSBytes, BITWISE8));
+            spsMap.set("profile_compatibility", readBits(pSPSBytes, BITWISE8));
+
+            // spsMap.set("constrained_set0_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("constrained_set1_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("constrained_set2_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("constrained_set3_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("constrained_set4_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("constrained_set5_flag", readBits(pSPSBytes, 1));
+            // spsMap.set("reserved_zero_2bits", readBits(pSPSBytes, 2));
+
+            // level_idc
+            spsMap.set("level_idc", readBits(pSPSBytes, BITWISE8));
+            spsMap.set("seq_parameter_set_id", ue(pSPSBytes, 0));
+
+            let profileIdc = spsMap.get("profile_idc");
+            let BITWISE100 = 100;
+            let BITWISE110 = 110;
+            let BITWISE122 = 122;
+            let BITWISE244 = 244;
+            let BITWISE44 = 44;
+            let BITWISE83 = 83;
+            let BITWISE86 = 86;
+            let BITWISE118 = 118;
+            let BITWISE128 = 128;
+            let BITWISE138 = 138;
+            let BITWISE139 = 139;
+            let BITWISE134 = 134;
+
+            if ((profileIdc === BITWISE100) || (profileIdc === BITWISE110) ||
+                (profileIdc === BITWISE122) || (profileIdc === BITWISE244) ||
+                (profileIdc === BITWISE44) || (profileIdc === BITWISE83) ||
+                (profileIdc === BITWISE86) || (profileIdc === BITWISE118) ||
+                (profileIdc === BITWISE128) || (profileIdc === BITWISE138) ||
+                (profileIdc === BITWISE139) || (profileIdc === BITWISE134)) {
+                spsMap.set("chroma_format_idc", ue(pSPSBytes, 0));
+                if (spsMap.get("chroma_format_idc") === BITWISE3) {
+                    spsMap.set("separate_colour_plane_flag", readBits(pSPSBytes, 1));
+                }
+
+                spsMap.set("bit_depth_luma_minus8", ue(pSPSBytes, 0));
+                spsMap.set("bit_depth_chroma_minus8", ue(pSPSBytes, 0));
+                spsMap.set("qpprime_y_zero_transform_bypass_flag", readBits(pSPSBytes, 1));
+                spsMap.set("seq_scaling_matrix_present_flag", readBits(pSPSBytes, 1));
+
+                if (spsMap.get("seq_scaling_matrix_present_flag")) {
+                    let num = spsMap.get("chroma_format_idc") !== BITWISE3 ? BITWISE8 : BITWISE12;
+                    let seqScalingListPresentFlag = new Array(num);
+                    for (let i = 0; i < num; i++) {
+                        seqScalingListPresentFlag[i] = readBits(pSPSBytes, 1);
+
+                        if (seqScalingListPresentFlag[i]) {
+                            let slNumber = i < BITWISE6 ? BITWISE16 : BITWISE64;
+                            let lastScale = 8;
+                            let nextScale = 8;
+                            let deltaScale = 0;
+
+                            for (let j = 0; j < slNumber; j++) {
+                                if (nextScale) {
+                                    deltaScale = se(pSPSBytes, 0);
+                                    nextScale = (lastScale + deltaScale + BITWISE256) % BITWISE256;
+                                }
+                                lastScale = (nextScale === 0) ? lastScale : nextScale;
+                            }
+                        }
+                    }
+                    spsMap.set("seq_scaling_list_present_flag", seqScalingListPresentFlag);
+                }
+            }
+            spsMap.set("log2_max_frame_num_minus4", ue(pSPSBytes, 0));
+            spsMap.set("pic_order_cnt_type", ue(pSPSBytes, 0));
+
+            if (spsMap.get("pic_order_cnt_type") === 0) {
+                spsMap.set("log2_max_pic_order_cnt_lsb_minus4", ue(pSPSBytes, 0));
+            } else if (spsMap.get("pic_order_cnt_type") === 1) {
+                spsMap.set("delta_pic_order_always_zero_flag", readBits(pSPSBytes, 1));
+                spsMap.set("offset_for_non_ref_pic", se(pSPSBytes, 0));
+                spsMap.set("offset_for_top_to_bottom_field", se(pSPSBytes, 0));
+                spsMap.set("num_ref_frames_in_pic_order_cnt_cycle", ue(pSPSBytes, 0));
+                for (let numR = 0; numR < spsMap.get("num_ref_frames_in_pic_order_cnt_cycle"); numR++) {
+                    spsMap.set("num_ref_frames_in_pic_order_cnt_cycle", se(pSPSBytes, 0));
+                }
+            }
+            spsMap.set("num_ref_frames", ue(pSPSBytes, 0));
+            spsMap.set("gaps_in_frame_num_value_allowed_flag", readBits(pSPSBytes, 1));
+            spsMap.set("pic_width_in_mbs_minus1", ue(pSPSBytes, 0));
+            spsMap.set("pic_height_in_map_units_minus1", ue(pSPSBytes, 0));
+            spsMap.set("frame_mbs_only_flag", readBits(pSPSBytes, 1));
+
+            if (spsMap.get("frame_mbs_only_flag") === 0) {
+                spsMap.set("mb_adaptive_frame_field_flag", readBits(pSPSBytes, 1));
+            }
+            spsMap.set("direct_8x8_interence_flag", readBits(pSPSBytes, 1));
+            spsMap.set("frame_cropping_flag", readBits(pSPSBytes, 1));
+            if (spsMap.get("frame_cropping_flag") === 1) {
+                spsMap.set("frame_cropping_rect_left_offset", ue(pSPSBytes, 0));
+                spsMap.set("frame_cropping_rect_right_offset", ue(pSPSBytes, 0));
+                spsMap.set("frame_cropping_rect_top_offset", ue(pSPSBytes, 0));
+                spsMap.set("frame_cropping_rect_bottom_offset", ue(pSPSBytes, 0));
+            }
+
+            //vui parameters
+            spsMap.set("vui_parameters_present_flag", readBits(pSPSBytes, 1));
+            if (spsMap.get("vui_parameters_present_flag")) {
+                vuiParameters(pSPSBytes);
+            }
+
+            //console.log("=========================SPS END=========================");
+
+
+            return true;
+        },
+        getSizeInfo () {
+            let SubWidthC = 0;
+            let SubHeightC = 0;
+
+            if (spsMap.get("chroma_format_idc") === 0) { //monochrome
+                SubWidthC = SubHeightC = 0;
+            } else if (spsMap.get("chroma_format_idc") === 1) { //4:2:0
+                SubWidthC = SubHeightC = BITWISE2;
+            } else if (spsMap.get("chroma_format_idc") === BITWISE2) { //4:2:2
+                SubWidthC = BITWISE2;
+                SubHeightC = 1;
+            } else if (spsMap.get("chroma_format_idc") === BITWISE3) { //4:4:4
+                if (spsMap.get("separate_colour_plane_flag") === 0) {
+                    SubWidthC = SubHeightC = 1;
+                } else if (spsMap.get("separate_colour_plane_flag") === 1) {
+                    SubWidthC = SubHeightC = 0;
+                }
+            }
+
+            let PicWidthInMbs = spsMap.get("pic_width_in_mbs_minus1") + 1;
+
+            let PicHeightInMapUnits = spsMap.get("pic_height_in_map_units_minus1") + 1;
+            let FrameHeightInMbs = (BITWISE2 - spsMap.get("frame_mbs_only_flag")) * PicHeightInMapUnits;
+
+            let cropLeft = 0;
+            let cropRight = 0;
+            let cropTop = 0;
+            let cropBottom = 0;
+
+            if (spsMap.get("frame_cropping_flag") === 1) {
+                cropLeft = spsMap.get("frame_cropping_rect_left_offset");
+                cropRight = spsMap.get("frame_cropping_rect_right_offset");
+                cropTop = spsMap.get("frame_cropping_rect_top_offset");
+                cropBottom = spsMap.get("frame_cropping_rect_bottom_offset");
+            }
+            let decodeSize = (PicWidthInMbs * BITWISE16) * (FrameHeightInMbs * BITWISE16);
+            let width = (PicWidthInMbs * BITWISE16) - (SubWidthC * (cropLeft + cropRight));
+            let height = (FrameHeightInMbs * BITWISE16) -
+                (SubHeightC * (BITWISE2 - spsMap.get("frame_mbs_only_flag")) * (cropTop + cropBottom));
+
+            let sizeInfo = {
+                'width': width,
+                'height': height,
+                'decodeSize': decodeSize,
+            };
+
+            return sizeInfo;
+        },
+        getSpsValue (key) {
+            return spsMap.get(key);
+        },
+        getCodecInfo () {
+            let profileIdc = spsMap.get("profile_idc").toString(BITWISE16);
+            let profileCompatibility = spsMap.get("profile_compatibility") < BITWISE15 ?
+                "0" + spsMap.get("profile_compatibility").toString(BITWISE16) :
+                spsMap.get("profile_compatibility").toString(BITWISE16);
+
+            let levelIdc = spsMap.get("level_idc").toString(BITWISE16);
+
+            //console.log("getCodecInfo = " + (profile_idc + profile_compatibility + level_idc));
+            return profileIdc + profileCompatibility + levelIdc;
+
+        },
+
+        getSpsMap() {
+            return spsMap;
+        },
+
+        getFPS() {
+            return fps;
+        }
+    }
+
+    return new constructor();
+
+    function getBit(base, offset) {
+        let offsetData = offset;
+        let vCurBytes = (vBitCount + offsetData) >> BITWISE3;
+        offsetData = (vBitCount + offset) & BITWISE0x00000007;
+        return (((base[(vCurBytes)])) >> (BITWISE0x7 - (offsetData & BITWISE0x7))) & 0x1;
+    }
+
+    function readBits(pBuf, vReadBits) {
+        let vOffset = 0;
+        let vTmp = 0,
+            vTmp2 = 0;
+
+        if (vReadBits === 1) {
+            vTmp = getBit(pBuf, vOffset);
+        } else {
+            for (let i = 0; i < vReadBits; i++) {
+                vTmp2 = getBit(pBuf, i);
+                vTmp = (vTmp << 1) + vTmp2;
+            }
+        }
+
+        vBitCount += vReadBits;
+        return vTmp;
+    }
+
+    function ue(base, offset) {
+        let zeros = 0,
+            vTmp = 0,
+            vReturn = 0;
+        let vIdx = offset;
+        do {
+            vTmp = getBit(base, vIdx++);
+            if (vTmp === 0) {
+                zeros++;
+            }
+        } while (0 === vTmp);
+
+        if (zeros === 0) {
+            vBitCount += 1;
+            return 0;
+        }
+
+        vReturn = 1 << zeros;
+
+        for (let i = zeros - 1; i >= 0; i--, vIdx++) {
+            vTmp = getBit(base, vIdx);
+            vReturn |= vTmp << i;
+        }
+
+        let addBitCount = (zeros * BITWISE2) + 1;
+        vBitCount += addBitCount;
+
+        return (vReturn - 1);
+    }
+
+    function se(base, offset) {
+        let vReturn = ue(base, offset);
+
+        if (vReturn & 0x1) {
+            return (vReturn + 1) / BITWISE2;
+        } else {
+            return -vReturn / BITWISE2;
+        }
+    }
+
+    function hrdParameters(pSPSBytes) {
+        spsMap.set("cpb_cnt_minus1", ue(pSPSBytes, 0));
+        spsMap.set("bit_rate_scale", readBits(pSPSBytes, BITWISE4));
+        spsMap.set("cpb_size_scale", readBits(pSPSBytes, BITWISE4));
+        let cpdCntMinus1 = spsMap.get("cpb_cnt_minus1");
+        let bitRateValueMinus1 = new Array(cpdCntMinus1);
+        let cpbSizeValueMinus1 = new Array(cpdCntMinus1);
+        let cbrFlag = new Array(cpdCntMinus1);
+        //Todo: 原本为i <= cpdCntMinus1,运行到此处时直接停住,原因不明,改为<后正常
+        for (let i = 0; i < cpdCntMinus1; i++) {
+            bitRateValueMinus1[i] = ue(pSPSBytes, 0);
+            cpbSizeValueMinus1[i] = ue(pSPSBytes, 0);
+            cbrFlag[i] = readBits(pSPSBytes, 1);
+        }
+        spsMap.set("bit_rate_value_minus1", bitRateValueMinus1);
+        spsMap.set("cpb_size_value_minus1", cpbSizeValueMinus1);
+        spsMap.set("cbr_flag", cbrFlag);
+
+        spsMap.set("initial_cpb_removal_delay_length_minus1", readBits(pSPSBytes, BITWISE4));
+        spsMap.set("cpb_removal_delay_length_minus1", readBits(pSPSBytes, BITWISE4));
+        spsMap.set("dpb_output_delay_length_minus1", readBits(pSPSBytes, BITWISE4));
+        spsMap.set("time_offset_length", readBits(pSPSBytes, BITWISE4));
+    }
+
+    function vuiParameters(pSPSBytes) {
+        spsMap.set("aspect_ratio_info_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("aspect_ratio_info_present_flag")) {
+            spsMap.set("aspect_ratio_idc", readBits(pSPSBytes, BITWISE8));
+            //Extended_SAR
+            if (spsMap.get("aspect_ratio_idc") === BITWISE255) {
+                spsMap.set("sar_width", readBits(pSPSBytes, BITWISE16));
+                spsMap.set("sar_height", readBits(pSPSBytes, BITWISE16));
+            }
+        }
+
+        spsMap.set("overscan_info_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("overscan_info_present_flag")) {
+            spsMap.set("overscan_appropriate_flag", readBits(pSPSBytes, 1));
+        }
+        spsMap.set("video_signal_type_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("video_signal_type_present_flag")) {
+            spsMap.set("video_format", readBits(pSPSBytes, BITWISE3));
+            spsMap.set("video_full_range_flag", readBits(pSPSBytes, 1));
+            spsMap.set("colour_description_present_flag", readBits(pSPSBytes, 1));
+            if (spsMap.get("colour_description_present_flag")) {
+                spsMap.set("colour_primaries", readBits(pSPSBytes, BITWISE8));
+                spsMap.set("transfer_characteristics", readBits(pSPSBytes, BITWISE8));
+                spsMap.set("matrix_coefficients", readBits(pSPSBytes, BITWISE8));
+            }
+        }
+        spsMap.set("chroma_loc_info_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("chroma_loc_info_present_flag")) {
+            spsMap.set("chroma_sample_loc_type_top_field", ue(pSPSBytes, 0));
+            spsMap.set("chroma_sample_loc_type_bottom_field", ue(pSPSBytes, 0));
+        }
+        spsMap.set("timing_info_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("timing_info_present_flag")) {
+            spsMap.set("num_units_in_tick", readBits(pSPSBytes, BITWISE32));
+            spsMap.set("time_scale", readBits(pSPSBytes, BITWISE32));
+            spsMap.set("fixed_frame_rate_flag", readBits(pSPSBytes, 1));
+
+            fps =  spsMap.get("time_scale") / spsMap.get("num_units_in_tick");
+            if(spsMap.get("fixed_frame_rate_flag")) {
+                fps = fps / 2;
+            }
+        }
+        spsMap.set("nal_hrd_parameters_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("nal_hrd_parameters_present_flag")) {
+            hrdParameters(pSPSBytes);
+        }
+        spsMap.set("vcl_hrd_parameters_present_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("vcl_hrd_parameters_present_flag")) {
+            hrdParameters(pSPSBytes);
+        }
+        if (spsMap.get("nal_hrd_parameters_present_flag") ||
+            spsMap.get("vcl_hrd_parameters_present_flag")) {
+            spsMap.set("low_delay_hrd_flag", readBits(pSPSBytes, 1));
+        }
+        spsMap.set("pic_struct_present_flag", readBits(pSPSBytes, 1));
+        spsMap.set("bitstream_restriction_flag", readBits(pSPSBytes, 1));
+        if (spsMap.get("bitstream_restriction_flag")) {
+            spsMap.set("motion_vectors_over_pic_boundaries_flag", readBits(pSPSBytes, 1));
+            spsMap.set("max_bytes_per_pic_denom", ue(pSPSBytes, 0));
+            spsMap.set("max_bits_per_mb_denom", ue(pSPSBytes, 0));
+            spsMap.set("log2_max_mv_length_horizontal", ue(pSPSBytes, 0));
+            spsMap.set("log2_max_mv_length_vertical", ue(pSPSBytes, 0));
+            spsMap.set("max_num_reorder_frames", ue(pSPSBytes, 0));
+            spsMap.set("max_dec_frame_buffering", ue(pSPSBytes, 0));
+        }
+    }
+}
+
+
+
+//export default H264SPSParser;

+ 667 - 0
public/libs/H264Session.js

@@ -0,0 +1,667 @@
+function H264Session() {
+    let rtpTimeStamp = 0;
+    let size1M = 1048576; //1024 * 1024
+    let inputBuffer = new Uint8Array(size1M);
+    let spsSegment = null;
+    let ppsSegment = null;
+
+    let SPSParser = null;
+
+    let width = 0;
+    let height = 0;
+    let inputLength = 0;
+
+    let initalSegmentFlag = true; //用于确定是否是initSegment
+    let initalMediaFrameFlag = true;
+
+    let frameRate = null; //根据SDP或者SPS设置
+    let preSample = null; //上一个Sample
+    let durationTimeCount = 0;
+    let frameCount = 0;
+    let inputSegBufferSub = null;
+
+    //MSE使用的数据以及相关配置,顺序codecInfo -> initSegmentData -> mediaSample -> frameData
+    //时间戳用于绘制人脸框
+    let decodedData = {
+        frameData: null, //视频数据
+        timeStamp: null, //时间戳
+        initSegmentData: null, //MP4配置,用于initsegment
+        mediaSample: null, //使用duration控制每一帧的播放时间
+        codecInfo: "", //MSE init时传入,用于创建mediasource
+    };
+    let FRAMETYPE = {
+        1: 'P',
+        5: 'I',
+        6: 'SEI',
+        7: 'I'
+    };
+    let frameType = '';
+    let decodeMode = 'video';
+    let outputSize = 0;
+    let curSize = 0;
+
+    const PREFIX = new Uint8Array(['0x00', '0x00', '0x00', '0x01']);
+
+    let firstIframe = false;
+
+    let SEIInfo = {
+        ivs: null,
+        timestamp: null,
+    };
+
+    let preWidth = null,
+        preHeight = null;
+    let resetTimeCount = 0;
+    let lastTimeStamp = 0;
+    //const RESETTIME = 162000000;
+    const RESETTIME = 4320000;
+    let SEIBuffer = null;
+    let lastSEITime = 0;
+
+    function constructor() {
+
+    }
+
+    constructor.prototype = {
+        init() {
+            SPSParser = new H264SPSParser();
+            this.resolutionChangedCallback = () => {
+            };
+        },
+
+        remuxRTPData(rtspInterleaved, rtpHeader, rtpPayload) {
+            //console.log(rtspInterleaved)
+            //console.log(rtpHeader)
+            let PaddingSize = 0;
+            let extensionHeaderLen = 0; //如果RtpHeader.X=1,则在RTP报头后跟有一个扩展报头
+            let PAYLOAD = null;
+//console.log(rtpHeader)
+//console.log(rtspInterleaved, rtpHeader, rtpPayload.subarray(0,5))
+            let RtpHeader = {
+                V: rtpHeader[0] >>> 6,
+                P: rtpHeader[0] & 0x20,
+                X: rtpHeader[0] & 0x10,
+                CC: rtpHeader[0] & 0x0F,
+                M: (rtpHeader[1] & 0x80) >> 7,
+                PT: rtpHeader[1] & 127,
+                SN: (rtpHeader[2] << 8) + rtpHeader[3],
+                timeStamp: (rtpHeader[4] << 24) + (rtpHeader[5] << 16) + (rtpHeader[6] << 8) + rtpHeader[7],
+                SSRC: (rtpHeader[8] << 24) + (rtpHeader[9] << 16) + (rtpHeader[10] << 8) + rtpHeader[11],
+            };
+            if (RtpHeader.P) { //填充
+                PaddingSize = rtpPayload[rtpPayload.length - 1];
+                // console.log("Padding - " + PaddingSize);
+            }
+
+            if (RtpHeader.X) { //扩展
+                extensionHeaderLen = (((rtpPayload[2] << 8) | rtpPayload[3]) * 4) + 4;
+                console.log('X: ' + rtpPayload[0])
+            }
+//console.log('extensionHeaderLen: '+ extensionHeaderLen)
+            PAYLOAD = rtpPayload.subarray(extensionHeaderLen, rtpPayload.length - PaddingSize);
+            rtpTimeStamp = RtpHeader.timeStamp;
+
+            //console.log(rtpTimeStamp, rtpHeader[4], rtpHeader[5], rtpHeader[6] , rtpHeader[7], PAYLOAD[0] & 0x1f)
+            /* 载荷结构(https://blog.csdn.net/davebobo/article/details/52994596)
+            +---------------+
+            |0|1|2|3|4|5|6|7|
+            +-+-+-+-+-+-+-+-+
+            |F|NRI|  Type   |
+            +---------------+
+            Type = 1-23 单个NAL单元包
+            Type = 24,25, 26, 27聚合包
+            Type = 28,29, 分片单元
+            */
+            //console.log(rtspInterleaved,rtpHeader, PAYLOAD[0]);
+            let nalType = (PAYLOAD[0] & 0x1f);
+            //console.log(PAYLOAD[0] + ' nalType: ' + nalType);
+
+//console.log('rtpPayload.length: ' + rtpPayload.length)
+//console.log(nalType, PAYLOAD[0])
+//console.log('nalType: ' + nalType, RtpHeader.M)
+            switch (nalType) {
+                case 6: //SEI
+                    //console.log(PAYLOAD, String.fromCharCode.apply(null, PAYLOAD))
+                    if (SEIParse(PAYLOAD) === null) {
+                        return;
+                    }
+                    inputBuffer = setBuffer(inputBuffer, PREFIX);
+                    inputBuffer = setBuffer(inputBuffer, PAYLOAD);
+                    break;
+                case 7: //SPS
+                    //console.log('SPS');
+                    SPSParser.parse(removeH264or5EmulationBytes(PAYLOAD));
+                    let sizeInfo = SPSParser.getSizeInfo();
+                    //console.log(SPSParser.getSpsMap())
+                    width = sizeInfo.width;
+                    height = sizeInfo.height;
+
+                    if (preWidth !== width || preHeight !== height) {
+                        console.log('resolution changed!');
+                        console.log('preWidth: ', preWidth, ' preHeight: ', preHeight, ' width: ', width, ' height: ', height);
+                        preWidth = width;
+                        preHeight = height;
+                    }
+                    inputBuffer = setBuffer(inputBuffer, PREFIX);
+                    inputBuffer = setBuffer(inputBuffer, PAYLOAD);
+                    spsSegment = PAYLOAD;
+                    //console.log('width: ',width, 'height: ', height)
+                    curSize = sizeInfo.decodeSize;
+                    firstIframe = true;
+//console.log(spsSegment)
+                    if (frameRate === null) {
+                        frameRate = SPSParser.getFPS();
+                    }
+                    break;
+                case 8: //PPS
+                    //console.log('PPS')
+                    inputBuffer = setBuffer(inputBuffer, PREFIX);
+                    inputBuffer = setBuffer(inputBuffer, PAYLOAD);
+                    ppsSegment = PAYLOAD;
+//console.log(ppsSegment)
+                    break;
+                case 28: //FU
+                    //console.log('FU');
+                    let startBit = ((PAYLOAD[1] & 0x80) === 0x80),
+                        endBit = ((PAYLOAD[1] & 0x40) === 0x40),
+                        fuType = PAYLOAD[1] & 0x1f,
+                        payloadStartIndex = 2;
+                    //console.log('startBit: ' + startBit + ' endBit: ' + endBit)
+                    //console.log('fuType: ' + fuType)
+                    if (startBit === true && endBit === false) {
+                        let newNalHeader = new Uint8Array(1);
+                        newNalHeader[0] = ((PAYLOAD[0] & 0xe0) | fuType);
+                        //console.log('newNalHeader: ', newNalHeader[0])
+                        //console.log('fuType: ' + fuType)
+                        //console.log((PAYLOAD[2] << 8) + PAYLOAD[3])
+//console.log(new Uint8Array(PAYLOAD.subarray(0, 100)));
+                        if (false) { //赛兰摄像头,SPS,PPS,I帧打在一个RTP包中
+                            PAYLOAD[1] = newNalHeader[0];
+                            SPSParser.parse(removeH264or5EmulationBytes(PAYLOAD.subarray(1, 27)));
+                            let sizeInfo = SPSParser.getSizeInfo();
+//console.log(sizeInfo, SPSParser.getSpsMap())
+                            //SPS
+                            width = sizeInfo.width;
+                            height = sizeInfo.height;
+                            inputBuffer = setBuffer(inputBuffer, PREFIX);
+                            inputBuffer = setBuffer(inputBuffer, PAYLOAD.subarray(1, 27));
+                            spsSegment = PAYLOAD.subarray(1, 27);
+                            //console.log('width: ',width, 'height: ', height)
+                            curSize = sizeInfo.decodeSize;
+                            firstIframe = true;
+
+                            //PPS
+                            inputBuffer = setBuffer(inputBuffer, PREFIX);
+                            inputBuffer = setBuffer(inputBuffer, PAYLOAD.subarray(30, 34));
+                            ppsSegment = PAYLOAD.subarray(30, 34);
+
+                            //I
+                            inputBuffer = setBuffer(inputBuffer, PREFIX);
+                            inputBuffer = setBuffer(inputBuffer, PAYLOAD.subarray(38, PAYLOAD.length));
+
+                        } else {
+                            //console.log(newNalHeader[0] & 0x1f)
+                            inputBuffer = setBuffer(inputBuffer, PREFIX);
+                            inputBuffer = setBuffer(inputBuffer, newNalHeader);
+                            inputBuffer = setBuffer(inputBuffer, PAYLOAD.subarray(payloadStartIndex, PAYLOAD.length));
+                        }
+
+                    } else {
+                        //console.log(startBit, endBit, 'endBit')
+                        inputBuffer = setBuffer(inputBuffer,
+                            PAYLOAD.subarray(payloadStartIndex, PAYLOAD.length));
+                    }
+//console.log(startBit,endBit)
+                    // if(endBit === true) {
+                    //     end = true;
+                    // }
+                    break;
+                case 1:
+                    inputBuffer = setBuffer(inputBuffer, PREFIX);
+                    inputBuffer = setBuffer(inputBuffer, PAYLOAD);
+                    break;
+                default:
+                    //console.log('nalType: ' + nalType);
+                    //console.log(PAYLOAD)
+                    break;
+            }
+//console.log('M: ' + RtpHeader.M + ' ' + (rtpHeader[1] & 0x80))
+            //check marker bit
+            if (RtpHeader.M) {
+                if (!firstIframe) {
+                    inputLength = 0;
+                    return;
+                }
+                let inputBufferSub = inputBuffer.subarray(0, inputLength);
+                frameType = FRAMETYPE[inputBufferSub[4] & 0x1f];
+
+                //只根据视频帧计算resetTimeCount
+                if (frameType !== 'SEI') {
+                    // rtp时间戳周期为RESETTIME,如果单向递增,设为0
+                    if (lastTimeStamp - rtpTimeStamp > (RESETTIME / 2)) { //判断lastTimeStamp远大于rtpTimeStamp,防止后一帧比前一帧先到的情况
+                        //console.log(lastTimeStamp - rtpTimeStamp)
+                        console.warn('时间戳重置', lastTimeStamp, rtpTimeStamp, frameType, new Date())
+                        resetTimeCount++;
+                    }
+                    rtpTimeStamp = rtpTimeStamp + RESETTIME * resetTimeCount;
+                } else {
+                    //同一帧的SEI比视频发送慢时
+                    if (rtpTimeStamp - lastTimeStamp > (RESETTIME / 2)) {
+                        console.warn('SEI翻转', rtpTimeStamp, lastTimeStamp);
+                        rtpTimeStamp = rtpTimeStamp + RESETTIME * (resetTimeCount - 1);
+                    } else {
+                        rtpTimeStamp = rtpTimeStamp + RESETTIME * resetTimeCount;
+                    }
+                    //同一帧的SEI比视频发送快时
+                    // if(rtpTimeStamp > lastTimeStamp) {
+                    //     rtpTimeStamp = rtpTimeStamp + RESETTIME * resetTimeCount;
+                    // } else {
+                    //     rtpTimeStamp = rtpTimeStamp + RESETTIME * (resetTimeCount + 1);
+                    // }
+                }
+//console.log('frameType: ', frameType, 'rtpTimeStamp: ', rtpTimeStamp)
+                if (frameType === 'SEI') {
+                    //SEI被分片(nal === 28)时,分片包发送完后marker为1,不会和视频帧一起
+                    SEIBuffer = inputBuffer.subarray(4, inputLength);
+                    //console.log(SEIBuffer)
+                    inputBufferSub = new Uint8Array();
+                }
+                if (SEIBuffer) {
+                    let SEI = SEIParse(SEIBuffer);
+                    if (SEI) {
+                        SEIInfo.ivs = SEI;
+                        SEIInfo.timestamp = rtpTimeStamp;
+                        decodedData.SEIInfo = SEIInfo;
+                        if ((rtpTimeStamp - lastSEITime) !== (90000 / frameRate)) {
+                            //console.log('SEI 时间差:', (rtpTimeStamp - lastTime), rtpTimeStamp, lastTime)
+                        }
+                        lastSEITime = rtpTimeStamp;
+                        SEIInfo = {
+                            ivs: null,
+                            timestamp: 0,
+                        };
+                    }
+                    SEIBuffer = null;
+                }
+
+                if (!initalSegmentFlag) {
+                    decodedData.initSegmentData = null;
+                    decodedData.codecInfo = null;
+                } else {
+                    initalSegmentFlag = false;
+                    const info = {
+                        id: 1,
+                        width: width,
+                        height: height,
+                        type: "video",
+                        profileIdc: SPSParser.getSpsValue("profile_idc"),
+                        profileCompatibility: 0,
+                        levelIdc: SPSParser.getSpsValue("level_idc"),
+                        sps: [spsSegment],
+                        pps: [ppsSegment],
+                        timescale: 1e3,
+                        fps: frameRate
+                    };
+                    decodedData.initSegmentData = info;
+                    decodedData.codecInfo = SPSParser.getCodecInfo();
+                    //console.log(info.pps)
+                }
+
+                if (frameType === 'I') {
+//console.log('ppsSegment: ', ppsSegment)
+                    let h264parameterLength = spsSegment.length + ppsSegment.length + 8;
+                    inputSegBufferSub = inputBufferSub.subarray(h264parameterLength, inputBufferSub.length);
+                } else {
+                    inputSegBufferSub = inputBufferSub.subarray(0, inputBufferSub.length);
+                }
+                if (inputSegBufferSub.length) {
+                    let segSize = inputSegBufferSub.length - 4;
+                    //mp4 box头
+                    inputSegBufferSub[0] = (segSize & 0xFF000000) >>> 24;
+                    inputSegBufferSub[1] = (segSize & 0xFF0000) >>> 16;
+                    inputSegBufferSub[2] = (segSize & 0xFF00) >>> 8;
+                    inputSegBufferSub[3] = (segSize & 0xFF);
+
+                    decodedData.frameData = new Uint8Array(inputSegBufferSub);
+
+                    let sample = {
+                        duration: Math.round((1 / frameRate) * 1000),
+                        size: inputSegBufferSub.length,
+                        frame_time_stamp: null,
+                        frameDuration: null,
+                    };
+                    sample.frame_time_stamp = rtpTimeStamp; //Todo:暂时为null,通过帧率控制duration
+                    if (initalMediaFrameFlag) {
+                        sample.frameDuration = 0;
+                        initalMediaFrameFlag = false;
+                    } else {
+                        if (frameRate) {
+                            frameCount++;
+                            if (!(frameCount % frameRate)) { //每秒最后一帧时
+                                sample.frameDuration = 1000 - durationTimeCount;
+                                frameCount = 0;
+                                durationTimeCount = 0;
+                            } else {
+                                sample.frameDuration = Math.round(1000 / frameRate);
+                                durationTimeCount += Math.round(1000 / frameRate);
+                            }
+                        } else {
+                            sample.frameDuration = (sample.frame_time_stamp - preSample.frame_time_stamp) / 90; // 时钟频率90000,timescale=1000
+                        }
+                        //console.log(sample.frameDuration)
+                    }
+                    preSample = sample;
+                    decodedData.mediaSample = sample;
+                    decodedData.timeStamp = rtpTimeStamp;
+                }
+                this.handleDecodedData(decodedData);
+                inputLength = 0;
+                decodedData.SEIInfo = null;
+                inputSegBufferSub = null;
+                if (frameType !== 'SEI') {
+                    lastTimeStamp = RtpHeader.timeStamp;
+                }
+                frameType = '';
+            }
+            //console.log('xxxxxxxxxxxxxxxxxxxxxxxxx')
+        },
+
+        set rtpSessionCallback(func) {
+            this.handleDecodedData = func;
+        },
+
+        setFrameRate(fps) {
+            frameRate = fps;
+            //console.log('frameRate: ', frameRate)
+        },
+
+        setResolutionChangedCallback(callback) {
+            this.resolutionChangedCallback = callback;
+        }
+    }
+
+    return new constructor();
+
+    function setBuffer(buffer1, buffer2) {
+        let bufferTemp = buffer1;
+        if ((inputLength + buffer2.length) > buffer1.length) {
+            bufferTemp = new Uint8Array(buffer1.length + size1M);
+        }
+
+        bufferTemp.set(buffer2, inputLength);
+        inputLength += buffer2.length;
+        return bufferTemp;
+    }
+}
+
+
+/**
+ * 去除SPS中的Emulation字节
+ * @param data SPS源数据
+ * @returns {Array} 去除后Emulation字节后的SPS
+ */
+function removeH264or5EmulationBytes(data) {
+    let toSize = 0;
+    let i = 0;
+    let to = [];
+    let dataLength = data.length;
+    while (i < dataLength) {
+        if (i + 2 < dataLength && data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 3) {
+            to[toSize] = to[toSize + 1] = 0;
+            toSize += 2;
+            i += 3;
+        } else {
+            to[toSize] = data[i];
+            toSize += 1;
+            i += 1;
+        }
+    }
+    return to;
+}
+
+/**
+ * 解析SEI信息
+ * @param data
+ * @return {Array}
+ */
+function SEIParse(data) {
+    //console.log(data)
+    if ((data[0] & 0x1f) !== 6) {
+        //非SEI
+        return null;
+    }
+
+    if (data[1] !== 0x55 || data[2] !== 0x4C || data[3] !== 0x53 || data[4] !== 0x40) {
+        //ULS@开头
+        console.warn('unknown SEI type',data);
+        return null;
+    }
+
+    let dataLength = data.length;
+    let type = (data[5] << 8) + data[6];
+    let checkSum = (data[7] << 8) + data[8];
+    // if(dataLength !== (checkSum + 1 + 4 + 4)) {
+    //     console.log('SEI check fail!');
+    //     return null;
+    // }
+    let result;
+    data = data.subarray(9);
+    switch (type) {
+        case 0:
+            result = parseFace(data);
+            break;
+        case 1:
+            //console.log(parseBody(data))
+            result = parseBody(data);
+            break;
+        case 2:
+            result = parseRegion(data);
+            break;
+        case 3:
+            result = parseBodyEx(data);
+            break;
+        case 4:
+            result = parseOverSpeed(data);
+            break;
+        default:
+            result = null;
+            break;
+    }
+    return result;
+}
+
+function parseFace(data) {
+    //console.log(data)
+    let dataLength = data.length;
+    let contents = [];
+    while (dataLength > 0) {
+        //console.log('dataLength: ', dataLength)
+        let x0 = ((data[4] & 0x7f) << 8) + data[5],
+            y0 = ((data[6] & 0x7f) << 8) + data[7],
+            width = ((data[8] & 0x7f) << 8) + data[9] - x0,
+            height = ((data[10] & 0x7f) << 8) + data[11] - y0;
+        let content = {
+            type: 'rect',
+            id: (data[2] << 8) + data[3],
+            rect: [x0, y0, width, height],
+            state: data[1] & 0x01,
+            quality: (data[1] & 0x02) >> 1,
+        };
+        Array.prototype.push.apply(contents, [content]);
+        data = data.subarray(12);
+        dataLength = data.length;
+    }
+
+    return contents;
+}
+
+function parseBody(data) {
+    let dataLength = data.length;
+    let contents = [];
+    while (dataLength > 0) {
+        //console.log('dataLength: ', dataLength)
+        let x0 = ((data[4] & 0x7f) << 8) + data[5],
+            y0 = ((data[6] & 0x7f) << 8) + data[7],
+            width = ((data[8] & 0x7f) << 8) + data[9] - x0,
+            height = ((data[10] & 0x7f) << 8) + data[11] - y0,
+            boxConfidence = ((data[12] & 0x7f) << 8) + data[13];
+        let points = [];
+
+        for (let i = 0; i < 17; i++) {
+            let point = {
+                x: ((data[16 + i * 8] & 0x7f) << 8) + data[17 + i * 8],
+                y: ((data[18 + i * 8] & 0x7f) << 8) + data[19 + i * 8],
+                confidence: ((data[20 + i * 8] & 0x7f) << 8) + data[21 + i * 8],
+                // x: Math.random() * 8191,
+                // y: Math.random() * 8191,
+                // confidence: 1,
+            };
+            points.push(point);
+        }
+        let content = {
+            type: 'coco-pose',
+            id: (data[2] << 8) + data[3],
+            handsUp: data[1] & 0x04,
+            boundingBox: [x0, y0, width, height],
+            boxConfidence,
+            points: parseBodyToTree(points),
+            state: data[1] & 0x01,
+        };
+        Array.prototype.push.apply(contents, [content]);
+        data = data.subarray(152);
+        dataLength = data.length;
+
+    }
+    return contents;
+}
+
+function parseRegion(data) {
+    let dataLength = data.length;
+    let contents = [];
+    while (dataLength > 0) {
+        let pointNum = (data[0] << 8) + data[1],
+            state = data[3] & 0x03,
+            area = [];
+
+        for (let i = 0; i < pointNum; i++) {
+            let point = {
+                x: ((data[i * 4 + 4] & 0x7f) << 8) + data[i * 4 + 5],
+                y: ((data[i * 4 + 6] & 0x7f) << 8) + data[i * 4 + 7],
+            };
+            area.push(point);
+        }
+        let content = {
+            type: 'region-detect',
+            state,
+            area
+        };
+        Array.prototype.push.apply(contents, [content]);
+        data = data.subarray(pointNum * 4 + 4);
+        dataLength = data.length;
+    }
+    return contents;
+}
+
+function parseBodyEx(data) {
+    let dataLength = data.length;
+    let contents = [];
+    while (dataLength > 0) {
+        //console.log('dataLength: ', dataLength)
+        let x0 = ((data[4] & 0x7f) << 8) + data[5],
+            y0 = ((data[6] & 0x7f) << 8) + data[7],
+            width = ((data[8] & 0x7f) << 8) + data[9] - x0,
+            height = ((data[10] & 0x7f) << 8) + data[11] - y0,
+            boxConfidence = ((data[12] & 0x7f) << 8) + data[13];
+        let points = [];
+
+        for (let i = 0; i < 17; i++) {
+            let point = {
+                x: ((data[16 + i * 8] & 0x7f) << 8) + data[17 + i * 8],
+                y: ((data[18 + i * 8] & 0x7f) << 8) + data[19 + i * 8],
+                confidence: ((data[20 + i * 8] & 0x7f) << 8) + data[21 + i * 8],
+            };
+            points.push(point);
+        }
+        let guides = [
+            {
+                x: ((data[16 + 17 * 8] & 0x7f) << 8) + data[17 + 17 * 8],
+                y: ((data[18 + 17 * 8] & 0x7f) << 8) + data[19 + 17 * 8],
+            },
+            {
+                x: ((data[20 + 17 * 8] & 0x7f) << 8) + data[21 + 17 * 8],
+                y: ((data[22 + 17 * 8] & 0x7f) << 8) + data[23 + 17 * 8],
+            }
+        ];
+        let content = {
+            type: 'coco-poseex',
+            id: (data[2] << 8) + data[3],
+            Loiter: data[1] & 0x03,
+            Standing: (data[1] & 0x04) >> 2,
+            Alone: (data[1] & 0x08) >> 3,
+            boundingBox: [x0, y0, width, height],
+            boxConfidence,
+            points: parseBodyToTree(points),
+            guides,
+            state: 1
+        };
+        Array.prototype.push.apply(contents, [content]);
+        data = data.subarray(160);
+        dataLength = data.length;
+
+    }
+    return contents;
+}
+
+function parseOverSpeed(data) {
+    let dataLength = data.length;
+    let contents = [];
+    while (dataLength > 0) {
+        //console.log('dataLength: ', dataLength)
+        let speed = ((data[4] & 0x7f) << 8) + data[5],
+            overSpeed = data[1] & 0x01;
+        let content = {
+            type: 'over-speed',
+            id: (data[2] << 8) + data[3],
+            speed,
+            overSpeed,
+            state: 1,
+        };
+        Array.prototype.push.apply(contents, [content]);
+        data = data.subarray(8);
+        dataLength = data.length;
+    }
+    return contents;
+}
+
+/**
+ * 将智能帧中的人体姿态点转化为树结构(双亲表示法)
+ * @param points
+ */
+function parseBodyToTree(points) {
+    let newPoints = [];
+    newPoints[0] = {...points[0], parent: -1, pointColor: '#FF0002', lineColor: '#FF0002'};
+    newPoints[1] = {...points[1], parent: 0, pointColor: '#FF0002', lineColor: '#FF0002'};
+    newPoints[2] = {...points[2], parent: 0, pointColor: '#FF0002', lineColor: '#FF0002'};
+    newPoints[3] = {...points[5], parent: 17, pointColor: '#D9E34F', lineColor: '#FF0002'};
+    newPoints[4] = {...points[6], parent: 17, pointColor: '#D9E34F', lineColor: '#FF0002'};
+    newPoints[5] = {...points[3], parent: 1, pointColor: '#00FF00', lineColor: '#FF0002'};
+    newPoints[6] = {...points[4], parent: 2, pointColor: '#FFAC00', lineColor: '#FF0002'};
+    newPoints[7] = {...points[7], parent: 3, pointColor: '#00FF45', lineColor: '#'};
+    newPoints[8] = {...points[11], parent: 17, pointColor: '#EEC446', lineColor: '#'};
+    newPoints[9] = {...points[8], parent: 4, pointColor: '#43D3AF', lineColor: '#'};
+    newPoints[10] = {...points[12], parent: 17, pointColor: '#7A93E8', lineColor: '#'};
+    newPoints[11] = {...points[9], parent: 7, pointColor: '#EFB842', lineColor: '#'};
+    newPoints[12] = {...points[13], parent: 8, pointColor: '#E56C00', lineColor: '#'};
+    newPoints[13] = {...points[10], parent: 9, pointColor: '#47CD43', lineColor: '#0096FF'};
+    newPoints[14] = {...points[14], parent: 10, pointColor: '#3868D2', lineColor: '#00FF51'};
+    newPoints[15] = {...points[15], parent: 12, pointColor: '#DF4D01', lineColor: '#5100FF'};
+    newPoints[16] = {...points[16], parent: 14, pointColor: '#1E48D4', lineColor: '#00FFA0'};
+    newPoints[17] = {
+        x: (points[5].x + points[6].x) / 2,
+        y: (points[5].y + points[6].y) / 2,
+        parent: -1,
+        pointColor: '#D9E34F',
+        lineColor: '#00FFA0'
+    };
+    return newPoints;
+}

+ 108 - 0
public/libs/videoWorker.js

@@ -0,0 +1,108 @@
+importScripts(
+    './H264SPSParser.js',
+    './H264Session.js',
+);
+
+
+addEventListener('message', receiveMessage);
+
+let sdpInfo = null;
+let rtpSession = null;
+let videoCHID = -1;
+let videoRtpSessionsArray = [];
+
+function  receiveMessage(event) {
+    //console.log(event.data)
+    var message = event.data;
+
+    switch (message.type) {
+        case 'sdpInfo':
+            sdpInfo = message.data;
+
+            initRTPSession(sdpInfo.sdpInfo);
+        case 'rtpDataArray':
+            //console.log(message.data.length)
+            for (let num = 0; num < message.data.length; num++) {
+                receiveMessage({
+                    'type': 'rtpData',
+                    'data': message.data[num],
+                });
+            }
+            break;
+        case 'rtpData':
+            videoCHID = message.data.rtspInterleave[1];
+            if (typeof videoRtpSessionsArray[videoCHID] !== "undefined") {
+                videoRtpSessionsArray[videoCHID].remuxRTPData(message.data.rtspInterleave,
+                    message.data.header, message.data.payload);
+            }else { // RTCP包
+                //console.log('Interleave:  ' + videoCHID);
+                //console.log(message.data.rtspInterleave, message.data.header);
+                //return;
+            }
+            break;
+    }
+}
+
+function initRTPSession(sdpInfo) {
+    for(let [i, len] = [0, sdpInfo.length]; i < len; i++) {
+        if(sdpInfo[i].codecName === 'H264') {
+            //console.log(sdpInfo)
+            rtpSession = new H264Session();
+            rtpSession.init();
+            rtpSession.rtpSessionCallback = RtpReturnCallback;
+            if(sdpInfo[i].Framerate) {
+                rtpSession.setFrameRate(sdpInfo[i].Framerate);
+            }
+        }
+
+        if(rtpSession !== null) {
+            videoCHID = sdpInfo[i].RtpInterlevedID;
+            videoRtpSessionsArray[videoCHID] = rtpSession;
+        }
+    }
+}
+
+function RtpReturnCallback(dataInfo) {
+
+    if(dataInfo === null || dataInfo === undefined) {
+        //console.log('数据为空')
+        return;
+    }
+    let mediaData = dataInfo;
+    if(mediaData.decodeMode === 'canvas') {
+        sendMessage('YUVData', mediaData.frameData);
+        return;
+    }
+    //console.log( mediaData.SEIInfo)
+    if(mediaData.initSegmentData !== null && mediaData.initSegmentData !== undefined) {
+        //sendMessage('codecInfo', mediaData.codecInfo)
+        //sendMessage('initSegment', mediaData.initSegmentData);
+        sendMessage('videoInit', mediaData);
+        sendMessage('firstvideoTimeStamp', mediaData.timeStamp);
+
+    }
+    if(mediaData.SEIInfo !== null && mediaData.SEIInfo !== undefined) {//SEI信息
+        sendMessage('SEI', mediaData.SEIInfo);
+    }
+
+    if (mediaData.frameData && mediaData.frameData.length > 0) {
+        sendMessage('videoTimeStamp', mediaData.timeStamp);
+        sendMessage('mediaSample', mediaData.mediaSample);
+        //console.log(mediaData.frameData.length)
+        sendMessage('videoRender', mediaData.frameData);
+    }
+    mediaData = null;
+}
+
+function sendMessage(type, data) {
+    let event = {
+        type: type,
+        data: data
+    }
+    if(type === 'videoRender') {
+        postMessage(event, [data.buffer]);
+    }else {
+        postMessage(event);
+    }
+    event = null;
+}

+ 24 - 0
src/App.vue

@@ -0,0 +1,24 @@
+<template>
+    <div id="app">
+        <router-view />
+    </div>
+</template>
+
+<script>
+export default {
+    created() {}
+};
+</script>
+
+<style lang="scss">
+#app {
+    height: 100%;
+    margin: 0;
+}
+body,
+html {
+    height: 100%;
+    width: 100%;
+    margin: 0 0 0 0;
+}
+</style>

+ 11 - 0
src/api/login.js

@@ -0,0 +1,11 @@
+import { ajax } from "../sdk/ajax";
+
+
+/* 登录 */
+export const reqLogin = (data) => ajax("post", "/core/auth/login", data)
+
+/* 选择组织 */
+export const reqOrgChoose = () => ajax("get", "/core/employ-relation/under-list")
+
+
+export const reqOrganizationId = (data) => ajax("POST", "/core/auth/choose-org",data)

+ 5 - 0
src/assets/css/reset.scss

@@ -0,0 +1,5 @@
+/* 公用scss */
+div,h1,h2,h3,h4,h5,h3,body,html,ul,li,p{margin: 0;padding: 0;}
+a{text-decoration: none;}
+li{list-style:none;} 
+/*css初始化完成*/

BIN
src/assets/deliveryRoom_1.png


BIN
src/assets/deliveryRoom_2.png


BIN
src/assets/deliveryRoom_3.png


BIN
src/assets/deliveryRoom_4.png


BIN
src/assets/login_bg.jpg


BIN
src/assets/logo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
src/assets/logo2.png


+ 22 - 0
src/main.js

@@ -0,0 +1,22 @@
+import Vue from 'vue'
+import ElementUI from 'element-ui';
+import '../theme/index.css'
+// import 'element-ui/lib/theme-chalk/index.css';
+import App from './App.vue'
+import router from './router'
+import store from './store'
+import vueModuleLoader from 'vue-module-loader'
+import localModule from './module'
+import './assets/css/reset.scss'
+
+Vue.use(vueModuleLoader, { store }).use(ElementUI);
+
+
+const app = new Vue({
+	router,
+	store,
+	render: h => h(App)
+})
+
+app.$moduleLoader(localModule)
+app.$mount('#app')

+ 11 - 0
src/module.js

@@ -0,0 +1,11 @@
+import routes from './router/routes'
+import storeModule from './store/store-module'
+
+export default function(Vue) {
+  Vue.config.productionTip = false
+  this.$router.addRoutes(routes)
+  this.$store.registerModule('main', storeModule)
+  this.$eventBus.on('visitedAbout', () => {
+    alert('用户访问了about页面99。')
+  })
+}

+ 43 - 0
src/router/index.js

@@ -0,0 +1,43 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+// import store from '../store'
+
+import App from '../App.vue'
+import Login from '../views/Login/Login.vue'
+import Home from '../views/Home/Home.vue'
+
+
+Vue.use(VueRouter)
+
+const routes = [
+	{
+		path: '/',
+		component: App,
+		children: [
+			{
+				path: '',
+				redirect: '/login'
+			},
+		]
+	},
+	{
+		path: '/login',
+		name: 'login',
+		component: Login
+	},
+	{
+		path: '/home',
+		component: Home
+	},
+	{
+		path: '*',
+		name: '*',
+		component: Login
+	},
+]
+
+const router = new VueRouter({
+	routes
+})
+
+export default router

+ 295 - 0
src/router/routes.js

@@ -0,0 +1,295 @@
+import Home from '../views/Home/Home.vue'
+/* 首页  */
+import Index from '@/views/index/Index.vue'
+/* 档案信息 */
+import enterpriseInfo from '@/views/fileInfo/enterpriseInfo.vue'
+import pastureInfo from '@/views/fileInfo/pastureInfo.vue'
+import areaInfo from '@/views/fileInfo/areaInfo.vue'
+import workerInfo from '@/views/fileInfo/workerInfo.vue'
+
+/* 繁殖管理 */
+import seedSheepFile from '@/views/breed/seedSheepFile.vue'
+import collectSeedLog from '@/views/breed/collectSeedLog.vue'
+import matingSuccLog from '@/views/breed/matingSuccLog.vue'
+import matingLog from '@/views/breed/matingLog.vue'
+import pregnancyTestLog from '@/views/breed/pregnancyTestLog.vue'
+import parturitionLog from '@/views/breed/parturitionLog.vue'
+import weaningLog from '@/views/breed/weaningLog.vue'
+import offFieldLog from '@/views/breed/offFieldLog.vue'
+import shiftFieldLog from '@/views/breed/shiftFieldLog.vue'
+
+/* 防疫管理 */
+import immuneProce from '@/views/antiepidemic/immuneProce.vue'
+import immunePlan from '@/views/antiepidemic/immunePlan.vue'
+import immuneLog from '@/views/antiepidemic/immuneLog.vue'
+import illnessLog from '@/views/antiepidemic/illnessLog.vue'
+
+/* 生产管理 */
+import batch from '@/views/production/batch.vue'
+import productionWarn from '@/views/production/productionWarn.vue'
+import shiftField from '@/views/production/shiftField.vue'
+import dieWeedOut from '@/views/production/dieWeedOut.vue'
+import earTag from '@/views/production/earTag.vue'
+import carefulFeed from '@/views/production/carefulFeed.vue'
+import examiningReport from '@/views/production/examiningReport.vue'
+
+/* 无害化管理 */
+import harmlessConfirm from '@/views/harmless/harmlessConfirm.vue'
+import intelligentHint from '@/views/harmless/intelligentHint.vue'
+
+/* 物料管理 */
+import basicsInfo from '@/views/material/basicsInfo.vue'
+import materialInStore from '@/views/material/materialInStore.vue'
+import materialOutStore from '@/views/material/materialOutStore.vue'
+import storeList from '@/views/material/storeList.vue'
+
+/* 育种管理 */
+import gradeAssess from '@/views/cultivateSeed/gradeAssess.vue'
+import virtualMating from '@/views/cultivateSeed/sub/virtualMating.vue'
+
+/* 设备管理 */
+import environmentMonitoring from '@/views/device/environmentMonitoring.vue'
+import video from '@/views/device/video.vue'
+import deviceFault from '@/views/device/deviceFault.vue'
+
+
+
+
+/* 模板 */
+import Aa from '../views/template/Aa.vue'
+import Ab from '../views/template/Ab.vue'
+import Ac from '../views/template/Ac.vue'
+import Ad from '../views/template/Ad.vue'
+import Ae from '../views/template/Ae.vue'
+import Af from '../views/template/Af.vue'
+
+
+export default [
+	{
+		path: '/home',
+		component: Home,
+		children: [
+			{
+				path: 'Index',
+				name: 'Index',
+				component: Index
+			},
+			/* 档案信息 */
+			{
+				path: 'enterpriseInfo',
+				name: 'enterpriseInfo',
+				component: enterpriseInfo
+			},
+			{
+				path: 'pastureInfo',
+				name: 'pastureInfo',
+				component: pastureInfo
+			},
+			{
+				path: 'areaInfo',
+				name: 'areaInfo',
+				component: areaInfo
+			},
+			{
+				path: 'workerInfo',
+				name: 'workerInfo',
+				component: workerInfo
+			},
+			/* 繁殖管理 */
+			{
+				path: 'seedSheepFile',
+				name: 'seedSheepFile',
+				component: seedSheepFile
+			},
+			{
+				path: 'collectSeedLog',
+				name: 'collectSeedLog',
+				component: collectSeedLog
+			},
+			{
+				path: 'matingSuccLog',
+				name: 'matingSuccLog',
+				component: matingSuccLog
+			},
+			{
+				path: 'matingLog',
+				name: 'matingLog',
+				component: matingLog
+			},
+			{
+				path: 'pregnancyTestLog',
+				name: 'pregnancyTestLog',
+				component: pregnancyTestLog
+			},
+			{
+				path: 'parturitionLog',
+				name: 'parturitionLog',
+				component: parturitionLog
+			},
+			{
+				path: 'weaningLog',
+				name: 'weaningLog',
+				component: weaningLog
+			},
+			{
+				path: 'offFieldLog',
+				name: 'offFieldLog',
+				component: offFieldLog
+			},
+			{
+				path: 'shiftFieldLog',
+				name: 'shiftFieldLog',
+				component: shiftFieldLog
+			},
+			/* 防疫管理 */
+			{
+				path: 'immuneProce',
+				name: 'immuneProce',
+				component: immuneProce
+			},
+			{
+				path: 'immunePlan',
+				name: 'immunePlan',
+				component: immunePlan
+			},
+			{
+				path: 'immuneLog',
+				name: 'immuneLog',
+				component: immuneLog
+			},
+			{
+				path: 'illnessLog',
+				name: 'illnessLog',
+				component: illnessLog
+			},
+			/* 生产管理 */
+			{
+				path: 'batch',
+				name: 'batch',
+				component: batch
+			},
+			{
+				path: 'productionWarn',
+				name: 'productionWarn',
+				component: productionWarn
+			},
+			{
+				path: 'shiftField',
+				name: 'shiftField',
+				component: shiftField
+			},
+			{
+				path: 'dieWeedOut',
+				name: 'dieWeedOut',
+				component: dieWeedOut
+			},
+			{
+				path: 'earTag',
+				name: 'earTag',
+				component: earTag
+			},
+			{
+				path: 'carefulFeed',
+				name: 'carefulFeed',
+				component: carefulFeed
+			},
+			{
+				path: 'examiningReport',
+				name: 'examiningReport',
+				component: examiningReport
+			},
+			/* 无害化管理 */
+			{
+				path: 'harmlessConfirm',
+				name: 'harmlessConfirm',
+				component: harmlessConfirm
+			},
+			{
+				path: 'intelligentHint',
+				name: 'intelligentHint',
+				component: intelligentHint
+			},
+			/* 物料管理 */
+			{
+				path: 'basicsInfo',
+				name: 'basicsInfo',
+				component: basicsInfo
+			},
+			{
+				path: 'materialInStore',
+				name: 'materialInStore',
+				component: materialInStore
+			},
+			{
+				path: 'materialOutStore',
+				name: 'materialOutStore',
+				component: materialOutStore
+			},
+			{
+				path: 'storeList',
+				name: 'storeList',
+				component: storeList
+			},
+			/* 育种管理 */
+			{
+				path: 'gradeAssess',
+				name: 'gradeAssess',
+				component: gradeAssess
+			},
+			{
+				path: 'virtualMating',
+				name: 'virtualMating',
+				component: virtualMating
+			},
+			/* 设备管理 */
+			{
+				path: 'environmentMonitoring',
+				name: 'environmentMonitoring',
+				component: environmentMonitoring
+			},
+			{
+				path: 'video',
+				name: 'video',
+				component: video
+			},
+			{
+				path: 'deviceFault',
+				name: 'deviceFault',
+				component: deviceFault
+			},
+
+			// 模板
+			{
+				path: 'aa',
+				name: 'aa',
+				component: Aa
+			},
+			{
+				path: 'ab',
+				name: 'ab',
+				component: Ab
+			},
+			{
+				path: 'ac',
+				name: 'ac',
+				component: Ac
+			},
+			{
+				path: 'ad',
+				name: 'ad',
+				component: Ad
+			},
+			{
+				path: 'ae',
+				name: 'ae',
+				component: Ae
+			},
+			{
+				path: 'af',
+				name: 'af',
+				component: Af
+			}
+
+		]
+	},
+]

+ 38 - 0
src/sdk/ajax.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import axios from 'axios';
+import VueAxios from 'vue-axios';
+import config from './config'
+
+const { serverAddress } = config
+
+// import DEV from "@/dev_config"; // 导入上线配置
+// const { ONLINE_BASE_HREF, SERVER_HREF } = DEV;
+
+Vue.use(VueAxios, axios)
+
+
+/* 常用ajax封装 (固定URL) */
+export const ajax = function (type = "post", url, params) {
+    let token = localStorage.getItem("token")
+    return new Promise((resole, reject) => {
+        axios({
+            method: type,
+            url: serverAddress + url,
+            params,
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded',
+				'x-auth-token': token
+            }
+        }).then((res) => {
+            switch(res.data.errCode) {
+                case 'request_not_authorize': // 登录过期
+                    let url = window.location.protocol + "//" + window.location.host + "/#/login"
+                    window.location.replace(url)
+                    break;
+            }
+            resole(res.data);
+        }).catch((err) => {
+            reject(err.data);
+        });
+    });
+}

+ 4 - 0
src/sdk/config.js

@@ -0,0 +1,4 @@
+export default {
+  serverAddress: 'http://115.238.57.190:8010'
+  
+}

+ 24 - 0
src/store/index.js

@@ -0,0 +1,24 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+	strict: true,
+	state: {
+		token: localStorage.getItem("token")
+	},
+	getters: {
+		token: state => state.token,
+	},
+	mutations: {
+		setToken(state, token) {
+			state.token = token
+		}
+	},
+	actions: {
+		login({ commit }, token) {
+			commit('setToken', token)
+		},
+	}
+})

+ 7 - 0
src/store/store-module.js

@@ -0,0 +1,7 @@
+export default {
+  namespaced: true,
+  state: {
+    title: 'vue-module'
+  },
+  mutations: {}
+}

+ 226 - 0
src/views/Home/Home.vue

@@ -0,0 +1,226 @@
+<template>
+    <div class="home">
+        <header class="header">
+            <div class="left">
+                慧牧科技 
+                <el-button
+                    @click="onMenuCollapse"
+                    circle
+                    style="font-size: 20px"
+                    :icon="menuCollapse? 'el-icon-s-unfold' : 'el-icon-s-fold'"
+                ></el-button>
+            </div>
+            <div class="right">
+                <span class="warp">
+                    <el-dropdown  @command="onLogOut">
+                        <span class="el-dropdown-link">
+                            账号管理
+                            <i class="el-icon-arrow-down el-icon--right"></i>
+                        </span>
+                        <el-dropdown-menu slot="dropdown">
+                            <el-dropdown-item>退出登录</el-dropdown-item>
+                            <el-dropdown-item>切换账号</el-dropdown-item>
+                        </el-dropdown-menu>
+                    </el-dropdown>
+                </span>
+                <span>
+                    <el-dropdown @command="onLogOut">
+                        <span class="el-dropdown-link">
+                            权限切换
+                            <i class="el-icon-arrow-down el-icon--right"></i>
+                        </span>
+                        <el-dropdown-menu slot="dropdown">
+                            <el-dropdown-item disabled>权限一</el-dropdown-item>
+                            <el-dropdown-item divided>权限二</el-dropdown-item>
+                        </el-dropdown-menu>
+                    </el-dropdown>
+                </span>
+            </div>
+        </header>
+        <section class="section">
+            <div class="tac">
+                <div class="col1">
+                    <el-menu
+                        default-active="2"
+                        class="el-menu-vertical-demo"
+                        @open="handleOpen"
+                        @close="handleClose"
+                        :collapse="menuCollapse"
+                        :unique-opened="true"
+                        :default-openeds="defaultUnfoldedMenu"
+                        select="1-1"
+                        background-color="rgba(40,44,52)"
+                        text-color="#ddd"
+                        active-text-color="#ff4121"
+                    >
+                        <div v-for="(item) in menuData " :key="item.index">
+                            <el-submenu
+                                v-if="item.childList && item.childList.length > 0"
+                                :index="item.index"
+                            >
+                                <template slot="title">
+                                    <i :class="item.iconClassName"></i>
+                                    <span slot="title">{{ !menuCollapse? item.optionName : '' }}</span>
+                                    <!-- <span slot="title">{{ item.oneMenuName }}</span> -->
+                                </template>
+                                <el-menu-item
+                                    v-for="(item1) in item.childList"
+                                    :key="item1.index"
+                                    :index="item1.index"
+                                    :routerName="item1.routerName"
+                                    @click="onClickMenu(item1)"
+                                >{{ item1.optionName }}</el-menu-item>
+                            </el-submenu>
+                            <el-menu-item
+                                v-else
+                                :index="item.index"
+                                :disabled="item.disabled"
+                                :routerName="item.routerName"
+                                @click="onClickMenu(item)"
+                            >
+                                <i :class="item.iconClassName"></i>
+                                <span slot="title">{{ !menuCollapse? item.optionName : '' }}</span>
+                            </el-menu-item>
+                        </div>
+                    </el-menu>
+                </div>
+
+                <div class="col2">
+                    <div class="warp">
+                        <router-view />
+                    </div>
+                </div>
+
+            </div>
+        </section>
+    </div>
+</template>
+
+<script>
+import { menuData } from "./mencCofig.js";
+
+export default {
+    data() {
+        return {
+            // 菜单配置
+            menuData,
+            menuCollapse: false, //是否水平折叠收起菜单
+            defaultUnfoldedMenu: [menuData[0].index], // 默认展开第一项
+        };
+    },
+    created() {
+        this.defaultUnfoldedMenu = [
+            localStorage.getItem("defaultUnfoldedMenu")
+        ];
+        this.menuCollapse = JSON.parse(localStorage.getItem("menuCollapse"));
+    },
+    methods: {
+        // 收取菜单按钮
+        onMenuCollapse() {
+            this.menuCollapse = !this.menuCollapse;
+            localStorage.setItem("menuCollapse", this.menuCollapse);
+            this.defaultUnfoldedMenu = [
+                localStorage.getItem("defaultUnfoldedMenu")
+            ];
+        },
+        // 菜单展开
+        handleOpen(key, keyPath) {
+            console.log(key, keyPath);
+            localStorage.setItem("defaultUnfoldedMenu", "" + key);
+        },
+        // 菜单收取
+        handleClose(key, keyPath) {
+            console.log(key, keyPath);
+        },
+        // 点击菜单项
+        onClickMenu(item) {
+            let _this = this;
+            // 如果要跳转的路由和当前路由一致就 return
+            if (this.$router.history.current.name == item.routerName) return;
+            this.$router.push({
+                name: item.routerName
+            });
+        },
+        
+        
+        onLogOut() {
+            this.$router.push('login')
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.home {
+    height: 100%;
+    overflow: hidden;
+    box-sizing: border-box;
+    background-color: #eee;
+    display: flex;
+    flex-direction: column;
+    >.header {
+        background-color: rgb(48, 57, 75);
+        height: 40px;
+        padding: 10px 20px;
+        margin-bottom: 5px;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .left {
+            font-size: 25px;
+            color: #fff;
+            /deep/ .is-circle {
+                margin-left: 40px;
+            }
+        }
+        .right {
+            .warp {
+                margin-right: 20px;
+            }
+        }
+    }
+    .section {
+        flex: 1;
+        box-sizing: border-box;
+        overflow: auto;
+        .tac {
+            flex: 1;
+            display: flex;
+            height: 96%;
+            box-sizing: border-box;
+            .col1 {
+                margin-right: 5px;
+                background-color: rgb(40,44,52);
+                // background-image: linear-gradient(to bottom, rgb(85, 70, 148) , rgb(41, 33, 85), rgb(41, 33, 85));
+            }
+            .col2 {
+                flex: 1;
+                background-color: #fff;
+                padding: 0 15px 15px 15px;
+                border-radius: 5px;
+                margin-right: 5px;
+                height: 100%;
+                overflow: auto;
+                
+                .warp {
+                    margin: 15px;
+                }
+            }
+        }
+    }
+    // border: 1px solid #f00;
+}
+
+.el-menu-vertical-demo:not(.el-menu--collapse) {
+    width: 200px;
+    min-height: 400px;
+}
+// 下拉菜单
+.el-dropdown-link {
+    cursor: pointer;
+    color: #fff;
+}
+.el-icon-arrow-down {
+    font-size: 12px;
+}
+</style>

+ 358 - 0
src/views/Home/mencCofig.js

@@ -0,0 +1,358 @@
+
+export const menuData = [
+    // {
+    //     optionName: "首页",
+    //     iconClassName: "el-icon-s-home",
+    //     routerName: "Index",
+    //     index: '-1',
+    //     disabled: false
+    // },
+    {
+        optionName: "档案信息",
+        iconClassName: "el-icon-setting",
+        index: '0',
+        disabled: false, // 是否禁用
+        childList: [
+            {
+                optionName: '企业信息',
+                index: '0-1',
+                routerName: "enterpriseInfo"
+            },
+            {
+                optionName: '牧场信息',
+                index: '0-2',
+                routerName: "pastureInfo"
+            },
+            {
+                optionName: '栋舍信息',
+                index: '0-3',
+                routerName: "areaInfo"
+            },
+            {
+                optionName: '员工信息',
+                index: '0-4',
+                routerName: "workerInfo"
+            }
+        ]
+    },
+    {
+        optionName: "繁殖管理",
+        iconClassName: "el-icon-setting",
+        index: '1',
+        disabled: false, // 是否禁用
+        childList: [
+            {
+                optionName: '种羊档案',
+                index: '1-1',
+                routerName: "seedSheepFile"
+            },
+            {
+                optionName: '采精记录',
+                index: '1-2',
+                routerName: "collectSeedLog"
+            },
+            {
+                optionName: '查情记录',
+                index: '1-3',
+                routerName: "matingSuccLog"
+            },
+            {
+                optionName: '配种记录',
+                index: '1-4',
+                routerName: "matingLog"
+            },
+            {
+                optionName: '妊检记录',
+                index: '1-5',
+                routerName: "pregnancyTestLog"
+            },
+            {
+                optionName: '分娩记录',
+                index: '1-6',
+                routerName: "parturitionLog"
+            },
+            {
+                optionName: '断奶记录',
+                index: '1-7',
+                routerName: "weaningLog"
+            },
+            {
+                optionName: '离场记录',
+                index: '1-8',
+                routerName: "offFieldLog"
+            },
+            {
+                optionName: '转舍记录',
+                index: '1-9',
+                routerName: "shiftFieldLog"
+            },
+        ]
+    },
+    {
+        optionName: "防疫管理",
+        iconClassName: "el-icon-s-flag",
+        index: '2',
+        disabled: false,
+        childList: [
+            {
+                optionName: '免疫程序',
+                index: '2-1',
+                routerName: "immuneProce"
+            },
+            {
+                optionName: '免疫计划',
+                index: '2-2',
+                routerName: "immunePlan"
+            },
+            {
+                optionName: '免疫记录',
+                index: '2-3',
+                routerName: "immuneLog"
+            },
+            {
+                optionName: '疾病记录',
+                index: '2-4',
+                routerName: "illnessLog"
+            },
+            // {
+            //     optionName: '羊杂登记',
+            //     index: '2-5',
+            //     routerName: "goatHasletLog"
+            // },
+            
+        ]
+    },
+
+    {
+        optionName: "生产管理",
+        iconClassName: "el-icon-s-flag",
+        index: '3',
+        disabled: false,
+        childList: [
+            {
+                optionName: '批次管理',
+                index: '3-1',
+                routerName: "batch"
+            },
+            {
+                optionName: '生产预警',
+                index: '3-2',
+                routerName: "productionWarn"
+            },
+            {
+                optionName: '调拨转舍',
+                index: '3-3',
+                routerName: "shiftField"
+            },
+            {
+                optionName: '死淘管理',
+                index: '3-4',
+                routerName: "dieWeedOut"
+            },
+            {
+                optionName: '耳标管理',
+                index: '3-5',
+                routerName: "earTag"
+            },
+            {
+                optionName: '精细饲喂',
+                index: '3-6',
+                routerName: "carefulFeed"
+            },
+            {
+                optionName: '检测报告',
+                index: '3-7',
+                routerName: "examiningReport"
+            }
+           
+        ]
+    },
+    {
+        optionName: "无害化管理",
+        iconClassName: "el-icon-s-flag",
+        index: '4',
+        disabled: false,
+        childList: [
+            {
+                optionName: '无害化确认',
+                index: '4-1',
+                routerName: "harmlessConfirm"
+            },
+            {
+                optionName: '智能提醒',
+                index: '4-2',
+                routerName: "intelligentHint"
+            },
+        ]
+    },
+    {
+        optionName: "物料管理",
+        iconClassName: "el-icon-s-flag",
+        index: '5',
+        disabled: false,
+        childList: [
+            {
+                optionName: '基础信息',
+                index: '5-1',
+                routerName: "basicsInfo"
+            },
+            {
+                optionName: '物料入库',
+                index: '5-2',
+                routerName: "materialInStore"
+            },
+            {
+                optionName: '物料出库',
+                index: '5-3',
+                routerName: "materialOutStore"
+            },
+            {
+                optionName: '库存盘点',
+                index: '5-4',
+                routerName: "storeList"
+            },
+        ]
+    },
+    {
+        optionName: "育种管理",
+        iconClassName: "el-icon-s-flag",
+        index: '6',
+        disabled: false,
+        childList: [
+            {
+                optionName: '等级评定',
+                index: '6-1',
+                routerName: "gradeAssess"
+            }
+        ]
+    },
+    {
+        optionName: "设备管理",
+        iconClassName: "el-icon-s-flag",
+        index: '7',
+        disabled: false,
+        childList: [
+            {
+                optionName: '环境检测',
+                index: '7-1',
+                routerName: "environmentMonitoring"
+            },
+            {
+                optionName: '视频监控',
+                index: '7-2',
+                routerName: "video"
+            },
+            {
+                optionName: '设备故障',
+                index: '7-3',
+                routerName: "deviceFault"
+            },
+        ]
+    },
+    {
+        optionName: "开发用模板",
+        iconClassName: "el-icon-menu",
+        index: '100',
+        disabled: false, // 是否禁用
+        childList: [
+            {
+                optionName: '模板 1',
+                index: '100-1',
+                routerName: "aa"
+            },
+            {
+                optionName: '普通表格',
+                index: '100-2',
+                routerName: "ab"
+            },
+            {
+                optionName: '模板 3',
+                index: '100-3',
+                routerName: "ac"
+            },
+            {
+                optionName: '模板 4',
+                index: '100-4',
+                routerName: "ad"
+            },
+            {
+                optionName: '模板 5',
+                index: '100-5',
+                routerName: "ee"
+            },
+            {
+                optionName: '模板 6',
+                index: '100-6',
+                routerName: "af"
+            }
+
+        ]
+    },
+
+]
+
+// export default {menuData}
+
+
+
+
+/* 菜单配置 描述 */
+const menuData描述 = [
+    // 有子菜单 并且字菜单分组的
+    {
+        oneMenuName: "导航一", // 一级菜单名
+        iconClassName: "aaa", // element-ui图标名
+        index: '1', // 唯一标志
+        childList: [ // 分组的
+            {
+                groupName: '组名一',
+                index: '1-1-1',
+                list: [
+                    {
+                        optionName: '选项1',
+                        routerName: "home"
+                    },
+                    {}
+                ],
+            },
+            {
+                groupName: '组名二',
+                index: '1-1-2',
+                list: [
+                    {
+                        optionName: '选项1',
+                        routerName: "home"
+                    },
+                    {}
+                ],
+            }
+        ],
+    },
+    // 有子菜单 字菜单不分组的
+    {
+        oneMenuName: "导航二",
+        iconClassName: "el-icon-menu",
+        index: '2',
+        disabled: false, // 是否禁用
+        childList: [ // 不分组的
+            {
+                optionName: '选项1',
+                index: '2-1',
+                routerName: "home"
+            },
+            {}
+        ]
+    },
+    // 无子菜单的
+    {
+        oneMenuName: "导航三",
+        iconClassName: "el-icon-document",
+        routerName: "home",
+        index: '3',
+        disabled: false
+    },
+
+    "导航四"
+]
+
+

+ 159 - 0
src/views/Login/Login.vue

@@ -0,0 +1,159 @@
+<template>
+    <div class="login">
+        <div class="shade">
+            <header class="header">
+                <img class="logo" src="../../assets/logo.png" alt="慧牧科技LOGO" />
+                慧牧科技
+            </header>
+            <article class="article">
+                <h1>登录界面</h1>
+                <el-form label-position="right" label-width="80px" :model="form">
+                    <el-form-item label="账号:">
+                        <el-input v-model="form.userName" placeholder="请输入账号"></el-input>
+                    </el-form-item>
+                    <el-form-item label="密码:">
+                        <el-input v-model="form.userPwd" placeholder="请输入密码" show-password></el-input>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button type="primary" @click="onSignIn">登录</el-button>
+                    </el-form-item>
+                </el-form>
+            </article>
+            <el-dialog title="请选择一个组织" :visible.sync="isShowDialog" append-to-body>
+                <el-select v-model="orgSelected">
+                    <el-option
+                        v-for="item in orgList"
+                        :key="item.id"
+                        :value="item.id"
+                        :label="item.orgName"
+                    ></el-option>
+                </el-select>
+                <div slot="footer">
+                    <el-button @click="isShowDialog=false">取 消</el-button>
+                    <el-button type="primary" @click="handleSet">设置</el-button>
+                </div>
+            </el-dialog>
+        </div>
+    </div>
+</template>
+<script>
+
+import { reqLogin, reqOrgChoose, reqOrganizationId } from "@/api/login";
+
+export default {
+    name: "login",
+    data() {
+        return {
+            form: {
+                userName: "huyang",
+                userPwd: "123456"
+            },
+            isShowDialog: false,
+            orgList: null,
+            orgSelected: null
+        };
+    },
+    created() {
+    },
+    methods: {
+        /* 登录按钮 */
+        onSignIn() {
+            console.log(this.form);
+            reqLogin(this.form)
+                .then(res => {
+                    console.log(res);
+                    console.log(res)
+                    localStorage.setItem("token", res.token);
+                    this.doOrganizationChoose();
+                })
+                .catch(err => {
+                    console.log("登录失败", err);
+                });
+        },
+        handleSet: function() {
+            if (!this.orgSelected) {
+                this.$message.info("请先选择组织");
+            } else this.setOrganizationId(this.orgSelected);
+        },
+        doOrganizationChoose() {
+            this.loading = true;
+            reqOrgChoose().then(res => {
+                if (res == null || res.length == 0) {
+                    this.$message.info("您没有加入任何组织!");
+                } else if (res.length > 1) {
+                    this.isShowDialog = true;
+                    this.orgList = res;
+                } else {
+                    console.log("6666")
+                    this.setOrganizationId(res[0].id);
+                }
+            }).catch(err => {
+                console.log(err)
+                this.loading = false;
+            })
+        },
+        setOrganizationId(id){
+            if (!id) {
+                this.$message.error("发生了一点不愉快的错误!");
+                return;
+            }
+            this.loading = true;
+            reqOrganizationId({orgId: id}).then(res => {
+                this.isShowDialog = false;
+                    //导航到 正式页面
+                    this.$router.replace("/home/enterpriseInfo");
+            }).catch(err => {
+                if (err.errMsg) this.$message.error(err.errMsg);
+                    else this.$message.error("服务器发生异常");
+            }).finally( res => {
+                this.loading = false;
+            })
+        },
+    },
+    mounted() {}
+};
+</script>
+
+<style lang="scss" scoped>
+.login {
+    width: 100%;
+    height: 100%;
+    background: url(../../assets/login_bg.jpg) 0 0 no-repeat;
+    background-size: 100%;
+    .shade {
+        height: 100%;
+        width: 100%;
+        background-color: #8899aa44;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        .header {
+            font-size: 60px;
+            color: #eee;
+            margin: 180px 0 50px 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .logo {
+                height: 70px;
+                width: 70px;
+                margin-right: 20px;
+            }
+        }
+        .article {
+            width: 400px;
+            background-color: #ffffff44;
+            padding: 20px 60px 40px 20px;
+            border-radius: 20px;
+            h1 {
+                font-size: 20px;
+                color: #eee;
+                margin-left: 25px;
+            }
+            /deep/ .el-form-item .el-form-item__label {
+                color: #eee;
+            }
+        }
+    }
+}
+</style>

+ 176 - 0
src/views/antiepidemic/illnessLog.vue

@@ -0,0 +1,176 @@
+<template>
+    <!-- 静态  疾病登记  illnessLog-->
+    <div class="illnessLog">
+        <header id="header">
+            疾病登记
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 176 - 0
src/views/antiepidemic/immuneLog.vue

@@ -0,0 +1,176 @@
+<template>
+    <!-- 静态  免疫记录  immuneLog-->
+    <div class="immuneLog">
+        <header id="header">
+            免疫记录
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 176 - 0
src/views/antiepidemic/immunePlan.vue

@@ -0,0 +1,176 @@
+<template>
+    <!-- 静态  免疫计划  immunePlan-->
+    <div class="immunePlan">
+        <header id="header">
+            免疫计划
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 176 - 0
src/views/antiepidemic/immuneProce.vue

@@ -0,0 +1,176 @@
+<template>
+    <!-- 静态  免疫程序  immuneProce-->
+    <div class="immuneProce">
+        <header id="header">
+            免疫程序
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 161 - 0
src/views/breed/collectSeedLog.vue

@@ -0,0 +1,161 @@
+<template>
+    <div class="collectSeedLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">采精记录</h2>
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="b" label="入场时间"></el-table-column>
+                    <el-table-column prop="c" label="入场日龄"></el-table-column>
+                    <el-table-column prop="d" label="种羊来源"></el-table-column>
+                    <el-table-column prop="e" label="当前位置"></el-table-column>
+                    <el-table-column prop="f" label="成本价格"></el-table-column>
+                    <el-table-column prop="g" label="体重"></el-table-column>
+                    <el-table-column prop="g" label="饲养员"></el-table-column>
+                    <el-table-column prop="g" label="等级评级"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 154 - 0
src/views/breed/matingLog.vue

@@ -0,0 +1,154 @@
+<template>
+    <div class="matingLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">配种记录</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="b" label="查情时间"></el-table-column>
+                    <el-table-column prop="c" label="是否发情"></el-table-column>
+                    <el-table-column prop="d" label="操作人"></el-table-column>
+                    <el-table-column prop="e" label="是否发情"></el-table-column>
+                    <el-table-column prop="f" label="操作人"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column>-->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+const pageSize = 10;
+const tableData = [
+    {
+        a: "15463",
+        b: "胴体",
+        c: "2020-07-14",
+        d: "49kg",
+        e: "48kg",
+        f: "1.6%",
+        g: "张小刚"
+    },
+    {
+        a: "15463",
+        b: "带骨羊前腿",
+        c: "2020-07-14",
+        d: "49kg",
+        e: "48kg",
+        f: "1.6%",
+        g: "张小刚"
+    },
+    {
+        a: "15463",
+        b: "羔羊肉卷",
+        c: "2020-07-14",
+        d: "49kg",
+        e: "48kg",
+        f: "1.6%",
+        g: "张小刚"
+    },
+    {
+        a: "15463",
+        b: "胴体",
+        c: "2020-07-14",
+        d: "49kg",
+        e: "48kg",
+        f: "1.6%",
+        g: "张小刚"
+    },
+    {
+        a: "15463",
+        b: "羔羊肉卷",
+        c: "2020-07-14",
+        d: "49kg",
+        e: "48kg",
+        f: "1.6%",
+        g: "张小刚"
+    }
+];
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 158 - 0
src/views/breed/matingSuccLog.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="matingSuccLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">查情记录</h2>
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="b" label="查情时间"></el-table-column>
+                    <el-table-column prop="c" label="是否发情"></el-table-column>
+                    <el-table-column prop="d" label="操作人"></el-table-column>
+                    <el-table-column prop="e" label="是否发情"></el-table-column>
+                    <el-table-column prop="f" label="操作人"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 175 - 0
src/views/breed/offFieldLog.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="offFieldLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">离场记录</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="羊只编码"></el-table-column>
+                    <el-table-column prop="b" label="离场时间"></el-table-column>
+                    <el-table-column prop="c" label="日龄"></el-table-column>
+                    <el-table-column prop="d" label="离场体重"></el-table-column>
+                    <el-table-column prop="e" label="离场原因"></el-table-column>
+                    <el-table-column prop="f" label="饲养员"></el-table-column>
+                    <el-table-column prop="g" label="等级评级"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 159 - 0
src/views/breed/parturitionLog.vue

@@ -0,0 +1,159 @@
+<template>
+    <div class="parturitionLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">分娩记录</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="分娩时间"></el-table-column>
+                    <el-table-column prop="b" label="产羔个数"></el-table-column>
+                    <el-table-column prop="c" label="羔羊均重"></el-table-column>
+                    <el-table-column prop="d" label="健仔数"></el-table-column>
+                    <el-table-column prop="e" label="弱仔数"></el-table-column>
+                    <el-table-column prop="f" label="木乃伊"></el-table-column>
+                    <el-table-column prop="g" label="死羔数"></el-table-column>
+                    <el-table-column prop="g" label="操作人"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 158 - 0
src/views/breed/pregnancyTestLog.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="pregnancyTestLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">断奶信息</h2>
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="b" label="任检时间"></el-table-column>
+                    <el-table-column prop="c" label="状态"></el-table-column>
+                    <el-table-column prop="d" label="当前位置"></el-table-column>
+                    <el-table-column prop="e" label="怀胎个数"></el-table-column>
+                    <el-table-column prop="f" label="备注"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 161 - 0
src/views/breed/seedSheepFile.vue

@@ -0,0 +1,161 @@
+<template>
+    <div class="seedSheepFile">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">种羊档案</h2>
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="b" label="入场时间"></el-table-column>
+                    <el-table-column prop="c" label="入场日龄"></el-table-column>
+                    <el-table-column prop="d" label="种羊来源"></el-table-column>
+                    <el-table-column prop="e" label="当前位置"></el-table-column>
+                    <el-table-column prop="f" label="成本价格"></el-table-column>
+                    <el-table-column prop="g" label="体重"></el-table-column>
+                    <el-table-column prop="g" label="饲养员"></el-table-column>
+                    <el-table-column prop="g" label="等级评级"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 175 - 0
src/views/breed/shiftFieldLog.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="shiftFieldLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">转舍记录</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 160 - 0
src/views/breed/weaningLog.vue

@@ -0,0 +1,160 @@
+<template>
+    <div class="weaningLog">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">断奶信息</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="羔羊编码"></el-table-column>
+                    <el-table-column prop="b" label="断奶时间"></el-table-column>
+                    <el-table-column prop="c" label="种母羊编码"></el-table-column>
+                    <el-table-column prop="d" label="种公羊编码"></el-table-column>
+                    <el-table-column prop="e" label="断奶重量"></el-table-column>
+                    <el-table-column prop="f" label="羔羊性别"></el-table-column>
+                    <el-table-column prop="g" label="断奶成本"></el-table-column>
+                    <el-table-column prop="g" label="操作人"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 175 - 0
src/views/cultivateSeed/gradeAssess.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="gradeAssess">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">等级评定</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 176 - 0
src/views/cultivateSeed/sub/virtualMating.vue

@@ -0,0 +1,176 @@
+<template>
+    <!-- 静态  虚拟配种  virtualMating-->
+    <div class="virtualMating">
+        <header id="header">
+            虚拟配种
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 175 - 0
src/views/device/deviceFault.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="deviceFault">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">设备故障</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 30 - 0
src/views/device/environmentMonitoring.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="environmentMonitoring">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">环境检测</h2>
+
+        <header id="header">
+            
+           
+        </header>
+    </div>
+</template>
+
+<script>
+
+
+export default {
+    data() {
+        return {
+           
+        };
+    },
+    created() {},
+    methods: {
+        
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 30 - 0
src/views/device/video.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="video">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">视频监控</h2>
+
+        <header id="header">
+            
+           
+        </header>
+    </div>
+</template>
+
+<script>
+
+
+export default {
+    data() {
+        return {
+           
+        };
+    },
+    created() {},
+    methods: {
+        
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 175 - 0
src/views/fileInfo/areaInfo.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="areaInfo">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">栋舍信息</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 81 - 0
src/views/fileInfo/enterpriseInfo.vue

@@ -0,0 +1,81 @@
+<template>
+    <div class="enterpriseInfo">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">企业信息</h2>
+        <div class="left">
+            <el-form ref="form" :model="form" >
+                <el-form-item label="企业名称">
+                    <el-input v-model="form.name"></el-input>
+                </el-form-item>
+                <el-form-item label="邮箱">
+                    <el-input v-model="form.email"></el-input>
+                </el-form-item>
+                <el-form-item label="企业简介">
+                    <el-input type="textarea" v-model="form.desc"></el-input>
+                </el-form-item>
+                <el-form-item label="活动区域">
+                    <el-cascader
+                        size="large"
+                        :options="options"
+                        v-model="form.area"
+                        @change="handleChange"
+                    ></el-cascader>
+                </el-form-item>
+                <el-form-item label="详细地址">
+                    <el-input v-model="form.detail_address"></el-input>
+                </el-form-item>
+                <el-form-item label="联系电话">
+                    <el-row type="flex" :gutter="19">
+                        <el-col :span="8">
+                            <el-input v-model="form.mobile_base"></el-input>
+                        </el-col>
+                        <el-col :span="15">
+                            <el-input v-model="form.mobile_num"></el-input>
+                        </el-col>
+                    </el-row>
+                </el-form-item>
+                <el-form-item>
+                    <el-button style="margin-left:60%" type="primary" @click="onSubmit">更新信息</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+import { regionData } from "element-china-area-data";
+export default {
+    name: "enterpriseInfo",
+    data() {
+        return {
+            form: {
+                name: "长兴湖羊",
+                email: "antdesign@alipay.com",
+                desc: "一个养殖平台",
+                area: ['330000', '330100', '330110'],
+                detail_address: "西溪海创园",
+                mobile_base: "0752",
+                mobile_num: "88888888"
+            },
+            options: regionData
+        };
+    },
+    created() {},
+    methods: {
+        onSubmit() {
+            console.log("submit!");
+        },
+        handleChange(value) {
+            console.log(value);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.enterpriseInfo {
+    .left {
+        width: 400px;
+        margin-left: 50px;
+    }
+}
+</style>

+ 92 - 0
src/views/fileInfo/pastureInfo.vue

@@ -0,0 +1,92 @@
+<template>
+    <div class="enterpriseInfo">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">牧场信息</h2>
+        <div class="left">
+            <el-form ref="form" :model="form" >
+                <el-form-item label="牧场名称">
+                    <el-input v-model="form.name"></el-input>
+                </el-form-item>
+                <el-form-item label="邮箱">
+                    <el-input v-model="form.email"></el-input>
+                </el-form-item>
+                <el-form-item label="牧场简介">
+                    <el-input type="textarea" v-model="form.desc"></el-input>
+                </el-form-item>
+                <el-form-item label="主要负责人及电话">
+                    <el-row type="flex" :gutter="19">
+                        <el-col :span="8">
+                            <el-input v-model="form.people"></el-input>
+                        </el-col>
+                        <el-col :span="15">
+                            <el-input v-model="form.mobile"></el-input>
+                        </el-col>
+                    </el-row>
+                </el-form-item>
+                <el-form-item label="活动区域">
+                    <el-cascader
+                        size="large"
+                        :options="options"
+                        v-model="form.area"
+                        @change="handleChange"
+                    ></el-cascader>
+                </el-form-item>
+                <el-form-item label="详细地址">
+                    <el-input v-model="form.detail_address"></el-input>
+                </el-form-item>
+                <el-form-item label="联系电话">
+                    <el-row type="flex" :gutter="19">
+                        <el-col :span="8">
+                            <el-input v-model="form.mobile_base"></el-input>
+                        </el-col>
+                        <el-col :span="15">
+                            <el-input v-model="form.mobile_num"></el-input>
+                        </el-col>
+                    </el-row>
+                </el-form-item>
+                <el-form-item>
+                    <el-button style="margin-left:60%" type="primary" @click="onSubmit">更新信息</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+import { regionData } from "element-china-area-data";
+export default {
+    data() {
+        return {
+            form: {
+                name: "长兴牧场",
+                email: "antdesign@alipay.com",
+                desc: "一个养殖平台",
+                people: "赵四",
+                mobile: "138888888888",
+                area: ['330000', '330100', '330110'],
+                detail_address: "西溪海创园",
+                mobile_base: "0572",
+                mobile_num: "55666655"
+            },
+            options: regionData
+        };
+    },
+    created() {},
+    methods: {
+        onSubmit() {
+            console.log("submit!");
+        },
+        handleChange(value) {
+            console.log(value);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.enterpriseInfo {
+    .left {
+        width: 500px;
+        margin-left: 50px;
+    }
+}
+</style>

+ 172 - 0
src/views/fileInfo/workerInfo.vue

@@ -0,0 +1,172 @@
+<template>
+    <div class="workerInfo">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">员工信息</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column prop="a" label="姓名"></el-table-column>
+                    <el-table-column prop="b" label="年龄"></el-table-column>
+                    <el-table-column prop="c" label="入职时间"></el-table-column>
+                    <el-table-column prop="d" label="责任区域"></el-table-column>
+                    <el-table-column prop="e" label="职位"></el-table-column>
+                    <el-table-column prop="f" label="联系电话"></el-table-column>
+                    <el-table-column prop="g" label="所在牧场"></el-table-column>
+                    <el-table-column prop="g" label="当前状态"></el-table-column>
+                    <el-table-column prop="g" label="户籍"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/harmless/harmlessConfirm.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="harmlessConfirm">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">无害化确认</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 30 - 0
src/views/harmless/intelligentHint.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="intelligentHint">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">智能提醒</h2>
+
+        <header id="header">
+            
+           
+        </header>
+    </div>
+</template>
+
+<script>
+
+
+export default {
+    data() {
+        return {
+           
+        };
+    },
+    created() {},
+    methods: {
+        
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 205 - 0
src/views/index/Index.vue

@@ -0,0 +1,205 @@
+<template>
+    <div class="Index">
+        <header class="header">
+            <div class="left">
+                <!-- <chart-a class="chart_a"></chart-a> -->
+            </div>
+            <div class="right">
+                <!-- <chart-b></chart-b> -->
+            </div>
+        </header>
+        <section class="section">
+            <ul class="ul">
+                <li class="li">
+                    <span class="title">总产仔数</span>
+                    <span class="content">2141</span>
+                </li>
+                <li class="li">
+                    <span class="title">总活仔数</span>
+                    <span class="content">2035</span>
+                </li>
+                <li class="li">
+                    <span class="title">均产仔数</span>
+                    <span class="content">9</span>
+                </li>
+                <li class="li">
+                    <span class="title">均断奶活仔数</span>
+                    <span class="content">21</span>
+                </li>
+                <li class="li">
+                    <span class="title">均断奶天数</span>
+                    <span class="content">14</span>
+                </li>
+                <li class="li">
+                    <span class="title">均断奶活存活率</span>
+                    <span class="content">99%</span>
+                </li>
+            </ul>
+        </section>
+        <footer class="footer">
+            <el-carousel height="150px" :interval="5000" direction="vertical" indicator-position="none">
+                <el-carousel-item>
+                    <div class="item item_1">
+                        <div class="left el-icon-mobile-phone"></div>
+                        <div class="right">
+                            <p class="top">消息警报</p>
+                            <p class="middle">1耳标457865号母猪产仔存活率低于70%</p>
+                            <span class="bottom">查看详情</span>
+                        </div>
+                    </div>
+                </el-carousel-item>
+                <el-carousel-item>
+                    <div class="item item_2">
+                        <div class="left el-icon-mobile-phone"></div>
+                        <div class="right">
+                            <p class="top">消息警报</p>
+                            <p class="middle">2耳标457865号母猪产仔存活率低于70%</p>
+                            <span class="bottom">查看详情</span>
+                        </div>
+                    </div>
+                </el-carousel-item>
+                <el-carousel-item>
+                    <div class="item item_3">
+                        <div class="left el-icon-mobile-phone"></div>
+                        <div class="right">
+                            <p class="top">消息警报</p>
+                            <p class="middle">3耳标457865号母猪产仔存活率低于70%</p>
+                            <span class="bottom">查看详情</span>
+                        </div>
+                    </div>
+                </el-carousel-item>
+            </el-carousel>
+        </footer>
+    </div>
+</template>
+
+<script>
+import { mapActions } from "vuex";
+// import chart_a from "./charts/chart_a";
+// import chart_b from "./charts/chart_b";
+
+export default {
+    name: "Index",
+    components: {
+        // "chart-a": chart_a,
+        // "chart-b": chart_b
+    },
+    data() {
+        return {};
+    },
+    created() {},
+    methods: {
+        ...mapActions(["fetch"]),
+        get() {
+            this.fetch({
+                api: "aaa",
+                method: "GET",
+                data: {},
+                success: res => {
+                    console.log(res);
+                },
+                fail: err => {
+                    console.log(err);
+                    if (err.errMsg) this.$message.error(err.errMsg);
+                    else this.$message.error("服务器发生异常");
+                }
+            });
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.Index {
+    .header {
+        display: flex;
+        padding-right: 11%;
+        .left {
+            width: 50%;
+            height: 400px;
+        }
+        .right {
+            width: 50%;
+            height: 400px;
+        }
+    }
+    .section {
+        margin: 60px 0;
+        .ul {
+            display: flex;
+            justify-content: space-around;
+            padding: 0 8%;
+            .li {
+                height: 80px;
+                width: 170px;
+                background-color: #ddd;
+                border-radius: 10px;
+                padding: 10px 0;
+                display: flex;
+                flex-direction: column;
+                justify-content: space-around;
+                align-items: center;
+
+                .title {
+                    font-size: 22px;
+                    font-weight: 600;
+                    color: #444;
+                }
+                .content {
+                    font-size: 22px;
+                    font-weight: 600;
+                    color: rgb(48, 115, 240);
+                }
+            }
+        }
+    }
+    .footer {
+        .item{
+            height: 100%;
+            display: flex;
+            box-sizing: border-box;
+            border-radius: 10px;
+            align-items: center;
+            
+            .left{
+                font-size: 30px;
+                margin-left: 20px;
+                margin-right: 20px;
+            }
+            .right{
+                .top{
+                    font-size: 20px;
+                    font-weight: 600;
+                    color: #746363;
+                }
+                .middle{
+                    font-size: 16px;
+                    color: #999;
+                }
+                .bottom{
+                    font-size: 16px;
+                    color: rgb(48, 115, 240);
+                }
+            }
+        }
+        .item_1{
+            background-color: #EBF5FF;
+            .left{
+                color: #0079FE;
+            }
+        }
+        .item_2{
+            background-color: #E6FAF0;
+            .left{
+                color: #4BD863;
+            }
+        }
+        .item_3{
+            background-color: #FFEEE6;
+            .left{
+                color: #FF3B30;
+            }
+        }
+    }
+}
+</style>

+ 123 - 0
src/views/index/charts/chart_a.vue

@@ -0,0 +1,123 @@
+<template>
+    <div class="hello">
+        <div id="chart_a" style="height:400px;"></div>
+    </div>
+</template>
+
+<script>
+export default {
+    name: "HelloWorld",
+    props: ["tagId"],
+    data() {
+        return {
+        };
+    },
+    mounted() {
+        this.drawChart();
+    },
+    methods: {
+        drawChart() {
+            // 基于准备好的dom,初始化echarts实例
+            let myChart = this.$echarts.init(
+                document.getElementById("chart_a")
+            );
+            // 指定图表的配置项和数据
+            let option = {
+                tooltip: {
+                    trigger: "item",
+                    formatter: "{b}: {c} ({d}%)"
+                },
+                legend: {
+                    orient: "horizontal",
+                    bottom: 10,
+                    data: ["已用产床", "未用产床", "待产", "已产","断奶","空产床"]
+                },
+                series: [
+                    {
+                        type: "pie",
+                        selectedMode: "single",
+                        radius: ["0", "40%"],
+
+                        label: {
+                            position: "inner"
+                        },
+                        labelLine: {
+                            show: true
+                        },
+                        data: [
+                            { value: 800, name: "已用产床" },
+                            { value: 200, name: "未用产床" }
+                        ],
+                        itemStyle: {
+                            emphasis: {
+                                shadowBlur: 10,
+                                shadowOffsetX: 0
+                            },
+                            normal: {
+                                color: function(params) {
+                                    //自定义颜色 89,212,212
+                                    var colorList = [
+                                        "rgba(58,0,255,0.5)",
+                                        // "rgba(58,161,255,0.5)",
+
+                                        "rgba(54,203,203,0.7)"
+                                    ];
+                                    return colorList[params.dataIndex];
+                                }
+                            }
+                        }
+                    },
+                    {
+                        type: "pie",
+                        // 内外圈厚度
+                        radius: ["40%", "60%"],
+                        label: {
+                            formatter: "{d}%"
+                        },
+                        data: [
+                            { value: 300, name: "待产" },
+                            { value: 300, name: "已产" },
+                            { value: 200, name: "断奶" },
+                            { value: 200, name: "空产床" }
+                        ],
+                        itemStyle: {
+                            emphasis: {
+                                shadowBlur: 10,
+                                shadowOffsetX: 0
+                            },
+                            normal: {
+                                color: function(params) {
+                                    //自定义颜色  "rgb(255,0,0)",
+                                    // var colorList = [
+                                    //     "rgb(0,238,255)",
+                                    //     "rgb(149,162,255)",
+                                    //     "rgb(58,186,255)",
+                                    //     "rgba(54,203,203,0.7)"
+                                    // ];
+                                    var colorList = [
+                                        "rgb(241,97,1)",
+                                        "rgb(255,162,255)",
+                                        "rgb(58,186,255)",
+                                        "rgba(54,203,203,0.7)"
+                                    ];
+                                    return colorList[params.dataIndex];
+                                }
+                            }
+                        }
+                    }
+                ]
+            };
+            // 使用刚指定的配置项和数据显示图表。
+            myChart.setOption(option);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.hello {
+    .chart {
+        width: 100%;
+    }
+}
+</style>

+ 77 - 0
src/views/index/charts/chart_b.vue

@@ -0,0 +1,77 @@
+<template>
+    <div class="chart_b">
+        <div id="chart_b" style="width: 100%;height:400px;"></div>
+    </div>
+</template>
+
+<script>
+export default {
+    name: "chart_b",
+    props: {},
+    data() {
+        return {};
+    },
+    created() {},
+    mounted() {
+        this.drawChart();
+    },
+    methods: {
+        drawChart() {
+            // 基于准备好的dom,初始化echarts实例
+            let myChart = this.$echarts.init(
+                document.getElementById("chart_b")
+            );
+            // 指定图表的配置项和数据
+            let option = {
+                color: ["#3398DB"],
+                tooltip: {
+                    trigger: "axis",
+                    axisPointer: {
+                        // 坐标轴指示器,坐标轴触发有效
+                        type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
+                    }
+                },
+                grid: {
+                    left: "10%",
+                    right: "10%",
+                    bottom: "3%",
+                    containLabel: true
+                },
+                yAxis: [
+                    {
+                        type: "category",
+                        data: ["断奶母猪", "已产母猪", "待产母猪", "未用产床", "已用产床", "产床总数"],
+                        axisTick: {
+                            alignWithLabel: true
+                        }
+                    }
+                ],
+                xAxis: [
+                    {
+                        type: "value"
+                    }
+                ],
+                series: [
+                    {
+                        name: "数量",
+                        type: "bar",
+                        barWidth: "60%",
+                        data: [52, 200, 334, 390, 330, 220],
+                        encode: {
+                            // Map the "amount" column to X axis.
+                            y: "amount",
+                            // Map the "product" column to Y axis
+                            x: "product"
+                        }
+                    }
+                ]
+            };
+            // 使用刚指定的配置项和数据显示图表。
+            myChart.setOption(option);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 30 - 0
src/views/material/basicsInfo.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="basicsInfo">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">基础信息</h2>
+
+        <header id="header">
+            
+           
+        </header>
+    </div>
+</template>
+
+<script>
+
+
+export default {
+    data() {
+        return {
+           
+        };
+    },
+    created() {},
+    methods: {
+        
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 177 - 0
src/views/material/materialInStore.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="materialInStore">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">物料入库</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/material/materialOutStore.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="materialOutStore">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">物料出库</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/material/storeList.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="storeList">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">库存盘点</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/batch.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="batch">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">批次管理</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/carefulFeed.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="carefulFeed">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">精细饲喂</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/dieWeedOut.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="dieWeedOut">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">死淘管理</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/earTag.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="earTag">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">耳标管理</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/examiningReport.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="examiningReport">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">检测报告</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 177 - 0
src/views/production/productionWarn.vue

@@ -0,0 +1,177 @@
+<template>
+    <div class="productionWarn">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">生产预警</h2>
+
+        <header id="header">
+            
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 175 - 0
src/views/production/shiftField.vue

@@ -0,0 +1,175 @@
+<template>
+    <div class="shiftField">
+        <h2 style="margin-bottom: 20px;padding-bottom:7px;border-bottom:2px solid #ddd">调拨转舍</h2>
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">新增</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table
+                    ref="multipleTable"
+                    :data="tableData"
+                    tooltip-effect="dark"
+                    style="width: 100%"
+                    @selection-change="handleSelectionChange"
+                >
+                    <el-table-column type="selection" width="55"></el-table-column>
+                    <el-table-column prop="a" label="屠宰批次"></el-table-column>
+                    <el-table-column prop="b" label="产品名称"></el-table-column>
+                    <el-table-column prop="c" label="排酸时间"></el-table-column>
+                    <el-table-column prop="d" label="排酸前重量"></el-table-column>
+                    <el-table-column prop="e" label="排酸后重量"></el-table-column>
+                    <el-table-column prop="f" label="排酸损耗"></el-table-column>
+                    <el-table-column prop="g" label="负责人员"></el-table-column>
+                    <!-- <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <div style="margin-top: 20px">
+                    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
+                    <el-button @click="toggleSelection()">取消选择</el-button>
+                    <el-button @click="inStore">入待宰栏</el-button>
+                </div>
+
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+
+const pageSize = 10
+const tableData = [
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "带骨羊前腿",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "胴体",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                {
+                    a: "15463",
+                    b: "羔羊肉卷",
+                    c: "2020-07-14",
+                    d: "49kg",
+                    e: "48kg",
+                    f: "1.6%",
+                    g: "张小刚",
+                },
+                
+                
+            ]
+
+export default {
+    data() {
+        return {
+            value: "",
+            multipleSelection: [],
+            page: 1,
+            tableData
+        };
+    },
+    created() {},
+    methods: {
+        toggleSelection(rows) {
+            if (rows) {
+                rows.forEach(row => {
+                    this.$refs.multipleTable.toggleRowSelection(row);
+                });
+            } else {
+                this.$refs.multipleTable.clearSelection();
+            }
+        },
+        // 入待宰栏
+        inStore() {},
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 115 - 0
src/views/template/Aa.vue

@@ -0,0 +1,115 @@
+<template>
+<!-- 静态  -->
+    <div class="GroupRecord">
+        <header id="header">
+            <el-row type="flex">
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1区" value="11"></el-option>
+                        <el-option label="2区" value="22"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="1舍" value="13"></el-option>
+                        <el-option label="2舍" value="24"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-select v-model="value" placeholder="请选择">
+                        <el-option label="可用" value="15"></el-option>
+                        <el-option label="可用" value="26"></el-option>
+                    </el-select>
+                </el-col>
+                <el-col :span="4">
+                    <el-button type="primary">查找</el-button>
+                </el-col>
+            </el-row>
+        </header>
+        <section>
+            <article class="table">
+                <el-table :data="tableData" border style="width: 100%">
+                    <el-table-column prop="date" sortable label="日期" width="180"></el-table-column>
+                    <el-table-column prop="id" sortable label="猪编号" width="180"></el-table-column>
+                    <el-table-column prop="name" label="状态" width="180"></el-table-column>
+                    <el-table-column prop="address" label="耳标号"></el-table-column>
+                    <el-table-column label="操作" width="150">
+                        <template slot-scope="scope">
+                            <el-button @click="look(scope.row)" type="text" size="small">查看</el-button>
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
+                            <el-popconfirm title="是否删除此设备的信息?" @onConfirm="del(scope.row)">
+                                <el-button slot="reference" type="text" size="small">删除</el-button>
+                            </el-popconfirm>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-row type="flex" justify="end">
+                    <el-col :span="8" class="pagination">
+                        <el-pagination
+                            @current-change="pageChange"
+                            background
+                            layout="prev, pager, next"
+                            :page-count="10"
+                        ></el-pagination>
+                    </el-col>
+                </el-row>
+            </article>
+        </section>
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            value: "",
+            tableData: [
+                {
+                    date: "2020-05-02",
+                    name: "可用",
+                    id: '825',
+                    address: "6895564457554"
+                },
+                {
+                    date: "2020-05-04",
+                    name: "不可用",
+                    id: '826',
+                    address: "6895564456725"
+                },
+                {
+                    date: "2020-05-03",
+                    name: "可用",
+                    id: '830',
+                    address: "6895564457594"
+                }
+            ]
+        };
+    },
+    created() {},
+    methods: {
+        look(row) {
+            console.log(row)
+            this.$router.push({
+                path: 'UnityTrace',
+                query: row
+            })
+        },
+        edit(row) {},
+        del(row) {},
+        pageChange(p) {
+            console.log(p)
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+#header {
+    margin-bottom: 15px;
+}
+.table {
+    .pagination {
+        margin-top: 20px;
+    }
+}
+</style>

+ 20 - 0
src/views/template/Ab.vue

@@ -0,0 +1,20 @@
+<template>
+    <div class="GroupRecord">
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+        };
+    },
+    created() {},
+    methods: {
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 26 - 0
src/views/template/Ac.vue

@@ -0,0 +1,26 @@
+<template>
+    <div class="MessageBind">
+        
+    </div>
+</template>
+<script>
+
+
+export default {
+    name: "MessageBind",
+    data() {
+        return {
+            
+        };
+    },
+    mounted() {
+        
+    },
+    
+    methods: {
+        
+    }
+};
+
+</script>
+

+ 20 - 0
src/views/template/Ad.vue

@@ -0,0 +1,20 @@
+<template>
+    <div class="Ad">
+        <h1>Ad444999</h1>
+    </div>
+</template>
+
+<script>
+import { mapActions } from "vuex";
+
+export default {
+    name: "Ad",
+    data() {
+        return {};
+    },
+    created() {
+    },
+    methods: {
+    }
+};
+</script>

+ 19 - 0
src/views/template/Ae.vue

@@ -0,0 +1,19 @@
+<template>
+    <div class="Ad">
+        <h1>Ad555</h1>
+    </div>
+</template>
+
+<script>
+import { mapActions } from "vuex";
+
+export default {
+    name: "Ad",
+    data() {
+        return {};
+    },
+    created() {},
+    methods: {
+    }
+};
+</script>

+ 310 - 0
src/views/template/Af.vue

@@ -0,0 +1,310 @@
+<template>
+    <div class="Ad">
+        <h1>Ad666</h1>
+        <el-cascader :options="options" :props="{ checkStrictly: true }" v-model="value" clearable>
+            <template slot-scope="{ node, data }">
+                <span>{{ data.label }}</span>
+                <span v-if="!node.isLeaf">({{ data.children.length }})</span>
+            </template>
+        </el-cascader>
+    </div>
+</template>
+
+<script>
+
+export default {
+    name: "Af",
+    data() {
+        return {
+            value: ["zhinan", "shejiyuanze"],
+            options: [
+                {
+                    value: "zhinan",
+                    label: "指南",
+                    children: [
+                        {
+                            value: "shejiyuanze",
+                            label: "设计原则",
+                            children: [
+                                {
+                                    value: "yizhi",
+                                    label: "一致"
+                                },
+                                {
+                                    value: "fankui",
+                                    label: "反馈"
+                                },
+                                {
+                                    value: "xiaolv",
+                                    label: "效率"
+                                },
+                                {
+                                    value: "kekong",
+                                    label: "可控"
+                                }
+                            ]
+                        },
+                        {
+                            value: "daohang",
+                            label: "导航",
+                            children: [
+                                {
+                                    value: "cexiangdaohang",
+                                    label: "侧向导航"
+                                },
+                                {
+                                    value: "dingbudaohang",
+                                    label: "顶部导航"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    value: "zujian",
+                    label: "组件",
+                    children: [
+                        {
+                            value: "basic",
+                            label: "Basic",
+                            children: [
+                                {
+                                    value: "layout",
+                                    label: "Layout 布局"
+                                },
+                                {
+                                    value: "color",
+                                    label: "Color 色彩"
+                                },
+                                {
+                                    value: "typography",
+                                    label: "Typography 字体"
+                                },
+                                {
+                                    value: "icon",
+                                    label: "Icon 图标"
+                                },
+                                {
+                                    value: "button",
+                                    label: "Button 按钮"
+                                }
+                            ]
+                        },
+                        {
+                            value: "form",
+                            label: "Form",
+                            children: [
+                                {
+                                    value: "radio",
+                                    label: "Radio 单选框"
+                                },
+                                {
+                                    value: "checkbox",
+                                    label: "Checkbox 多选框"
+                                },
+                                {
+                                    value: "input",
+                                    label: "Input 输入框"
+                                },
+                                {
+                                    value: "input-number",
+                                    label: "InputNumber 计数器"
+                                },
+                                {
+                                    value: "select",
+                                    label: "Select 选择器"
+                                },
+                                {
+                                    value: "cascader",
+                                    label: "Cascader 级联选择器"
+                                },
+                                {
+                                    value: "switch",
+                                    label: "Switch 开关"
+                                },
+                                {
+                                    value: "slider",
+                                    label: "Slider 滑块"
+                                },
+                                {
+                                    value: "time-picker",
+                                    label: "TimePicker 时间选择器"
+                                },
+                                {
+                                    value: "date-picker",
+                                    label: "DatePicker 日期选择器"
+                                },
+                                {
+                                    value: "datetime-picker",
+                                    label: "DateTimePicker 日期时间选择器"
+                                },
+                                {
+                                    value: "upload",
+                                    label: "Upload 上传"
+                                },
+                                {
+                                    value: "rate",
+                                    label: "Rate 评分"
+                                },
+                                {
+                                    value: "form",
+                                    label: "Form 表单"
+                                }
+                            ]
+                        },
+                        {
+                            value: "data",
+                            label: "Data",
+                            children: [
+                                {
+                                    value: "table",
+                                    label: "Table 表格"
+                                },
+                                {
+                                    value: "tag",
+                                    label: "Tag 标签"
+                                },
+                                {
+                                    value: "progress",
+                                    label: "Progress 进度条"
+                                },
+                                {
+                                    value: "tree",
+                                    label: "Tree 树形控件"
+                                },
+                                {
+                                    value: "pagination",
+                                    label: "Pagination 分页"
+                                },
+                                {
+                                    value: "badge",
+                                    label: "Badge 标记"
+                                }
+                            ]
+                        },
+                        {
+                            value: "notice",
+                            label: "Notice",
+                            children: [
+                                {
+                                    value: "alert",
+                                    label: "Alert 警告"
+                                },
+                                {
+                                    value: "loading",
+                                    label: "Loading 加载"
+                                },
+                                {
+                                    value: "message",
+                                    label: "Message 消息提示"
+                                },
+                                {
+                                    value: "message-box",
+                                    label: "MessageBox 弹框"
+                                },
+                                {
+                                    value: "notification",
+                                    label: "Notification 通知"
+                                }
+                            ]
+                        },
+                        {
+                            value: "navigation",
+                            label: "Navigation",
+                            children: [
+                                {
+                                    value: "menu",
+                                    label: "NavMenu 导航菜单"
+                                },
+                                {
+                                    value: "tabs",
+                                    label: "Tabs 标签页"
+                                },
+                                {
+                                    value: "breadcrumb",
+                                    label: "Breadcrumb 面包屑"
+                                },
+                                {
+                                    value: "dropdown",
+                                    label: "Dropdown 下拉菜单"
+                                },
+                                {
+                                    value: "steps",
+                                    label: "Steps 步骤条"
+                                }
+                            ]
+                        },
+                        {
+                            value: "others",
+                            label: "Others",
+                            children: [
+                                {
+                                    value: "dialog",
+                                    label: "Dialog 对话框"
+                                },
+                                {
+                                    value: "tooltip",
+                                    label: "Tooltip 文字提示"
+                                },
+                                {
+                                    value: "popover",
+                                    label: "Popover 弹出框"
+                                },
+                                {
+                                    value: "card",
+                                    label: "Card 卡片"
+                                },
+                                {
+                                    value: "carousel",
+                                    label: "Carousel 走马灯"
+                                },
+                                {
+                                    value: "collapse",
+                                    label: "Collapse 折叠面板"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    value: "ziyuan",
+                    label: "资源",
+                    children: [
+                        {
+                            value: "axure",
+                            label: "Axure Components"
+                        },
+                        {
+                            value: "sketch",
+                            label: "Sketch Templates"
+                        },
+                        {
+                            value: "jiaohu",
+                            label: "组件交互文档"
+                        }
+                    ]
+                }
+            ]
+        };
+    },
+    created() {},
+    methods: {
+
+        get() {
+            this.fetch({
+                api: "core/memberInfo/list",
+                method: "GET",
+                data: {},
+                success: res => {
+                    console.log(res);
+                },
+                fail: err => {
+                    console.log(err);
+                    if (err.errMsg) this.$message.error(err.errMsg);
+                    else this.$message.error("服务器发生异常");
+                }
+            });
+        }
+    }
+};
+</script>

+ 343 - 0
theme/alert.css

@@ -0,0 +1,343 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-alert {
+  width: 100%;
+  padding: 8px 16px;
+  margin: 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  border-radius: 4px;
+  position: relative;
+  background-color: #FFFFFF;
+  overflow: hidden;
+  opacity: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-transition: opacity .2s;
+  transition: opacity .2s; }
+  .el-alert.is-light .el-alert__closebtn {
+    color: #C0C4CC; }
+  .el-alert.is-dark .el-alert__closebtn {
+    color: #FFFFFF; }
+  .el-alert.is-dark .el-alert__description {
+    color: #FFFFFF; }
+  .el-alert.is-center {
+    -webkit-box-pack: center;
+    -ms-flex-pack: center;
+    justify-content: center; }
+  .el-alert--success.is-light {
+    background-color: #f0f9eb;
+    color: #67C23A; }
+    .el-alert--success.is-light .el-alert__description {
+      color: #67C23A; }
+  .el-alert--success.is-dark {
+    background-color: #67C23A;
+    color: #FFFFFF; }
+  .el-alert--info.is-light {
+    background-color: #f4f4f5;
+    color: #909399; }
+  .el-alert--info.is-dark {
+    background-color: #909399;
+    color: #FFFFFF; }
+  .el-alert--info .el-alert__description {
+    color: #909399; }
+  .el-alert--warning.is-light {
+    background-color: #fdf6ec;
+    color: #E6A23C; }
+    .el-alert--warning.is-light .el-alert__description {
+      color: #E6A23C; }
+  .el-alert--warning.is-dark {
+    background-color: #E6A23C;
+    color: #FFFFFF; }
+  .el-alert--error.is-light {
+    background-color: #fef0f0;
+    color: #F56C6C; }
+    .el-alert--error.is-light .el-alert__description {
+      color: #F56C6C; }
+  .el-alert--error.is-dark {
+    background-color: #F56C6C;
+    color: #FFFFFF; }
+  .el-alert__content {
+    display: table-cell;
+    padding: 0 8px; }
+  .el-alert__icon {
+    font-size: 16px;
+    width: 16px; }
+    .el-alert__icon.is-big {
+      font-size: 28px;
+      width: 28px; }
+  .el-alert__title {
+    font-size: 13px;
+    line-height: 18px; }
+    .el-alert__title.is-bold {
+      font-weight: bold; }
+  .el-alert .el-alert__description {
+    font-size: 12px;
+    margin: 5px 0 0 0; }
+  .el-alert__closebtn {
+    font-size: 12px;
+    opacity: 1;
+    position: absolute;
+    top: 12px;
+    right: 15px;
+    cursor: pointer; }
+    .el-alert__closebtn.is-customed {
+      font-style: normal;
+      font-size: 13px;
+      top: 9px; }
+
+.el-alert-fade-enter,
+.el-alert-fade-leave-active {
+  opacity: 0; }

+ 136 - 0
theme/aside.css

@@ -0,0 +1,136 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+.el-aside {
+  overflow: auto;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  -ms-flex-negative: 0;
+  flex-shrink: 0; }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1467 - 0
theme/autocomplete.css


+ 284 - 0
theme/avatar.css

@@ -0,0 +1,284 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-avatar {
+  display: inline-block;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  text-align: center;
+  overflow: hidden;
+  color: #fff;
+  background: #C0C4CC;
+  width: 40px;
+  height: 40px;
+  line-height: 40px;
+  font-size: 14px; }
+  .el-avatar > img {
+    display: block;
+    height: 100%;
+    vertical-align: middle; }
+  .el-avatar--circle {
+    border-radius: 50%; }
+  .el-avatar--square {
+    border-radius: 4px; }
+  .el-avatar--icon {
+    font-size: 18px; }
+  .el-avatar--large {
+    width: 40px;
+    height: 40px;
+    line-height: 40px; }
+  .el-avatar--medium {
+    width: 36px;
+    height: 36px;
+    line-height: 36px; }
+  .el-avatar--small {
+    width: 28px;
+    height: 28px;
+    line-height: 28px; }

+ 273 - 0
theme/backtop.css

@@ -0,0 +1,273 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-backtop {
+  position: fixed;
+  background-color: #FFFFFF;
+  width: 40px;
+  height: 40px;
+  border-radius: 50%;
+  color: #029B62;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  font-size: 20px;
+  -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.12);
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.12);
+  cursor: pointer;
+  z-index: 5; }
+  .el-backtop:hover {
+    background-color: #F2F6FC; }

+ 290 - 0
theme/badge.css

@@ -0,0 +1,290 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-badge {
+  position: relative;
+  vertical-align: middle;
+  display: inline-block; }
+  .el-badge__content {
+    background-color: #F56C6C;
+    border-radius: 10px;
+    color: #FFFFFF;
+    display: inline-block;
+    font-size: 12px;
+    height: 18px;
+    line-height: 18px;
+    padding: 0 6px;
+    text-align: center;
+    white-space: nowrap;
+    border: 1px solid #FFFFFF; }
+    .el-badge__content.is-fixed {
+      position: absolute;
+      top: 0;
+      right: 10px;
+      -webkit-transform: translateY(-50%) translateX(100%);
+      transform: translateY(-50%) translateX(100%); }
+      .el-badge__content.is-fixed.is-dot {
+        right: 5px; }
+    .el-badge__content.is-dot {
+      height: 8px;
+      width: 8px;
+      padding: 0;
+      right: 0;
+      border-radius: 50%; }
+    .el-badge__content--primary {
+      background-color: #029B62; }
+    .el-badge__content--success {
+      background-color: #67C23A; }
+    .el-badge__content--warning {
+      background-color: #E6A23C; }
+    .el-badge__content--info {
+      background-color: #909399; }
+    .el-badge__content--danger {
+      background-color: #F56C6C; }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1244 - 0
theme/base.css


+ 0 - 0
theme/breadcrumb-item.css


+ 287 - 0
theme/breadcrumb.css

@@ -0,0 +1,287 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-breadcrumb {
+  font-size: 14px;
+  line-height: 1; }
+  .el-breadcrumb::before,
+  .el-breadcrumb::after {
+    display: table;
+    content: ""; }
+  .el-breadcrumb::after {
+    clear: both; }
+  .el-breadcrumb__separator {
+    margin: 0 9px;
+    font-weight: bold;
+    color: #C0C4CC; }
+    .el-breadcrumb__separator[class*=icon] {
+      margin: 0 6px;
+      font-weight: normal; }
+  .el-breadcrumb__item {
+    float: left; }
+    .el-breadcrumb__inner {
+      color: #606266; }
+      .el-breadcrumb__inner.is-link, .el-breadcrumb__inner a {
+        font-weight: bold;
+        text-decoration: none;
+        -webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+        transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+        color: #303133; }
+        .el-breadcrumb__inner.is-link:hover, .el-breadcrumb__inner a:hover {
+          color: #029B62;
+          cursor: pointer; }
+    .el-breadcrumb__item:last-child .el-breadcrumb__inner, .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,
+    .el-breadcrumb__item:last-child .el-breadcrumb__inner a,
+    .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover {
+      font-weight: normal;
+      color: #606266;
+      cursor: text; }
+    .el-breadcrumb__item:last-child .el-breadcrumb__separator {
+      display: none; }

+ 0 - 0
theme/button-group.css


+ 762 - 0
theme/button.css

@@ -0,0 +1,762 @@
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+.el-button {
+  display: inline-block;
+  line-height: 1;
+  white-space: nowrap;
+  cursor: pointer;
+  background: #FFFFFF;
+  border: 1px solid #DCDFE6;
+  border-color: #DCDFE6;
+  color: #606266;
+  -webkit-appearance: none;
+  text-align: center;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  outline: none;
+  margin: 0;
+  -webkit-transition: .1s;
+  transition: .1s;
+  font-weight: 500;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+  padding: 12px 20px;
+  font-size: 14px;
+  border-radius: 4px; }
+  .el-button + .el-button {
+    margin-left: 10px; }
+  .el-button.is-round {
+    padding: 12px 20px; }
+  .el-button:hover, .el-button:focus {
+    color: #029B62;
+    border-color: #b3e1d0;
+    background-color: #e6f5ef; }
+  .el-button:active {
+    color: #028c58;
+    border-color: #028c58;
+    outline: none; }
+  .el-button::-moz-focus-inner {
+    border: 0; }
+  .el-button [class*="el-icon-"] + span {
+    margin-left: 5px; }
+  .el-button.is-plain:hover, .el-button.is-plain:focus {
+    background: #FFFFFF;
+    border-color: #029B62;
+    color: #029B62; }
+  .el-button.is-plain:active {
+    background: #FFFFFF;
+    border-color: #028c58;
+    color: #028c58;
+    outline: none; }
+  .el-button.is-active {
+    color: #028c58;
+    border-color: #028c58; }
+  .el-button.is-disabled, .el-button.is-disabled:hover, .el-button.is-disabled:focus {
+    color: #C0C4CC;
+    cursor: not-allowed;
+    background-image: none;
+    background-color: #FFFFFF;
+    border-color: #EBEEF5; }
+  .el-button.is-disabled.el-button--text {
+    background-color: transparent; }
+  .el-button.is-disabled.is-plain, .el-button.is-disabled.is-plain:hover, .el-button.is-disabled.is-plain:focus {
+    background-color: #FFFFFF;
+    border-color: #EBEEF5;
+    color: #C0C4CC; }
+  .el-button.is-loading {
+    position: relative;
+    pointer-events: none; }
+    .el-button.is-loading:before {
+      pointer-events: none;
+      content: '';
+      position: absolute;
+      left: -1px;
+      top: -1px;
+      right: -1px;
+      bottom: -1px;
+      border-radius: inherit;
+      background-color: rgba(255, 255, 255, 0.35); }
+  .el-button.is-round {
+    border-radius: 20px;
+    padding: 12px 23px; }
+  .el-button.is-circle {
+    border-radius: 50%;
+    padding: 12px; }
+  .el-button--primary {
+    color: #FFFFFF;
+    background-color: #029B62;
+    border-color: #029B62; }
+    .el-button--primary:hover, .el-button--primary:focus {
+      background: #35af81;
+      border-color: #35af81;
+      color: #FFFFFF; }
+    .el-button--primary:active {
+      background: #028c58;
+      border-color: #028c58;
+      color: #FFFFFF;
+      outline: none; }
+    .el-button--primary.is-active {
+      background: #028c58;
+      border-color: #028c58;
+      color: #FFFFFF; }
+    .el-button--primary.is-disabled, .el-button--primary.is-disabled:hover, .el-button--primary.is-disabled:focus, .el-button--primary.is-disabled:active {
+      color: #FFFFFF;
+      background-color: #81cdb1;
+      border-color: #81cdb1; }
+    .el-button--primary.is-plain {
+      color: #029B62;
+      background: #e6f5ef;
+      border-color: #9ad7c0; }
+      .el-button--primary.is-plain:hover, .el-button--primary.is-plain:focus {
+        background: #029B62;
+        border-color: #029B62;
+        color: #FFFFFF; }
+      .el-button--primary.is-plain:active {
+        background: #028c58;
+        border-color: #028c58;
+        color: #FFFFFF;
+        outline: none; }
+      .el-button--primary.is-plain.is-disabled, .el-button--primary.is-plain.is-disabled:hover, .el-button--primary.is-plain.is-disabled:focus, .el-button--primary.is-plain.is-disabled:active {
+        color: #67c3a1;
+        background-color: #e6f5ef;
+        border-color: #ccebe0; }
+  .el-button--success {
+    color: #FFFFFF;
+    background-color: #67C23A;
+    border-color: #67C23A; }
+    .el-button--success:hover, .el-button--success:focus {
+      background: #85ce61;
+      border-color: #85ce61;
+      color: #FFFFFF; }
+    .el-button--success:active {
+      background: #5daf34;
+      border-color: #5daf34;
+      color: #FFFFFF;
+      outline: none; }
+    .el-button--success.is-active {
+      background: #5daf34;
+      border-color: #5daf34;
+      color: #FFFFFF; }
+    .el-button--success.is-disabled, .el-button--success.is-disabled:hover, .el-button--success.is-disabled:focus, .el-button--success.is-disabled:active {
+      color: #FFFFFF;
+      background-color: #b3e19d;
+      border-color: #b3e19d; }
+    .el-button--success.is-plain {
+      color: #67C23A;
+      background: #f0f9eb;
+      border-color: #c2e7b0; }
+      .el-button--success.is-plain:hover, .el-button--success.is-plain:focus {
+        background: #67C23A;
+        border-color: #67C23A;
+        color: #FFFFFF; }
+      .el-button--success.is-plain:active {
+        background: #5daf34;
+        border-color: #5daf34;
+        color: #FFFFFF;
+        outline: none; }
+      .el-button--success.is-plain.is-disabled, .el-button--success.is-plain.is-disabled:hover, .el-button--success.is-plain.is-disabled:focus, .el-button--success.is-plain.is-disabled:active {
+        color: #a4da89;
+        background-color: #f0f9eb;
+        border-color: #e1f3d8; }
+  .el-button--warning {
+    color: #FFFFFF;
+    background-color: #E6A23C;
+    border-color: #E6A23C; }
+    .el-button--warning:hover, .el-button--warning:focus {
+      background: #ebb563;
+      border-color: #ebb563;
+      color: #FFFFFF; }
+    .el-button--warning:active {
+      background: #cf9236;
+      border-color: #cf9236;
+      color: #FFFFFF;
+      outline: none; }
+    .el-button--warning.is-active {
+      background: #cf9236;
+      border-color: #cf9236;
+      color: #FFFFFF; }
+    .el-button--warning.is-disabled, .el-button--warning.is-disabled:hover, .el-button--warning.is-disabled:focus, .el-button--warning.is-disabled:active {
+      color: #FFFFFF;
+      background-color: #f3d19e;
+      border-color: #f3d19e; }
+    .el-button--warning.is-plain {
+      color: #E6A23C;
+      background: #fdf6ec;
+      border-color: #f5dab1; }
+      .el-button--warning.is-plain:hover, .el-button--warning.is-plain:focus {
+        background: #E6A23C;
+        border-color: #E6A23C;
+        color: #FFFFFF; }
+      .el-button--warning.is-plain:active {
+        background: #cf9236;
+        border-color: #cf9236;
+        color: #FFFFFF;
+        outline: none; }
+      .el-button--warning.is-plain.is-disabled, .el-button--warning.is-plain.is-disabled:hover, .el-button--warning.is-plain.is-disabled:focus, .el-button--warning.is-plain.is-disabled:active {
+        color: #f0c78a;
+        background-color: #fdf6ec;
+        border-color: #faecd8; }
+  .el-button--danger {
+    color: #FFFFFF;
+    background-color: #F56C6C;
+    border-color: #F56C6C; }
+    .el-button--danger:hover, .el-button--danger:focus {
+      background: #f78989;
+      border-color: #f78989;
+      color: #FFFFFF; }
+    .el-button--danger:active {
+      background: #dd6161;
+      border-color: #dd6161;
+      color: #FFFFFF;
+      outline: none; }
+    .el-button--danger.is-active {
+      background: #dd6161;
+      border-color: #dd6161;
+      color: #FFFFFF; }
+    .el-button--danger.is-disabled, .el-button--danger.is-disabled:hover, .el-button--danger.is-disabled:focus, .el-button--danger.is-disabled:active {
+      color: #FFFFFF;
+      background-color: #fab6b6;
+      border-color: #fab6b6; }
+    .el-button--danger.is-plain {
+      color: #F56C6C;
+      background: #fef0f0;
+      border-color: #fbc4c4; }
+      .el-button--danger.is-plain:hover, .el-button--danger.is-plain:focus {
+        background: #F56C6C;
+        border-color: #F56C6C;
+        color: #FFFFFF; }
+      .el-button--danger.is-plain:active {
+        background: #dd6161;
+        border-color: #dd6161;
+        color: #FFFFFF;
+        outline: none; }
+      .el-button--danger.is-plain.is-disabled, .el-button--danger.is-plain.is-disabled:hover, .el-button--danger.is-plain.is-disabled:focus, .el-button--danger.is-plain.is-disabled:active {
+        color: #f9a7a7;
+        background-color: #fef0f0;
+        border-color: #fde2e2; }
+  .el-button--info {
+    color: #FFFFFF;
+    background-color: #909399;
+    border-color: #909399; }
+    .el-button--info:hover, .el-button--info:focus {
+      background: #a6a9ad;
+      border-color: #a6a9ad;
+      color: #FFFFFF; }
+    .el-button--info:active {
+      background: #82848a;
+      border-color: #82848a;
+      color: #FFFFFF;
+      outline: none; }
+    .el-button--info.is-active {
+      background: #82848a;
+      border-color: #82848a;
+      color: #FFFFFF; }
+    .el-button--info.is-disabled, .el-button--info.is-disabled:hover, .el-button--info.is-disabled:focus, .el-button--info.is-disabled:active {
+      color: #FFFFFF;
+      background-color: #c8c9cc;
+      border-color: #c8c9cc; }
+    .el-button--info.is-plain {
+      color: #909399;
+      background: #f4f4f5;
+      border-color: #d3d4d6; }
+      .el-button--info.is-plain:hover, .el-button--info.is-plain:focus {
+        background: #909399;
+        border-color: #909399;
+        color: #FFFFFF; }
+      .el-button--info.is-plain:active {
+        background: #82848a;
+        border-color: #82848a;
+        color: #FFFFFF;
+        outline: none; }
+      .el-button--info.is-plain.is-disabled, .el-button--info.is-plain.is-disabled:hover, .el-button--info.is-plain.is-disabled:focus, .el-button--info.is-plain.is-disabled:active {
+        color: #bcbec2;
+        background-color: #f4f4f5;
+        border-color: #e9e9eb; }
+  .el-button--medium {
+    padding: 10px 20px;
+    font-size: 14px;
+    border-radius: 4px; }
+    .el-button--medium.is-round {
+      padding: 10px 20px; }
+    .el-button--medium.is-circle {
+      padding: 10px; }
+  .el-button--small {
+    padding: 9px 15px;
+    font-size: 12px;
+    border-radius: 3px; }
+    .el-button--small.is-round {
+      padding: 9px 15px; }
+    .el-button--small.is-circle {
+      padding: 9px; }
+  .el-button--mini {
+    padding: 7px 15px;
+    font-size: 12px;
+    border-radius: 3px; }
+    .el-button--mini.is-round {
+      padding: 7px 15px; }
+    .el-button--mini.is-circle {
+      padding: 7px; }
+  .el-button--text {
+    border-color: transparent;
+    color: #029B62;
+    background: transparent;
+    padding-left: 0;
+    padding-right: 0; }
+    .el-button--text:hover, .el-button--text:focus {
+      color: #35af81;
+      border-color: transparent;
+      background-color: transparent; }
+    .el-button--text:active {
+      color: #028c58;
+      border-color: transparent;
+      background-color: transparent; }
+    .el-button--text.is-disabled, .el-button--text.is-disabled:hover, .el-button--text.is-disabled:focus {
+      border-color: transparent; }
+
+.el-button-group {
+  display: inline-block;
+  vertical-align: middle; }
+  .el-button-group::before,
+  .el-button-group::after {
+    display: table;
+    content: ""; }
+  .el-button-group::after {
+    clear: both; }
+  .el-button-group > .el-button {
+    float: left;
+    position: relative; }
+    .el-button-group > .el-button + .el-button {
+      margin-left: 0; }
+    .el-button-group > .el-button.is-disabled {
+      z-index: 1; }
+    .el-button-group > .el-button:first-child {
+      border-top-right-radius: 0;
+      border-bottom-right-radius: 0; }
+    .el-button-group > .el-button:last-child {
+      border-top-left-radius: 0;
+      border-bottom-left-radius: 0; }
+    .el-button-group > .el-button:first-child:last-child {
+      border-top-right-radius: 4px;
+      border-bottom-right-radius: 4px;
+      border-top-left-radius: 4px;
+      border-bottom-left-radius: 4px; }
+      .el-button-group > .el-button:first-child:last-child.is-round {
+        border-radius: 20px; }
+      .el-button-group > .el-button:first-child:last-child.is-circle {
+        border-radius: 50%; }
+    .el-button-group > .el-button:not(:first-child):not(:last-child) {
+      border-radius: 0; }
+    .el-button-group > .el-button:not(:last-child) {
+      margin-right: -1px; }
+    .el-button-group > .el-button:hover, .el-button-group > .el-button:focus, .el-button-group > .el-button:active {
+      z-index: 1; }
+    .el-button-group > .el-button.is-active {
+      z-index: 1; }
+  .el-button-group > .el-dropdown > .el-button {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--primary:first-child {
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--primary:last-child {
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--primary:not(:first-child):not(:last-child) {
+    border-left-color: rgba(255, 255, 255, 0.5);
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--success:first-child {
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--success:last-child {
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--success:not(:first-child):not(:last-child) {
+    border-left-color: rgba(255, 255, 255, 0.5);
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--warning:first-child {
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--warning:last-child {
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--warning:not(:first-child):not(:last-child) {
+    border-left-color: rgba(255, 255, 255, 0.5);
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--danger:first-child {
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--danger:last-child {
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--danger:not(:first-child):not(:last-child) {
+    border-left-color: rgba(255, 255, 255, 0.5);
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--info:first-child {
+    border-right-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--info:last-child {
+    border-left-color: rgba(255, 255, 255, 0.5); }
+  .el-button-group .el-button--info:not(:first-child):not(:last-child) {
+    border-left-color: rgba(255, 255, 255, 0.5);
+    border-right-color: rgba(255, 255, 255, 0.5); }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1065 - 0
theme/calendar.css


+ 271 - 0
theme/card.css

@@ -0,0 +1,271 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-card {
+  border-radius: 4px;
+  border: 1px solid #EBEEF5;
+  background-color: #FFFFFF;
+  overflow: hidden;
+  color: #303133;
+  -webkit-transition: 0.3s;
+  transition: 0.3s; }
+  .el-card.is-always-shadow {
+    -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); }
+  .el-card.is-hover-shadow:hover, .el-card.is-hover-shadow:focus {
+    -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); }
+  .el-card__header {
+    padding: 18px 20px;
+    border-bottom: 1px solid #EBEEF5;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box; }
+  .el-card__body {
+    padding: 20px; }

+ 291 - 0
theme/carousel-item.css

@@ -0,0 +1,291 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-carousel__item {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+  overflow: hidden;
+  z-index: 0; }
+  .el-carousel__item.is-active {
+    z-index: 2; }
+  .el-carousel__item.is-animating {
+    -webkit-transition: -webkit-transform .4s ease-in-out;
+    transition: -webkit-transform .4s ease-in-out;
+    transition: transform .4s ease-in-out;
+    transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; }
+  .el-carousel__item--card {
+    width: 50%;
+    -webkit-transition: -webkit-transform .4s ease-in-out;
+    transition: -webkit-transform .4s ease-in-out;
+    transition: transform .4s ease-in-out;
+    transition: transform .4s ease-in-out, -webkit-transform .4s ease-in-out; }
+    .el-carousel__item--card.is-in-stage {
+      cursor: pointer;
+      z-index: 1; }
+      .el-carousel__item--card.is-in-stage:hover .el-carousel__mask,
+      .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask {
+        opacity: 0.12; }
+    .el-carousel__item--card.is-active {
+      z-index: 2; }
+
+.el-carousel__mask {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  background-color: #FFFFFF;
+  opacity: 0.24;
+  -webkit-transition: .2s;
+  transition: .2s; }

+ 367 - 0
theme/carousel.css

@@ -0,0 +1,367 @@
+/* BEM support Func
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+/* Break-points
+ -------------------------- */
+/* Scrollbar
+ -------------------------- */
+/* Placeholder
+ -------------------------- */
+/* BEM
+ -------------------------- */
+/* Element Chalk Variables */
+/* Transition
+-------------------------- */
+/* Color
+-------------------------- */
+/* 53a8ff */
+/* 66b1ff */
+/* 79bbff */
+/* 8cc5ff */
+/* a0cfff */
+/* b3d8ff */
+/* c6e2ff */
+/* d9ecff */
+/* ecf5ff */
+/* Link
+-------------------------- */
+/* Border
+-------------------------- */
+/* Fill
+-------------------------- */
+/* Typography
+-------------------------- */
+/* Size
+-------------------------- */
+/* z-index
+-------------------------- */
+/* Disable base
+-------------------------- */
+/* Icon
+-------------------------- */
+/* Checkbox
+-------------------------- */
+/* Radio
+-------------------------- */
+/* Select
+-------------------------- */
+/* Alert
+-------------------------- */
+/* MessageBox
+-------------------------- */
+/* Message
+-------------------------- */
+/* Notification
+-------------------------- */
+/* Input
+-------------------------- */
+/* Cascader
+-------------------------- */
+/* Group
+-------------------------- */
+/* Tab
+-------------------------- */
+/* Button
+-------------------------- */
+/* cascader
+-------------------------- */
+/* Switch
+-------------------------- */
+/* Dialog
+-------------------------- */
+/* Table
+-------------------------- */
+/* Pagination
+-------------------------- */
+/* Popup
+-------------------------- */
+/* Popover
+-------------------------- */
+/* Tooltip
+-------------------------- */
+/* Tag
+-------------------------- */
+/* Tree
+-------------------------- */
+/* Dropdown
+-------------------------- */
+/* Badge
+-------------------------- */
+/* Card
+--------------------------*/
+/* Slider
+--------------------------*/
+/* Steps
+--------------------------*/
+/* Menu
+--------------------------*/
+/* Rate
+--------------------------*/
+/* DatePicker
+--------------------------*/
+/* Loading
+--------------------------*/
+/* Scrollbar
+--------------------------*/
+/* Carousel
+--------------------------*/
+/* Collapse
+--------------------------*/
+/* Transfer
+--------------------------*/
+/* Header
+  --------------------------*/
+/* Footer
+--------------------------*/
+/* Main
+--------------------------*/
+/* Timeline
+--------------------------*/
+/* Backtop
+--------------------------*/
+/* Link
+--------------------------*/
+/* Calendar
+--------------------------*/
+/* Form
+-------------------------- */
+/* Avatar
+--------------------------*/
+/* Break-point
+--------------------------*/
+.el-carousel {
+  position: relative; }
+  .el-carousel--horizontal {
+    overflow-x: hidden; }
+  .el-carousel--vertical {
+    overflow-y: hidden; }
+  .el-carousel__container {
+    position: relative;
+    height: 300px; }
+  .el-carousel__arrow {
+    border: none;
+    outline: none;
+    padding: 0;
+    margin: 0;
+    height: 36px;
+    width: 36px;
+    cursor: pointer;
+    -webkit-transition: .3s;
+    transition: .3s;
+    border-radius: 50%;
+    background-color: rgba(31, 45, 61, 0.11);
+    color: #FFFFFF;
+    position: absolute;
+    top: 50%;
+    z-index: 10;
+    -webkit-transform: translateY(-50%);
+    transform: translateY(-50%);
+    text-align: center;
+    font-size: 12px; }
+    .el-carousel__arrow--left {
+      left: 16px; }
+    .el-carousel__arrow--right {
+      right: 16px; }
+    .el-carousel__arrow:hover {
+      background-color: rgba(31, 45, 61, 0.23); }
+    .el-carousel__arrow i {
+      cursor: pointer; }
+  .el-carousel__indicators {
+    position: absolute;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    z-index: 2; }
+    .el-carousel__indicators--horizontal {
+      bottom: 0;
+      left: 50%;
+      -webkit-transform: translateX(-50%);
+      transform: translateX(-50%); }
+    .el-carousel__indicators--vertical {
+      right: 0;
+      top: 50%;
+      -webkit-transform: translateY(-50%);
+      transform: translateY(-50%); }
+    .el-carousel__indicators--outside {
+      bottom: 26px;
+      text-align: center;
+      position: static;
+      -webkit-transform: none;
+      transform: none; }
+      .el-carousel__indicators--outside .el-carousel__indicator:hover button {
+        opacity: 0.64; }
+      .el-carousel__indicators--outside button {
+        background-color: #C0C4CC;
+        opacity: 0.24; }
+    .el-carousel__indicators--labels {
+      left: 0;
+      right: 0;
+      -webkit-transform: none;
+      transform: none;
+      text-align: center; }
+      .el-carousel__indicators--labels .el-carousel__button {
+        height: auto;
+        width: auto;
+        padding: 2px 18px;
+        font-size: 12px; }
+      .el-carousel__indicators--labels .el-carousel__indicator {
+        padding: 6px 4px; }
+  .el-carousel__indicator {
+    background-color: transparent;
+    cursor: pointer; }
+    .el-carousel__indicator:hover button {
+      opacity: 0.72; }
+    .el-carousel__indicator--horizontal {
+      display: inline-block;
+      padding: 12px 4px; }
+    .el-carousel__indicator--vertical {
+      padding: 4px 12px; }
+      .el-carousel__indicator--vertical .el-carousel__button {
+        width: 2px;
+        height: 15px; }
+    .el-carousel__indicator.is-active button {
+      opacity: 1; }
+  .el-carousel__button {
+    display: block;
+    opacity: 0.48;
+    width: 30px;
+    height: 2px;
+    background-color: #FFFFFF;
+    border: none;
+    outline: none;
+    padding: 0;
+    margin: 0;
+    cursor: pointer;
+    -webkit-transition: .3s;
+    transition: .3s; }
+
+.carousel-arrow-left-enter,
+.carousel-arrow-left-leave-active {
+  -webkit-transform: translateY(-50%) translateX(-10px);
+  transform: translateY(-50%) translateX(-10px);
+  opacity: 0; }
+
+.carousel-arrow-right-enter,
+.carousel-arrow-right-leave-active {
+  -webkit-transform: translateY(-50%) translateX(10px);
+  transform: translateY(-50%) translateX(10px);
+  opacity: 0; }

+ 0 - 0
theme/cascader-panel.css


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