From 4a34ae32407330c6600d24b065c7de2ad9a51d6b Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 26 一月 2024 10:49:04 +0800
Subject: [PATCH] 开发业务接口
---
company/src/components/common/UploadImage.vue | 155 +++
company/src/plugins/download.js | 3
company/src/App.vue | 10
company/src/components/common/UploadAvatarImage.vue | 81 +
company/src/components/common/PositionSelect.vue | 2
company/src/assets/logo.png | 0
company/src/components/common/Light.vue | 29
company/src/components/base/BaseTable.vue | 8
company/src/components/common/Pagination.vue | 2
company/src/assets/style/element-variables.scss | 1
company/src/layouts/TableLayout.vue | 4
company/src/layouts/AppLayout.vue | 112 ++
company/src/assets/images/zan.png | 0
company/src/components/common/Header.vue | 193 ----
company/src/components/base/BaseOpera.vue | 16
company/src/router/index.js | 4
company/src/assets/images/login_img.jpg | 0
company/src/store/index.js | 43
company/src/assets/images/top_ic_chilun@2x.png | 0
company/src/components/common/GlobalQuestionWindow.vue | 137 +++
company/src/assets/images/woman.png | 0
company/src/assets/images/login_bg.png | 0
server/platform/src/main/resources/application.yml | 2
company/src/plugins/messagebox.js | 31
company/src/assets/images/man.png | 0
company/src/components/common/tagsview.vue | 261 ++++++
company/src/components/common/DepartmentSelect.vue | 3
company/src/assets/avatar/man.png | 0
server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java | 2
company/src/components/common/RichEditor.vue | 158 +++
company/src/assets/images/login_img.png | 0
company/src/components/common/GlobalAlertWindow.vue | 120 ++
company/src/components/common/SearchFormCollapse.vue | 2
company/src/components/common/ImportButton.vue | 37
company/src/assets/style/lib.css | 117 ++
company/src/components/common/Tree.vue | 135 +++
company/src/components/common/ShowRich.vue | 42
company/src/assets/style/style.scss | 47 +
company/src/assets/style/variables.scss | 9
company/src/components/common/myImage.vue | 84 +
company/src/assets/avatar/woman.png | 0
company/src/assets/images/top_ic_bolang@2x.png | 0
company/src/components/common/GlobalWindow.vue | 33
company/src/components/common/Menu.vue | 58 -
company/src/components/common/TreeSelect.vue | 2
company/src/components/common/CommonHeader.vue | 220 +++++
company/src/assets/style/alertstyle.scss | 32
company/src/components/common/GlobalRigthWindow.vue | 137 +++
company/src/components/common/ImportWindow.vue | 204 ++++
49 files changed, 2,219 insertions(+), 317 deletions(-)
diff --git a/company/src/App.vue b/company/src/App.vue
index 2892abe..d22b2c9 100644
--- a/company/src/App.vue
+++ b/company/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/company/src/assets/avatar/man.png b/company/src/assets/avatar/man.png
new file mode 100644
index 0000000..a84beb9
--- /dev/null
+++ b/company/src/assets/avatar/man.png
Binary files differ
diff --git a/company/src/assets/avatar/woman.png b/company/src/assets/avatar/woman.png
new file mode 100644
index 0000000..eef8695
--- /dev/null
+++ b/company/src/assets/avatar/woman.png
Binary files differ
diff --git a/company/src/assets/images/login_bg.png b/company/src/assets/images/login_bg.png
new file mode 100644
index 0000000..edff503
--- /dev/null
+++ b/company/src/assets/images/login_bg.png
Binary files differ
diff --git a/company/src/assets/images/login_img.jpg b/company/src/assets/images/login_img.jpg
new file mode 100644
index 0000000..c7024a0
--- /dev/null
+++ b/company/src/assets/images/login_img.jpg
Binary files differ
diff --git a/company/src/assets/images/login_img.png b/company/src/assets/images/login_img.png
new file mode 100644
index 0000000..93ec0f9
--- /dev/null
+++ b/company/src/assets/images/login_img.png
Binary files differ
diff --git a/company/src/assets/images/man.png b/company/src/assets/images/man.png
index a84beb9..a6e3a8f 100644
--- a/company/src/assets/images/man.png
+++ b/company/src/assets/images/man.png
Binary files differ
diff --git a/company/src/assets/images/top_ic_bolang@2x.png b/company/src/assets/images/top_ic_bolang@2x.png
new file mode 100644
index 0000000..f3d281b
--- /dev/null
+++ b/company/src/assets/images/top_ic_bolang@2x.png
Binary files differ
diff --git a/company/src/assets/images/top_ic_chilun@2x.png b/company/src/assets/images/top_ic_chilun@2x.png
new file mode 100644
index 0000000..209e1c3
--- /dev/null
+++ b/company/src/assets/images/top_ic_chilun@2x.png
Binary files differ
diff --git a/company/src/assets/images/woman.png b/company/src/assets/images/woman.png
index eef8695..2aaafa6 100644
--- a/company/src/assets/images/woman.png
+++ b/company/src/assets/images/woman.png
Binary files differ
diff --git a/company/src/assets/images/zan.png b/company/src/assets/images/zan.png
new file mode 100644
index 0000000..6af5480
--- /dev/null
+++ b/company/src/assets/images/zan.png
Binary files differ
diff --git a/company/src/assets/logo.png b/company/src/assets/logo.png
index 5d8fd16..3c0b233 100644
--- a/company/src/assets/logo.png
+++ b/company/src/assets/logo.png
Binary files differ
diff --git a/company/src/assets/style/alertstyle.scss b/company/src/assets/style/alertstyle.scss
new file mode 100644
index 0000000..761f010
--- /dev/null
+++ b/company/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/company/src/assets/style/element-variables.scss b/company/src/assets/style/element-variables.scss
index 9c8266b..efaf750 100644
--- a/company/src/assets/style/element-variables.scss
+++ b/company/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/company/src/assets/style/lib.css b/company/src/assets/style/lib.css
new file mode 100644
index 0000000..2fd7178
--- /dev/null
+++ b/company/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/company/src/assets/style/style.scss b/company/src/assets/style/style.scss
index 114ca0e..cd08f82 100644
--- a/company/src/assets/style/style.scss
+++ b/company/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,44 @@
#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;
+}
diff --git a/company/src/assets/style/variables.scss b/company/src/assets/style/variables.scss
index ff3f939..d982769 100644
--- a/company/src/assets/style/variables.scss
+++ b/company/src/assets/style/variables.scss
@@ -1,5 +1,12 @@
// 涓昏壊璋�
-$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;
// 鑿滃崟瀹藉害
diff --git a/company/src/components/base/BaseOpera.vue b/company/src/components/base/BaseOpera.vue
index 70681bd..5d64137 100644
--- a/company/src/components/base/BaseOpera.vue
+++ b/company/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/company/src/components/base/BaseTable.vue b/company/src/components/base/BaseTable.vue
index e738f2d..ccdafc0 100644
--- a/company/src/components/base/BaseTable.vue
+++ b/company/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/company/src/components/common/CommonHeader.vue b/company/src/components/common/CommonHeader.vue
new file mode 100644
index 0000000..2e9798a
--- /dev/null
+++ b/company/src/components/common/CommonHeader.vue
@@ -0,0 +1,220 @@
+<template>
+ <div class="common-header">
+ <div class="header">
+ <div class="logo">
+ <div>浜戞槗淇濆鎴锋湇鍔$郴缁�</div>
+ <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
+ </div>
+ <div class="user">
+ <el-dropdown v-if="isLogined" trigger="click">
+ <span class="el-dropdown-link">
+ <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> -->
+ <img v-if="userInfo != null" style="width: 30px !important;" src="@/assets/avatar/man.png" 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>
+ </div>
+ <!-- 淇敼瀵嗙爜 -->
+ <GlobalAlertWindow
+ 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>
+ </GlobalAlertWindow>
+ </div>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import GlobalAlertWindow from './GlobalAlertWindow'
+import { logout, updatePwd } from '@/api/system/common'
+export default {
+ name: 'CommonHeader',
+ components: { GlobalAlertWindow },
+ props: {
+ isLogined: {
+ type: Boolean,
+ default: true
+ }
+ },
+ 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: '璇峰啀娆¤緭鍏ユ柊瀵嗙爜' }
+ ]
+ }
+ }
+ }
+ },
+ computed: {
+ ...mapState(['menuData', 'userInfo']),
+ 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)
+ })
+ }
+ }
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/style/variables.scss";
+.common-header {
+ background-color: #1457C7;
+}
+.header {
+ overflow: hidden;
+ // background: #fff;
+ height: 100%;
+ display: flex;
+ justify-content: space-between;
+
+ .logo {
+ background: url('../../assets/images/top_ic_chilun@2x.png') no-repeat;
+ box-sizing: border-box;
+ min-width: 280px;
+ height: 70px;
+ padding: 17px 30px;
+ // flex-shrink: 0;
+ line-height: 36px;
+ font-size: 22px;
+ font-weight: 600;
+ color: #fff;
+ // display: inline;
+ .title-en {
+ font-size: 11px;
+ font-weight: 500;
+ color: rgb(202, 214, 238);
+ }
+ }
+ .user {
+ width: 712px;
+ box-sizing: border-box;
+ height: 70px;
+ padding-right: 25px;
+ background: url('../../assets/images/top_ic_bolang@2x.png') no-repeat;
+ flex-shrink: 0;
+ text-align: right;
+ .el-dropdown {
+ top: 10px;
+ color: #fff;
+ }
+ 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;
+ }
+}
+</style>
diff --git a/company/src/components/common/DepartmentSelect.vue b/company/src/components/common/DepartmentSelect.vue
index a90fd07..77d0b67 100644
--- a/company/src/components/common/DepartmentSelect.vue
+++ b/company/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/company/src/components/common/GlobalAlertWindow.vue b/company/src/components/common/GlobalAlertWindow.vue
new file mode 100644
index 0000000..53b0597
--- /dev/null
+++ b/company/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/company/src/components/common/GlobalQuestionWindow.vue b/company/src/components/common/GlobalQuestionWindow.vue
new file mode 100644
index 0000000..40b7797
--- /dev/null
+++ b/company/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/company/src/components/common/GlobalRigthWindow.vue b/company/src/components/common/GlobalRigthWindow.vue
new file mode 100644
index 0000000..1e01639
--- /dev/null
+++ b/company/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/company/src/components/common/GlobalWindow.vue b/company/src/components/common/GlobalWindow.vue
index f68056c..7967500 100644
--- a/company/src/components/common/GlobalWindow.vue
+++ b/company/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">{{submitText}}</el-button>
- <el-button @click="close">鍙栨秷</el-button>
+ <el-button @click="confirm" :loading="confirmWorking" type="primary">纭畾</el-button>
+ <el-button @click="close">杩斿洖</el-button>
</slot>
</div>
</el-drawer>
@@ -31,7 +33,7 @@
props: {
width: {
type: String,
- default: '36%'
+ default: '100%'
},
// 鏄惁鍖呭惈搴曢儴鎿嶄綔
withFooter: {
@@ -52,11 +54,6 @@
visible: {
type: Boolean,
required: true
- },
- // 纭鎸夐挳鏂囧瓧
- submitText: {
- type: String,
- default: '纭畾'
}
},
methods: {
@@ -75,11 +72,16 @@
// 杈撳叆妗嗛珮搴�
$input-height: 32px;
.global-window {
+ top: 80px !important;
+ left: 218px !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;
@@ -95,7 +97,7 @@
}
}
// 涓讳綋
- /deep/ .el-drawer__body {
+ ::v-deep .el-drawer__body {
display: flex;
flex-direction: column;
position: absolute;
@@ -103,15 +105,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/company/src/components/common/Header.vue b/company/src/components/common/Header.vue
index 31c6e4e..1800c40 100644
--- a/company/src/components/common/Header.vue
+++ b/company/src/components/common/Header.vue
@@ -1,156 +1,30 @@
<template>
<div class="main-header">
<div class="header">
-<!-- <h2>-->
-<!-- <i class="el-icon-s-unfold" v-if="menuData.collapse" @click="switchCollapseMenu(null)"></i>-->
-<!-- <i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i>-->
-<!-- {{title}}-->
-<!-- </h2>-->
- <div class="user">
-<!-- <span style="font-size: 13px">{{ userInfo.company.name }}</span>-->
- <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>
+ <h2>
+ <i class="el-icon-s-unfold" v-if="menuData.collapse" @click="switchCollapseMenu(null)"></i>
+ <i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i>
+ {{title}}
+ </h2>
+ <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)
- location.reload()
- // this.$router.push({ name: 'login' })
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- }
+ ...mapMutations(['switchCollapseMenu']),
}
}
</script>
@@ -163,54 +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;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- text {
- font-size: 18px !important;
- color: #222222;
- }
- .el-dropdown-link {
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-dropdown {
- top: 2px;
- height: 100%;
- }
- 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/company/src/components/common/ImportButton.vue b/company/src/components/common/ImportButton.vue
new file mode 100644
index 0000000..04510be
--- /dev/null
+++ b/company/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/company/src/components/common/ImportWindow.vue b/company/src/components/common/ImportWindow.vue
new file mode 100644
index 0000000..8e05ddb
--- /dev/null
+++ b/company/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/company/src/components/common/Light.vue b/company/src/components/common/Light.vue
index 3e18a29..433a66a 100644
--- a/company/src/components/common/Light.vue
+++ b/company/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/company/src/components/common/Menu.vue b/company/src/components/common/Menu.vue
index 98280b5..b928666 100644
--- a/company/src/components/common/Menu.vue
+++ b/company/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 }">浜戞槗淇�</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"/>
@@ -40,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: {
@@ -65,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) {
@@ -92,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">
@@ -136,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;
@@ -153,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/company/src/components/common/Pagination.vue b/company/src/components/common/Pagination.vue
index 975a875..86ea4d2 100644
--- a/company/src/components/common/Pagination.vue
+++ b/company/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/company/src/components/common/PositionSelect.vue b/company/src/components/common/PositionSelect.vue
index dd8c279..7ff6b2b 100644
--- a/company/src/components/common/PositionSelect.vue
+++ b/company/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/company/src/components/common/RichEditor.vue b/company/src/components/common/RichEditor.vue
new file mode 100644
index 0000000..4ac38b2
--- /dev/null
+++ b/company/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/company/src/components/common/SearchFormCollapse.vue b/company/src/components/common/SearchFormCollapse.vue
index 0c1dcbf..5e602b8 100644
--- a/company/src/components/common/SearchFormCollapse.vue
+++ b/company/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/company/src/components/common/ShowRich.vue b/company/src/components/common/ShowRich.vue
new file mode 100644
index 0000000..7a7c9d9
--- /dev/null
+++ b/company/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/company/src/components/common/Tree.vue b/company/src/components/common/Tree.vue
new file mode 100644
index 0000000..432a1a6
--- /dev/null
+++ b/company/src/components/common/Tree.vue
@@ -0,0 +1,135 @@
+<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"
+ />
+ <!-- @callback="callback" -->
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+// import Bus from '@/utils/eventBus'
+export default {
+ name: 'tree',
+ props: {
+ list: {
+ type: Array,
+ required: false,
+ default: () => []
+ },
+ defaultProps: {
+ type: Object,
+ require: false,
+ default: () => {
+ return {
+ name: 'name',
+ status: 'status',
+ children: 'children',
+ id: 'id'
+ }
+ }
+ }
+ },
+ data() {
+ return {
+ tempItem: {
+ id: null,
+ name: null
+ }
+ }
+ },
+ methods: {
+ // 鐐瑰嚮褰撳墠椤�
+ clickIten (item) {
+ 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', this.tempItem, item)
+ },
+ // 閫掑綊鏂规硶
+ recursion (children) {
+ children.forEach(item => {
+ item[this.defaultProps.status] = false
+ if (item[this.defaultProps.children]) {
+ this.recursion(item[this.defaultProps.children])
+ }
+ })
+ },
+ callback (data, item) {
+ if (this.tempItem.id === data.id) {
+ this.tempItem = {}
+ } else {
+ this.tempItem.id = data.id
+ this.tempItem.name = data.name
+ }
+ this.$emit('callback', this.tempItem, item)
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree {
+ /*width: 100%;*/
+ /*height: auto;*/
+ /*border-radius: 5px;*/
+ /*overflow: hidden;*/
+ /*border: 1px solid #eeeeee;*/
+ /*box-sizing: border-box;*/
+ .tree_childern {
+ margin-left: 20px;
+ }
+ .activeItem {
+ background: #F4F7FC;
+ }
+ .tree_item {
+ display: flex;
+ align-items: center;
+ height: 48px;
+ cursor: pointer;
+ padding-left: 10px;
+ .tree_item_label {
+ font-size: 14px;
+ font-weight: 400;
+ color: #333333;
+ white-space: nowrap;
+ }
+ i {
+ margin-right: 5px;
+ }
+ .color {
+ color: #999999 !important;
+ }
+ .activeColor {
+ color: #305ED5 !important;
+ }
+ }
+}
+</style>
diff --git a/company/src/components/common/TreeSelect.vue b/company/src/components/common/TreeSelect.vue
index fc2efdf..d9cf2e6 100644
--- a/company/src/components/common/TreeSelect.vue
+++ b/company/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/company/src/components/common/UploadAvatarImage.vue b/company/src/components/common/UploadAvatarImage.vue
index ac31f3c..e0d737e 100644
--- a/company/src/components/common/UploadAvatarImage.vue
+++ b/company/src/components/common/UploadAvatarImage.vue
@@ -1,18 +1,18 @@
<template>
<div>
<el-upload
- :style="customStyle"
+ class="avatar-uploader"
+ accept=".png,.jpg"
:action="uploadImgUrl"
:data="uploadData"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:on-error="uploadError"
:before-upload="beforeAvatarUpload">
- <img v-if="file.imgurlfull" :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>
+ <template v-if="file.imgurlfull">
+ <img :src="file.imgurlfull" class="avatar">
+ </template>
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
@@ -25,16 +25,16 @@
type: Object,
default: () => {}
},
- uploadData: Object,
- tipsLabel: '',
- customStyle: {
- type: String,
- default: 'width: 90px; height: 90px;'
- }
+ uploadData: Object
},
data() {
return {
- uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
+ // uploadData: {
+ // folder: 'upload',
+ // type: 'image'
+ // },
+ imgurlfull: ''
}
},
@@ -42,36 +42,41 @@
// 涓婁紶鍥剧墖
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 })
+ this.file.imgurl = res.data.imgaddr;
+ this.file.imgurlfull = res.data.url;
+ this.$tip.apiSuccess('涓婁紶鎴愬姛')
+ this.$emit('uploadSuccess', { imgurl: res.data.imgaddr, imgurlfull: res.data.url })
} else {
- this.$message.error('涓婁紶澶辫触')
+ this.$tip.apiFailed('涓婁紶澶辫触')
}
this.$emit('uploadEnd')
},
uploadError() {
- this.$message.error('涓婁紶澶辫触')
+ this.$tip.apiFailed('涓婁紶澶辫触')
this.$emit('endUpload')
},
// // 鎷︽埅
beforeAvatarUpload(file) {
this.$emit('uploadBegin')
- return true;
- },
- },
+ 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 {
@@ -80,18 +85,34 @@
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
- line-height: 90px;
+ width: $image-width;
+ height: $image-width;
+ line-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/company/src/components/common/UploadImage.vue b/company/src/components/common/UploadImage.vue
new file mode 100644
index 0000000..67ccb8a
--- /dev/null
+++ b/company/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/company/src/components/common/myImage.vue b/company/src/components/common/myImage.vue
new file mode 100644
index 0000000..a159f20
--- /dev/null
+++ b/company/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/company/src/components/common/tagsview.vue b/company/src/components/common/tagsview.vue
new file mode 100644
index 0000000..c5afffa
--- /dev/null
+++ b/company/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/company/src/layouts/AppLayout.vue b/company/src/layouts/AppLayout.vue
index 476998f..c0aa936 100644
--- a/company/src/layouts/AppLayout.vue
+++ b/company/src/layouts/AppLayout.vue
@@ -1,31 +1,49 @@
<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>
+ <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
+ }
+ },
computed: {
- ...mapState(['menuData'])
- }
+ ...mapState(['menuData', 'userInfo'])
+ },
+
+ methods: {
+
+ },
}
</script>
@@ -34,17 +52,27 @@
.el-container {
background: #F7F8F9;
height: 100%;
+
display: flex;
- overflow: hidden;
+ // overflow: hidden;
+ overflow: scroll;
// 宸﹁竟鑿滃崟
.el-aside {
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,14 +80,21 @@
// 鍙宠竟鍐呭
.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 {
@@ -81,4 +116,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/company/src/layouts/TableLayout.vue b/company/src/layouts/TableLayout.vue
index d64e0ae..2a12773 100644
--- a/company/src/layouts/TableLayout.vue
+++ b/company/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/company/src/plugins/download.js b/company/src/plugins/download.js
index 39ba4c5..f4c5876 100644
--- a/company/src/plugins/download.js
+++ b/company/src/plugins/download.js
@@ -2,12 +2,11 @@
import message from './message'
export default function (response, decode = true, mime = 'application/octet-stream') {
- // debugger
// 褰撲笅杞芥帴鍙f病鏈夋垚鍔熻繑鍥炴祦骞朵笖鎺ュ彛杩斿洖鐨勬槸JSON鏃堕渶瑕佸鍝嶅簲娴佽繘琛岃В鏋愬苟鎻愮ず閿欒銆傦紙澶勭悊涓嬭浇鎺ュ彛鍑虹幇鏈煡寮傚父鐨勬儏鍐碉級
if (response.headers['content-type'] === 'application/json') {
const blob = new Blob([response.data])
const fileReader = new FileReader()
- fileReader.readAsText(blob, 'UTF-8')
+ fileReader.readAsText(blob, 'utf-8')
fileReader.onload = function () {
message.apiFailed(JSON.parse(fileReader.result))
}
diff --git a/company/src/plugins/messagebox.js b/company/src/plugins/messagebox.js
index 5d3d2ec..be2c47b 100644
--- a/company/src/plugins/messagebox.js
+++ b/company/src/plugins/messagebox.js
@@ -10,6 +10,13 @@
type: 'warning'
})
},
+ resetConfirm (message) {
+ return MessageBox.confirm(message, '閲嶇疆鎻愰啋', {
+ confirmButtonText: '纭閲嶇疆',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ })
+ },
// 绂佺敤浜屾纭
disableConfirm (message) {
return MessageBox.confirm(message, '绂佺敤鎻愰啋', {
@@ -25,5 +32,29 @@
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'
+ })
+ },
+ // 纭鏄惁鏈嶅姟璇ヤ紒涓�
+ cancelOrder (message) {
+ return MessageBox.confirm(message, '鍙栨秷鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ })
}
}
diff --git a/company/src/router/index.js b/company/src/router/index.js
index 56a7f96..cf320c3 100644
--- a/company/src/router/index.js
+++ b/company/src/router/index.js
@@ -3,6 +3,7 @@
import AppLayout from '@/layouts/AppLayout'
import { getUserInfo } from '@/api/system/common'
const Login = () => import('@/views/login')
+
const ErrorNoPermissions = () => import('@/views/no-permissions')
const Error404 = () => import('@/views/not-found')
@@ -18,6 +19,7 @@
path: '/login',
component: Login
},
+
// 鏃犳潈闄�
{
name: 'no-permissions',
@@ -52,7 +54,6 @@
}
// 楠岃瘉鐢ㄦ埛鏄惁鐧诲綍
const userInfo = router.app.$options.store.state.userInfo
- // console.log(userInfo)
if (userInfo != null) {
// 濡傛灉鐢ㄦ埛涓嶅瓨鍦ㄦ潈闄�
if (userInfo.permissions.length === 0) {
@@ -67,7 +68,6 @@
next()
return
}
- // debugger
getUserInfo()
.then(userInfo => {
// 濡傛灉鐢ㄦ埛涓嶅瓨鍦ㄦ潈闄�
diff --git a/company/src/store/index.js b/company/src/store/index.js
index 3be2adb..d2f4f72 100644
--- a/company/src/store/index.js
+++ b/company/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/server/platform/src/main/resources/application.yml b/server/platform/src/main/resources/application.yml
index b77ea70..40a1f40 100644
--- a/server/platform/src/main/resources/application.yml
+++ b/server/platform/src/main/resources/application.yml
@@ -55,7 +55,7 @@
# dao灞傜殑鏃ュ織璁剧疆涓篸ebug锛屾柟渚挎煡鐪媠ql
logging:
level:
- doumeemes.dao: debug
+ com.doumee.dao: debug
knife4j:
enable: true
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 9f13882..6becd77 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -462,7 +462,7 @@
@Override
public Company findById(Integer id) {
- Company model = findById(id);
+ Company model = companyMapper.selectById(id);
if(model == null ||Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
--
Gitblit v1.9.3