From a127d6f905fa2a3a47e2dd872ca24db70c158dd2 Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期五, 08 三月 2024 15:42:32 +0800
Subject: [PATCH] 更改头部
---
admin/src/components/common/ImportButton.vue | 37
admin/src/assets/images/category/ic_kongtiao@2x.png | 0
admin/src/assets/images/pk_defult.png | 0
admin/src/assets/images/Samsung@2x.png | 0
admin/src/assets/images/ic_delete@2x.png | 0
admin/src/assets/images/top_ic_chilun@2x.png | 0
admin/src/assets/icons/plat/company_add.png | 0
admin/src/assets/style/alertstyle.scss | 32
admin/src/components/common/myImage.vue | 84 +
admin/src/assets/style/style.scss | 64 +
admin/package-lock.json | 160 +-
admin/src/assets/images/login_bg.png | 0
admin/vue.config.js | 3
admin/src/assets/images/login_img.jpg | 0
admin/src/components/common/UploadAvatarVideo.vue | 128 ++
admin/src/assets/images/category/ic_kaoxiang@2x.png | 0
admin/src/components/common/Light.vue | 29
admin/src/plugins/messagebox.js | 44
admin/src/App.vue | 10
admin/src/components/common/RichEditor.vue | 158 +++
admin/src/assets/images/ic_img@2x.png | 0
admin/src/assets/style/variables.scss | 11
admin/src/components/common/UploadFile.vue | 123 ++
admin/src/assets/icons/company/tax.png | 0
admin/src/components/common/DepartmentSelect.vue | 3
admin/src/components/common/Tree.vue | 98 -
admin/src/components/common/UploadFileCommon.vue | 150 ++
admin/src/assets/images/category/ic_qita@2x.png | 0
admin/src/assets/images/category/ic_yanzao@2x.png | 0
admin/src/components/common/GlobalAlertWindow.vue | 120 ++
server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java | 4
admin/src/assets/style/lib.css | 117 ++
admin/src/components/common/ImportWindow.vue | 204 +++
admin/src/assets/images/ic_copy@2x.png | 0
admin/src/assets/icons/plat/change_apply_check.png | 0
admin/src/components/common/GlobalWindow.vue | 33
admin/src/components/common/Header.vue | 167 --
admin/src/assets/images/banner_defult.png | 0
admin/src/assets/images/category/ic_reshuiqi@2x.png | 0
admin/src/components/common/UploadImage.vue | 155 ++
admin/src/assets/images/top_ic_bolang@2x.png | 0
admin/src/assets/images/woman.png | 0
admin/src/assets/icons/company/dipatch_unit.png | 0
admin/src/assets/icons/company/change_apply.png | 0
admin/src/assets/images/category/ic_bingxiang@2x.png | 0
admin/src/components/common/tagsview.vue | 261 +++++
admin/src/components/common/TreeSelect.vue | 2
admin/src/assets/images/Galanz@2x.png | 0
admin/src/assets/avatar/man.png | 0
admin/src/assets/images/category/ic_jinshui@2x.png | 0
admin/src/components/base/BaseOpera.vue | 16
admin/src/components/common/Menu.vue | 63
admin/src/assets/style/element-variables.scss | 1
admin/src/assets/images/ic_search@2x.png | 0
admin/src/layouts/TableLayout1.vue | 4
admin/src/assets/icons/plat/tax_check.png | 0
admin/src/components/common/MenuSelect.vue | 32
server/dmvisit_admin/src/main/resources/application.yml | 2
admin/src/components/common/upload.vue | 141 ++
admin/src/assets/images/login_img.png | 0
admin/src/components/common/SearchFormCollapse.vue | 2
admin/src/assets/icons/plat/apply_check.png | 0
admin/src/assets/icons/plat/settle_check.png | 0
admin/src/assets/images/category/ic_dianshi@2x.png | 0
admin/src/assets/icons/company/apply.png | 0
admin/src/components/common/Pagination.vue | 2
admin/src/assets/icons/company/settle.png | 0
admin/src/assets/images/category/ic_xiwanji@2x.png | 0
admin/src/layouts/AppLayout.vue | 119 +
admin/src/components/common/ShowRich.vue | 42
admin/src/components/common/UploadAvatarImage.vue | 126 ++
admin/src/layouts/TableLayout.vue | 4
admin/src/assets/images/category/ic_xiyiji @2x.png | 0
server/dmvisit_web/src/main/resources/application.yml | 2
admin/src/assets/images/ar_open@2x.png | 0
admin/src/store/index.js | 43
admin/src/components/common/PositionSelect.vue | 2
admin/src/assets/images/background_defult.png | 0
admin/src/components/common/GlobalQuestionWindow.vue | 137 ++
admin/src/assets/avatar/woman.png | 0
admin/src/assets/images/zan.png | 0
admin/src/components/base/BaseTable.vue | 8
admin/src/assets/images/ic_pk@2x.png | 0
admin/src/assets/images/man.png | 0
admin/src/components/common/GlobalRigthWindow.vue | 137 ++
85 files changed, 2,652 insertions(+), 428 deletions(-)
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 50d988a..697ba46 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -1819,6 +1819,63 @@
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"dev": true
},
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "optional": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
"ssri": {
"version": "8.0.1",
"resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1826,6 +1883,28 @@
"dev": true,
"requires": {
"minipass": "^3.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "vue-loader-v16": {
+ "version": "npm:vue-loader@16.8.3",
+ "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+ "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "loader-utils": "^2.0.0"
}
}
}
@@ -13486,87 +13565,6 @@
"resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
"dev": true
- }
- }
- },
- "vue-loader-v16": {
- "version": "npm:vue-loader@16.8.3",
- "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
- "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
- "dev": true,
- "optional": true,
- "requires": {
- "chalk": "^4.1.0",
- "hash-sum": "^2.0.0",
- "loader-utils": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "optional": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "optional": true
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "optional": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "optional": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
diff --git a/admin/src/App.vue b/admin/src/App.vue
index 2892abe..d22b2c9 100644
--- a/admin/src/App.vue
+++ b/admin/src/App.vue
@@ -3,10 +3,20 @@
</template>
<style lang="scss">
+@import "assets/style/lib.css";
// 寮曞叆鍏ㄥ眬鏍峰紡
@import "assets/style/style";
// 寮曞叆绯荤粺鍐呯疆鍥炬爣
@import "assets/icons/system/index";
// 寮曞叆鑷畾涔夊浘鏍�
@import "assets/icons/ext/index";
+.long-title-style {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ -webkit-text-overflow: ellipsis;
+ overflow: hidden;
+}
+.el-tooltip__popper.is-dark {
+ max-width: 400px;
+}
</style>
diff --git a/admin/src/assets/avatar/man.png b/admin/src/assets/avatar/man.png
new file mode 100644
index 0000000..a84beb9
--- /dev/null
+++ b/admin/src/assets/avatar/man.png
Binary files differ
diff --git a/admin/src/assets/avatar/woman.png b/admin/src/assets/avatar/woman.png
new file mode 100644
index 0000000..eef8695
--- /dev/null
+++ b/admin/src/assets/avatar/woman.png
Binary files differ
diff --git a/admin/src/assets/icons/company/apply.png b/admin/src/assets/icons/company/apply.png
new file mode 100644
index 0000000..6245a0f
--- /dev/null
+++ b/admin/src/assets/icons/company/apply.png
Binary files differ
diff --git a/admin/src/assets/icons/company/change_apply.png b/admin/src/assets/icons/company/change_apply.png
new file mode 100644
index 0000000..f3d6bf7
--- /dev/null
+++ b/admin/src/assets/icons/company/change_apply.png
Binary files differ
diff --git a/admin/src/assets/icons/company/dipatch_unit.png b/admin/src/assets/icons/company/dipatch_unit.png
new file mode 100644
index 0000000..711cfa4
--- /dev/null
+++ b/admin/src/assets/icons/company/dipatch_unit.png
Binary files differ
diff --git a/admin/src/assets/icons/company/settle.png b/admin/src/assets/icons/company/settle.png
new file mode 100644
index 0000000..001dc0a
--- /dev/null
+++ b/admin/src/assets/icons/company/settle.png
Binary files differ
diff --git a/admin/src/assets/icons/company/tax.png b/admin/src/assets/icons/company/tax.png
new file mode 100644
index 0000000..921d0b8
--- /dev/null
+++ b/admin/src/assets/icons/company/tax.png
Binary files differ
diff --git a/admin/src/assets/icons/plat/apply_check.png b/admin/src/assets/icons/plat/apply_check.png
new file mode 100644
index 0000000..6245a0f
--- /dev/null
+++ b/admin/src/assets/icons/plat/apply_check.png
Binary files differ
diff --git a/admin/src/assets/icons/plat/change_apply_check.png b/admin/src/assets/icons/plat/change_apply_check.png
new file mode 100644
index 0000000..f3d6bf7
--- /dev/null
+++ b/admin/src/assets/icons/plat/change_apply_check.png
Binary files differ
diff --git a/admin/src/assets/icons/plat/company_add.png b/admin/src/assets/icons/plat/company_add.png
new file mode 100644
index 0000000..711cfa4
--- /dev/null
+++ b/admin/src/assets/icons/plat/company_add.png
Binary files differ
diff --git a/admin/src/assets/icons/plat/settle_check.png b/admin/src/assets/icons/plat/settle_check.png
new file mode 100644
index 0000000..518dbcd
--- /dev/null
+++ b/admin/src/assets/icons/plat/settle_check.png
Binary files differ
diff --git a/admin/src/assets/icons/plat/tax_check.png b/admin/src/assets/icons/plat/tax_check.png
new file mode 100644
index 0000000..921d0b8
--- /dev/null
+++ b/admin/src/assets/icons/plat/tax_check.png
Binary files differ
diff --git a/admin/src/assets/images/Galanz@2x.png b/admin/src/assets/images/Galanz@2x.png
new file mode 100644
index 0000000..bbdfef9
--- /dev/null
+++ b/admin/src/assets/images/Galanz@2x.png
Binary files differ
diff --git a/admin/src/assets/images/Samsung@2x.png b/admin/src/assets/images/Samsung@2x.png
new file mode 100644
index 0000000..91ecbe7
--- /dev/null
+++ b/admin/src/assets/images/Samsung@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ar_open@2x.png b/admin/src/assets/images/ar_open@2x.png
new file mode 100644
index 0000000..7fbbb8e
--- /dev/null
+++ b/admin/src/assets/images/ar_open@2x.png
Binary files differ
diff --git a/admin/src/assets/images/background_defult.png b/admin/src/assets/images/background_defult.png
new file mode 100644
index 0000000..d930b7c
--- /dev/null
+++ b/admin/src/assets/images/background_defult.png
Binary files differ
diff --git a/admin/src/assets/images/banner_defult.png b/admin/src/assets/images/banner_defult.png
new file mode 100644
index 0000000..1318be1
--- /dev/null
+++ b/admin/src/assets/images/banner_defult.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_bingxiang@2x.png b/admin/src/assets/images/category/ic_bingxiang@2x.png
new file mode 100644
index 0000000..8765eaf
--- /dev/null
+++ b/admin/src/assets/images/category/ic_bingxiang@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_dianshi@2x.png b/admin/src/assets/images/category/ic_dianshi@2x.png
new file mode 100644
index 0000000..3fde123
--- /dev/null
+++ b/admin/src/assets/images/category/ic_dianshi@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_jinshui@2x.png b/admin/src/assets/images/category/ic_jinshui@2x.png
new file mode 100644
index 0000000..7b9473e
--- /dev/null
+++ b/admin/src/assets/images/category/ic_jinshui@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_kaoxiang@2x.png b/admin/src/assets/images/category/ic_kaoxiang@2x.png
new file mode 100644
index 0000000..043c75b
--- /dev/null
+++ b/admin/src/assets/images/category/ic_kaoxiang@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_kongtiao@2x.png b/admin/src/assets/images/category/ic_kongtiao@2x.png
new file mode 100644
index 0000000..0a14d62
--- /dev/null
+++ b/admin/src/assets/images/category/ic_kongtiao@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_qita@2x.png b/admin/src/assets/images/category/ic_qita@2x.png
new file mode 100644
index 0000000..09fc5e5
--- /dev/null
+++ b/admin/src/assets/images/category/ic_qita@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_reshuiqi@2x.png b/admin/src/assets/images/category/ic_reshuiqi@2x.png
new file mode 100644
index 0000000..4fb6504
--- /dev/null
+++ b/admin/src/assets/images/category/ic_reshuiqi@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_xiwanji@2x.png b/admin/src/assets/images/category/ic_xiwanji@2x.png
new file mode 100644
index 0000000..cb142dc
--- /dev/null
+++ b/admin/src/assets/images/category/ic_xiwanji@2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_xiyiji @2x.png b/admin/src/assets/images/category/ic_xiyiji @2x.png
new file mode 100644
index 0000000..a6ec399
--- /dev/null
+++ b/admin/src/assets/images/category/ic_xiyiji @2x.png
Binary files differ
diff --git a/admin/src/assets/images/category/ic_yanzao@2x.png b/admin/src/assets/images/category/ic_yanzao@2x.png
new file mode 100644
index 0000000..0dcfc82
--- /dev/null
+++ b/admin/src/assets/images/category/ic_yanzao@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_copy@2x.png b/admin/src/assets/images/ic_copy@2x.png
new file mode 100644
index 0000000..d0d88dc
--- /dev/null
+++ b/admin/src/assets/images/ic_copy@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_delete@2x.png b/admin/src/assets/images/ic_delete@2x.png
new file mode 100644
index 0000000..e850687b
--- /dev/null
+++ b/admin/src/assets/images/ic_delete@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_img@2x.png b/admin/src/assets/images/ic_img@2x.png
new file mode 100644
index 0000000..316b93f
--- /dev/null
+++ b/admin/src/assets/images/ic_img@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_pk@2x.png b/admin/src/assets/images/ic_pk@2x.png
new file mode 100644
index 0000000..c563243
--- /dev/null
+++ b/admin/src/assets/images/ic_pk@2x.png
Binary files differ
diff --git a/admin/src/assets/images/ic_search@2x.png b/admin/src/assets/images/ic_search@2x.png
new file mode 100644
index 0000000..82e52e7
--- /dev/null
+++ b/admin/src/assets/images/ic_search@2x.png
Binary files differ
diff --git a/admin/src/assets/images/login_bg.png b/admin/src/assets/images/login_bg.png
new file mode 100644
index 0000000..edff503
--- /dev/null
+++ b/admin/src/assets/images/login_bg.png
Binary files differ
diff --git a/admin/src/assets/images/login_img.jpg b/admin/src/assets/images/login_img.jpg
new file mode 100644
index 0000000..c7024a0
--- /dev/null
+++ b/admin/src/assets/images/login_img.jpg
Binary files differ
diff --git a/admin/src/assets/images/login_img.png b/admin/src/assets/images/login_img.png
new file mode 100644
index 0000000..93ec0f9
--- /dev/null
+++ b/admin/src/assets/images/login_img.png
Binary files differ
diff --git a/admin/src/assets/images/man.png b/admin/src/assets/images/man.png
new file mode 100644
index 0000000..a6e3a8f
--- /dev/null
+++ b/admin/src/assets/images/man.png
Binary files differ
diff --git a/admin/src/assets/images/pk_defult.png b/admin/src/assets/images/pk_defult.png
new file mode 100644
index 0000000..3b29ca6
--- /dev/null
+++ b/admin/src/assets/images/pk_defult.png
Binary files differ
diff --git a/admin/src/assets/images/top_ic_bolang@2x.png b/admin/src/assets/images/top_ic_bolang@2x.png
new file mode 100644
index 0000000..f3d281b
--- /dev/null
+++ b/admin/src/assets/images/top_ic_bolang@2x.png
Binary files differ
diff --git a/admin/src/assets/images/top_ic_chilun@2x.png b/admin/src/assets/images/top_ic_chilun@2x.png
new file mode 100644
index 0000000..209e1c3
--- /dev/null
+++ b/admin/src/assets/images/top_ic_chilun@2x.png
Binary files differ
diff --git a/admin/src/assets/images/woman.png b/admin/src/assets/images/woman.png
new file mode 100644
index 0000000..2aaafa6
--- /dev/null
+++ b/admin/src/assets/images/woman.png
Binary files differ
diff --git a/admin/src/assets/images/zan.png b/admin/src/assets/images/zan.png
new file mode 100644
index 0000000..6af5480
--- /dev/null
+++ b/admin/src/assets/images/zan.png
Binary files differ
diff --git a/admin/src/assets/style/alertstyle.scss b/admin/src/assets/style/alertstyle.scss
new file mode 100644
index 0000000..761f010
--- /dev/null
+++ b/admin/src/assets/style/alertstyle.scss
@@ -0,0 +1,32 @@
+::v-deep .el-form-item {
+ display: flex;
+}
+::v-deep .el-form-item__content {
+ margin-left: 0 !important;
+ flex: 1;
+}
+
+.address-plus {
+ display: flex;
+ justify-content: space-between;
+ ::v-deep .el-select {
+ width: 31%;
+ .el-input__inner {
+ width: 100%;
+ }
+ }
+}
+.address {
+ display: flex;
+ justify-content: space-between;
+ ::v-deep .el-select {
+ width: 47%;
+ .el-input__inner {
+ width: 100%;
+ }
+ }
+}
+
+::v-deep input {
+ text-align: left !important;
+}
diff --git a/admin/src/assets/style/element-variables.scss b/admin/src/assets/style/element-variables.scss
index 9c8266b..efaf750 100644
--- a/admin/src/assets/style/element-variables.scss
+++ b/admin/src/assets/style/element-variables.scss
@@ -6,3 +6,4 @@
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";
+
diff --git a/admin/src/assets/style/lib.css b/admin/src/assets/style/lib.css
new file mode 100644
index 0000000..2fd7178
--- /dev/null
+++ b/admin/src/assets/style/lib.css
@@ -0,0 +1,117 @@
+/*-----------------[鍒濆鍖朷--------------*/
+*{ font-family: PingFang SC;}
+/* 娓呯悊娴姩 */
+.cle:after {visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;}
+.cle:after{zoom:1;}
+.clear{clear: both;}
+.tc{text-align:center;}
+.tl{text-align:left}
+.tr{text-align:right}
+.fl{float: left;}
+.fr{float: right;}
+
+.wp{ width: 94%; margin: 0 auto;}
+.w30{ width: 30%;}.w40{ width: 40%;}.w47{ width: 47%;}.w48{ width: 48%;}.w49{ width: 49%;}.w50{ width: 50%;}.w60{ width: 60%;}.w80{ width: 80%;}.w90{ width: 90%;}
+
+.bg_fa{ background-color: #fafafa;}.bg_f2{ background-color: #f2f2f2;}.bg_f1{ background-color: #f1f1f1;}.bg_f5{ background-color: #f5f5f5;}.bg_f6{ background-color: #f6f6f6;}.bg_f7{ background-color: #f7f7f7;}.bg_f8{ background-color: #f8f8f8;}.bg_e{ background-color: #eee;}.bg_d{ background-color: #ddd;}.bg_w{ background-color: #fff;}.bg_3{ background-color: #333;}.bcf{ color: #fff;}.bc3{ color: #333;}.bcc{ color: #ccc;}.bc9{ color: #999;}.bc6{ color: #666;}
+
+.rd4{border-radius: 4px;}.rd5{border-radius: 5px;}.rd6{border-radius: 6px;}.rd8{border-radius: 8px;}.rd10{border-radius: 10px;}.rd15{border-radius: 15px;}.rd20{border-radius: 20px;}.rd30{border-radius: 30px;}.rd40{border-radius: 40px;}.rd50{border-radius: 50px;}.rd60{border-radius: 60px;}.rd70{border-radius: 70px;}.rd80{border-radius: 80px;}.rd90{border-radius: 90px;}.rd100{border-radius: 100px;}.rd120{border-radius: 120px;}.rdhalf{ border-radius:50%}
+
+.ml5{ margin-left: 5px;}.ml10{ margin-left: 10px;}.ml15{ margin-left: 15px;}.ml20{ margin-left: 20px;}.ml25{ margin-left: 25px;}.ml30{ margin-left: 30px;}.ml40{ margin-left: 40px;}.ml50{ margin-left: 50px;}.ml60{ margin-left: 60px;}
+
+.mt5{ margin-top: 5px;}.mt10{ margin-top: 10px;}.mt15{ margin-top: 15px;}.mt20{ margin-top: 20px;}.mt25{ margin-top: 25px;}.mt30{ margin-top: 30px;}.mt35{ margin-top: 35px;}.mt40{ margin-top: 40px;}.mt45{ margin-top: 45px;}.mt50{ margin-top: 50px;}.mt60{ margin-top: 60px;}.mt70{ margin-top: 70px;}.mt80{ margin-top: 80px;}.mt90{ margin-top: 90px;}.mt100{ margin-top:100px;}.mt150{ margin-top:150px;}.mt200{ margin-top:200px;}.mt-20{ margin-top: -20px;}.mt-30{ margin-top: -30px;}.mt-40{ margin-top: -40px;}
+
+.mb5{ margin-bottom: 5px;}.mb10{ margin-bottom: 10px;}.mb15{ margin-bottom: 15px;}.mb20{ margin-bottom: 20px;}.mb25{ margin-bottom: 25px;}.mb30{ margin-bottom: 30px;}.mb40{ margin-bottom: 40px;}.mb50{ margin-bottom: 50px;}.mb60{ margin-bottom: 60px;}.mb80{ margin-bottom: 80px;}
+
+.mr5{ margin-right: 5px;}.mr10{ margin-right: 10px;}.mr15{ margin-right: 15px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right: 30px;}.mr40{ margin-right: 40px;}.mr60{ margin-right: 60px;}.mr80{ margin-right: 80px;}.mr100{ margin-right: 100px;}
+
+.pl10{ padding-left: 10px;}.pl20{ padding-left: 20px;}.pl25{ padding-left: 25px;}.pl30{ padding-left: 30px;}.pl40{ padding-left: 40px;}.pl50{ padding-left: 50px;}.pl60{ padding-left: 60px;}.pl80{ padding-left: 80px;}.pl100{ padding-left: 100px;}
+
+.pr10{ padding-right: 10px;}.pr20{ padding-right: 20px;}.pr25{ padding-right: 25px;}.pr30{ padding-right: 30px;}.pr40{ padding-right: 40px;}.pr50{ padding-right: 50px;}.pr60{ padding-right: 60px;}.pr80{ padding-right: 80px;}.pr100{ padding-right: 100px;}
+
+.pb10{ padding-bottom: 10px;}.pb20{ padding-bottom: 20px;}.pb25{ padding-bottom: 25px;}.pb30{ padding-bottom: 30px;}.pb40{ padding-bottom: 40px;}.pb50{ padding-bottom: 50px;}.pb100{ padding-bottom: 100px;}
+
+.pt10{ padding-top: 10px;}.pt20{ padding-top: 20px;}.pt25{ padding-top: 25px;}.pt30{ padding-top: 30px;}.pt40{ padding-top: 40px;}.pt50{ padding-top: 50px;}.pt100{ padding-top: 100px;}
+
+.plr{ padding-left: 30px; padding-right: 30px;}.plr20{ padding-left: 20px; padding-right: 20px;}.plr25{ padding-left: 25px; padding-right: 25px;}.plr30{ padding-left: 30px; padding-right: 30px;}.plr40{ padding-left: 40px; padding-right: 40px;}.plr50{ padding-left: 50px; padding-right: 50px;}.plr60{ padding-left: 60px; padding-right: 60px;}
+
+.ptb10{padding-bottom: 10px; padding-top: 10px;} .ptb15{padding-bottom: 15px; padding-top: 15px;} .ptb20{padding-bottom: 20px; padding-top: 20px;}.ptb25{padding-bottom: 25px; padding-top: 25px;}.ptb30{padding-bottom: 30px; padding-top: 30px;}.ptb35{padding-bottom: 35px; padding-top: 35px;}.ptb40{padding-bottom: 40px; padding-top: 40px;}.ptb50{padding-bottom: 50px; padding-top: 50px;}.ptb60{padding-bottom: 60px; padding-top: 60px;}.ptb80{padding-bottom: 80px; padding-top: 80px;}.ptb100{padding-bottom: 100px; padding-top: 100px;}.ptb150{padding-bottom: 150px; padding-top: 150px;}.ptb200{padding-bottom: 200px; padding-top: 200px;}
+
+.p5{ padding:5px}.p10{ padding:10px} .p20{ padding:20px}.p30{ padding:30px}.p2030{ padding:20px 30px}.p40{ padding:40px}.p3040{ padding:30px 40px}
+
+.f0{ font-size: 0px;}.f20{ font-size: 20px;}.f22{ font-size: 22px;}.f24{ font-size: 24px;}.f26{ font-size: 26px;}.f28{ font-size: 28px;}.f30{ font-size: 30px;}.f32{ font-size: 32px;}.f34{ font-size: 34px;}.f36{ font-size: 36px;} .f38{ font-size: 38px;}.f40{ font-size: 40px;} .f42{ font-size: 42px;}.f44{ font-size: 44px;}.f48{ font-size: 48px;}.f50{ font-size: 50px;}.f60{ font-size: 60px;}.f64{ font-size: 64px;}.f70{ font-size: 70px;}.f80{ font-size: 80px;}.f90{ font-size: 90px;}.f100{ font-size: 100px;}
+
+.img16{ width: 16px; height: 16px;}
+.img20{ width: 20px; height: 20px;}
+.img24{ width: 24px; height: 24px;}
+.img26{ width: 26px; height: 26px;}
+.img30{ width: 30px; height: 30px;}
+.img32{ width: 32px; height: 32px;}
+.img36{ width: 36px; height: 36px;}
+.img40{ width: 40px; height: 40px;}
+.img48{ width: 48px; height: 48px;}
+.img60{ width: 60px; height: 60px;}
+.img66{ width: 66px; height: 66px;}
+.img80{ width: 80px; height: 80px;}
+.img86{ width: 86px; height: 86px;}
+.img90{ width: 90px; height: 90px;}
+.img100{ width: 100px; height: 100px;}
+.img110{ width: 110px; height: 110px;}
+.img120{ width: 120px; height: 120px;}
+.img150{ width: 150px; height: 150px;}
+.img180{ width: 180px; height: 180px;}
+.img200{ width: 200px; height: 200px;}
+.imgfull{ width: 100%;}
+
+.rimb{ border-bottom: 1px solid #F1F1F1;}
+.rimt{ border-top: 1px solid #F1F1F1;}
+
+
+.bcover{ background-size: cover; background-position: center center; background-repeat: no-repeat;}
+.bfull{ background-size: 100% 100%; background-position: center center; background-repeat: no-repeat;}
+
+.b{ font-weight: bold;}
+.ibm{ display: inline-block; vertical-align: middle;}
+.bbox{ box-sizing: border-box;}
+.rauto{ margin-left:auto; margin-right:auto}
+.fixedBottom{position: fixed; left: 0; bottom: 0; width: 100%;}
+.lh1-6{line-height: 1.6;}
+.lh1-6{line-height: 1.6;}
+.lh1-8{line-height: 1.8;}
+.lh2{line-height: 2;}
+
+.sbtn{ display: inline-block; padding: 0.7em 2em; border: 1px solid transparent; box-sizing: border-box; text-align: center;}
+.mini{ font-size: 18px;}
+.med{ font-size: 26px;}
+.def{ font-size: 34px;}
+.sbtn_w100{ width: 100%; padding-left: 0; padding-right: 0;}
+.sbtn_green{ color: #fff; background:#65C35D; }
+.sbtn_green_rim{ color: #65C35D; border-color:#65C35D; }
+.sbtn_black{ color: #fff; background:#333; }
+.sbtn_gray{ color: #333; background:#F7F7F7; }
+.sbtn_black_rim{ color: #333; border-color:#eee; }
+.sbtn_gray_rim{ color: #999; border-color:#ccc; }
+/* flex */
+.flex{ display: flex; flex-wrap: wrap; justify-content: space-between;}
+.cXY{ display: flex; align-items: center;justify-content: center;}
+.cY{ display: flex; align-items: center;}
+.cX{display: flex; justify-content: center}
+.rowW{ display: flex; flex-wrap: wrap;}
+.bX{ display: flex; flex-direction: row; justify-content: space-between;}
+.bY{ display: flex; flex-direction:column; justify-content: space-between;}
+.bcX{ display: flex; justify-content: space-between; align-items: center;}
+.fx1{ flex: 1; overflow: hidden; }
+
+.cAXY{ position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);}
+.shadowA{box-shadow: 0 0 5px 0 #ddd;}
+.shadowB{ position: relative;}
+.shadowB::after{ content: ""; display: block; width: 100%; height: 8px; box-shadow: 0 6px 12px rgba(0,0,0,.08); top: -8px; left: 0; position: absolute; }
+
+
+.orange{ color: #EA531B;}
+.green{ color: #65C35D;}
+.blue{ color: #3C77DA;}
+.red{ color: #f00;}
+/* /deep/ .uicon-close .u-icon--right{ position: absolute; right: 30px; top: 30px; z-index: 999;} */
+.popCloseBtn{ position: absolute; width:50px; height:50px; right: 20px; top: 20px;}
+.fixedHeader{ position: absolute; left: 0; top: 0;}
diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss
index 114ca0e..44a053b 100644
--- a/admin/src/assets/style/style.scss
+++ b/admin/src/assets/style/style.scss
@@ -5,13 +5,26 @@
padding: 0;
margin: 0;
color: $font-color;
+ // overflow: hidden;
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
body {
height: 100%;
padding: 0;
margin: 0;
+ overflow: scroll;
+ overflow: hidden;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
}
h1,h2,h3,h4,h5,h6,ul {
margin: 0;
@@ -23,10 +36,61 @@
#app {
height: 100%;
min-width: $page-min-width;
+ // overflow: hidden;
}
+}
+
+.bg {
+ z-index: 9990 !important;
+}
+.windows {
+ z-index: 9991 !important;
}
// 绌挎妗嗙殑鎸夐挳
.el-transfer__buttons {
padding: 0 16px !important;
}
+
+.table-header {
+ background-color: #F5F6F8!important;
+ th {
+ background-color: #F5F6F8!important;
+ color: #3F4F69 !important;
+ font-size: 14px;
+ }
+}
+
+.doumee-element-table {
+ border-color: #DFE2E8;
+ tr, th, td {
+ border-color: #DFE2E8;
+ }
+}
+
+::v-deep .el-table__fixed {
+ height: 100% !important;
+}
+::v-deep .el-table__fixed-right {
+ height: 100% !important;
+}
+::v-deep .el-table__cell {
+ height: 100% !important;
+}
+.apply-status0, .apply-status2 , .apply-status3, .apply-status10,
+.change-status0,.change-status1,.change-status2,
+.settle-status0,.settle-status2,.settle-status3,
+.tax-status0,
+.du-status0 {
+ color: #216EEE !important;
+}
+ .apply-status1 , .apply-status4, .apply-status6, .apply-status7, .apply-status8, .apply-status11,
+.change-status3,.change-status4,.change-status5,.change-status8,
+.settle-status1,
+.tax-status2,
+.du-status2 {
+ color: #F95601 !important;
+}
+ .apply-status5,.change-status7,.settle-status7,.tax-status1,.du-status1,.settle-status4 {
+ color: #00BA92 !important;
+}
diff --git a/admin/src/assets/style/variables.scss b/admin/src/assets/style/variables.scss
index ff3f939..b7a84b0 100644
--- a/admin/src/assets/style/variables.scss
+++ b/admin/src/assets/style/variables.scss
@@ -1,9 +1,16 @@
// 涓昏壊璋�
-$primary-color: #2E68EC;
+$primary-color: #216EEE;
+$primary-title-start-color: #3582ff;
+$primary-title-color: #216EcE;
+$primary-color-sel: #0046c6;
+$primary-color-hover: #1562e2;
+$icon-background-color: #0d5ada;
+//鑿滃崟鎮诞鑹诧細
+$menu-hover-color: rgba(33, 110, 238, 0.10);
// 澶撮儴楂樺害
$header-height: 60px;
// 鑿滃崟瀹藉害
-$menu-width: 208px;
+$menu-width: 250px;
// 椤甸潰鏈�灏忓搴�
$page-min-width: 1000px;
diff --git a/admin/src/components/base/BaseOpera.vue b/admin/src/components/base/BaseOpera.vue
index 70681bd..5d64137 100644
--- a/admin/src/components/base/BaseOpera.vue
+++ b/admin/src/components/base/BaseOpera.vue
@@ -14,6 +14,16 @@
}
}
},
+ // watch: {
+ // visible() {
+ // console.log(this.visible);
+ // }
+ // },
+ watch: {
+ $route (to, from) {
+ this.close()
+ }
+ },
methods: {
// 閰嶇疆
config (extParams = {}) {
@@ -49,6 +59,9 @@
}
})
},
+ close () {
+ this.visible = false
+ },
// 纭鏂板缓/淇敼
confirm () {
if (this.form.id == null || this.form.id === '') {
@@ -60,9 +73,12 @@
// 纭鏂板缓
__confirmCreate () {
this.$refs.form.validate((valid) => {
+ // debugger
if (!valid) {
return
}
+ // console.log(this.form);
+ // debugger
// 璋冪敤鏂板缓鎺ュ彛
this.isWorking = true
this.api.create(this.form)
diff --git a/admin/src/components/base/BaseTable.vue b/admin/src/components/base/BaseTable.vue
index e738f2d..ccdafc0 100644
--- a/admin/src/components/base/BaseTable.vue
+++ b/admin/src/components/base/BaseTable.vue
@@ -135,9 +135,11 @@
// 鍒犻櫎
deleteById (row, childConfirm = true) {
this.__checkApi()
- let message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝悧?`
+ // let message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝悧?`
+ let message = `纭鍒犻櫎璇ヨ褰曞悧?`
if (childConfirm && row.children != null && row.children.length > 0) {
- message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝強鍏跺瓙${this.module}鍚�?`
+ // message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝強鍏跺瓙${this.module}鍚�?`
+ message = `纭鍒犻櫎璇ヨ褰曞強鍏跺瓙鏁版嵁鍚�?`
}
this.$dialog.deleteConfirm(message)
.then(() => {
@@ -175,7 +177,7 @@
}
}
if (containChildrenRows.length > 0) {
- message = `鏈灏嗗垹闄�${this.module}銆�${containChildrenRows.join('銆�')}銆戝強鍏跺瓙${this.module}璁板綍锛岀‘璁ゅ垹闄ゅ悧锛焋
+ message = '鏈灏嗗垹闄よ鏁版嵁鍙婂叾瀛愭暟鎹紝纭鍒犻櫎鍚楋紵'
}
}
this.$dialog.deleteConfirm(message)
diff --git a/admin/src/components/common/DepartmentSelect.vue b/admin/src/components/common/DepartmentSelect.vue
index a90fd07..77d0b67 100644
--- a/admin/src/components/common/DepartmentSelect.vue
+++ b/admin/src/components/common/DepartmentSelect.vue
@@ -45,7 +45,7 @@
}
},
watch: {
- excludeId () {
+ value () {
this.fetchData()
}
},
@@ -54,6 +54,7 @@
fetchData () {
fetchTree()
.then(records => {
+ // debugger
this.data = []
this.__fillData(this.data, records)
})
diff --git a/admin/src/components/common/GlobalAlertWindow.vue b/admin/src/components/common/GlobalAlertWindow.vue
new file mode 100644
index 0000000..53b0597
--- /dev/null
+++ b/admin/src/components/common/GlobalAlertWindow.vue
@@ -0,0 +1,120 @@
+<template>
+ <el-dialog
+ class="global-window"
+ title="title"
+ :visible="visible"
+ :with-header="true"
+ :width="width"
+ :close-on-press-escape="false"
+ :wrapper-closable="false"
+ :append-to-body="true"
+ @close="close"
+ >
+ <div slot="title" class="window__header">
+ {{title}}
+ </div>
+ <div class="window__body">
+ <slot></slot>
+ </div>
+ <div v-if="withFooter" class="window__footer">
+ <slot name="footer">
+ <el-button @click="confirm" :loading="confirmWorking" type="primary">纭畾</el-button>
+ <el-button @click="close">鍙栨秷</el-button>
+ </slot>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+export default {
+ name: 'GlobalAlertWindow',
+ props: {
+ width: {
+ type: String,
+ default: '50%'
+ },
+ // 鏄惁鍖呭惈搴曢儴鎿嶄綔
+ withFooter: {
+ type: Boolean,
+ default: true
+ },
+ // 纭鎸夐挳loading鐘舵��
+ confirmWorking: {
+ type: Boolean,
+ default: false
+ },
+ // 鏍囬
+ title: {
+ type: String,
+ default: ''
+ },
+ // 鏄惁灞曠ず
+ visible: {
+ type: Boolean,
+ required: true
+ }
+ },
+ methods: {
+ confirm () {
+ // console.log(this.title);
+ // debugger
+ this.$emit('confirm')
+ },
+ close () {
+ // console.log(this.title);
+ // debugger
+ this.$emit('update:visible', false)
+ }
+ }
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/style/variables.scss";
+// 杈撳叆妗嗛珮搴�
+$input-height: 32px;
+::v-deep .el-dialog__header {
+ background-color: #f7f7f7;
+ font-weight: 500;
+ color: #222;
+}
+::v-deep .el-dialog__body {
+ padding: 20px 20px 0;
+ box-sizing: border-box;
+}
+
+.global-window {
+ // top: 80px !important;
+ // left: 218px !important;
+ // 澶撮儴鏍囬
+ ::v-deep .el-dialog__header {
+ padding: 19px 24px;
+ height: 56px;
+ line-height: 18px;
+ box-sizing: border-box;
+ border-bottom: 1px solid #eee;
+ // text-align: center;
+ .el-dialog__headerbtn {
+ width: 18px;
+ height: 18px;
+ .el-dialog__close {
+ width: 18px;
+ height: 18px;
+ font-size: 19px;
+ line-height: 18px;
+ }
+ }
+ }
+ // 涓讳綋
+ .window__body {
+ min-height: 200px;
+ }
+ .window__footer {
+ user-select: none;
+ border-top: 1px solid #eee;
+ height: 60px;
+ line-height: 60px;
+ text-align: center;
+ }
+}
+</style>
diff --git a/admin/src/components/common/GlobalQuestionWindow.vue b/admin/src/components/common/GlobalQuestionWindow.vue
new file mode 100644
index 0000000..40b7797
--- /dev/null
+++ b/admin/src/components/common/GlobalQuestionWindow.vue
@@ -0,0 +1,137 @@
+<template>
+ <el-dialog
+ class="global-window"
+ title="title"
+ :visible="visible"
+ :with-header="true"
+ :top="top"
+ :width="width"
+ :close-on-press-escape="false"
+ :wrapper-closable="false"
+ :append-to-body="true"
+ @close="close"
+ >
+ <div slot="title" style="min-height: 10px;" class="window__header">
+ {{title}}
+ </div>
+ <div class="window__body">
+ <slot></slot>
+ </div>
+ <div v-if="withFooter" class="window__footer">
+ <slot name="footer">
+ <el-button @click="confirm" :loading="confirmWorking" type="primary">纭畾</el-button>
+ <el-button @click="close">杩斿洖</el-button>
+ </slot>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+export default {
+ name: 'GlobalQuestionWindow',
+ props: {
+ width: {
+ type: String,
+ default: '40%'
+ },
+ top: {
+ type: String,
+ default: '15vh'
+ },
+ // 鏄惁鍖呭惈搴曢儴鎿嶄綔
+ withFooter: {
+ type: Boolean,
+ default: true
+ },
+ // 纭鎸夐挳loading鐘舵��
+ confirmWorking: {
+ type: Boolean,
+ default: false
+ },
+ // 鏍囬
+ title: {
+ type: String,
+ default: ''
+ },
+ // 鏄惁灞曠ず
+ visible: {
+ type: Boolean,
+ required: true
+ }
+ },
+ methods: {
+ confirm () {
+ // console.log(this.title);
+ // debugger
+ this.$emit('confirm')
+ },
+ close () {
+ // console.log(this.title);
+ // debugger
+ this.$emit('update:visible', false)
+ }
+ }
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/style/variables.scss";
+// 杈撳叆妗嗛珮搴�
+$input-height: 32px;
+::v-deep .el-dialog__header {
+ background-color: #f7f7f7;
+ font-weight: 500;
+ color: #222;
+}
+::v-deep .el-dialog__body {
+ padding: 30px 20px 0;
+ box-sizing: border-box;
+}
+
+.global-window {
+ // top: 80px !important;
+ // left: 218px !important;
+ // 澶撮儴鏍囬
+ ::v-deep .el-drawer__header {
+ padding: 0 10px 0 0;
+ line-height: 40px;
+ border-bottom: 1px solid #eee;
+ text-align: center;
+ width: 100%;
+ }
+ // 涓讳綋
+ ::v-deep .el-dialog__body {
+ display: flex;
+ flex-direction: column;
+ position: absolute;
+ top: 40px;
+ bottom: 0;
+ width: 100%;
+ height: calc(90vh - 52px);
+ overflow: hidden;
+ background-color: #f7f7f7;
+ // 鍐呭
+ .window__body {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ // 鏍囩
+ .el-form-item__label {
+ float: none;
+ }
+ // 鍏冪礌瀹藉害涓�100%
+ .el-form-item__content > *{
+ width: 100%;
+ }
+ }
+ // 灏鹃儴
+ .window__footer {
+ user-select: none;
+ border-top: 1px solid #eee;
+ height: 60px;
+ line-height: 60px;
+ text-align: center;
+ }
+ }
+}
+</style>
diff --git a/admin/src/components/common/GlobalRigthWindow.vue b/admin/src/components/common/GlobalRigthWindow.vue
new file mode 100644
index 0000000..1e01639
--- /dev/null
+++ b/admin/src/components/common/GlobalRigthWindow.vue
@@ -0,0 +1,137 @@
+<template>
+ <el-drawer
+ class="global-window"
+ title="title"
+ :visible="visible"
+ :with-header="true"
+ :size="width"
+ :close-on-press-escape="false"
+ :wrapper-closable="false"
+ :append-to-body="true"
+ :modal="false"
+ @close="close"
+ >
+ <div slot="title" class="window__header">
+ <span class="header__btn-back" @click="close"><i class="el-icon-arrow-left"></i></span>{{title}}
+ <!-- {{title}} -->
+ </div>
+ <div class="window__body">
+ <slot></slot>
+ </div>
+ <div v-if="withFooter" class="window__footer">
+ <slot name="footer">
+ <el-button @click="confirm" :loading="confirmWorking" type="primary">纭畾</el-button>
+ <el-button @click="close">杩斿洖</el-button>
+ </slot>
+ </div>
+ </el-drawer>
+</template>
+
+<script>
+export default {
+ name: 'GlobalWindow',
+ props: {
+ width: {
+ type: String,
+ default: '100%'
+ },
+ // 鏄惁鍖呭惈搴曢儴鎿嶄綔
+ withFooter: {
+ type: Boolean,
+ default: true
+ },
+ // 纭鎸夐挳loading鐘舵��
+ confirmWorking: {
+ type: Boolean,
+ default: false
+ },
+ // 鏍囬
+ title: {
+ type: String,
+ default: ''
+ },
+ // 鏄惁灞曠ず
+ visible: {
+ type: Boolean,
+ required: true
+ }
+ },
+ methods: {
+ confirm () {
+ this.$emit('confirm')
+ },
+ close () {
+ this.$emit('update:visible', false)
+ }
+ }
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/style/variables.scss";
+// 杈撳叆妗嗛珮搴�
+$input-height: 32px;
+.global-window {
+ top: 80px !important;
+ left: 218px !important;
+ // 澶撮儴鏍囬
+ ::v-deep .el-drawer__header {
+ padding: 0 10px 0 0;
+ line-height: 40px;
+ border-bottom: 1px solid #eee;
+ // text-align: center;
+ font-weight: 500;
+ color: #222;
+ // 杩斿洖鎸夐挳
+ .header__btn-back {
+ display: inline-block;
+ width: 30px;
+ background: $primary-color;
+ color: #fff;
+ text-align: center;
+ margin-right: 12px;
+ border-right: 1px solid #eee;
+ }
+ .el-drawer__close-btn:focus {
+ outline: none;
+ }
+ }
+ // 涓讳綋
+ ::v-deep .el-drawer__body {
+ display: flex;
+ flex-direction: column;
+ position: absolute;
+ top: 40px;
+ bottom: 0;
+ width: 100%;
+ overflow: hidden;
+ // background-color: #f7f7f7;
+ // 鍐呭
+ .window__body {
+ // width: 1100px;
+ // margin: 0 auto;
+ // background-color: #fff;
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ padding: 0;
+ // 鏍囩
+ .el-form-item__label {
+ float: none;
+ }
+ // 鍏冪礌瀹藉害涓�100%
+ .el-form-item__content > *{
+ width: 100%;
+ }
+ }
+ // 灏鹃儴
+ .window__footer {
+ user-select: none;
+ border-top: 1px solid #eee;
+ height: 60px;
+ line-height: 60px;
+ text-align: center;
+ }
+ }
+}
+</style>
diff --git a/admin/src/components/common/GlobalWindow.vue b/admin/src/components/common/GlobalWindow.vue
index d59bd50..298b468 100644
--- a/admin/src/components/common/GlobalWindow.vue
+++ b/admin/src/components/common/GlobalWindow.vue
@@ -8,18 +8,20 @@
:close-on-press-escape="false"
:wrapper-closable="false"
:append-to-body="true"
+ :modal="false"
@close="close"
>
<div slot="title" class="window__header">
<span class="header__btn-back" @click="close"><i class="el-icon-arrow-left"></i></span>{{title}}
+ <!-- {{title}} -->
</div>
<div class="window__body">
<slot></slot>
</div>
<div v-if="withFooter" class="window__footer">
<slot name="footer">
- <el-button @click="confirm" :loading="confirmWorking" type="primary">纭畾</el-button>
- <el-button @click="close">鍙栨秷</el-button>
+ <el-button @click="confirm" :loading="confirmWorking" type="primary">{{text}}</el-button>
+ <el-button @click="close">杩斿洖</el-button>
</slot>
</div>
</el-drawer>
@@ -31,12 +33,17 @@
props: {
width: {
type: String,
- default: '36%'
+ default: '100%'
},
// 鏄惁鍖呭惈搴曢儴鎿嶄綔
withFooter: {
type: Boolean,
default: true
+ },
+ // 鎻愪氦鎸夐挳鏂囧瓧
+ text: {
+ type: String,
+ default: '纭畾'
},
// 纭鎸夐挳loading鐘舵��
confirmWorking: {
@@ -70,11 +77,16 @@
// 杈撳叆妗嗛珮搴�
$input-height: 32px;
.global-window {
+ top: 80px !important;
+ left: 250px !important;
// 澶撮儴鏍囬
- /deep/ .el-drawer__header {
+ ::v-deep .el-drawer__header {
padding: 0 10px 0 0;
line-height: 40px;
border-bottom: 1px solid #eee;
+ // text-align: center;
+ font-weight: 500;
+ color: #222;
// 杩斿洖鎸夐挳
.header__btn-back {
display: inline-block;
@@ -90,7 +102,7 @@
}
}
// 涓讳綋
- /deep/ .el-drawer__body {
+ ::v-deep .el-drawer__body {
display: flex;
flex-direction: column;
position: absolute;
@@ -98,15 +110,20 @@
bottom: 0;
width: 100%;
overflow: hidden;
+ // background-color: #f7f7f7;
// 鍐呭
.window__body {
+ // width: 1100px;
+ // margin: 0 auto;
+ // background-color: #fff;
+ width: 100%;
height: 100%;
overflow-y: auto;
padding: 12px 16px;
// 鏍囩
- .el-form-item__label {
- float: none;
- }
+ // .el-form-item__label {
+ // float: none;
+ // }
// 鍏冪礌瀹藉害涓�100%
.el-form-item__content > *{
width: 100%;
diff --git a/admin/src/components/common/Header.vue b/admin/src/components/common/Header.vue
index 7aef607..1800c40 100644
--- a/admin/src/components/common/Header.vue
+++ b/admin/src/components/common/Header.vue
@@ -6,149 +6,25 @@
<i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i>
{{title}}
</h2>
- <div class="user">
- <el-dropdown trigger="click">
- <span class="el-dropdown-link">
- <img v-if="userInfo != null" :src="userInfo.avatar == null ? '@/assets/images/avatar/man.png' : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i>
- </span>
- <el-dropdown-menu slot="dropdown">
- <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
- <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
- </div>
+ <tagsview class="tags"></tagsview>
</div>
- <!-- 淇敼瀵嗙爜 -->
- <GlobalWindow
- title="淇敼瀵嗙爜"
- :visible.sync="visible.changePwd"
- @confirm="confirmChangePwd"
- @close="visible.changePwd = false"
- >
- <el-form :model="changePwdData.form" ref="changePwdDataForm" :rules="changePwdData.rules">
- <el-form-item label="鍘熷瀵嗙爜" prop="oldPwd" required>
- <el-input v-model="changePwdData.form.oldPwd" type="password" placeholder="璇疯緭鍏ュ師濮嬪瘑鐮�" maxlength="30" show-password></el-input>
- </el-form-item>
- <el-form-item label="鏂板瘑鐮�" prop="newPwd" required>
- <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="璇疯緭鍏ユ柊瀵嗙爜" maxlength="30" show-password></el-input>
- </el-form-item>
- <el-form-item label="纭鏂板瘑鐮�" prop="confirmPwd" required>
- <el-input v-model="changePwdData.form.confirmPwd" type="password" placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜" maxlength="30" show-password></el-input>
- </el-form-item>
- </el-form>
- </GlobalWindow>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
-import GlobalWindow from './GlobalWindow'
-import { logout, updatePwd } from '@/api/system/common'
+import tagsview from "./tagsview.vue"
export default {
name: 'Header',
- components: { GlobalWindow },
- data () {
- return {
- visible: {
- // 淇敼瀵嗙爜
- changePwd: false
- },
- isWorking: {
- // 淇敼瀵嗙爜
- changePwd: false
- },
- username: 'bob', // 鐢ㄦ埛鍚�
- // 淇敼瀵嗙爜寮规
- changePwdData: {
- form: {
- oldPwd: '',
- newPwd: '',
- confirmPwd: ''
- },
- rules: {
- oldPwd: [
- { required: true, message: '璇疯緭鍏ュ師濮嬪瘑鐮�' }
- ],
- newPwd: [
- { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜' }
- ],
- confirmPwd: [
- { required: true, message: '璇峰啀娆¤緭鍏ユ柊瀵嗙爜' }
- ]
- }
- }
- }
- },
+ components: { tagsview },
computed: {
- ...mapState(['menuData', 'userInfo']),
+ ...mapState(['menuData']),
title () {
return this.$route.meta.title
}
},
- filters: {
- // 灞曠ず鍚嶇О
- displayName (userInfo) {
- if (userInfo == null) {
- return ''
- }
- if (userInfo.realname != null && userInfo.realname.trim().length > 0) {
- return userInfo.realname
- }
- return userInfo.username
- }
- },
methods: {
- ...mapMutations(['setUserInfo', 'switchCollapseMenu']),
- // 淇敼瀵嗙爜
- changePwd () {
- this.visible.changePwd = true
- this.$nextTick(() => {
- this.$refs.changePwdDataForm.resetFields()
- })
- },
- // 纭畾淇敼瀵嗙爜
- confirmChangePwd () {
- if (this.isWorking.changePwd) {
- return
- }
- this.$refs.changePwdDataForm.validate((valid) => {
- if (!valid) {
- return
- }
- // 楠岃瘉涓ゆ瀵嗙爜杈撳叆鏄惁涓�鑷�
- if (this.changePwdData.form.newPwd !== this.changePwdData.form.confirmPwd) {
- this.$tip.warning('涓ゆ瀵嗙爜杈撳叆涓嶄竴鑷�')
- return
- }
- // 鎵ц淇敼
- this.isWorking.changePwd = true
- updatePwd({
- oldPwd: this.changePwdData.form.oldPwd,
- newPwd: this.changePwdData.form.newPwd
- })
- .then(() => {
- this.$tip.apiSuccess('淇敼鎴愬姛')
- this.visible.changePwd = false
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- this.isWorking.changePwd = false
- })
- })
- },
- // 閫�鍑虹櫥褰�
- logout () {
- logout()
- .then(() => {
- this.setUserInfo(null)
- this.$router.push({ name: 'login' })
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- }
+ ...mapMutations(['switchCollapseMenu']),
}
}
</script>
@@ -161,40 +37,23 @@
background: #fff;
height: 100%;
display: flex;
+ overflow: hidden;
h2 {
- width: 50%;
flex-shrink: 0;
- line-height: $header-height;
+ line-height: 48px;
+ width: 200px;
font-size: 19px;
- font-weight: 600;
color: #606263;
+ font-weight: normal;
display: inline;
& > i {
font-size: 20px;
margin-right: 12px;
}
}
- .user {
- width: 50%;
- flex-shrink: 0;
- text-align: right;
- .el-dropdown {
- top: 2px;
- }
- img {
- width: 32px;
- position: relative;
- top: 10px;
- margin-right: 10px;
- }
- }
}
-// 涓嬫媺鑿滃崟妗�
-.el-dropdown-menu {
- width: 140px;
- .el-dropdown-menu__item:hover {
- background: #E3EDFB;
- color: $primary-color;
- }
-}
+// .tags {
+// padding-bottom: 16px;
+// }
+
</style>
diff --git a/admin/src/components/common/ImportButton.vue b/admin/src/components/common/ImportButton.vue
new file mode 100644
index 0000000..04510be
--- /dev/null
+++ b/admin/src/components/common/ImportButton.vue
@@ -0,0 +1,37 @@
+<template>
+ <div class="import-button">
+ <el-button type="primary" @click="$refs.importWindow.open(text)">{{text}}</el-button>
+ <ImportWindow :action="action" :template-path="templatePath" :template-name="templateName" ref="importWindow" @download="$emit('download')" @success="handleSuccess"/>
+ </div>
+</template>
+
+<script>
+import ImportWindow from './ImportWindow'
+export default {
+ name: 'ImportButton',
+ components: { ImportWindow },
+ props: {
+ // 鎸夐挳鏂囨
+ text: {
+ default: '瀵煎叆'
+ },
+ // 妯$増鍦板潃
+ templatePath: {
+ required: true
+ },
+ // 涓嬭浇鍚庣殑妯$増鏂囦欢鍚嶇О
+ templateName: {
+ required: true
+ },
+ // 瀵煎叆鎺ュ彛鍦板潃
+ action: {
+ required: true
+ }
+ },
+ methods: {
+ handleSuccess () {
+ this.$emit('success')
+ }
+ }
+}
+</script>
diff --git a/admin/src/components/common/ImportWindow.vue b/admin/src/components/common/ImportWindow.vue
new file mode 100644
index 0000000..8e05ddb
--- /dev/null
+++ b/admin/src/components/common/ImportWindow.vue
@@ -0,0 +1,204 @@
+<template>
+ <el-dialog
+ width="500px"
+ :title="title"
+ :visible.sync="visible"
+ append-to-body
+ custom-class="eva-dialog import-window"
+ :close-on-click-modal="false"
+ :close-on-press-escape="false"
+ :show-close="false"
+ >
+ <el-form>
+ <el-form-item>
+ <el-upload
+ drag
+ :show-file-list="false"
+ action="none"
+ accept=".xlsx, .xls"
+ :before-upload="handleBeforeUpload"
+ >
+ <template v-if="form.file == null">
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ </template>
+ <template v-else>
+ <i class="el-icon-files"></i>
+ <div class="el-upload__text">{{form.file.name}}<em></em></div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer" class="import-window__footer">
+ <!-- <div class="sync-exists">
+ <el-checkbox v-model="form.sync"/><span>鍚屾宸插瓨鍦ㄧ殑鏁版嵁</span>
+ </div> -->
+ <div class="opera">
+ <a href=""></a>
+ <el-button type="text" icon="el-icon-download" @click="downloadTemplate">涓嬭浇妯$増</el-button>
+ <el-button @click="cancel">{{cancelText}}</el-button>
+ <el-button type="primary" @click="confirm" :loading="isWorking">{{confirmText}}</el-button>
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import request from '@/utils/request'
+export default {
+ name: 'ImportWindow',
+ props: {
+ // 瀵煎叆鎺ュ彛鍦板潃
+ action: {
+ required: true
+ },
+ // 纭鎸夐挳鏂囨
+ confirmText: {
+ type: String,
+ default: '瀵煎叆'
+ },
+
+ // 鍙栨秷鎸夐挳鏂囨
+ cancelText: {
+ type: String,
+ default: '鍙栨秷'
+ },
+ // 妯$増鍦板潃
+ templatePath: {
+ required: true
+ },
+ // 涓嬭浇鍚庣殑妯$増鏂囦欢鍚嶇О
+ templateName: {
+ required: true
+ }
+ },
+ data () {
+ return {
+ visible: false,
+ isWorking: false,
+ title: '瀵煎叆鏁版嵁',
+ form: {
+ sync: false,
+ file: false,
+ categoryId: ''
+ }
+ }
+ },
+ methods: {
+ /**
+ * 鎵撳紑绐楀彛
+ *
+ * @param title 绐楀彛鏍囬
+ */
+ open (title) {
+ this.visible = true
+ this.title = title
+ this.form.sync = false
+ this.form.file = null
+ },
+ /**
+ * 纭畾瀵煎叆
+ */
+ confirm () {
+ if (this.form.file == null) {
+ this.$tip.warning('璇烽�夋嫨鏂囦欢')
+ return
+ }
+ this.isWorking = true
+ const param = new FormData()
+ param.set('file', this.form.file)
+ request.post(this.action, param, {
+ headers: {
+ 'Content-Type': 'multipart/form-data;charset=UTF-8'
+ }
+ })
+ .then(() => {
+ this.$tip.success('瀵煎叆鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ },
+ /**
+ * 鍙栨秷
+ */
+ cancel () {
+ this.visible = false
+ },
+ /**
+ * 涓嬭浇妯$増
+ */
+ downloadTemplate () {
+ const link = document.createElement('a')
+ link.setAttribute('download', this.templateName) //涓嬭浇鐨勬枃浠跺悕
+ console.log(`${window.location.origin}${process.env.VUE_APP_CONTEXT_PATH}${this.templatePath}`);
+ link.href = `${window.location.origin}${process.env.VUE_APP_CONTEXT_PATH}${this.templatePath}` //鏂囦欢url
+ link.click()
+ // this.$emit('download')
+ },
+ /**
+ * 鏂囦欢涓婁紶鍓嶅瓨鍌ㄤ笂浼犵殑鏂囦欢
+ *
+ * @param file 闇�瀵煎叆鐨勬枃浠�
+ */
+ handleBeforeUpload (file) {
+ this.form.file = file
+ return false
+ }
+ }
+}
+</script>
+
+<style lang="scss">
+@import "../../assets/style/variables";
+.import-window {
+ .el-upload {
+ width: 100%;
+ .el-upload-dragger {
+ width: 100%;
+ .el-icon-upload, .el-icon-files {
+ font-size: 67px;
+ color: #C0C4CC;
+ margin: 40px 0 16px;
+ line-height: 50px;
+ }
+ }
+ }
+ .import-window__footer {
+ display: flex;
+ .sync-exists {
+ width: 200px;
+ flex-shrink: 0;
+ text-align: left;
+ font-size: 13px;
+ display: flex;
+ align-items: center;
+ .el-checkbox {
+ margin-right: 10px;
+ }
+ & > * {
+ vertical-align: middle;
+ }
+ }
+ .opera {
+ flex-grow: 1;
+ a {
+ font-size: 12px;
+ margin-right: 10px;
+ text-decoration: none;
+ .el-icon-download {
+ font-size: 15px;
+ position: relative;
+ top: 2px;
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/admin/src/components/common/Light.vue b/admin/src/components/common/Light.vue
index 3e18a29..433a66a 100644
--- a/admin/src/components/common/Light.vue
+++ b/admin/src/components/common/Light.vue
@@ -28,13 +28,16 @@
$cycle-size01: 16px;
$cycle-size02: 6px;
$normal-color: #00CC99;
+$shadow-color: #00CCa9;
$warn-color: #FFCC33;
+$warn-shadow-color: #FFCbe3;
$danger-color: #FF3300;
+$dange-shadowr-color: #FF3310;
@mixin light-status ($cycle-bg) {
em {
background: $cycle-bg;
i {
- background: $cycle-bg - 30;
+ background: mix($cycle-bg, #000030, 0.5);
}
}
}
@@ -79,44 +82,44 @@
}
@keyframes shine-normal {
0% {
- box-shadow: 0 0 5px $normal-color + 10;
+ box-shadow: 0 0 5px $shadow-color;
}
25% {
- box-shadow: 0 0 10px $normal-color + 10;
+ box-shadow: 0 0 10px $shadow-color;
}
50% {
- box-shadow: 0 0 15px $normal-color + 10;
+ box-shadow: 0 0 15px $shadow-color;
}
100% {
- box-shadow: 0 0 20px $normal-color + 10;
+ box-shadow: 0 0 20px $shadow-color;
}
}
@keyframes shine-warn {
0% {
- box-shadow: 0 0 5px $warn-color - 50;
+ box-shadow: 0 0 5px $warn-shadow-color;
}
25% {
- box-shadow: 0 0 10px $warn-color - 50;
+ box-shadow: 0 0 10px $warn-shadow-color;
}
50% {
- box-shadow: 0 0 15px $warn-color - 50;
+ box-shadow: 0 0 15px $warn-shadow-color;
}
100% {
- box-shadow: 0 0 20px $warn-color - 50;
+ box-shadow: 0 0 20px $warn-shadow-color;
}
}
@keyframes shine-danger {
0% {
- box-shadow: 0 0 5px $danger-color + 10;
+ box-shadow: 0 0 5px $dange-shadowr-color;
}
25% {
- box-shadow: 0 0 10px $danger-color + 10;
+ box-shadow: 0 0 10px $dange-shadowr-color;
}
50% {
- box-shadow: 0 0 15px $danger-color + 10;
+ box-shadow: 0 0 15px $dange-shadowr-color;
}
100% {
- box-shadow: 0 0 20px $danger-color + 10;
+ box-shadow: 0 0 20px $dange-shadowr-color;
}
}
</style>
diff --git a/admin/src/components/common/Menu.vue b/admin/src/components/common/Menu.vue
index 96422f6..b928666 100644
--- a/admin/src/components/common/Menu.vue
+++ b/admin/src/components/common/Menu.vue
@@ -1,19 +1,15 @@
<template>
<div class="menu" :class="{collapse: menuData.collapse}">
- <div class="logo">
- <div><img src="@/assets/logo.png"></div>
- <h1 :class="{hidden: menuData.collapse}">{{title}}</h1>
- </div>
<scrollbar>
-<!-- :default-openeds="defaultOpeneds"-->
<el-menu
ref="menu"
- :unique-opened="true"
:default-active="activeIndex"
text-color="#fff"
active-text-color="#fff"
:collapse="menuData.collapse"
+ :default-openeds="defaultOpeneds"
:collapse-transition="false"
+ unique-opened
@select="handleSelect"
>
<MenuItems v-for="menu in menuData.list" :key="menu.index" :menu="menu" :is-root-menu="true"/>
@@ -28,11 +24,6 @@
import Scrollbar from './Scrollbar'
export default {
name: 'Menu',
- data() {
- return {
- title: process.env.VUE_APP_TITLE
- }
- },
components: { Scrollbar, MenuItems },
computed: {
...mapState(['menuData']),
@@ -45,12 +36,17 @@
const menuConfig = this.__getMenuConfig(path, 'url', this.menuData.list)
if (menuConfig == null) {
return null
+ } else {
+ this.$store.commit("pushtags", menuConfig)
}
+ // console.log(menuConfig.index);
return menuConfig.index
},
// 榛樿灞曞紑鐨勮彍鍗昳ndex
defaultOpeneds () {
- return this.menuData.list.map(menu => menu.index)
+ // return this.menuData.list.map(menu => menu.index)
+
+ return [this.menuData.list[0].index]
}
},
methods: {
@@ -70,7 +66,9 @@
if (menuConfig.url == null || menuConfig.url.trim().length === 0) {
return
}
+
this.$router.push(menuConfig.url)
+ this.$store.commit("pushtags", menuConfig)
},
// 鑾峰彇鑿滃崟閰嶇疆
__getMenuConfig (value, key, menus) {
@@ -97,37 +95,6 @@
height: 100%;
display: flex;
flex-direction: column;
- // LOGO
- .logo {
- height: 60px;
- flex-shrink: 0;
- line-height: 60px;
- overflow: hidden;
- display: flex;
- background: $primary-color - 20;
- padding: 0 16px;
- & > div {
- width: 32px;
- flex-shrink: 0;
- margin-right: 12px;
- img {
- width: 100%;
- flex-shrink: 0;
- vertical-align: middle;
- position: relative;
- top: -2px;
- }
- }
- h1 {
- font-size: 16px;
- font-weight: 500;
- transition: opacity ease .3s;
- overflow: hidden;
- &.hidden {
- opacity: 0;
- }
- }
- }
}
</style>
<style lang="scss">
@@ -141,11 +108,11 @@
background: $primary-color;
// 閫変腑鐘舵��
&.is-active {
- background: $primary-color - 40 !important;
+ background: $primary-color-sel !important;
}
// 鎮诞
&:hover {
- background-color: $primary-color - 12;
+ background-color: $primary-color-hover;
}
&:focus {
background: $primary-color;
@@ -158,13 +125,13 @@
}
&.is-active {
.el-submenu__title{
- background-color: $primary-color - 20;
+ background-color: $icon-background-color;
}
.el-menu .el-menu-item{
- background-color: $primary-color - 20;
+ background-color: $icon-background-color;
// 鎮诞
&:hover {
- background-color: $primary-color - 30;
+ background-color: $icon-background-color;
}
}
}
diff --git a/admin/src/components/common/MenuSelect.vue b/admin/src/components/common/MenuSelect.vue
index ea5f26c..3471617 100644
--- a/admin/src/components/common/MenuSelect.vue
+++ b/admin/src/components/common/MenuSelect.vue
@@ -12,7 +12,7 @@
<script>
import TreeSelect from './TreeSelect'
-import { fetchTree } from '@/api/system/menu'
+import { fetchTree, fetchTree1 } from '@/api/system/menu'
export default {
name: 'MenuSelect',
components: { TreeSelect },
@@ -20,6 +20,9 @@
value: {},
inline: {
default: true
+ },
+ type: {
+ default: '0'
},
placeholder: {
default: '璇烽�夋嫨鑿滃崟'
@@ -47,14 +50,25 @@
methods: {
// 鑾峰彇鎵�鏈夎彍鍗�
fetchData () {
- fetchTree()
- .then(records => {
- this.data = []
- this.__fillData(this.data, records)
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
+ if (this.type === '1') {
+ fetchTree1()
+ .then(records => {
+ this.data = []
+ this.__fillData(this.data, records)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ } else {
+ fetchTree()
+ .then(records => {
+ this.data = []
+ this.__fillData(this.data, records)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ }
},
// 濉厖鑿滃崟鏍�
__fillData (list, pool) {
diff --git a/admin/src/components/common/Pagination.vue b/admin/src/components/common/Pagination.vue
index 975a875..86ea4d2 100644
--- a/admin/src/components/common/Pagination.vue
+++ b/admin/src/components/common/Pagination.vue
@@ -2,7 +2,7 @@
<div class="table-pagination">
<el-pagination
:current-page="pagination.pageIndex"
- :page-sizes="[10, 20, 30, 40]"
+ :page-sizes="pagination.pageSizes||[10, 20, 30, 40]"
:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total"
diff --git a/admin/src/components/common/PositionSelect.vue b/admin/src/components/common/PositionSelect.vue
index dd8c279..7ff6b2b 100644
--- a/admin/src/components/common/PositionSelect.vue
+++ b/admin/src/components/common/PositionSelect.vue
@@ -93,7 +93,7 @@
}
.vue-treeselect {
line-height: 30px;
- /deep/ .vue-treeselect__control {
+ ::deep .vue-treeselect__control {
height: 32px;
.vue-treeselect__single-value {
line-height: 30px;
diff --git a/admin/src/components/common/RichEditor.vue b/admin/src/components/common/RichEditor.vue
new file mode 100644
index 0000000..4ac38b2
--- /dev/null
+++ b/admin/src/components/common/RichEditor.vue
@@ -0,0 +1,158 @@
+<template>
+ <div style="border: 1px solid #ccc;">
+ <Toolbar
+ style="border-bottom: 1px solid #ccc"
+ :editor="editor"
+ :defaultConfig="toolbarConfig"
+ :mode="mode"
+ />
+ <Editor
+ style="height: 300px; overflow-y: hidden;"
+ :value="content.content"
+ :mode="mode"
+ :defaultConfig="editorConfig"
+ @onCreated="onCreated"
+ @onChange="onChange"
+ @input="html=$event"
+ />
+ </div>
+</template>
+
+<script>
+import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
+export default {
+ name: 'RichEditor',
+ components: { Editor, Toolbar },
+ props: {
+ content: {
+ type: Object,
+ default: () => {}
+ }
+ },
+ data() {
+ return {
+ editor: null,
+ html: '<p><br></p>',
+ toolbarConfig: {
+ toolbarKeys: [
+ "headerSelect",
+ "blockquote",
+ "|",
+ "bold",
+ "underline",
+ "italic",
+ {
+ "key": "group-more-style",
+ "title": "鏇村",
+ "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M204.8 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path><path d=\"M505.6 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path><path d=\"M806.4 505.6m-76.8 0a76.8 76.8 0 1 0 153.6 0 76.8 76.8 0 1 0-153.6 0Z\"></path></svg>",
+ "menuKeys": [
+ "through",
+ "code",
+ "sup",
+ "sub",
+ "clearStyle"
+ ]
+ },
+ "color",
+ "bgColor",
+ "|",
+ "fontSize",
+ "fontFamily",
+ "lineHeight",
+ "|",
+ "bulletedList",
+ "numberedList",
+ "todo",
+ {
+ "key": "group-justify",
+ "title": "瀵归綈",
+ "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>",
+ "menuKeys": [
+ "justifyLeft",
+ "justifyRight",
+ "justifyCenter",
+ "justifyJustify"
+ ]
+ },
+ {
+ "key": "group-indent",
+ "title": "缂╄繘",
+ "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z\"></path></svg>",
+ "menuKeys": [
+ "indent",
+ "delIndent"
+ ]
+ },
+ // "|",
+ "emotion",
+ "insertLink",
+ {
+ "key": "group-image",
+ "title": "鍥剧墖",
+ "iconSvg": "<svg viewBox=\"0 0 1024 1024\"><path d=\"M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z\"></path></svg>",
+ "menuKeys": [
+ "insertImage",
+ "uploadImage"
+ ]
+ },
+ "insertTable",
+ "codeBlock",
+ "divider",
+ "|",
+ "undo",
+ "redo",
+ "|",
+ "fullScreen"
+ ]
+ },
+ editorConfig: {
+ placeholder: '璇疯緭鍏ュ唴瀹�...',
+ MENU_CONF: {
+ uploadImage: {
+ // server: '/api/upload',
+ name: 'file',
+ server: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
+ meta: {
+ folder: 'shop'
+ },
+ onBeforeUpload(file) { // JS 璇硶
+ // file 閫変腑鐨勬枃浠讹紝鏍煎紡濡� { key: file }
+ // debugger
+ return file
+ },
+ onSuccess(file, res) {
+ console.log(`${file.name} 涓婁紶鎴愬姛`, res)
+ },
+ onError(file, err, res) {
+ console.log(`${file.name} 涓婁紶鍑洪敊`, err, res)
+ },
+ },
+
+ }
+ },
+ mode: 'default', // or 'simple'
+ }
+ },
+ beforeDestroy() {
+ const editor = this.editor
+ if (editor == null) return
+ editor.destroy() // 缁勪欢閿�姣佹椂锛屽強鏃堕攢姣佺紪杈戝櫒
+ },
+ methods: {
+ onCreated (editor) {
+ this.editor = Object.seal(editor)
+ },
+ onChange (editor) {
+ console.log(this.html);
+ // debugger
+ if (!this.html||this.content.content==this.html) {
+ return
+ }
+ this.$emit('edit', this.html)
+ },
+ },
+
+}
+</script>
+
+<style src="@wangeditor/editor/dist/css/style.css"></style>
diff --git a/admin/src/components/common/SearchFormCollapse.vue b/admin/src/components/common/SearchFormCollapse.vue
index 0c1dcbf..5e602b8 100644
--- a/admin/src/components/common/SearchFormCollapse.vue
+++ b/admin/src/components/common/SearchFormCollapse.vue
@@ -31,7 +31,7 @@
height: 50px;
overflow: hidden;
padding-right: 250px;
- /deep/ section {
+ ::v-deep section {
position: absolute;
top: 0;
right: 100px;
diff --git a/admin/src/components/common/ShowRich.vue b/admin/src/components/common/ShowRich.vue
new file mode 100644
index 0000000..7a7c9d9
--- /dev/null
+++ b/admin/src/components/common/ShowRich.vue
@@ -0,0 +1,42 @@
+<template>
+ <GlobalAlertWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <Editor v-if="form.content" v-model="form.content" :defaultConfig="{ readOnly : true }" />
+ <div slot="footer"></div>
+ </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+import { Editor } from '@wangeditor/editor-for-vue'
+export default {
+ name: 'ShowRich',
+ extends: BaseOpera,
+ components: { GlobalAlertWindow, Editor },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ content: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/areas',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+
+ },
+}
+</script>
diff --git a/admin/src/components/common/Tree.vue b/admin/src/components/common/Tree.vue
index 6a6275a..432a1a6 100644
--- a/admin/src/components/common/Tree.vue
+++ b/admin/src/components/common/Tree.vue
@@ -1,34 +1,18 @@
<template>
-<!-- <div class="tree">-->
-<!-- <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">-->
-<!-- <div class="tree_item">-->
-<!-- <i class="el-icon-caret-bottom" :class="{ 'activeColor': item[defaultProps.status] }" v-show="item[defaultProps.status] && item[defaultProps.children]"></i>-->
-<!-- <i class="el-icon-caret-right color" v-show="item[defaultProps.children] && !item[defaultProps.status]"></i>-->
-<!-- <div class="tree_item_label long-title-style" :title="item[defaultProps.name]" :class="{ 'activeColor': item[defaultProps.status] && !item[defaultProps.children] }">{{ item[defaultProps.name] }}</div>-->
-<!-- </div>-->
-<!-- <div class="tree_childern" v-show="item[defaultProps.status]">-->
-<!-- <tree-->
-<!-- :list="item[defaultProps.children]"-->
-<!-- :defaultProps="defaultProps"-->
-<!-- @callback="callback"-->
-<!-- />-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
<div class="tree">
- <div v-for="(item, index) in list" :key="index" @click.stop="clickIten(item)">
+ <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">
<div class="tree_item">
- <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.fsStatus === 1 }" v-show="item.fsStatus === 1 && item.childList.length > 0"></i>
- <i class="el-icon-caret-right color" v-show="item.childList.length > 0 && (item.fsStatus === 0 || !item.fsStatus)"></i>
- <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor': item.fsDate === 1 && item.childList.length === 0 }">{{ item.name }}</div>
+ <i class="el-icon-caret-bottom" :class="{ 'activeColor': item[defaultProps.status] }" v-show="item[defaultProps.status] && item[defaultProps.children]"></i>
+ <i class="el-icon-caret-right color" v-show="item[defaultProps.children] && !item[defaultProps.status]"></i>
+ <div class="tree_item_label long-title-style" :title="item[defaultProps.name]" :class="{ 'activeColor': item[defaultProps.status] && !item[defaultProps.children] }">{{ item[defaultProps.name] }}</div>
</div>
-<!-- v-show="item.status === 1"-->
- <div class="tree_childern" v-show="item.fsStatus === 1">
+ <div class="tree_childern" v-show="item[defaultProps.status]">
<tree
- :list="item.childList"
- :defaultProps="defaultProps"
- @callback="callback"
+ :list="item[defaultProps.children]"
+ :defaultProps="defaultProps"
+ @callback="callback"
/>
+ <!-- @callback="callback" -->
</div>
</div>
</div>
@@ -52,12 +36,12 @@
name: 'name',
status: 'status',
children: 'children',
- id: 'erpId'
+ id: 'id'
}
}
}
},
- data () {
+ data() {
return {
tempItem: {
id: null,
@@ -68,56 +52,44 @@
methods: {
// 鐐瑰嚮褰撳墠椤�
clickIten (item) {
- this.recursion(this.list)
- item.fsDate === 0 || !item.fsDate ? item.fsDate = 1 : item.fsDate = 0
- if (item.childList.length > 0) {
- item.fsStatus === 0 || !item.fsStatus ? item.fsStatus = 1 : item.fsStatus = 0
+ item[this.defaultProps.status] = !item[this.defaultProps.status]
+ this.list.forEach(subItem => {
+ if ((subItem[this.defaultProps.id] !== item[this.defaultProps.id] && subItem[this.defaultProps.status]) || (this.list.length === 1 && subItem[this.defaultProps.status] === false)) {
+ subItem[this.defaultProps.status] = false
+ if (subItem[this.defaultProps.children]) {
+ this.recursion(subItem[this.defaultProps.children])
+ }
+ }
+ })
+ if (this.tempItem['id'] === item[this.defaultProps.id]) {
+ this.tempItem = {
+ id: null,
+ name: null
+ }
+ } else {
+ this.tempItem.id = item[this.defaultProps.id]
+ this.tempItem.name = item[this.defaultProps.name]
}
- // item[this.defaultProps.status] = !item[this.defaultProps.status]
- // this.list.forEach(subItem => {
- // if ((subItem[this.defaultProps.id] !== item[this.defaultProps.id] && subItem[this.defaultProps.status]) || (this.list.length === 1 && subItem[this.defaultProps.status] === false)) {
- // subItem[this.defaultProps.status] = false
- // if (subItem[this.defaultProps.children]) {
- // this.recursion(subItem[this.defaultProps.children])
- // }
- // }
- // })
- // if (this.tempItem.id === item[this.defaultProps.id]) {
- // this.tempItem = {
- // id: null,
- // name: null
- // }
- // } else {
- // this.tempItem.id = item[this.defaultProps.id]
- // this.tempItem.name = item[this.defaultProps.name]
- // }
- this.$emit('callback', item)
+
+ this.$emit('callback', this.tempItem, item)
},
// 閫掑綊鏂规硶
recursion (children) {
- // children.forEach(item => {
- // item[this.defaultProps.status] = false
- // if (item[this.defaultProps.children]) {
- // this.recursion(item[this.defaultProps.children])
- // }
- // })
children.forEach(item => {
- item.fsDate = 0
- if (item.childList.length > 0) {
- this.recursion(item.childList)
+ item[this.defaultProps.status] = false
+ if (item[this.defaultProps.children]) {
+ this.recursion(item[this.defaultProps.children])
}
})
},
callback (data, item) {
- console.log('data', data)
- console.log('item', item)
if (this.tempItem.id === data.id) {
this.tempItem = {}
} else {
- this.tempItem.id = data.erpId
+ this.tempItem.id = data.id
this.tempItem.name = data.name
}
- this.$emit('callback', data, item)
+ this.$emit('callback', this.tempItem, item)
}
}
}
diff --git a/admin/src/components/common/TreeSelect.vue b/admin/src/components/common/TreeSelect.vue
index fc2efdf..d9cf2e6 100644
--- a/admin/src/components/common/TreeSelect.vue
+++ b/admin/src/components/common/TreeSelect.vue
@@ -57,7 +57,7 @@
}
.vue-treeselect {
line-height: 30px;
- /deep/ .vue-treeselect__control {
+ ::v-deep .vue-treeselect__control {
height: 32px;
.vue-treeselect__single-value {
line-height: 30px;
diff --git a/admin/src/components/common/UploadAvatarImage.vue b/admin/src/components/common/UploadAvatarImage.vue
new file mode 100644
index 0000000..7d5ddae
--- /dev/null
+++ b/admin/src/components/common/UploadAvatarImage.vue
@@ -0,0 +1,126 @@
+<template>
+ <div>
+ <el-upload
+ class="avatar-uploader"
+ accept=".png,.jpg"
+ :style="customStyle"
+ :action="uploadImgUrl"
+ :data="uploadData"
+ :show-file-list="false"
+ :on-success="handleAvatarSuccess"
+ :on-error="uploadError"
+ :before-upload="beforeAvatarUpload">
+ <img v-if=" file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
+ <div v-else :style="customStyle">
+ <i class="el-icon-plus avatar-uploader-icon"></i>
+ <div class="tips-style">{{ tipsLabel }}</div>
+ </div>
+ </el-upload>
+ </div>
+
+</template>
+
+<script>
+export default {
+ props: {
+ file: {
+ type: Object,
+ default: () => {}
+ },
+ tipsLabel: '',
+ customStyle: {
+ type: String,
+ default: 'width: 90px; height: 90px;'
+ },
+ uploadData: Object
+ },
+ data() {
+ return {
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ }
+ },
+
+ methods: {
+ // 涓婁紶鍥剧墖
+ handleAvatarSuccess(res, file) {
+ if (res.code == 200) {
+ let { data } = res
+ this.file.imgurl = data.imgaddr;
+ this.file.imgurlfull = data.url;
+ this.$message.success('涓婁紶鎴愬姛')
+ this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
+ } else {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ }
+ this.$emit('uploadEnd')
+ },
+ uploadError() {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ this.$emit('endUpload')
+ },
+ // // 鎷︽埅
+ beforeAvatarUpload(file) {
+ this.$emit('uploadBegin')
+ return true
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+$image-width: 90px;
+.avatar-uploader {
+ width: $image-width;
+ height: $image-width;
+}
+::v-deep .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ line-height: 90px;
+ font-size: 28px;
+ color: #8c939d;
+ width: $image-width;
+ height: $image-width;
+ text-align: center;
+}
+.avatar {
+ width: 100% !important;
+ height: auto !important;
+ display: block;
+}
+.tips-style {
+ height: 13px;
+ font-size: 13px;
+ font-weight: 400;
+ color: #999999;
+ line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
+
diff --git a/admin/src/components/common/UploadAvatarVideo.vue b/admin/src/components/common/UploadAvatarVideo.vue
new file mode 100644
index 0000000..5031b58
--- /dev/null
+++ b/admin/src/components/common/UploadAvatarVideo.vue
@@ -0,0 +1,128 @@
+<template>
+ <div>
+ <el-upload
+ class="avatar-uploader"
+ accept=".mp4"
+ :style="customStyle"
+ :action="uploadImgUrl"
+ :data="uploadData"
+ :show-file-list="false"
+ :on-success="handleAvatarSuccess"
+ :on-error="uploadError"
+ :before-upload="beforeAvatarUpload">
+ <video v-if="file.videourlfull" :src="file.videourlfull" :style="customStyle" class="avatar" />
+ <div v-else :style="customStyle">
+ <i class="el-icon-plus avatar-uploader-icon"></i>
+ <div class="tips-style">{{ tipsLabel }}</div>
+ </div>
+ </el-upload>
+ </div>
+
+</template>
+
+<script>
+export default {
+ props: {
+ file: {
+ type: Object,
+ default: () => {}
+ },
+ tipsLabel: '',
+ customStyle: {
+ type: String,
+ default: 'width: 90px; height: 90px;'
+ },
+ uploadData: Object
+ },
+ data() {
+ return {
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ }
+ },
+
+ methods: {
+ // 涓婁紶鍥剧墖
+ handleAvatarSuccess(res, file) {
+ if (res.code == 200) {
+ let { data } = res
+ this.file.videourl = data.imgaddr;
+ this.file.videourlfull = data.url;
+ this.$message.success('涓婁紶鎴愬姛')
+ this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
+ } else {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ }
+ this.$emit('uploadEnd')
+ },
+ uploadError() {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ this.$emit('endUpload')
+ },
+ // // 鎷︽埅
+ beforeAvatarUpload(file) {
+ this.$emit('uploadBegin')
+ return true
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+$image-width: 100px;
+.avatar-uploader {
+ width: $image-width;
+ height: $image-width;
+}
+::v-deep .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ width: $image-width;
+ height: $image-width;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ line-height: 90px;
+ font-size: 28px;
+ color: #8c939d;
+ width: $image-width;
+ height: $image-width;
+ text-align: center;
+}
+.avatar {
+ width: $image-width;
+ height: $image-width;
+ display: block;
+}
+.tips-style {
+ height: 13px;
+ font-size: 13px;
+ font-weight: 400;
+ color: #999999;
+ line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
+
diff --git a/admin/src/components/common/UploadFile.vue b/admin/src/components/common/UploadFile.vue
new file mode 100644
index 0000000..45049cb
--- /dev/null
+++ b/admin/src/components/common/UploadFile.vue
@@ -0,0 +1,123 @@
+<template>
+ <div>
+ <el-upload
+ class="upload-demo"
+ :accept="uploadData.fileTyp"
+ :action="uploadImgUrl"
+ :limit="1"
+ :on-exceed="handleExceed"
+ :on-success="handleFileSuccess"
+ :on-error="uploadError"
+ :before-upload="beforeFileUpload"
+ :file-list="fileList">
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ <div slot="tip" class="el-upload__tip">鍙兘涓婁紶{{ uploadData.fileType }}鏂囦欢锛屼笖涓嶈秴杩�5mb</div>
+ </el-upload>
+ </div>
+
+</template>
+
+<script>
+export default {
+ props: {
+ file: {
+ type: Object,
+ default: () => {}
+ },
+ tipsLabel: '',
+ customStyle: {
+ type: String,
+ default: 'width: 190px; height: 190px;'
+ },
+ uploadData: Object
+ },
+ data() {
+ return {
+ fileList:null,
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload?folder='+this.uploadData.folder
+ }
+ },
+
+ methods: {
+ // 涓婁紶鍥剧墖
+ handleExceed(){},
+ handleFileSuccess(res, file) {
+ if (res.code == 200) {
+ let { data } = res
+ // this.fileList = [{name: data.originname, url: data.url }]
+ this.$message.success('涓婁紶鎴愬姛')
+ this.$emit('uploadSuccess', { fileurl: data.imgaddr, fileurlFull: data.url, name: data.originname })
+ } else {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ }
+ this.$emit('uploadEnd')
+ },
+ uploadError() {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ this.$emit('endUpload')
+ },
+ // // 鎷︽埅
+ beforeFileUpload(file) {
+ this.$emit('uploadBegin')
+ return true
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+$image-width: 100px;
+.avatar-uploader {
+ width: $image-width;
+ height: $image-width;
+}
+::v-deep .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ width: $image-width;
+ height: $image-width;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ line-height: 90px;
+ font-size: 28px;
+ color: #8c939d;
+ width: $image-width;
+ height: $image-width;
+ text-align: center;
+}
+.avatar {
+ width: $image-width;
+ height: $image-width;
+ display: block;
+}
+.tips-style {
+ height: 13px;
+ font-size: 13px;
+ font-weight: 400;
+ color: #999999;
+ line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 80% !important;
+ height: 50px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+
+</style>
+
diff --git a/admin/src/components/common/UploadFileCommon.vue b/admin/src/components/common/UploadFileCommon.vue
new file mode 100644
index 0000000..ba92eae
--- /dev/null
+++ b/admin/src/components/common/UploadFileCommon.vue
@@ -0,0 +1,150 @@
+<template>
+ <div>
+ <el-upload
+ class="avatar-uploader"
+ :accept="uploadData.fileTyp"
+ :style="customStyle"
+ :action="uploadImgUrl"
+ :file="file1"
+ :data="uploadData"
+ :limit="1"
+ :show-file-list="false"
+ :on-success="handleSuccess"
+ :on-error="uploadError"
+ :before-upload="beforeAvatarUpload">
+ <img v-if="file.fileType==0 && file.fileUrlFull" :src="file.fileUrlFull" style="width: 90px;height: 90px" class="avatar">
+ <video v-if="file.fileType==1 &&file.fileUrlFull" :src="file.fileUrlFull" style="width: 90px;height: 90px" class="avatar" />
+ <span v-if="file.fileType==2 &&file.fileUrlFull" style="width: 90px;height: 90px" class="avatar" >{{file.fileName}}</span>
+ <div class="desc_data_list_item_img" style="cursor: pointer; background: #8c939d;">
+ <i class="el-icon-plus"></i>
+ </div>
+ </el-upload>
+ </div>
+
+</template>
+
+<script>
+export default {
+ props: {
+ file: {
+ type: Object,
+ default: () => {}
+ },
+ tipsLabel: '',
+ customStyle: {
+ type: String,
+ default: 'width: 90px; height: 90px;'
+ },
+ uploadData: Object
+ },
+ data() {
+ return {
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ }
+ },
+
+ methods: {
+ // 涓婁紶鍥剧墖
+ handleSuccess(res, file) {
+ if (res.code == 200) {
+ let { data } = res
+ this.file.fileUrl = data.imgaddr
+ this.file.fileType = data.type
+ this.file.fileName= data.originname
+ this.file.fileUrlFull = data.url
+ this.$message.success('涓婁紶鎴愬姛')
+ this.$emit('uploadSuccess', { fileurl: data.imgaddr, fileUrlFull: data.url, name: data.originname })
+ } else {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ }
+ this.$emit('uploadEnd')
+ },
+ uploadError() {
+ this.$tip.apiFailed('涓婁紶澶辫触')
+ this.$emit('endUpload')
+ },
+ // // 鎷︽埅
+ beforeAvatarUpload(file) {
+ this.$emit('uploadBegin')
+ return true
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.desc_data_list_item_img {
+ flex-shrink: 0;
+ width: 80px;
+ height: 80px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ .el-icon-plus {
+ font-size: 26px;
+ color: #ffffff;
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ }
+}
+
+$image-width: 100px;
+.avatar-uploader {
+ width: $image-width;
+ height: $image-width;
+}
+::v-deep .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ width: $image-width;
+ height: $image-width;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ line-height: 90px;
+ font-size: 28px;
+ color: #8c939d;
+ width: $image-width;
+ height: $image-width;
+ text-align: center;
+}
+.avatar {
+ width: $image-width;
+ height: $image-width;
+ display: block;
+}
+.tips-style {
+ height: 13px;
+ font-size: 13px;
+ font-weight: 400;
+ color: #999999;
+ line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/components/common/UploadImage.vue b/admin/src/components/common/UploadImage.vue
new file mode 100644
index 0000000..67ccb8a
--- /dev/null
+++ b/admin/src/components/common/UploadImage.vue
@@ -0,0 +1,155 @@
+<template>
+ <div>
+ <el-upload
+ :action="uploadImgUrl"
+ :data="uploadData"
+ list-type="picture-card"
+ :file-list="fileList"
+ accept=".jpg,.png"
+ :before-upload="beforeUpload"
+ :on-success="uploadSuccess"
+ :on-error="fail"
+ >
+ <i class="el-icon-plus icon"></i>
+ <div slot="file" slot-scope="{file}">
+ <img
+ class="el-upload-list__item-thumbnail"
+ :src="file.url" alt=""
+ style="width: 100px;height: 100px;"
+ >
+ <span class="el-upload-list__item-actions">
+ <span
+ class="el-upload-list__item-preview"
+ @click="handlePictureCardPreview(file)"
+ >
+ <i class="el-icon-zoom-in"></i>
+ </span>
+ <span
+ class="el-upload-list__item-delete"
+ @click="handleRemove(file)"
+ >
+ <i class="el-icon-delete"></i>
+ </span>
+ </span>
+ </div>
+ </el-upload>
+ <el-image-viewer
+ v-if="showViewer"
+ :on-close="closeViewer"
+ :initialIndex="tempIndex"
+ :url-list="srcList"
+ :z-index="3000"
+ />
+ </div>
+
+</template>
+
+<script>
+import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+export default {
+ components: {
+ ElImageViewer
+ },
+ props: {
+ fileList: {
+ type: Array,
+ default: () => []
+ },
+ uploadData: Object,
+ },
+ data() {
+ return {
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
+
+ realList: [],
+ srcList: [],
+ tempIndex: 0,
+ showViewer: false,
+ }
+ },
+ watch: {
+ fileList: {
+ handler(val) {
+ console.log(val);
+ if (val.length==0) {
+ this.realList = []
+ this.srcList = []
+ }
+ }
+
+ }
+ },
+ methods: {
+ beforeUpload(file) {
+
+ this.$emit('beginUpload')
+ return true
+ },
+ // 涓婁紶鍥剧墖鎴愬姛
+ uploadSuccess (res, file, fileList) {
+ // console.log('this.fileList', this.fileList);
+ // console.log('fileList', fileList);
+ this.$emit('endUpload')
+ this.realList = fileList
+ this.srcList.push(res.data.url)
+ // console.log('file', file);
+ if (res.code === 200) {
+ this.fileList.push(
+ {
+ fileurl: res.data.imgaddr,
+ name: res.data.originname,
+ url: res.data.url
+ }
+ )
+ } else {
+ this.$message.error(res.msg || '涓婁紶澶辫触')
+ }
+ },
+ fail (err, file, fileList) {
+ this.$emit('endUpload')
+ this.$message.error('涓婁紶澶辫触')
+ },
+ handlePictureCardPreview(file) {
+ // this.tempIndex = this.srcList.findIndex(item => item == file.response.data.url )
+ // console.log(file);
+ this.tempIndex = this.fileList.findIndex(item => item.url == file.url )
+ // console.log( this.tempIndex);
+ this.srcList = this.fileList.map(item => item.url)
+ this.showViewer = true
+ },
+ closeViewer() {
+ this.showViewer = false
+ },
+ handleRemove(file) {
+ console.log(this.fileList);
+ let tempIndex = this.realList.findIndex(item => item.url === file.url)
+ // debugger
+ this.realList.splice(tempIndex, 1)
+ this.fileList.splice(tempIndex, 1)
+ this.srcList.splice(tempIndex, 1)
+
+ },
+ },
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
+
diff --git a/admin/src/components/common/myImage.vue b/admin/src/components/common/myImage.vue
new file mode 100644
index 0000000..a159f20
--- /dev/null
+++ b/admin/src/components/common/myImage.vue
@@ -0,0 +1,84 @@
+<template>
+ <div>
+ {{ src }}
+ <img
+ class="el-upload-list__item-thumbnail"
+ :src="src" alt=""
+ :style="`width: ${width}px;height: ${height}px;`"
+ @click="handlePictureCardPreview()"
+ >
+ <el-image-viewer
+ v-if="showViewer"
+ :on-close="closeViewer"
+ :initialIndex="tempIndex"
+ :url-list="previewSrcList"
+ :z-index="3000"
+ />
+ </div>
+
+</template>
+
+<script>
+import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+export default {
+ components: {
+ ElImageViewer
+ },
+ props: {
+ src: {
+ type: String,
+ default: ''
+ },
+ width: {
+ type: Number,
+ default: 100
+ },
+ height: {
+ type: Number,
+ default: 100
+ },
+ previewSrcList: {
+ type: Array,
+ default: () => []
+ }
+ },
+ data() {
+ return {
+ tempIndex: 0,
+ showViewer: false,
+ }
+ },
+
+ methods: {
+ handlePictureCardPreview() {
+ console.log(this.src);
+ this.tempIndex = this.srcList.findIndex(item => item == this.src )
+ this.showViewer = true
+ },
+ closeViewer() {
+ this.showViewer = false
+ },
+ },
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
+
diff --git a/admin/src/components/common/tagsview.vue b/admin/src/components/common/tagsview.vue
new file mode 100644
index 0000000..c5afffa
--- /dev/null
+++ b/admin/src/components/common/tagsview.vue
@@ -0,0 +1,261 @@
+<template>
+ <div class="tags-view-style" style="display:flex; overflow-x: scroll;">
+ <i class="el-icon-arrow-left btn" v-if="leftStatus" :class="leftStatus?'nor-btn':'ban-btn'" @click="scrollToStart()"></i>
+ <div id="tags-box" ref="tags">
+ <div
+ v-for="(item, index) in tags"
+ :key="index"
+ :id="'tags-box-' + index"
+ @contextmenu.prevent="openMenu(item,$event)"
+ :class="isActive(item.url,index)?'active':''"
+ class="tagsview"
+ @click="tagsmenu(item, index)"
+ >
+ {{ item.label }}
+ <!-- 杩欎釜鍦版柟涓�瀹氳click鍔犱釜stop闃绘锛屼笉鐒朵細鍥犱负浜嬩欢鍐掓场涓�鐩磋Е鍙戠埗鍏冪礌鐨勭偣鍑讳簨浠讹紝鏃犳硶璺宠浆鍙︿竴涓矾鐢� -->
+ <span v-if="tags.length > 1" class="el-icon-close tagsicon" @click.stop="handleClose(item,index)"></span>
+ <!-- <ul v-show="visible" class="contextmenu" :style="{left:left+'px',top:top+'px'}">
+ <li @click.stop="rightClose()">鍏抽棴</li>
+ <li @click.stop="cleartags($route.path)">鍏抽棴鍏朵粬</li>
+ </ul> -->
+ </div>
+ </div>
+ <i class="el-icon-arrow-right btn" v-if="rightStatus" :class="rightStatus?'nor-btn':'ban-btn'" @click="scrollToEnd()"></i>
+ </div>
+</template>
+
+<script>
+//杩欎釜灏辨槸瀵煎叆vuex鐨勬暟鎹紝閰嶅悎涓嬮潰...map鐢�
+import { mapState, mapMutations } from "vuex";
+export default {
+ data() {
+ return {
+ //鍙抽敭鑿滃崟闅愯棌瀵瑰簲甯冨皵鍊�
+ visible: false,
+ //鍙抽敭鑿滃崟瀵瑰簲浣嶇疆
+ top: 0,
+ left: 0,
+ leftStatus: false,
+ rightStatus: false,
+ }
+ },
+ computed: {
+ //寮曞叆vuex涓璼tate涓殑tags鏁版嵁锛屼竴鏍穞his璋冪敤灏辫
+ ...mapState(["tags"]),
+ },
+ watch:{
+ //鐩戝惉鍙抽敭鑿滃崟鐨勫�兼槸鍚︿负true锛屽鏋滄槸灏卞垱寤哄叏灞�鐩戝惉鐐瑰嚮浜嬩欢锛岃Е鍙慶loseMenu浜嬩欢闅愯棌鑿滃崟锛屽鏋滄槸false灏卞垹闄ょ洃鍚�
+ visible(value) {
+ if (value) {
+ document.body.addEventListener('click', this.closeMenu)
+ } else {
+ document.body.removeEventListener('click', this.closeMenu)
+ }
+ },
+ $route(to,from){
+ this.tags.forEach((item, index) => {
+ if (item.url === to.path) {
+ let tagsDiv = document.getElementById('tags-box')
+ if (index) {
+ tagsDiv.scrollTo(index * 110, 0)
+ } else {
+ tagsDiv.scrollTo(0, 0)
+ }
+ }
+ })
+ }
+
+ },
+ mounted() {
+ this.$refs.tags.addEventListener('scroll', e => {
+
+ if (this.$refs.tags.scrollLeft > 0) {
+ this.leftStatus = true
+ } else {
+ this.leftStatus = false
+ }
+ if (this.$refs.tags.scrollLeft + this.$refs.tags.clientWidth < this.$refs.tags.scrollWidth) {
+ this.rightStatus = true
+ } else {
+ this.rightStatus = false
+ }
+
+ }, false)
+ },
+ methods: {
+ //寮曞叆vuex涓璵utation鏂规硶锛屽彲浠ョ洿鎺his.xxx璋冪敤浠�
+ ...mapMutations(["closeTab", "cleartagsview"]),
+ //鐐瑰嚮鍙夊弶鍒犻櫎鐨勪簨浠�
+ rightClose() {
+ this.visible = false
+ if (this.tags.length == 1) {
+ return
+ }
+ let index = this.tags.indexOf(this.selectedTag)
+ this.handleClose(this.selectedTag, index)
+ },
+ handleClose(item, index) {
+ if (this.tags.length == 1) {
+ return
+ }
+ //鍏堟妸闀垮害淇濆瓨涓嬫潵鍚庨潰鐢ㄦ潵姣旇緝鍋氬垽鏂潯浠�
+ let length = this.tags.length - 1;
+ //vuex璋冩柟娉�,涓婇潰...map寮曞叆鐨剉uex鏂规硶锛屼笉浼氳繖绉嶆柟娉曠殑鐪媣ue瀹樼綉鏂囨。
+ this.closeTab(item);
+ // 濡傛灉鍏抽棴鐨勬爣绛句笉鏄綋鍓嶈矾鐢辩殑璇濓紝灏变笉璺宠浆
+ if (item.url !== this.$route.path) {
+ return;
+ }
+ // 鍒ゆ柇锛氬鏋渋ndex鍜宭ength鏄竴鏍风殑锛岄偅灏变唬琛ㄩ兘鏄竴鏍风殑闀垮害锛屽氨鏄渶鍚庝竴浣嶏紝閭e氨寰�宸﹁烦杞竴涓�
+ if (index === length) {
+ //鍐嶅垽鏂細濡傛灉length=0锛屼篃灏辨槸璇翠綘鍒犲畬浜嗘墍鏈夋爣绛�
+ if (length === 0) {
+ //閭d箞鍐嶅垽鏂細濡傛灉褰撳墠璺敱涓嶇瓑浜巌ndex锛屼篃灏辨槸鎴戦椤电殑璺敱
+ if (this.$route.path !== "/index") {
+ //閭d箞灏辫烦杞椤点�傝繖涓�姝ョ殑鎰忔�濇槸锛氬鏋滃垹闄ょ殑鏈�鍚庝竴涓爣绛句笉鏄椤靛氨缁熶竴璺宠浆棣栭〉锛屽鏋滀綘鍒犻櫎鐨勬渶鍚庝竴涓爣绛炬槸棣栭〉鏍囩锛屽凡缁忓湪杩欎釜棣栭〉璺敱涓婁簡锛屼綘杩樿烦涓粈涔堝憿銆傝繖涓嶉噸澶嶆搷浣滀簡鍚椼��
+ this.$router.push({ path: "/index" });
+ }
+ } else {
+ //閭d箞锛屽鏋滀笂闈㈢殑鏉′欢閮戒笉鎴愮珛锛屾病鏈塴ength=0.涔熷氨鏄浣犺繕鏈夊ソ鍑犱釜鏍囩锛屽苟涓斾綘鍒犻櫎鐨勬槸鏈�鍚庝竴浣嶆爣绛撅紝閭d箞灏卞線宸﹁竟鎸竴浣嶈烦杞矾鐢�
+ this.$router.push({ path: this.tags[index - 1].url });
+ }
+ } else {
+ // 濡傛灉浣犵偣鍑讳笉鏄渶鍚庝竴浣嶆爣绛撅紝鐐圭殑鍓嶉潰鐨勶紝閭e氨寰�鍙宠竟璺宠浆
+ this.$router.push({ path: this.tags[index].url });
+ }
+ },
+ //鐐瑰嚮璺宠浆璺敱
+ tagsmenu(item, index) {
+ console.log('tagsmenu');
+ //鍒ゆ柇锛氬綋鍓嶈矾鐢变笉绛変簬褰撳墠閫変腑椤圭殑url锛屼篃灏变唬琛ㄤ綘鐐瑰嚮鐨勪笉鏄幇鍦ㄩ�変腑鐨勬爣绛撅紝鏄彟涓�涓爣绛惧氨璺宠浆杩囧幓锛屽鏋滀綘鐐瑰嚮鐨勬槸鐜板湪宸茬粡閫変腑鐨勬爣绛惧氨涓嶇敤璺宠浆浜嗭紝鍥犱负浣犲凡缁忓湪杩欎釜璺敱浜嗚繕璺充粈涔堝憿銆�
+ if (this.$route.path !== item.url) {
+ //鐢╬ath鐨勮烦杞柟娉曟妸褰撳墠椤圭殑url褰撲綔鍦板潃璺宠浆銆�
+ this.$router.push({ path: item.url });
+ let tagsDiv = document.getElementById('tags-box')
+ if (index) {
+ tagsDiv.scrollTo(index * 110, 0)
+ }
+ }
+ },
+ //閫氳繃鍒ゆ柇璺敱涓�鑷磋繑鍥炲竷灏斿�兼坊鍔燾lass锛屾坊鍔犻珮浜晥鏋�
+ isActive(route, index) {
+ let res = route === this.$route.path
+ return res
+ },
+ scrollToStart() {
+
+ let tagsDiv = document.getElementById('tags-box')
+ tagsDiv.scrollTo(0, 0)
+ },
+ scrollToEnd() {
+ let tagsDiv = document.getElementById('tags-box')
+ tagsDiv.scrollTo(tagsDiv.scrollWidth, 0)
+ },
+ //鍙抽敭浜嬩欢锛屾樉绀哄彸閿彍鍗曪紝骞跺浐瀹氬ソ浣嶇疆銆�
+ openMenu(tag, e) {
+ this.visible = true
+ this.selectedTag = tag
+ const offsetLeft = this.$el.getBoundingClientRect().left
+ console.log(tag, e);
+ this.left = e.clientX - offsetLeft + 60 //鍙抽敭鑿滃崟璺濈宸﹁竟鐨勮窛绂�
+ this.top = e.clientY +20 //鍙抽敭鑿滃崟璺濈涓婇潰鐨勮窛绂� 杩欎袱涓彲浠ユ洿鏀癸紝鐪嬬湅鑷繁鐨勫彸閿彍鍗曞湪浠�涔堜綅缃紝鑷繁璋�
+ },
+ //闅愯棌鍙抽敭鑿滃崟
+ closeMenu() {
+ this.visible = false
+ },
+ //鍙抽敭鑿滃崟鍏抽棴鎵�鏈夐�夐」锛岃Е鍙憊uex涓殑鏂规硶锛屾妸褰撳墠璺敱褰撳弬鏁颁紶杩囧幓鐢ㄤ簬鍒ゆ柇
+ cleartags(val){
+ this.visible = false
+ this.cleartagsview(val)
+ }
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.btn {
+ font-size: 20px;
+ line-height: 48px;
+ height: 48px;
+}
+.nor-btn {
+ color: #666;
+ cursor: pointer;
+ &:hover {
+ color: #2E68EC;
+ }
+}
+
+.ban-btn {
+ color: #999;
+ cursor:not-allowed
+}
+
+#tags-box {
+ overflow-x: hidden;
+ white-space: nowrap;
+ flex: 1;
+ // width: 240px;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
+}
+#tags-box::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+}
+//鏍囩瀵艰埅鏍峰紡
+.tagsview {
+ cursor: pointer;
+ // margin-left: 4px;
+ height: 48px;
+ line-height: 48px;
+ padding: 0 8px 0 24px;
+ // border: 1px solid #d8dce5;
+ // border-radius: 5px;
+ color: #000;
+ font-size: 14px;
+ display: inline-block;
+
+}
+//鍙夊彿榧犳爣缁忚繃鏍峰紡
+.tagsicon:hover{
+ color: #f56c6c;
+}
+//鏍囩楂樹寒
+.active{
+ color: #2E68EC;
+ border-bottom: 2px solid #2E68EC;
+}
+//鍙抽敭鑿滃崟鏍峰紡
+.contextmenu {
+ margin: 0;
+ background: #fff;
+ z-index: 100;
+ position: absolute;
+ list-style-type: none;
+ padding: 5px 0;
+ border-radius: 4px;
+ font-size: 12px;
+ font-weight: 400;
+ color: #333;
+ box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);
+ li {
+ margin: 0;
+ padding: 7px 16px;
+ cursor: pointer;
+ &:hover {
+ background: #eee;
+ }
+ }
+}
+.tags-view-style {
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
+}
+</style>
diff --git a/admin/src/components/common/upload.vue b/admin/src/components/common/upload.vue
new file mode 100644
index 0000000..22d22f9
--- /dev/null
+++ b/admin/src/components/common/upload.vue
@@ -0,0 +1,141 @@
+<template>
+ <div class="file">
+ <div class="file_list">
+ <div class="file_list_item" :style="{width: width, height: height}" v-for="(item, index) in list" :key="index">
+ <div class="dele" @click="deleItem(index)">
+ <i class="el-icon-close"></i>
+ </div>
+ <img :src="item.url" v-if="fileType(item.url) === 'img'" />
+ <video controls autoplay :src="item.url" v-else></video>
+ </div>
+ <div class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()">
+ <i class="el-icon-plus"></i>
+ </div>
+ </div>
+ <input type="file" ref="file" :accept="accept" @change="getFile" />
+ </div>
+</template>
+
+<script>
+ import axios from 'axios';
+ export default {
+ props: {
+ width: {
+ type: String,
+ default: '90px'
+ },
+ height: {
+ type: String,
+ default: '90px'
+ },
+ list: {
+ type: Array,
+ default: []
+ },
+ accept: {
+ type: String,
+ default: ''
+ },
+ folder: {
+ type: String,
+ default: ''
+ }
+ },
+ data() {
+ return {
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ }
+ },
+
+ methods: {
+ fileType(url) {
+ if (url.indexOf('.mp4') !== -1) {
+ return 'video'
+ } else {
+ return 'img'
+ }
+ },
+ getFile(e) {
+ if (e.target && e.target.files.length > 0) {
+ this.$emit('loading')
+ const formdate = new FormData()
+ formdate.append('file', e.target.files[0])
+ formdate.append('folder', this.folder)
+ axios.post(this.uploadImgUrl, formdate)
+ .then(res => {
+ this.$emit('success', res.data.data)
+ })
+ .catch(e => {
+ this.$message.error(e)
+ })
+ .finally(() => {
+ this.$refs.file.value = null
+ })
+ }
+ },
+ deleItem(index) {
+ this.$emit('dele', index)
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .file {
+ /*width: 100%;*/
+ /*height: 90px;*/
+ margin: 10px 0;
+ input {
+ opacity: 0;
+ }
+ .file_list {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ .file_list_item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ border-radius: 5px;
+ border: 1px solid #d5d5d5;
+ margin-left: 15px;
+ position: relative;
+ &:first-child {
+ margin: 0 !important;
+ }
+ .dele {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 20px;
+ height: 20px;
+ background: red;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ .el-icon-close {
+ color: #ffffff;
+ font-size: 19px;
+ }
+ }
+ .el-icon-plus {
+ font-size: 30px;
+ color: black;
+ }
+ img {
+ width: 100%;
+ }
+ video {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ }
+</style>
+
diff --git a/admin/src/layouts/AppLayout.vue b/admin/src/layouts/AppLayout.vue
index dc75809..d4c0be8 100644
--- a/admin/src/layouts/AppLayout.vue
+++ b/admin/src/layouts/AppLayout.vue
@@ -1,31 +1,53 @@
<template>
- <el-container class="app-layout">
- <el-aside :class="{collapse:menuData.collapse}">
- <Menu/>
- </el-aside>
- <el-main>
- <header>
- <AppHeader/>
- </header>
- <main>
- <transition name="fade">
- <router-view></router-view>
- </transition>
- </main>
- </el-main>
- </el-container>
+ <div>
+ <CommonHeader />
+ <div style="height:10px; background: #fff"></div>
+ <el-container class="app-layout">
+ <el-aside :class="{collapse:menuData.collapse}">
+ <Menu/>
+ </el-aside>
+ <el-main>
+ <header>
+ <AppHeader/>
+ </header>
+ <div style="height:10px;"></div>
+ <main ref="containerS">
+ <transition name="fade">
+<!-- <keep-alive>-->
+ <router-view></router-view>
+<!-- </keep-alive>-->
+ </transition>
+ </main>
+ </el-main>
+ </el-container>
+
+ </div>
</template>
<script>
import { mapState } from 'vuex'
import Header from '@/components/common/Header'
+import CommonHeader from '@/components/common/CommonHeader'
import Menu from '@/components/common/Menu'
export default {
name: 'DefaultLayout',
- components: { AppHeader: Header, Menu },
+ components: { AppHeader: Header, Menu, CommonHeader },
+ data() {
+ return {
+ isFinishData: false,
+ orgBackground: ''
+ }
+ },
computed: {
- ...mapState(['menuData'])
- }
+ ...mapState(['menuData', 'userInfo'])
+ },
+
+ mounted() {
+ },
+
+ methods: {
+
+ },
}
</script>
@@ -34,17 +56,27 @@
.el-container {
background: #F7F8F9;
height: 100%;
+
display: flex;
- overflow: hidden;
+ // overflow: hidden;
+ overflow: scroll;
// 宸﹁竟鑿滃崟
.el-aside {
- width: 250px !important;
+ width: $menu-width !important;
flex-shrink: 0;
- height: 100%;
- overflow-y: auto;
+ // height: 100%;
+ // height: 900px;
+ height: calc(100vh - 80px);
+ overflow-y: scroll;
+ overflow-x: hidden;
background: $primary-color;
color: #fff;
transition: width ease .3s;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
&.collapse {
width: 64px !important;
}
@@ -52,18 +84,26 @@
// 鍙宠竟鍐呭
.el-main {
width: 100%;
- height: 100%;
+ // height: 100%;
+ height: calc(100vh - 90px);
padding: 0;
position: relative;
display: flex;
flex-direction: column;
- overflow: hidden;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ scrollbar-width: none; /* firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ display: none; /* Chrome Safari */
+ }
& > header {
- height: $header-height;
+ height: 48px;
flex-shrink: 0;
}
& > main {
height: 100%;
+ box-sizing: border-box;
overflow-y: auto;
}
}
@@ -81,4 +121,33 @@
transition: all .5s;
position: absolute;
}
+.comfirm {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.3);
+ z-index: 1000;
+ .container {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ background-color: #fff;
+ width: 500px;
+ height: 120px;
+ padding: 30px;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ .complete {
+ display: flex;
+ flex-direction: row-reverse;
+ }
+ }
+}
</style>
diff --git a/admin/src/layouts/TableLayout.vue b/admin/src/layouts/TableLayout.vue
index d64e0ae..2a12773 100644
--- a/admin/src/layouts/TableLayout.vue
+++ b/admin/src/layouts/TableLayout.vue
@@ -1,11 +1,11 @@
<template>
<div class="table-layout">
<!-- 澶撮儴 -->
- <div v-if="withBreadcrumb" class="table-header">
+<!-- <div v-if="withBreadcrumb" class="table-header">
<el-breadcrumb separator="/">
<el-breadcrumb-item v-for="path in paths" :key="path">{{path}}</el-breadcrumb-item>
</el-breadcrumb>
- </div>
+ </div>-->
<Profile :roles="roles" :permissions="permissions">
<!-- 鎼滅储琛ㄥ崟閮ㄥ垎 -->
<div class="table-search-form">
diff --git a/admin/src/layouts/TableLayout1.vue b/admin/src/layouts/TableLayout1.vue
index 934c5d5..c5070e9 100644
--- a/admin/src/layouts/TableLayout1.vue
+++ b/admin/src/layouts/TableLayout1.vue
@@ -1,11 +1,11 @@
<template>
<div class="table-layout">
<!-- 澶撮儴 -->
- <div v-if="withBreadcrumb" class="table-header">
+<!-- <div v-if="withBreadcrumb" class="table-header">
<el-breadcrumb separator="/">
<el-breadcrumb-item v-for="path in paths" :key="path">{{path}}</el-breadcrumb-item>
</el-breadcrumb>
- </div>
+ </div>-->
<Profile :roles="roles" :permissions="permissions">
<div style="width: 100%; height: 100%; padding: 0 16px; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between;">
<div style="width: 300px; height: 100%; flex-shrink: 0; background: #ffffff;">
diff --git a/admin/src/plugins/messagebox.js b/admin/src/plugins/messagebox.js
index 2a22af4..c7a6b80 100644
--- a/admin/src/plugins/messagebox.js
+++ b/admin/src/plugins/messagebox.js
@@ -3,16 +3,16 @@
export default {
...MessageBox,
// 鍒犻櫎浜屾纭
- actionConfirm (title,message) {
- return MessageBox.confirm(message, title, {
- confirmButtonText: '纭',
+ deleteConfirm (message) {
+ return MessageBox.confirm(message, '鍒犻櫎鎻愰啋', {
+ confirmButtonText: '纭鍒犻櫎',
cancelButtonText: '鍙栨秷',
type: 'warning'
})
},
- deleteConfirm (message) {
- return MessageBox.confirm(message, '鍒犻櫎鎻愰啋', {
- confirmButtonText: '纭鍒犻櫎',
+ resetConfirm (message) {
+ return MessageBox.confirm(message, '閲嶇疆鎻愰啋', {
+ confirmButtonText: '纭閲嶇疆',
cancelButtonText: '鍙栨秷',
type: 'warning'
})
@@ -32,5 +32,37 @@
cancelButtonText: '鍙栨秷',
type: 'warning'
})
+ },
+ // 瀹屽杽鎻愰啋
+ messageApprove (message) {
+ return MessageBox.confirm(message, '瀹℃牳鎻愰啋', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ })
+ },
+ // 闂嵎纭疄鎻愰啋
+ messageWaring (message, title, confirmText='纭畾', cancelText='鍙栨秷') {
+ return MessageBox.confirm(message, title, {
+ confirmButtonText: confirmText,
+ cancelButtonText: cancelText,
+ type: 'warning'
+ })
+ },
+ // 闂嵎纭疄鎻愰啋
+ messageConfirm (message, confirmText='纭畾', cancelText='鍙栨秷') {
+ return MessageBox.confirm(message, "鎿嶄綔纭", {
+ confirmButtonText: confirmText,
+ cancelButtonText: cancelText,
+ type: 'warning'
+ })
+ },
+ // 纭鏄惁鏈嶅姟璇ヤ紒涓�
+ cancelOrder (message) {
+ return MessageBox.confirm(message, '鍙栨秷鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ })
}
}
diff --git a/admin/src/store/index.js b/admin/src/store/index.js
index 3be2adb..d2f4f72 100644
--- a/admin/src/store/index.js
+++ b/admin/src/store/index.js
@@ -13,7 +13,11 @@
list: [],
// 鏄惁鏀惰捣
collapse: false
- }
+ },
+ //tags鏁扮粍
+ tags:[],
+ //tagsview鏍囩鏄剧ず闅愯棌
+ isCollapse:false
}
const mutations = {
@@ -28,8 +32,12 @@
},
// 璁剧疆宸茬櫥褰曠殑鐢ㄦ埛淇℃伅
setUserInfo: (state, data) => {
- state.userInfo = data
+ state.userInfo = {
+ ...state.userInfo,
+ ...data
+ }
},
+
// 璁剧疆棣栭〉璺敱淇℃伅
setHomePage (state, homePage) {
state.homePage = homePage
@@ -37,6 +45,37 @@
// 閲嶇疆鑿滃崟
resetMenus: (state) => {
state.menuData.list = []
+ },
+ // tags
+ pushtags(state,val){
+ //濡傛灉绛変簬-1璇存槑tabs涓嶅瓨鍦ㄩ偅涔堟彃鍏ワ紝鍚﹀垯浠�涔堥兘涓嶅仛
+ //findindex鎵捐鏍囷紝寰幆鍒ゆ柇涓�涓嬶紝濡傛灉绛変簬閭d箞灏变唬琛ㄦ湁鐩稿悓鐨勶紝灏变笉蹇呮坊鍔狅紝濡傛灉鎵句笉鍒伴偅灏辨槸-1.灏辨坊鍔�
+ let result = state.tags.findIndex(item => item.label === val.label)
+ if (result === -1) {
+ state.tags.push({...val, keepAlive: false})
+ } else {
+ state.tags[result]= {...val, keepAlive: true}
+ }
+ // result === -1 ? state.tags.push(val) : (state.tags[result]==val)
+ },
+ //鍏抽棴鏍囩
+ closeTab(state, val) {
+ //鍚屼笂锛屾壘瑙掓爣锛岀劧鍚庣敤瑙掓爣鐨勪綅缃搴斿垹闄や竴浣嶃�俿plice锛氳繖鏄暟缁勭殑鍒犻櫎鏂规硶
+ let result = state.tags.findIndex(item => item.label === val.label)
+ state.tags.splice(result, 1)
+ },
+ //鍏抽棴鎵�鏈塼agsview鏍囩
+ cleartagsview(state,val){
+ //娓呯┖鏁扮粍
+ state.tags=[]
+ //璺宠浆鍒伴椤�,val鎺ュ彈浼犺繃鏉ョ殑褰撳墠璺敱
+ if(val !== "/index"){
+ router.push({path:"/index"})
+ }
+ },
+ //鏀瑰彉tagsview鏄剧ず闅愯棌
+ changeisshow(state){
+ state.isCollapse=!state.isCollapse
}
}
const actions = {}
diff --git a/admin/vue.config.js b/admin/vue.config.js
index ec8fd81..af9c07a 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -18,7 +18,8 @@
// https://dmtest.ahapp.net/admin_api 娴嬭瘯鏈�
// http://10.10.99.63/admin_interface/ 鏈�鏂版祴璇曟湇锛堝唴缃戯級
// http://218.23.218.228:8018/admin_interface 鏈�鏂版祴璇曟湇锛堝缃戯級
- target: 'http://218.23.218.228:8018/admin_interface',
+ // target: 'http://218.23.218.228:8018/admin_interface',
+ target: 'http://localhost:10028',
changeOrigin: true,
pathRewrite: {
[`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
index 478d293..7fa2107 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -26,8 +26,8 @@
* @date 2021-10-10 14:40:35
* https://www.bejson.com/othertools/cron/ cron 琛ㄨ揪寮忕敓鎴愬湴鍧�
*/
-@Component
-@EnableScheduling
+//@Component
+//@EnableScheduling
public class ScheduleTool {
@Autowired
diff --git a/server/dmvisit_admin/src/main/resources/application.yml b/server/dmvisit_admin/src/main/resources/application.yml
index e051fda..a5c7678 100644
--- a/server/dmvisit_admin/src/main/resources/application.yml
+++ b/server/dmvisit_admin/src/main/resources/application.yml
@@ -10,7 +10,7 @@
# application:
# name: doumeemes
profiles:
- active: testHS
+ active: dev
# JSON杩斿洖閰嶇疆
jackson:
diff --git a/server/dmvisit_web/src/main/resources/application.yml b/server/dmvisit_web/src/main/resources/application.yml
index 7c97108..cc7d5b6 100644
--- a/server/dmvisit_web/src/main/resources/application.yml
+++ b/server/dmvisit_web/src/main/resources/application.yml
@@ -10,7 +10,7 @@
# application:
# name: doumeemes
profiles:
- active: testHS
+ active: dev
# JSON杩斿洖閰嶇疆
jackson:
--
Gitblit v1.9.3