فهرست منبع

Merge branch 'rebuild_UI'

Karsa 1 سال پیش
والد
کامیت
c1047ee28b

+ 1 - 1
README.md

@@ -3,4 +3,4 @@
 ### styles
 - element-ui.scss elment-ui相关重置样式
 - theme-vars.scss 相关变量
-- vars 当做全局样式吧
+- global.scss 当做全局样式吧

+ 1 - 2
build/webpack.base.conf.js

@@ -31,8 +31,7 @@ module.exports = {
     alias: {
       'vue$': 'vue/dist/vue.esm.js',
       '@': resolve('src'),
-      'scss_vars': '@/styles/vars.scss',
-      'index_scss': '@/styles/index.scss',
+      'scss_global': '@/styles/global.scss',
       'api': '@/api',
       'utils': '@/utils',
       'components': '@/components',

+ 3 - 2
config/dev.env.js

@@ -5,8 +5,9 @@ module.exports = merge(prodEnv, {
   NODE_ENV:'"development"',
   VUE_APP_API_ROOT:'"/adminapi"',  //
   Domain:'"brilliantstart.cn"',
-  Login:'"http://localhost:8080/login"',
+  Login:'"http://localhost:3030/login"',
   CHART_LINK:'"https://charttest.hzinsights.com/chartshow"',
   VUE_APP_HR_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8391/login"',
-  VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"'
+  VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"',
+  VUE_APP_CRM_SYSTEM:'"http://8.136.199.33:7777/login"'
 });

+ 1 - 1
config/index.js

@@ -31,7 +31,7 @@ module.exports = {
 	//	原始配置
     env: require('./dev.env'),
     host: 'newadmin.brilliantstart.cn', // can be overwritten by process.env.HOST
-    port: 8080,
+    port: '3030',
     autoOpenBrowser: false,
     assetsSubDirectory: 'static',
     assetsPublicPath: '/',

+ 2 - 1
config/prod.env.js

@@ -5,5 +5,6 @@ module.exports = {
 	Login:'"https://hzeta.hzinsights.com/login"',
 	CHART_LINK:'"https://chartlib.hzinsights.com/chartshow"',
 	VUE_APP_HR_MANAGEMENT_SYSTEM:'"https://hr.hzinsights.com/login"',
-	VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"https://fms.hzinsights.com/login"'
+	VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"https://fms.hzinsights.com/login"',
+	VUE_APP_CRM_SYSTEM:'"https://hzcrm.hzinsights.com/login"'
 }

+ 2 - 1
config/prod.test.env.js

@@ -6,5 +6,6 @@ module.exports = {
 	Login:'"http://8.136.199.33:7778/login"',
 	CHART_LINK:'"https://charttest.hzinsights.com/chartshow"',
 	VUE_APP_HR_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8391/login"',
-  VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"'
+  VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM:'"http://8.136.199.33:8618/login"',
+	VUE_APP_CRM_SYSTEM:'"http://8.136.199.33:7777/login"'
 }

+ 0 - 3
package.json

@@ -81,11 +81,8 @@
     "extract-text-webpack-plugin": "^2.1.2",
     "file-loader": "^0.10.0",
     "friendly-errors-webpack-plugin": "^1.1.3",
-    "function-bind": "^1.0.2",
     "html-webpack-plugin": "^2.28.0",
     "http-proxy-middleware": "^0.17.3",
-    "json-loader": "^0.5.4",
-    "less": "^4.1.0",
     "moment": "^2.22.2",
     "node-sass": "^4.5.0",
     "opn": "^4.0.2",

+ 6 - 15
src/App.vue

@@ -31,7 +31,7 @@ export default {
 </script>
 
 <style lang="scss">
-@import "~scss_vars";
+@import "~scss_global";
 body {
   margin: 0px !important;
   padding: 0px;
@@ -102,13 +102,13 @@ iframe {
 }
 .editsty {
   font-size: 14px;
-  color: #409eff;
+  color: #0052D9;
   cursor: pointer;
   margin-right: 5px;
 }
 .deletesty {
   font-size: 14px;
-  color: red;
+  color: #C54322;
   cursor: pointer;
 }
 .disty {
@@ -134,7 +134,7 @@ iframe {
   // border: 1px solid #8F9BB3;
 }
 .el-pagination.is-background .el-pager li:not(.disabled).active {
-  border-color: #409eff;
+  border-color: #0052D9;
 }
 .el-pagination.is-background .btn-next,
 .el-pagination.is-background .btn-prev {
@@ -167,7 +167,7 @@ iframe {
   color: #666 !important;
 }
 .el-form-item__label {
-  font-size: 16px;
+  font-size: 14px;
 }
 .el-collapse-item__header {
   border: none;
@@ -253,7 +253,7 @@ div::-webkit-scrollbar-corner {
   width: 280px !important;
 }
 .mx-calendar-content .cell.active {
-  background-color: #409eff !important;
+  background-color: #0052D9 !important;
 }
 .mx-datepicker .mx-input {
   height: 40px;
@@ -289,15 +289,6 @@ ul::-webkit-scrollbar-corner {
   background: #666;
 }
 
-/* reset 表格头 */
-.el-table th.is-leaf {
-  background: #f0f2f5 !important;
-}
-.el-table td,
-.el-table th.is-leaf {
-  border-color: #dcdfe6 !important;
-}
-
 textarea {
   font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
     "Microsoft YaHei", "微软雅黑", Arial, sans-serif;

BIN
src/assets/img/home/avatar.png


BIN
src/assets/img/home/eta_mini.png


BIN
src/assets/img/home/fd_logo.png


BIN
src/assets/img/home/hr_logo.png


BIN
src/assets/img/home/logo.png


BIN
src/assets/img/home/二级 icon.png


BIN
src/assets/img/login_bg.png


BIN
src/assets/img/login_logo.png


BIN
src/assets/img/login_r_b.png


+ 3 - 2
src/main.js

@@ -17,6 +17,9 @@ Vue.use(ElementUI);
 Vue.use(VueRouter);
 Vue.use(Vuex);
 
+import setting from '@/mixins/theme.js'
+Vue.prototype.$setting = setting;
+
 //Import Froala Editor
 import "froala-editor/js/plugins.pkgd.min.js";
 import "froala-editor/js/plugins/quick_insert.min.js";
@@ -56,8 +59,6 @@ import "@/utils/registryComponents";
 /*  */
 import Vue2OrgTree from "vue2-org-tree";
 import "./styles/org.scss";
-// 公共样式
-import "./styles/index.scss";
 
 Vue.use(Vue2OrgTree);
 

+ 29 - 187
src/mixins/theme.js

@@ -1,189 +1,31 @@
-/*
- *    Copyright (c) 2018-2025, lengleng All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the pig4cloud.com developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: lengleng (wangiegie@gmail.com)
- */
 
-import { mapGetters } from "vuex";
-const version = require("element-ui/package.json").version; // element-ui version from node_modules
-const ORIGINAL_THEME = "#409EFF";  // default color
-export default function () {
-	return {
-		data() {
-			return {
-				themeVal: ORIGINAL_THEME
-			}
-		},
-		created() {
-			this.themeVal = this.$store.state.theme;
-		},
-		watch: {
-			themeVal(val, oldVal) {
-				//				console.log(val,oldVal);
-				this.$store.commit("SET_THEME", val);
-				this.updateTheme(val, oldVal);
-			}
-		},
-		computed: {
-			...mapGetters(["theme"])
-		},
-		methods: {
-			updateTheme(val, oldVal) {
-				if (typeof val !== "string") return;
-				const head = document.getElementsByTagName("head")[0];
-				const themeCluster = this.getThemeCluster(val.replace("#", ""));
-				const originalCluster = this.getThemeCluster(oldVal.replace("#", ""));
-				const getHandler = (variable, id) => {
-					return () => {
-						const originalCluster = this.getThemeCluster(
-							ORIGINAL_THEME.replace("#", "")
-						);
-						const newStyle = this.updateStyle(
-							this[variable],
-							originalCluster,
-							themeCluster
-						);
-
-						let styleTag = document.getElementById(id);
-						if (!styleTag) {
-							styleTag = document.createElement("style");
-							styleTag.setAttribute("id", id);
-							head.appendChild(styleTag);
-						}
-						styleTag.innerText = newStyle;
-					};
-				};
-
-				const chalkHandler = getHandler("chalk", "chalk-style");
-
-				if (!this.chalk) {
-					//					const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`;
-					const url = document.getElementsByTagName("head")[0].getElementsByTagName("link")[0].href;
-					this.getCSSString(url, chalkHandler, "chalk");
-				} else {
-					chalkHandler();
-				}
-
-				const link = [].slice.call(
-					document.getElementsByTagName("head")[0].getElementsByTagName("link")
-				);
-				for (let i = link.length - 3; i < link.length; i++) {
-					const style = link[i];
-					this.getCSSString(style.href, innerText => {
-						const originalCluster = this.getThemeCluster(
-							ORIGINAL_THEME.replace("#", "")
-						);
-						const newStyle = this.updateStyle(
-							innerText,
-							originalCluster,
-							themeCluster
-						);
-						let styleTag = document.getElementById(i);
-						if (!styleTag) {
-							styleTag = document.createElement("style");
-							styleTag.id = i;
-							styleTag.innerText = newStyle;
-							head.appendChild(styleTag);
-						}
-					});
-				}
-
-				const styles = [].slice
-					.call(document.querySelectorAll("style"))
-					.filter(style => {
-						const text = style.innerText;
-						return (
-							new RegExp(oldVal, "i").test(text) && !/Chalk Variables/.test(text)
-						);
-					});
-				styles.forEach(style => {
-					const {
-						innerText
-					} = style;
-					if (typeof innerText !== "string") return;
-					style.innerText = this.updateStyle(
-						innerText,
-						originalCluster,
-						themeCluster
-					);
-				});
-			},
-			updateStyle(style, oldCluster, newCluster) {
-				let newStyle = style;
-				oldCluster.forEach((color, index) => {
-					newStyle = newStyle.replace(new RegExp(color, "ig"), newCluster[index]);
-				});
-				return newStyle;
-			},
-			getCSSString(url, callback, variable) {
-				const xhr = new XMLHttpRequest();
-				xhr.onreadystatechange = () => {
-					if (xhr.readyState === 4 && xhr.status === 200) {
-						if (variable) {
-							this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, "");
-						}
-						callback(xhr.responseText);
-					}
-				};
-				xhr.open("GET", url);
-				xhr.send();
-			},
-			getThemeCluster(theme) {
-				const tintColor = (color, tint) => {
-					let red = parseInt(color.slice(0, 2), 16);
-					let green = parseInt(color.slice(2, 4), 16);
-					let blue = parseInt(color.slice(4, 6), 16);
-
-					if (tint === 0) {
-						// when primary color is in its rgb space
-						return [red, green, blue].join(",");
-					} else {
-						red += Math.round(tint * (255 - red));
-						green += Math.round(tint * (255 - green));
-						blue += Math.round(tint * (255 - blue));
-
-						red = red.toString(16);
-						green = green.toString(16);
-						blue = blue.toString(16);
-
-						return `#${red}${green}${blue}`;
-					}
-				};
-
-				const shadeColor = (color, shade) => {
-					let red = parseInt(color.slice(0, 2), 16);
-					let green = parseInt(color.slice(2, 4), 16);
-					let blue = parseInt(color.slice(4, 6), 16);
-
-					red = Math.round((1 - shade) * red);
-					green = Math.round((1 - shade) * green);
-					blue = Math.round((1 - shade) * blue);
-
-					red = red.toString(16);
-					green = green.toString(16);
-					blue = blue.toString(16);
-
-					return `#${red}${green}${blue}`;
-				};
-
-				const clusters = [theme];
-				for (let i = 0; i <= 9; i++) {
-					clusters.push(tintColor(theme, Number((i / 10).toFixed(2))));
-				}
-				clusters.push(shadeColor(theme, 0.1));
-				return clusters;
-			}
-		}
-	}
+export default {
+	name: '后台管理系统',
+  theme_color: '#0052D9',
+  menu_bg:'#fff',//菜单栏背景色
+  //跳转外部系统
+  linkSystems: [
+    {
+      name: '财务系统',
+      path: process.env.VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM,
+      key: 'fd',
+      icon: require('@/assets/img/home/fd_logo.png')
+    },
+    {
+      name: 'HR系统',
+      key: 'hr',
+      path: process.env.VUE_APP_HR_MANAGEMENT_SYSTEM,
+      icon: require('@/assets/img/home/hr_logo.png')
+    },
+    {
+      name: 'CRM',
+      key: 'crm',
+      path: process.env.VUE_APP_CRM_SYSTEM,
+      icon: require('@/assets/img/home/logo_mini.png')
+    },
+  ],
+  login_bg: require('@/assets/img/login_bg.png'),//登录页的大图
+  login_logo: require('@/assets/img/login_logo.png')
+  // g_logo: require('@/assets/img/home/logo.png'), //主页菜单栏logo
+  // g_mini_logo: require('@/assets/img/home/logo_mini.png'), //主页菜单栏mini-logo
 }

+ 0 - 18
src/routes/modules/pptRoutes.js

@@ -52,24 +52,6 @@ export default [
 					keepAlive: false
 				}
 			},
-			{
-				path: 'addpptNew',
-				component: () => import('@/views/ppt_manage/addpptNew.vue'),
-				name: '新增ppt',
-				hidden: true,
-				meta: {
-					keepAlive: false
-				}
-			},
-			{
-				path: 'editpptNew',
-				component: () => import('@/views/ppt_manage/editpptNew.vue'),
-				name: '编辑ppt',
-				hidden: true,
-				meta: {
-					keepAlive: false
-				}
-			},
 			//智能ppt
 			{
 				path: 'pptlist_',

+ 61 - 0
src/styles/element-ui.scss

@@ -0,0 +1,61 @@
+
+///* 改变主题色变量 */
+$color-primary:#0052D9;
+$--color-primary: $color-primary;
+
+$danger-btn-color: #F25454;
+// @import "~element-ui/lib/theme-chalk/index.css";
+
+/* 改变 icon 字体路径变量,必需 */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+@import "~element-ui/packages/theme-chalk/src/index";
+
+
+.el-dialog__close.el-icon.el-icon-close{ color:#fff; }
+.el-dialog__close.el-icon.el-icon-close:hover{ color:#fff; }
+.color_primary{color:$color-primary};
+.el-submenu.is-opened>ul{ overflow:hidden; }
+.el-submenu.is-opened>ul li{ background:#fff; }
+.el-submenu__title>span{ font:14px "微软雅黑"; letter-spacing:1px; }
+.el-submenu__title>i:nth-of-type(1){ color:#1F2E4D; font-size:14px; }
+.el-submenu__title>i:nth-of-type(2){ line-height:16px; z-index:10; right:0; left:100px; }
+.el-submenu.item .el-submenu__title{ text-align:left; }
+.el-submenu .el-menu-item{ padding:0 70px 0 45px !important; }
+.menu-collapsed .el-submenu .el-menu-item{ padding:0 85px 0 30px !important; }
+.box-card{ margin-bottom:20px !important; padding-bottom:30px; }
+.el-dialog .el-input{ width:60%; }
+.el-dialog .el-select>.el-input{ width:100%; }
+.el-dialog .el-dialog__headerbtn{ font-size:24px; padding:10px; top:3px; right:10px; }  // 右上角X
+.el-dialog .el-dialog__header{ background:$color-primary; color:#fff; padding:15px 0 15px 25px; text-align:left; }
+.el-dialog .el-dialog__header span{ font:15px "微软雅黑"; }
+.el-dialog .el-dialog__title{ color:#fff; }
+.el-dialog .el-dialog__body{ padding-bottom:5px !important; }
+.el-checkbox__input.is-disabled input[type=checkbox]{ border-radius:100% !important; background:red; }
+.el-carousel__container{ height:100% !important; }
+.el-input-group__prepend{ width:40px; height:45px; padding:0 13px !important; box-sizing:border-box; }
+.el-input.el-input-group.el-input-group--prepend input{ width:240px; height:45px; box-sizing:border-box; }
+.editwordSty{ color:$color-primary; margin-right:10px; cursor:pointer; }
+.theme-picker-dropdown .el-color-dropdown__link-btn{ display:none; }  //颜色选择器清除按钮消失
+.el-upload-dragger{ width:360px; height:150px; margin-left:20px; }  //拖拽上传样式
+.rolemanage .el-checkbox{ margin-left:0 !important; margin-right:20px !important; }
+.fright{ float:right; margin-left:20px; }
+.el-select-dropdown__wrap{ max-height:574px; }
+.el-message-box__header .el-message-box__title{ color:$color-primary !important; } 
+
+.el-table  {
+  tr:nth-of-type(2n-1){
+    background-color: #F2F6FA;
+  }
+  tr:nth-of-type(2n) {
+    background-color: #fff;
+  }
+}
+
+.el-table th.is-leaf {
+  background: #fff !important;
+  color: #333;
+}
+.el-table td,
+.el-table th.is-leaf {
+  border-color: #DCDFE6 !important;
+}

+ 77 - 0
src/styles/global.scss

@@ -0,0 +1,77 @@
+@import "./element-ui.scss";
+
+a[href="https://froala.com/wysiwyg-editor"], a[href="https://www.froala.com/wysiwyg-editor?k=u"]{ border:1px solid #eaeaea; background:#fff !important; color:#ccc !important; }
+
+body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,button,input,textarea,th,td { margin:0; padding:0; }
+body{ font-size:12px; font-style:normal; font-family:"\5FAE\8F6F\96C5\9ED1", Helvetica, sans-serif,; }
+html{ overflow:auto; min-width:1000px; }
+small{ font-size:12px; }
+h1{ font-size:18px; }
+h2{ font-size:16px; }
+h3{ font-size:14px; }
+h4,h5,h6{ font-size:100%; }
+ul,ol{ list-style:none; }
+a{ text-decoration:none; background-color:transparent; }
+a:hover,a:active{ outline-width:0; text-decoration:none; }
+table{ border-collapse:collapse; border-spacing:0; }
+// hr{ border:0; height:1px; }
+img{ border-style:none; }
+img:not([src]){ display:none; }
+svg:not(:root){ overflow:hidden; }
+html{ -webkit-touch-callout:none; -webkit-text-size-adjust:100%; }
+input,textarea,button,a{ -webkit-tap-highlight-color:rgba(0,0,0,0); }
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{ display:block; }
+audio,canvas,progress,video{ display:inline-block; }
+audio:not([controls]),video:not([controls]){ display:none; height:0; }
+progress{ vertical-align:baseline; }
+mark{ background-color:#ff0; color:#000; }
+sub,sup{ position:relative; font-size:75%; line-height:0; vertical-align:baseline; }
+sub{ bottom:-0.25em; }
+sup{ top:-0.5em; }
+button,input,select,textarea{ font-size:100%; outline:0; }
+button,input{ overflow:visible; }
+button,select{ text-transform:none; }
+textarea{ overflow:auto; }
+button,html[type="button"],[type="reset"],[type="submit"]{ -webkit-appearance:button; }
+button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{ border-style:none; padding:0; }
+button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{ outline:1px dotted ButtonText; }
+[type="checkbox"],[type="radio"]{ box-sizing:border-box; padding:0; }
+[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{ height:auto; }
+[type="search"]{ -webkit-appearance:textfield; outline-offset:-2px; }
+[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{ -webkit-appearance:none; }
+::-webkit-input-placeholder{ color:inherit; opacity:.54; }
+::-webkit-file-upload-button{ -webkit-appearance:button; font:inherit; }
+.clear:after{ display:block; height:0; content:""; clear:both; }
+
+.highcharts-range-selector-group{ display:none; }
+.highcharts-legend-item tspan{ font-size:14px; font-weight:400; color:#960000; }
+
+.highcharts-legend-item tspan{ font-size:14px; font-weight:400; color:#960000; }
+
+// 英文图表标识
+.chartEn-mark{
+  position: absolute;
+  top: 0;
+  left: 0;
+  border-right: 25px solid transparent;
+  border-top: 21px solid $color-primary;
+  border-bottom: 21px solid transparent;
+  border-left: 25px solid $color-primary;
+  color: white;
+  height: 0;
+  width: 0;
+  white-space: nowrap;
+  display: flex;
+  justify-content: flex-end;
+  align-items: flex-end;
+  font-size: 16px;
+}
+
+.ficc-package {
+  display: inline-block;
+  font-size: 12px;
+  padding:0 5px;
+  border-radius: 5px;
+  color: #3994fb;
+  background-color: #dcecfc;
+}

+ 0 - 31
src/styles/index.scss

@@ -1,31 +0,0 @@
-$color_red: #FF4B0C;
-$color_green:#67C23A;
-
-
-// 英文图表标识
-.chartEn-mark{
-  position: absolute;
-  top: 0;
-  left: 0;
-  border-right: 25px solid transparent;
-  border-top: 21px solid #409EFF;
-  border-bottom: 21px solid transparent;
-  border-left: 25px solid #409EFF;
-  color: white;
-  height: 0;
-  width: 0;
-  white-space: nowrap;
-  display: flex;
-  justify-content: flex-end;
-  align-items: flex-end;
-  font-size: 16px;
-}
-
-.ficc-package {
-  display: inline-block;
-  font-size: 12px;
-  padding:0 5px;
-  border-radius: 5px;
-  color: #3994fb;
-  background-color: #dcecfc;
-}

+ 7 - 0
src/styles/theme-vars.scss

@@ -0,0 +1,7 @@
+//变量
+
+//菜单栏背景色
+$menu_bg: #fff;
+//主题色
+$theme-color:#0052D9;
+

+ 0 - 96
src/styles/vars.scss

@@ -1,96 +0,0 @@
-///* 改变主题色变量 */
-$color-primary:#0052D9;
-$--color-primary: $color-primary;
-
-.el-dialog__close.el-icon.el-icon-close{ color:#fff; }
-.el-dialog__close.el-icon.el-icon-close:hover{ color:#fff; }
-#positionContent .avatar {width: 100px;height: 100px;}
-.color_primary{color:$color-primary};
-.goods_box .el-card__body{padding: 10px;}
-.goods_boxs .el-card__body{padding: 10px 0;}
-.has-gutter th{ background:#f9f9f9 !important; }
-.el-submenu.is-opened>ul{ overflow:hidden; }
-.el-submenu.is-opened>ul li{ background:#fff; }
-.el-submenu__title>span{ font:14px "微软雅黑"; letter-spacing:1px; }
-.el-submenu__title>i:nth-of-type(1){ color:#1F2E4D; font-size:14px; }
-.el-submenu__title>i:nth-of-type(2){ line-height:16px; z-index:10; right:0; left:100px; }
-.el-submenu.item .el-submenu__title{ text-align:left; }
-.el-submenu .el-menu-item{ padding:0 70px 0 45px !important; }
-.menu-collapsed .el-submenu .el-menu-item{ padding:0 85px 0 30px !important; }
-.box-card{ margin-bottom:20px !important; padding-bottom:30px; }
-.el-dialog .el-input{ width:60%; }
-.el-dialog .el-select>.el-input{ width:100%; }
-.el-dialog .el-dialog__headerbtn{ font-size:24px; padding:10px; top:3px; right:10px; }  // 右上角X
-.el-dialog .el-dialog__header{ background:$color-primary; color:#fff; padding:15px 0 15px 25px; text-align:left; }
-.el-dialog .el-dialog__header span{ font:15px "微软雅黑"; }
-.el-dialog .el-dialog__title{ color:#fff; }
-.el-dialog .el-dialog__body{ padding-bottom:5px !important; }
-.el-checkbox__input.is-disabled input[type=checkbox]{ border-radius:100% !important; background:red; }
-.el-carousel__container{ height:100% !important; }
-.el-input-group__prepend{ width:40px; height:45px; padding:0 13px !important; box-sizing:border-box; }
-.el-input.el-input-group.el-input-group--prepend input{ width:240px; height:45px; box-sizing:border-box; }
-.editwordSty{ color:$color-primary; margin-right:10px; cursor:pointer; }
-.theme-picker-dropdown .el-color-dropdown__link-btn{ display:none; }  //颜色选择器清除按钮消失
-.el-upload-dragger{ width:360px; height:150px; margin-left:20px; }  //拖拽上传样式
-.rolemanage .el-checkbox{ margin-left:0 !important; margin-right:20px !important; }
-.zdy{ display:block !important; }
-.fright{ float:right; margin-left:20px; }
-.zdyDialog .el-dialog__header{ display:none; }
-.el-select-dropdown__wrap{ max-height:574px; }
-.el-message-box__header .el-message-box__title{ color:$color-primary !important; }  //确认弹窗
-.confirmButton{ margin-left:-80px !important; }
-.cancelButton{ margin-right:-80px !important; }
-// a[href="https://froala.com/wysiwyg-editor"], a[href="https://www.froala.com/wysiwyg-editor?k=u"]{ display:none !important; position:absolute; top:-99999999px; }
-// .fr-wrapper > div[style*="z-index: 9999"] {position: absolute;top: -10000px;opacity: 0;}
-// .fr-element.fr-view {position: absolute;top: 0;}
-// .fr-placeholder{margin-top: 0 !important;}
-a[href="https://froala.com/wysiwyg-editor"], a[href="https://www.froala.com/wysiwyg-editor?k=u"]{ border:1px solid #eaeaea; background:#fff !important; color:#ccc !important; }
-@charset "utf-8";
-body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,button,input,textarea,th,td { margin:0; padding:0; }
-body{ font-size:12px; font-style:normal; font-family:"\5FAE\8F6F\96C5\9ED1", Helvetica, sans-serif,; }
-html{ overflow:auto; min-width:1000px; }
-small{ font-size:12px; }
-h1{ font-size:18px; }
-h2{ font-size:16px; }
-h3{ font-size:14px; }
-h4,h5,h6{ font-size:100%; }
-ul,ol{ list-style:none; }
-a{ text-decoration:none; background-color:transparent; }
-a:hover,a:active{ outline-width:0; text-decoration:none; }
-table{ border-collapse:collapse; border-spacing:0; }
-// hr{ border:0; height:1px; }
-img{ border-style:none; }
-img:not([src]){ display:none; }
-svg:not(:root){ overflow:hidden; }
-html{ -webkit-touch-callout:none; -webkit-text-size-adjust:100%; }
-input,textarea,button,a{ -webkit-tap-highlight-color:rgba(0,0,0,0); }
-article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{ display:block; }
-audio,canvas,progress,video{ display:inline-block; }
-audio:not([controls]),video:not([controls]){ display:none; height:0; }
-progress{ vertical-align:baseline; }
-mark{ background-color:#ff0; color:#000; }
-sub,sup{ position:relative; font-size:75%; line-height:0; vertical-align:baseline; }
-sub{ bottom:-0.25em; }
-sup{ top:-0.5em; }
-button,input,select,textarea{ font-size:100%; outline:0; }
-button,input{ overflow:visible; }
-button,select{ text-transform:none; }
-textarea{ overflow:auto; }
-button,html[type="button"],[type="reset"],[type="submit"]{ -webkit-appearance:button; }
-button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{ border-style:none; padding:0; }
-button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{ outline:1px dotted ButtonText; }
-[type="checkbox"],[type="radio"]{ box-sizing:border-box; padding:0; }
-[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{ height:auto; }
-[type="search"]{ -webkit-appearance:textfield; outline-offset:-2px; }
-[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{ -webkit-appearance:none; }
-::-webkit-input-placeholder{ color:inherit; opacity:.54; }
-::-webkit-file-upload-button{ -webkit-appearance:button; font:inherit; }
-.clear:after{ display:block; height:0; content:""; clear:both; }
-
-.highcharts-range-selector-group{ display:none; }
-// .highcharts-credits{ display:none; }
-// .highcharts-axis-title{ display:none; }
-.highcharts-legend-item tspan{ font-size:14px; font-weight:400; color:#960000; }
-// highcharts-legend-item highcharts-spline-series highcharts-color-undefined highcharts-series-2
-
-@import "~element-ui/lib/theme-chalk/index.css";

+ 11 - 0
src/utils/svgToblob.js

@@ -39,4 +39,15 @@ export const svgToBase64 = (svg) => {
     unescape(encodeURI(svg))
   )}`;
   return base64img;
+}
+
+/* 不受粘贴板对象影响的粘贴 */
+export function copyFit(value) {
+  const input = document.createElement('input')
+  input.setAttribute('readonly','readonly')
+  input.value = value
+  document.body.appendChild(input)
+  input.select();
+  document.execCommand('copy');
+  document.body.removeChild(input);
 }

+ 432 - 164
src/views/Home.vue

@@ -13,7 +13,7 @@
           <img
             class="logo_coll"
             v-else
-            src="~@/assets/img/home/logo_mini.png"
+            src="~@/assets/img/home/eta_mini.png"
           />
         </div>
         <div
@@ -23,51 +23,31 @@
           <aside class="menu-expanded">
             <!--导航菜单-->
             <el-menu
-              background-color="#323A58"
-              text-color="#fff"
+              :background-color="$setting.menu_bg"
+              text-color="#333"
               :collapse-transition="false"
-              active-text-color="#FDB863"
+              :active-text-color="$setting.theme_color"
               :default-active="$route.path.replace('/', '')"
               :collapse="isCollapse"
-              theme="light"
               unique-opened
               router
               class="el-menu-vertical-demo"
               @select="handleselect"
               ref="expandmenu"
             >
-              <!-- <el-menu-item
-              v-if="Role!=='rai_researcher' &&
-              Role!=='ficc_researcher' &&
-              Role!=='researcher' &&
-              Role!=='compliance'&&
-              Role!=='special_researcher'"
-              :class="'/dashboard'==activePath?'active': ''"
-              path="dashboard" 
-              key="dashboard" 
-              index="dashboard"
-              :style="!isCollapse?'padding-left:0':''">
-              <a href="/dashboard" :style="`display: block;color:${'dashboard'===activePath ? '#FDB863 ' : '#fff'}`" @click="(e) => e.preventDefault() ">
-
-                <img src="~@/assets/img/home/work_ico.png" style="width:20px;height:20px;margin-right:20px;"/>
-                <span
-                    style="display:inline-block; width:96px; text-align:left; box-sizing:border-box;font-size:15px;"
-                >工作台</span>
-              </a>
-              </el-menu-item> -->
-              <template v-for="(item, index) in navlists" v-show="!item.hidden">
+              <template v-for="(item, index) in navlists">
                 <el-menu-item
                   :path="item.level_path"
                   :index="item.level_path"
                   :key="item.level_path"
                   :style="!isCollapse ? 'text-align:left' : ''"
-                  v-if="item.IsLevel === 1"
+                  v-if="item.IsLevel === 1&&!item.hidden"
                 >
                   <a
                     :href="`/${item.level_path}`"
                     class="el-level-path"
                     :style="`display: block;color:${
-                      item.level_path === activePath ? '#FDB863 ' : '#fff'
+                      item.level_path === activePath ? $setting.theme_color : '#666'
                     }`"
                     @click="(e) => e.preventDefault()"
                   >
@@ -92,7 +72,7 @@
                   </a>
                 </el-menu-item>
 
-                <el-submenu v-else :index="index + ''" :key="index">
+                <el-submenu v-else-if="item.IsLevel!==1&&!item.hidden" :index="index" :key="index">
                   <template slot="title">
                     <img
                       :src="item.icon_path"
@@ -122,12 +102,13 @@
                   >
                     <a
                       :href="`/${child.path}`"
-                      :style="`display: block;color:${
-                        child.path === activePath ? '#FDB863 ' : '#fff'
+                      :style="`display: flex;align-items:center;color:${
+                        child.path === activePath ? $setting.theme_color : '#666'
                       }`"
                       @click="(e) => e.preventDefault()"
                     >
-                      {{ child.name }}
+                      <svg t="1689672247666" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7676" width="30" height="30"><path d="M640 499.2v25.6a21.333333 21.333333 0 0 1-21.333333 21.333333h-213.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-25.6a21.333333 21.333333 0 0 1 21.333333-21.333333h213.333334a21.333333 21.333333 0 0 1 21.333333 21.333333z"  p-id="7677" :fill="child.path === activePath ? $setting.theme_color : '#666'"></path></svg>
+                      <span style="margin-left:15px;">{{ child.name }}</span>
                     </a>
                   </el-menu-item>
                 </el-submenu>
@@ -144,11 +125,10 @@
             <div class="main_left_section" v-if="isHaveAside">
               <!-- 折叠按钮 -->
               <div class="coll_btn" @click="collapseHandle">
-                <!-- <img src="~@/assets/img/home/slide_up.png" alt="" class="coll_ico" v-if="isCollapse"> -->
                 <i class="el-icon-s-unfold coll_ico" v-if="isCollapse"></i>
                 <i class="el-icon-s-fold coll_ico" v-else></i>
-                <!-- <img src="~@/assets/img/home/slide_down.png" alt="" class="coll_ico" v-else> -->
               </div>
+              
               <!-- 面包屑 -->
               <el-breadcrumb separator="/" class="breadcrumb-inner">
                 <el-breadcrumb-item
@@ -158,7 +138,7 @@
                   <span
                     v-if="item.meta.pathFrom"
                     @click.stop="handleClickBread(item)"
-                    style="cursor: pointer; color: #4099ef; fontsize: 16px"
+                    :style="`cursor: pointer; color: ${$setting.theme_color}`"
                   >
                     <template v-if="item.meta.pathFrom == 'pickList'">
                       {{ RoleType == "ficc" ? "权益客户" : "ficc客户" }}
@@ -188,7 +168,7 @@
                   >
                   <span
                     v-if="item.parent"
-                    style="cursor: pointer; color: #4099ef; fontsize: 16px"
+                    :style="`cursor: pointer; color: ${$setting.theme_color}`"
                     @click.stop="routeClick(item)"
                   >
                     <template v-if="item.path == '/pickList'">
@@ -205,7 +185,7 @@
                       {{ item.name }}
                     </template>
                   </span>
-                  <span v-else style="fontsize: 16px">{{ item.name }}</span>
+                  <span v-else>{{ item.name }}</span>
                 </el-breadcrumb-item>
               </el-breadcrumb>
             </div>
@@ -216,45 +196,38 @@
               class="left_section_logo"
               v-else
             />
-
           </div>
 
           <div class="right_section">
-            <!-- AI问答 -->
-            <!-- <img
-              src="~@/assets/img/icons/ai.png"
-              @click="toOperation('AIQA')"
-              style="
-                display: inline-block;
-                width: 30px;
-                height: 30px;
-                margin: 4px 28px 0 0;
-                cursor: pointer;
-              "
-            /> -->
             <div class="userinfo">
               <div class="userinfo-fingerpost">
                 <el-button
-                  @click="toOperation('fingerpost')"
+                  @click="linkToOtherMS(item.path)"
+                  v-for="item in linkSystems"
+                  :key="item.path"
                   type="text"
-                  v-if="isShowRole"
-                  >帮助文档</el-button
+                  style="margin-right: 18px;color:#333;padding:12px;"
                 >
+                  <img :src="item.icon" v-if="item.icon" width="20" height="20" style="vertical-align: middle;">
+                  {{item.name}}
+                </el-button>
+
+                <el-tooltip effect="dark" content="帮助文档" placement="bottom">
+                  <div class="icon-box-item" v-if="isShowRole" @click="toOperation('fingerpost')">
+                    <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="color:#333">
+                      <path d="M9.24255 14.5C9.24255 14.0858 9.57834 13.75 9.99255 13.75C10.4068 13.75 10.7426 14.0858 10.7426 14.5C10.7426 14.9142 10.4068 15.25 9.99255 15.25C9.57834 15.25 9.24255 14.9142 9.24255 14.5Z" fill="currentColor"/>
+                      <path d="M9.99261 5.00763C8.32056 5.00763 6.96136 6.36682 6.96136 8.03888H8.21136C8.21136 7.05718 9.01092 6.25763 9.99261 6.25763C10.9743 6.25763 11.7739 7.05718 11.7739 8.03888C11.7739 8.71106 11.2183 9.3851 10.4931 9.67971L10.4899 9.68101C9.82793 9.95419 9.36767 10.6052 9.36767 11.3656V12.5H10.6177V11.3656C10.6177 11.1228 10.7618 10.9216 10.9655 10.837C11.9996 10.4161 13.0239 9.37337 13.0239 8.03888C13.0239 6.36682 11.6647 5.00763 9.99261 5.00763Z" fill="currentColor"/>
+                      <path d="M18.7427 10C18.7427 5.16751 14.8252 1.25 9.99268 1.25C5.16019 1.25 1.24268 5.16751 1.24268 10C1.24267 14.8325 5.16018 18.75 9.99267 18.75C14.8252 18.75 18.7427 14.8325 18.7427 10ZM17.4927 10C17.4927 14.1421 14.1348 17.5 9.99267 17.5C5.85054 17.5 2.49267 14.1421 2.49268 10C2.49268 5.85786 5.85054 2.5 9.99268 2.5C14.1348 2.5 17.4927 5.85787 17.4927 10Z" fill="currentColor"/>
+                    </svg>
+                  </div>
+                </el-tooltip>
               </div>
-              <span
-                style="color: #409eff; cursor: pointer"
-                @click="linkToOtherMS('VUE_APP_HR_MANAGEMENT_SYSTEM')"
-                >HR系统</span
-              >
-              <span
-                style="color: #409eff; cursor: pointer"
-                @click="linkToOtherMS('VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM')"
-                >财务报表系统</span
-              >
-              <el-dropdown trigger="click">
+
+              <el-dropdown trigger="click" style="width:130px;">
                 <span class="el-dropdown-link userinfo-inner">
-                  <img src="~@/assets/img/set_m/user_img.png" />
-                  {{ sysUserName + ",欢迎您!" }}
+                  <img src="~@/assets/img/home/avatar.png"/>
+                  {{ sysUserName }}
+                  <i class="el-icon-arrow-down el-icon--right"/>
                 </span>
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item divided @click.native="resetpwd"
@@ -294,12 +267,7 @@
 
     <!-- //重置初始密码 -->
     <pwd-dlg :dialogVisiblePwd="dialogVisiblePwd" />
-
-    <!-- 路演反馈弹窗 -->
-    <!-- <feedback-dialog
-      :isShow.sync="isFeedbackDialog"
-      :data="roadshowFeedbackList"
-    /> -->
+    
   </div>
 </template>
 
@@ -311,10 +279,12 @@ import {
   roadshowInterence,
 } from "api/api.js";
 import PwdDlg from "@/components/pwdDlg.vue";
+import questionMsgDia from "@/components/questionMsgDia.vue";
 import EventBus from "@/api/bus.js";
 export default {
   components: {
     PwdDlg,
+    questionMsgDia,
   },
   inject: ["reload"],
   filters: {
@@ -330,20 +300,20 @@ export default {
       } else {
         this.activePath = newval.replace("/", "");
       }
-      // 用印审批页面 头部需要加上公告
-      if (newval === "/sealApprovalList") {
-        this.isShowApprovalNotice = true;
-        console.log(this.isShowApprovalNotice);
-      } else {
-        this.isShowApprovalNotice = false;
-        console.log(this.isShowApprovalNotice);
-      }
       this.sysUserName = localStorage.getItem("userName") || "";
       this.Role = localStorage.getItem("Role") || "";
       this.RoleType = localStorage.getItem("RoleType") || "";
     },
   },
   computed: {
+    done() {
+      //今日待办是否处理完
+      if (!this.todayList) {
+        return false;
+      }
+      // 之前是通过判断列表中是否都有说明,现需要判断列表中都要添加或编辑
+      return this.todayList.every((item) => item.isEdited);
+    },
     // Role() {
     //   let role = localStorage.getItem("Role") || "";
     //   return role;
@@ -375,16 +345,37 @@ export default {
   },
   data() {
     return {
+      showTodayRemark: {
+        CompanyId: 0,
+        ProductId: 0,
+        remark: "",
+        toDoRemark: "",
+        show: false,
+        index: 0,
+        new: false, //是否为新增
+        isGiveUp: false, //是否不继续跟进
+      }, //显示填写待办备注弹窗
 
       isCollapse: false, //侧边栏折叠
       breadcrumbFixed: false, //吸顶盒固定
+
       Role: "", //角色名称
       RoleType: "", //角色类型
       sysUserName: "", //登录系统用户名
       sysUserAvatar: "", //登录系统用户头像
-
+      form: {
+        name: "",
+        region: "",
+        date1: "",
+        date2: "",
+        delivery: false,
+        type: [],
+        resource: "",
+        desc: "",
+      },
       navlists: [],
       activePath: "",
+
       noticeList: [], //消息提醒列表
       isShowNotice: false, //显示提示红点
       currentNoticeList: [], //当前显示的消息提醒列表
@@ -419,6 +410,9 @@ export default {
         供应分析: "Sup",
         商品价格曲线: "Crv",
       },
+
+      //链接系统
+      linkSystems: this.$setting.linkSystems,
     };
   },
   created() {
@@ -452,6 +446,169 @@ export default {
         this.dialogVisiblePwd = res.Data;
       }
     },
+    // 点击导航 打开今日待办
+    // handleShowSallerTodayList() {
+    //   this.getSellerTodayList("click");
+    // },
+
+    // 点击完成 批量提交备注
+    handleTodayFinished() {
+      let arr = this.todayList.map((item) => {
+        return customInterence.sellerTodayListRemark({
+          CompanyId: item.CompanyId,
+          ProductId: item.ProductId,
+          Remark: item.RenewalReason,
+          Renew: item.isGiveUp ? 1 : 0,
+          RenewalTodo: item.RenewalTodo,
+        });
+      });
+      Promise.all(arr)
+        .then((res) => {
+          this.show = false;
+          this.getSellerFeedBackList();
+        })
+        .catch((error) => {
+          this.$message.waring("部分提交失败请重试");
+          this.getSellerTodayList();
+        });
+    },
+
+    //提交备注
+    async handleSubmitTodayRemark() {
+      if (!this.showTodayRemark.remark && !this.showTodayRemark.isGiveUp) {
+        this.$message.warning("请填写最新情况");
+        return;
+      }
+      if (!this.showTodayRemark.toDoRemark && !this.showTodayRemark.isGiveUp) {
+        this.$message.warning("请填写To Do事项");
+        return;
+      }
+      // 如果选中不再跟进,需要在备注中添加额外内容
+      const addRemark = this.showTodayRemark.isGiveUp
+        ? this.showTodayRemark.remark
+          ? "。客户无续约意向,不再跟进(转为冻结客户)"
+          : "客户无续约意向,不再跟进(转为冻结客户)"
+        : "";
+      // 自动开大的点击完成时批量更新
+      if (this.todayListOpen === "auto") {
+        this.todayList[this.showTodayRemark.index].RenewalReason =
+          this.showTodayRemark.remark + addRemark;
+        this.todayList[this.showTodayRemark.index].RenewalTodo =
+          this.showTodayRemark.toDoRemark;
+        this.todayList[this.showTodayRemark.index].isGiveUp =
+          this.showTodayRemark.isGiveUp;
+        this.$set(this.todayList[this.showTodayRemark.index], "isEdited", true);
+        this.handleTodayRemarkClose();
+      } else {
+        const res = await customInterence.sellerTodayListRemark({
+          CompanyId: this.showTodayRemark.CompanyId,
+          ProductId: this.showTodayRemark.ProductId,
+          Remark: this.showTodayRemark.remark + addRemark,
+          Renew: this.showTodayRemark.isGiveUp ? 1 : 0,
+          RenewalTodo: this.showTodayRemark.toDoRemark,
+        });
+        if (res.Ret === 200) {
+          this.todayList[this.showTodayRemark.index].RenewalReason =
+            this.showTodayRemark.remark;
+          this.todayList[this.showTodayRemark.index].RenewalTodo =
+            this.showTodayRemark.toDoRemark;
+          this.handleTodayRemarkClose();
+          this.getSellerTodayList();
+        }
+      }
+    },
+
+    handleTodayRemarkClose() {
+      this.showTodayRemark = {
+        remark: "",
+        toDoRemark: "",
+        show: false,
+        index: 0,
+        new: false,
+        ProductId: 0,
+        CompanyId: 0,
+        isGiveUp: false,
+      };
+    },
+
+    //显示填写今日待办备注
+    handleShowEditTodayRemark(e) {
+      this.showTodayRemark.remark = e.row.RenewalReason;
+      this.showTodayRemark.toDoRemark = e.row.RenewalTodo;
+      this.showTodayRemark.CompanyId = e.row.CompanyId;
+      this.showTodayRemark.ProductId = e.row.ProductId;
+      if (e.row.RenewalReason && this.todayListOpen !== "auto") {
+        // 如果有说明且不是自动弹出,则为编辑
+        this.showTodayRemark.new = false;
+      } else {
+        this.showTodayRemark.new = true;
+      }
+      this.showTodayRemark.show = true;
+      this.showTodayRemark.index = e.$index;
+    },
+
+    //获取销售今日待办
+    async getSellerTodayList(type) {
+      this.todayListOpen = type;
+      let ReasonStatus = -1;
+      if (type === "auto") {
+        ReasonStatus = -1;
+      } else {
+        ReasonStatus = 0;
+      }
+      const res = await customInterence.sellerTodayList({
+        ReasonStatus: ReasonStatus,
+        PageSize: 10000,
+        CurrentIndex: 1,
+      });
+      if (res.Ret === 200) {
+        if (type === "auto" && res.Data.Paging.Totals > 0) {
+          // 自动弹出清除上次说明
+          res.Data.List &&
+            res.Data.List.forEach((item) => (item.RenewalReason = ""));
+        }
+        if (
+          (type === "auto" && res.Data.Paging.Totals > 0) ||
+          type !== "auto"
+        ) {
+          this.show = true;
+        } else {
+          this.getSellerFeedBackList();
+        }
+
+        this.$nextTick(() => {
+          this.todayList = res.Data.List;
+        });
+      }
+    },
+
+    //获取销售代办中的历史记录
+    async getSellerTodayHistoryList(item) {
+      const res = await customInterence.sellerTodayHistoryList({
+        CompanyId: Number(item.CompanyId),
+        ProductId: Number(item.ProductId),
+      });
+      if (res.Ret === 200) {
+        this.showTodayHistoryList = true;
+        this.$nextTick(() => {
+          this.todayHistoryList = res.Data || [];
+        });
+      }
+    },
+
+    /* 获取销售路演待反馈 */
+    getSellerFeedBackList() {
+      roadshowInterence.toFeedbacklist().then((res) => {
+        if (res.Ret !== 200) return;
+
+        const { Data } = res;
+
+        if (!Data || !Data.length) return;
+
+        this.isFeedbackDialog = true;
+        this.roadshowFeedbackList = Data;
+      });
+    },
 
     // 操作指南的跳转
     toOperation(url) {
@@ -468,10 +625,8 @@ export default {
        * VUE_APP_HR_MANAGEMENT_SYSTEM -- HR管理系统
        * VUE_APP_FINANCIAL_MANAGEMENT_SYSTEM -- 财务管理系统
        */
-      console.log(process.env)
-      let href = process.env[key];
-      console.log(href);
-      window.open(href, "_blank");
+      // let href = process.env[key];
+      window.open(key, "_blank");
     },
     // 切换通知消息类型
     handleNoticeTypeChange(e) {
@@ -512,7 +667,152 @@ export default {
         }
       });
     },
-    
+    /* 待办事项列表 */
+    getNotice() {
+      customInterence.noticeList().then((res) => {
+        if (res.Ret === 200) {
+          res.Data.Company.List &&
+            res.Data.Company.List.forEach((item) => {
+              item.CreateTime = item.CreateTime.replace(/-/g, ".");
+            });
+          res.Data.Contract.List &&
+            res.Data.Contract.List.forEach((item) => {
+              item.CreateTime = item.CreateTime.replace(/-/g, ".");
+            });
+          res.Data.Seal.List &&
+            res.Data.Seal.List.forEach((item) => {
+              item.CreateTime = item.CreateTime.replace(/-/g, ".");
+            });
+          res.Data.EdbReplace.List &&
+            res.Data.EdbReplace.List.forEach(
+              (item) => (item.CreateTime = item.CreateTime.replace(/-/g, "."))
+            );
+          res.Data.BusinessTrip.List &&
+            res.Data.BusinessTrip.List.forEach(
+              (item) => (item.CreateTime = item.CreateTime.replace(/-/g, "."))
+            );
+
+          this.noticeList = res.Data;
+          this.noticeCount =
+            this.Role === "admin"
+              ? res.Data.EdbReplace.Total + res.Data.BusinessTrip.Total
+              : res.Data.Company.Total +
+                res.Data.Contract.Total +
+                res.Data.Seal.Total +
+                res.Data.EdbReplace.Total +
+                res.Data.BusinessTrip.Total;
+
+          this.noticeType = this.Role === "admin" ? "更新" : "客户";
+          // 默认显示客户
+          this.currentNoticeList =
+            this.Role === "admin"
+              ? res.Data.EdbReplace.List
+              : res.Data.Company.List;
+
+          // 检查是否有未读的
+          if (this.Role != "admin") {
+            this.flag1 = res.Data.Company.List.some((item) => {
+              return item.MessageStatus === 0;
+            });
+            this.flag2 = res.Data.Contract.List.some((item) => {
+              return item.MessageStatus === 0;
+            });
+            this.flag3 = res.Data.Seal.List.some((item) => {
+              return item.MessageStatus === 0;
+            });
+          }
+
+          this.flag5 = res.Data.ETATrial.List.some((item) => {
+            return item.MessageStatus === 0;
+          });
+          this.flag6 = res.Data.BusinessTrip.List.some((item) => {
+            return item.MessageStatus === 0;
+          });
+
+        }
+      });
+    },
+    /* 点击消息列表 跳转审批列表 */
+    noticeClick(item) {
+      customInterence
+        .readNotice({
+          Id: Number(item.Id),
+        })
+        .then((res) => {
+          if (res.Ret === 200) {
+            item.MessageStatus = 1;
+            if (this.noticeType === "客户") {
+              if (this.$route.path != "/approvalList") {
+                this.$router.push({
+                  path: "/approvalList",
+                });
+              } else {
+                window.location.reload();
+              }
+            } else if (this.noticeType === "合同") {
+              let Role = localStorage.getItem("Role");
+              // 主管跳转合同审批列表
+              if (Role === "ficc_admin" || Role === "rai_admin") {
+                if (this.$route.path != "/contractapprovallist") {
+                  this.$router.push({
+                    path: "/contractapprovallist",
+                  });
+                } else {
+                  window.location.reload();
+                }
+              } else {
+                if (this.$route.path != "/contractmanagelist") {
+                  this.$router.push({
+                    path: "/contractmanagelist",
+                  });
+                } else {
+                  window.location.reload();
+                }
+              }
+            } else if (this.noticeType === "用印") {
+              // 用印
+              if (this.$route.path != "/sealApprovalList") {
+                this.$router.push({
+                  path: "/sealApprovalList",
+                });
+              } else {
+                window.location.reload();
+              }
+            } else if (this.noticeType === "ETA试用") {
+              const path = this.$route.path;
+              let pushPath = "/etaApprovalList";
+              //非管理员:若通过跳转用户列表,若驳回跳转审批列表
+              //const etaApprovalListType = item.Content.includes('通过')?'approved':'all'
+              const etaApprovalListType =
+                item.Redirect === 1 ? "approved" : "all";
+              sessionStorage.setItem(
+                "etaApprovalListType",
+                etaApprovalListType
+              );
+              if (path == pushPath) {
+                window.location.reload();
+              } else {
+                this.$router.push(pushPath);
+              }
+            } else if (this.noticeType === "出差") {
+              const path = this.$route.path;
+              let pushPath;
+              if (item.ApprovalStatus != 1) {
+                // 跳到申请列表
+                pushPath = "/businessTripApplication";
+              } else {
+                // 跳到审批列表
+                pushPath = "/businessTripApproval";
+              }
+              if (path == pushPath) {
+                window.location.reload();
+              } else {
+                this.$router.push(pushPath);
+              }
+            }
+          }
+        });
+    },
     resetpwd() {
       //修改密码
       this.$router.push({ path: "/resetpsd" });
@@ -548,7 +848,7 @@ export default {
         })
         .catch(() => {});
     },
-    collapseHandle: function () {
+    collapseHandle () {
       //折叠导航栏
       this.isCollapse = !this.isCollapse;
       // 派发折叠导航栏事件
@@ -577,28 +877,8 @@ export default {
 </script>
 
 <style lang="scss">
-.notice_item:hover {
-  color: #409eff;
-}
-.notice_poper {
-  max-height: 500px;
-  overflow-y: auto;
-  .notice-nav-box {
-    display: flex;
-    padding-top: 12px;
-    padding-left: 5px;
-    .notice-nav-item {
-      cursor: pointer;
-      line-height: 2;
-      margin-right: 30px;
-      position: relative;
-    }
-  }
-  .notice-nav-active {
-    color: #409eff;
-    border-bottom: 2px solid #409eff;
-  }
-}
+@import "../styles/theme-vars.scss";
+
 #containercon {
   width: 100%;
   position: absolute;
@@ -618,7 +898,7 @@ export default {
   #main_left {
     // width: 200px;
     height: 100%;
-    background: #323a58 !important;
+    background: $menu_bg !important;
     color: #000;
     border-bottom: 1px solid #eaeaea;
     position: fixed;
@@ -626,22 +906,23 @@ export default {
     top: 0;
     z-index: 99;
     .logo_cont {
+      height: 60px;
       box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1);
-      padding: 10px 0;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      border-bottom: 1px solid #DCDFE6;
       .logo {
         width: 148px;
         height: 38px;
         display: block;
         overflow: hidden;
-        // margin: 0 auto;
-        margin-left: 18px;
       }
       .logo_coll {
-        width: 35px;
-        height: 35px;
+        width: 50px;
+        height: 50px;
         display: block;
         overflow: hidden;
-        margin-left: 14px;
       }
     }
     aside {
@@ -652,20 +933,13 @@ export default {
         width: 200px;
         height: 100%;
         box-sizing: border-box;
-        background: #323a58 !important;
+        /* background: #323a58 !important; */
       }
       .el-menu--collapse {
         width: 70px;
         height: 100%;
         box-sizing: border-box;
-        background: #323a58 !important;
-      }
-      .collapsed {
-        width: 59px;
-        background: #344058;
-        .item {
-          position: relative;
-        }
+        /* background: #323a58 !important; */
       }
       .menuitem {
         height: 55px;
@@ -682,18 +956,17 @@ export default {
           margin-right: 6px;
         }
       }
-      // .menuitem.active {
-      //   background: rgba($color: #FDB863, $alpha: 0.2);
-      //   color: #FDB863;
-      // }
       .el-submenu .el-menu-item {
         font-size: 15px;
-        padding: 0 0 0 62px !important;
+        padding: 0 0 0 20px !important;
         text-align: left;
       }
       .el-menu-item.is-active {
-        background: rgba($color: #fdb863, $alpha: 0.2) !important;
-        color: #fdb863 !important;
+        background: #ECF2FE !important;
+        color: $theme-color !important;
+        a {
+          color: $theme-color !important;
+        }
       }
       .el-submenu__title {
         //padding-left: 0 !important;
@@ -723,6 +996,9 @@ export default {
         padding-left: 20px !important;
       }
     }
+    .el-submenu__title:hover,.el-menu-item:hover {
+      background: #ECF2FE !important;
+    }
     .subItem {
       overflow: hidden;
       .sub-item {
@@ -748,14 +1024,13 @@ export default {
       overflow: hidden;
       overflow-y: auto;
       border-right: none;
-      // .el-submenu > .el-menu > .el-menu-item:hover {/* background-color: #5882EF !important;color: #fff !important; */}
-      .el-submenu > .el-menu > .active {
+      /* .el-submenu > .el-menu > .active {
         background: rgba($color: #fdb863, $alpha: 0.2) !important;
         color: #fdb863 !important;
-      }
+      } */
     }
     .el-submenu__title > i:nth-of-type(1) {
-      color: #fff !important;
+      color: #C0C4CC !important;
     }
   }
   .left_section_logo {
@@ -796,7 +1071,6 @@ export default {
             font-weight: 400;
             color: #ee9a34;
             line-height: 19px;
-            -webkit-background-clip: text;
           }
         }
       }
@@ -853,53 +1127,48 @@ export default {
         z-index: 10;
       }
       .userinfo {
-        min-width: 420px;
-        width: 480px;
+        /* min-width: 420px;
+        width: 480px; */
         height: 60px;
         text-align: right;
         overflow: hidden;
         position: relative;
         margin-left: 15px;
-        margin-right: 4%;
         display: flex;
         justify-content: space-between;
         align-items: center;
-        .theme-picker {
-          position: absolute;
-          top: 14px;
-          left: 0px;
-        }
         .userinfo-fingerpost {
-          margin-left: 20px;
-        }
-        .item {
-          padding: 4px;
-          position: absolute;
-          top: 14px;
-          left: 110px;
-          border: 1px solid #ccc;
-          border-radius: 4px;
-        }
-        .item:hover {
-          color: #5882ef;
+          display: flex;
+          align-items: center;
+          margin-right: 50px;
+          color: $theme-color;
+          .el-button:hover {
+            background: #ecf2fe;
+          }
         }
         .userinfo-inner {
           cursor: pointer;
           color: #666 !important;
-          overflow: hidden;
-          line-height: 60px;
+          display: flex;
+          align-items: center;
           font-size: 16px;
           img {
-            width: 40px;
-            height: 40px;
-            border-radius: 20px;
+            width: 25px;
+            height: 25px;
             margin: 10px;
-            float: left;
           }
         }
         .userinfo-inner:hover {
           color: #5882ef;
         }
+
+        .icon-box-item {
+          padding: 12px;
+          border-radius: 4px;
+          &:hover {
+            background: #ecf2fe;
+          }
+        }
       }
     }
     .right_section {
@@ -912,7 +1181,7 @@ export default {
     }
     .content-container {
       height: calc(100vh - 90px);
-      background: #f5f7f9;
+      background: #F2F6FA;
       // position: relative;
       overflow-y: auto;
       position: absolute;
@@ -949,7 +1218,6 @@ export default {
           padding: 0 30px 20px;
           box-sizing: border-box;
           overflow: auto;
-          background: #f5f7f9;
         }
         .note_entrance {
           display: inline-block;

+ 192 - 184
src/views/Login.vue

@@ -1,80 +1,71 @@
 <template>
   <div id="login">
-    <div id="login_wrapper">
-      <img class="login-bg" src="../assets/img/login_bg.png" alt />
-      <img class="login-icon" src="../assets/img/login_icon.png" alt />
-      <el-form
-        :model="ruleForm"
-        :rules="rules"
-        ref="ruleForm"
-        label-position="right"
-        label-width="0px"
-        class="demo-ruleForm"
-        id="login-container"
-        @submit.native.prevent
-      >
-        <el-form-item>
-          <h1
-            style="
-              font-size: 30px;
-              text-align: center;
-              color: #3d6ff5;
-              margin-bottom: 30px;
-            "
-          >
-            弘则研究后台管理系统
-          </h1>
-        </el-form-item>
-        <el-form-item prop="account">
-          <el-input
-            type="text"
-            v-model="ruleForm.account"
-            auto-complete="off"
-            placeholder="请输入用户名"
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item prop="checkPass" v-if="visible">
-          <el-input
-            type="password"
-            v-model="ruleForm.checkPass"
-            auto-complete="off"
-            placeholder="请输入密码"
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item prop="checkPass" v-else>
-          <el-input
-            type="text"
-            v-model="ruleForm.checkPass"
-            auto-complete="off"
-            placeholder="请输入密码"
-          >
-          </el-input>
-        </el-form-item>
-        <div class="remember-cont">
-          <el-checkbox v-model="checked" class="remember"
-            >保持登录状态</el-checkbox
-          >
-          <div class="warn-check-tip" v-show="checked">
-            <i class="el-icon-warning" />
-            勾选表示信任此设备,系统将不会自动退出该设备,使用公用电脑请勿勾选!
-          </div>
-        </div>
-        <el-form-item>
-          <el-button
-            type="primary"
-            size="medium"
-            @click.native="handleSubmit2"
-            :loading="logining"
-            class="submit_btn"
-            >立即登录</el-button
-          >
-        </el-form-item>
-      </el-form>
-      <img class="login-r-b" src="../assets/img/login_r_b.png" alt />
-    </div>
-  </div>
+		<div id="login_wrapper">
+      
+			<img class="login-bg" :src="$setting.login_bg" alt />
+      <img class="login-icon" :src="$setting.login_logo">
+			<el-form
+				:model="ruleForm"
+				:rules="rules"
+				ref="ruleForm"
+				label-position="right"
+				label-width="0px"
+				class="demo-ruleForm"
+				id="login-container"
+				@submit.native.prevent
+			>
+				<el-form-item>
+					<span class="login-title">ETA — 让投研领先市场半步</span>
+				</el-form-item>
+				<el-form-item prop="account">
+					<el-input
+						type="text"
+						v-model="ruleForm.account"
+						auto-complete="off"
+						placeholder="请输入用户名"
+					>
+					</el-input>
+				</el-form-item>
+				<el-form-item prop="checkPass" v-if="visible">
+					<el-input
+						type="password"
+						v-model="ruleForm.checkPass"
+						auto-complete="off"
+						placeholder="请输入账号"
+					>
+					</el-input>
+				</el-form-item>
+				<el-form-item prop="checkPass" v-else>
+					<el-input
+						type="text"
+						v-model="ruleForm.checkPass"
+						auto-complete="off"
+						placeholder="请输入密码"
+					>
+					</el-input>
+				</el-form-item>
+				<div class="remember-cont">
+					<el-checkbox v-model="checked" class="remember"
+						>保持登录状态</el-checkbox
+					>
+					<div class="warn-check-tip" v-show="checked">
+						<i class="el-icon-warning"/>
+						勾选表示信任此设备,系统将不会自动退出该设备,使用公用电脑请勿勾选!
+					</div>
+				</div>
+				<el-form-item>
+					<el-button
+						type="primary"
+						size="medium"
+						@click.native="handleSubmit2"
+						:loading="logining"
+						class="submit_btn"
+						>登录</el-button
+					>
+				</el-form-item>
+			</el-form>
+		</div>
+	</div>
 </template>
 
 <script>
@@ -235,118 +226,135 @@ export default {
 
 <style lang="scss" scoped>
 #login {
-  width: 100%;
-  height: 100%;
-  background: #e6e6e6;
-  position: relative;
-  overflow: hidden;
-  #login_wrapper {
-    width: 100%;
-    height: 100%;
-    background-color: #ffffff;
-    position: relative;
+	width: 100%;
+	height: 100%;
+	background: #fff;
+	position: relative;
+	overflow: hidden;
+	#login_wrapper {
+		width: 100%;
+		height: 100%;
+		background-color: #fff;
+		position: relative;
 
-    .login-bg {
-      position: absolute;
-      left: 0;
-      bottom: 0;
-      width: 46%;
-    }
+		.login-bg {
+			position: absolute;
+			left: 2%;
+			top: 50%;
+			object-fit: cover;
+			transform: translateY(-50%);
+			width: 46%;
+			height: 90%;
+		}
 
-    .login-icon {
-      position: absolute;
-      top: 44px;
-      right: 160px;
-      width: 16%;
-    }
+		.login-icon {
+			position: absolute;
+      top: 40px;
+			right: 40px;
+		}
+		.login-title {
+			color: #333;
+			font-size: 30px;
+			display: block;
+      text-align: center;
+			margin-bottom: 30px;
+		}
 
-    .login-r-b {
-      position: absolute;
-      right: 0;
-      bottom: 0;
-      width: 8%;
-    }
+		#login-container {
+			box-sizing: border-box;
+			border-radius: 10px;
+			position: absolute;
+			top: 31%;
+			right: 12%;
+			z-index: 100;
+			input::-webkit-input-placeholder {
+				color: #595959 !important;
+			}
+			.remember {
+				margin: 0px 0 20px;
+			}
+			.submit_btn {
+				width: 100%;
+				height: 60px;
+				background: #3654C1;
+				font-size: 20px;
+				border-radius: 5px;
+			}
+			.el-input input {
+				width: 100%;
+				height: 40px;
+				color: #333333;
+				font-size: 16px;
+			}
+			.el-input-group__append,
+			.el-input-group__prepend {
+				background-color: rgba(255, 255, 255, 0.8);
+				color: rgb(51, 51, 51);
+				border: none;
+			}
+			.el-input.el-input-group.el-input-group--prepend input {
+				background-color: rgba(255, 255, 255, 0.8);
+				color: rgb(51, 51, 51);
+				border: none;
+			}
+			.el-checkbox__label {
+				color: rgb(51, 51, 51);
+				font-size: 14px;
+			}
+			.el-checkbox__input.is-checked + .el-checkbox__label {
+				color: rgb(51, 51, 51);
+				font-size: 14px;
+			}
+			.el-form-item__content .el-input-group,
+			.el-form-item__label,
+			.el-tag .el-icon-close {
+				padding-bottom: 5px;
+				vertical-align: middle;
+				border-bottom: 1px solid #eaeaea;
+			}
+			.el-button--primary {
+				background: #3654C1 !important;
+				border: none;
+			}
+			.el-form-item__content {
+				padding-bottom: 5px;
+			}
+			.el-form-item {
+				margin-bottom: 30px;
+			}
+		}
 
-    #login-container {
-      width: 31%;
-      box-sizing: border-box;
-      border-radius: 10px;
-      position: absolute;
-      top: 31%;
-      right: 14%;
-      z-index: 100;
-      font-size: 30px;
-      input::-webkit-input-placeholder {
-        color: #595959 !important;
-      }
-      .remember {
-        margin: 0px 0 20px;
-      }
-      .submit_btn {
-        width: 100%;
-        height: 40px;
-        background: #007eff;
-        font-size: 16px;
-        border-radius: 5px;
-      }
-      .el-input input {
-        width: 100%;
-        height: 40px;
-        color: #333333;
-        font-size: 16px;
-      }
-      .el-input-group__append,
-      .el-input-group__prepend {
-        background-color: rgba(255, 255, 255, 0.8);
-        color: rgb(51, 51, 51);
-        border: none;
-      }
-      .el-input.el-input-group.el-input-group--prepend input {
-        background-color: rgba(255, 255, 255, 0.8);
-        color: rgb(51, 51, 51);
-        border: none;
-      }
-      .el-checkbox__label {
-        color: rgb(51, 51, 51);
-        font-size: 14px;
-      }
-      .el-checkbox__input.is-checked + .el-checkbox__label {
-        color: rgb(51, 51, 51);
-        font-size: 14px;
-      }
-      .el-form-item__content .el-input-group,
-      .el-form-item__label,
-      .el-tag .el-icon-close {
-        padding-bottom: 5px;
-        vertical-align: middle;
-        border-bottom: 1px solid #eaeaea;
-      }
-      .el-button--primary {
-        background: #007eff !important;
-        border: none;
-      }
-      .el-form-item__content {
-        padding-bottom: 5px;
-      }
-      .el-form-item {
-        margin-bottom: 30px;
-      }
-    }
-  }
-  .remember-cont {
-    position: relative;
-    margin-bottom: 20px;
-    .warn-check-tip {
-      position: absolute;
-      min-width: 300px;
-      left: 130px;
-      top: 0;
-      padding: 2px 10px;
-      border: 1px solid #d1433a;
-      background: #ffeae9;
-      color: #b72e18;
-      font-size: 14px;
-    }
-  }
+		@media screen and (min-width: 1201px){ 
+			.login-bg{ 
+				display: block;
+			}
+			#login-container {
+				width: 31%;
+			}
+		}
+		@media screen and (max-width: 1200px){
+			.login-bg{ 
+				display: none; 
+			}
+			#login-container {
+				width: 70%;
+			}
+		}
+	}
+	.remember-cont {
+		position: relative;
+		margin-bottom: 35px;
+		.warn-check-tip {
+			position: absolute;
+			min-width: 300px;
+			left: 130px;
+			top: 0;
+			padding: 2px 10px;
+			border: 1px solid #D1433A;
+			background: #FFEAE9;
+			color: #B72E18;
+			font-size: 14px;
+		}
+	}
 }
 </style>

+ 1 - 1
src/views/dataEntry_manage/databaseComponents/addTargetDiaBase.vue

@@ -9,7 +9,7 @@
 			<div class="dialog-top">
 				<div>
 					<span>数据来源</span>
-					<el-select v-model="fromType" placeholder="请选择来源" style="width:240px" @change="changeTrade"
+					<el-select v-model="fromType" placeholder="请选择来源" style="width:240px;margin-left:10px" @change="changeTrade"
 						:disabled="haveResult">
 						<el-option v-for="item in fromArr" :key="item" :label="item" :value="item">
 						</el-option>

+ 1 - 1
src/views/dataEntry_manage/thirdBase/lzTargetbase.vue

@@ -3,7 +3,7 @@
     <div class="left-cont minHeight">
       <div class="left-top">
         <el-button
-          style="width: 100%"
+          style="width: 100%;margin-bottom: 10px;"
           type="primary"
           plain
           size="medium"

+ 0 - 664
src/views/ppt_manage/addpptNew.vue

@@ -1,664 +0,0 @@
-<template>
-	<div class="addppt-container">
-		<div class="addppt-left-cont">
-			<div class="first-page" @click="openDialog">
-				<img :src="firstPage.bg" alt="" class="first-bg" v-if="firstPage.bg">
-				<div class="shade_first" v-if="!firstPage.title">
-					<img src="~@/assets/img/ppt_m/add_first.png" alt="">
-					<span>选择封面页</span>
-				</div>
-				<div v-else style="width:70%;text-align:center;font-size:12px;line-height:1.6; color:#fff; position:absolute; right:10px; top:50%;">
-					<!-- <p style="height:5px; border-top:1px solid #fff;marginBottom:6px;"></p> -->
-					<p class="text_twoLine">{{firstPage.title}}</p>
-					<p>{{firstPage.date}}</p>
-				</div>
-			</div>
-			<template v-if="pptList.length">
-				<div style="color:#409EFF;font-size:15px;padding-left:10px;margin-bottom:4px;">已添加{{pptList.length}}页</div>
-				<transition-group name="flip-list">
-					<div 
-					v-for="(item,index) in pptList" 
-					:key="item" 
-					draggable="true" 
-					:class="['drag-item',{'choose':item.timestamp===default_ppt}]"
-					@click="choosePPtItem(item,index,0)"
-					@dragstart="dragstart(item)" 
-					@dragenter="dragenter(item)" 
-					@dragend="dragend(item)">
-						<img src="~@/assets/img/ppt_m/pppage_ico.png" class="drag-left">
-						<div class="drag-right text_twoLine">
-							{{item.title}}
-						</div>
-						<el-popconfirm
-						@onConfirm="delPage(index)"
-						confirmButtonText='删除'
-						cancelButtonText='取消'
-						confirmButtonType="text"
-						icon="el-icon-info"
-						iconColor="red"
-						title="确定删除该页ppt吗"
-						>
-							<img src="~@/assets/img/ppt_m/close.png" class="close_ico" slot="reference">
-						</el-popconfirm>
-						<img src="~@/assets/img/ppt_m/move_ico.png" alt="" class="move_ico">
-						<span style="position:absolute;right:10px;bottom:5px;color:#888;font-size:12px;">第{{index+1}}页</span>
-					</div>
-				</transition-group>
-			</template>
-			<div style="color:#A3AFBB;font-size:14px;text-align:center;margin-top:124px;" v-else>
-				<img src="~@/assets/img/ppt_m/noppt.png" alt="" style="width:60px;height:33px;display:block;margin:0 auto 10px;">	
-				<span>添加正文后,会在这里生成</span>
-			</div>
-		</div>
-		<!-- ppt正文 -->
-		<div class="addppt-mid-cont" ref="pptmid">
-			<template v-if="pptList.length">
-				<transition-group name="flip-list">
-					<div class="ppt-list" v-for="(item,index) in pptList" :key="item">
-						<div style="display:flex;align-items:center;justify-content:space-between;">
-							<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" @click="addPage(index)">
-							<el-popconfirm
-							@onConfirm="delPage(index)"
-							confirmButtonText='删除'
-							cancelButtonText='取消'
-							confirmButtonType="text"
-							icon="el-icon-info"
-							iconColor="red"
-							title="确定删除该页ppt吗"
-							>
-								<img src="~@/assets/img/ppt_m/close.png" alt="" style="width:18px;height:18px;margin-bottom:20px;" slot="reference">
-							</el-popconfirm>
-						</div>
-						<div :class="['ppt-item',{'choose':item.timestamp===default_ppt}]" @click="choosePPtItem(item,index,1)" :id="'pptItem'+index">
-							<input type="text" placeholder="请输入页面标题" class="item_tit" v-model="item.title"> 
-							<div class="container" :id="'container'+item.resource_id" v-if="item.resource_id"></div>
-						</div>
-						<span style="position:absolute; bottom:3%; right:20px; color:#666;">第{{index+1}}页</span>
-					</div>
-				</transition-group>
-			</template>
-			<div v-else class="ppt-list" style="display:flex;align-items:center;" @click="addPage('last')">
-				<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" style="display:inline-block;margin-bottom:0">
-				<span style="display:inline;color:#999;font-size:20px;">点击添加正文</span>
-			</div>
-			<div class="ppt-list" v-if="pptList.length">
-				<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" @click="addPage('last')">
-				<!-- <img src="~@/assets/img/pptlastimg.png" alt="" class="last-page"> -->
-			</div>
-		</div>
-		<!-- 右侧图表 -->
-		<div class="addppt-right-cont">
-			<!-- <span style="marginRight:43%"></span> -->
-			<el-button type="primary" @click="previewHandle" style="margin-right:15px;">去发布</el-button>
-			<el-button type="primary" @click="savePPt" plain>保存</el-button>
-			<el-input placeholder="关键字查找" v-model="key_word" size="medium" prefix-icon="el-icon-search" @input="getreportlist(key_word)" style="margin:20px 0;max-width:420px;"></el-input>
-			<div id="chartList" style="height:calc(100vh - 250px); overflow-x:hidden; overflow-y:auto; border:1px solid #B2B9C3; position:relative;padding:30px 20px;" v-loading="reportloadding">
-				<template v-if="chartList.length">
-					<div v-for="(item,index) in chartList" :key="index" class="chart-item" @click="gething(item,index)" >
-						<p class="chart_tit">{{item.ChartName}}</p>
-						<img :src="item.ChartImage" ref="insert_img" style="width:100%;height:263px"/>
-					</div>
-				</template>
-				<img v-else src="../../assets/img/ppt_m/nodata.png" alt="" style="max-width:186px;height:195px;position:absolute;left:30%;top:30%;">
-			</div>
-		</div>
-		<!-- 封面选择弹窗 -->
-		<div class="first_dialog" v-if="isShowdialog">
-			<div class="dialog-min">
-				<header class="dialog-top">
-					<span>选择封面</span>
-					<img src="~@/assets/img/ppt_m/close.png" alt="" class="close_ico" @click="closeDialog">
-				</header>
-				<div class="dialog-bg" :style="'backgroundImage:url('+firstPage.bg+');backgroundPosition:center;backgroundRepeat:no-repeat;backgroundSize:cover;'">
-					<div style="width:62%; font-size:16px; text-align:center; line-height:1.6; color:#fff; position:absolute; right:20px; top:50%;">
-						<p style="height:5px; border-top:1px solid #fff;margin-bottom:21px;"></p>
-						<!-- <p style="max-width:90%; font-size:28px; line-height:1.4; font-weight:bolder; margin:0 auto;">{{firstPage.title}}</p> -->
-						<input 
-						type="text" 
-						style="max-width:90%; font-size:28px; line-height:1.4; font-weight:bolder; margin:0 auto;background:transparent;color:#fff;border:none;text-align:center;" 
-						v-model="firstPage.title" 
-						placeholder="请输入标题">
-						<p style="display:flex; align-items:center; justify-content:center;margin:10px 0;">
-							<span style="display:inline-block; width:15px; margin-right:5px; border-top:1px solid #fff;"></span>
-							<span>弘则弥道(上海)投资咨询有限公司</span>
-							<span style="display:inline-block; width:14px; height:14px; background:#fff; border-radius:100%; margin:0 5px;"></span>
-							<input 
-							type="text" 
-							style="width:80px;background:transparent;color:#fff;border:none;text-align:center;display:inline-block" 
-							v-model="firstPage.type"
-							placeholder="请输入类型">
-							<span style="display:inline-block; width:15px; margin-left:5px; border-top:1px solid #fff;"></span>
-						</p>
-						<p>FICC研究部</p>
-						<el-date-picker
-							v-model="firstPage.date"
-							type="month"
-							ref="date_pic"
-							format="yyyy年M月"
-							value-format="yyyy年M月"
-							placeholder="请选择日期">
-						</el-date-picker>
-						<p style="width:80%; height:1px; border-bottom:1px solid #fff; margin:21px auto 0;"></p>
-					</div>
-					<!-- <img src="~@/assets/img/ppt_m/bg_select.png" alt="" class="select_ico"> -->
-				</div>
-				<div class="dialog-bot">
-					<span></span>
-					<div>
-						<el-button  type="primary" style="width:120px" @click="saveFirstPage">保存</el-button>
-						<el-button style="width:120px" @click="changeBg">换一个模板</el-button>
-					</div>
-				</div>
-			</div>
-		</div>
-		<el-dialog
-		title="提示" 
-		:visible.sync="isSave"
-		:close-on-click-modal="false"
-		:modal-append-to-body='false'
-		:show-close="false"
-		@close="cancelHandle"
-		center
-		width="30%">
-			<div slot="title" style="display:flex;align-items:center;">
-				<img :src="$icons.warn" style="color:#fff;width:16px;height:16px;margin-right:5px;">
-				<span style="font-size:16px;">提示</span>
-			</div>
-			<div style="color:#3377FF;font-size:24px;padding-top:54px;text-align:center;">保存成功</div>
-			<div style="display:flex;justify-content:center;margin:45px 0 47px;">
-				<el-button type="primary" style="width:120px;margin-right:60px;" @click="previewHandle">预览发布</el-button>
-				<el-button type="primary" plain style="width:120px;" @click="addAgain">返回列表</el-button>
-			</div>
-		</el-dialog>
-	</div>
-</template>
-
-<script>
-import { pptadd,dataBaseInterface } from '@/api/api.js';
-import html2canvas from 'html2canvas';
-import Highcharts from 'highcharts/highstock';
-import HighchartszhCN  from '@/utils/highcahrts-zh_CN'
-HighchartszhCN(Highcharts)
-import { defaultOpts, seasonOptions,getTerminal,browser } from '@/utils/defaultOptions';
-import chartMixin from './mixins/mixins';
-export default {
-	name:'',
-	mixins: [ chartMixin ],
-	components: {
-		html2canvas
-	},
-	data () {
-		return {
-			chartList:[],//图表列表
-			reportloadding:false,//图表loading
-			key_word:'',//搜索关键字
-			default_bg:0,//默认封面背景
-			firstPage:{
-				title:'',
-				bg:'',
-				type:'',
-				date: (new Date().getFullYear())+'年'+(new Date().getMonth()+1)+'月'
-			},//ppt首页
-			isSave:false,
-			isShowdialog:false,
-			pptList:[],//内容页
-			default_ppt:'',//默认选中ppt 默认最新的时间戳
-			oldNum:0,//拖拽前的位置
-			newNum:0,//拖拽后的位置
-			zchart:null,//图表配置
-			ppt_id:'',
-			/* new source */
-			chartInfo: {},//图表信息
-			dataList: [],//图表关联指标
-			options:{}
-		};
-	},
-	methods: {
-		// 获取商品图表
-		getreportlist(word){
-			$('#chartList').animate({scrollTop:0},100);
-			if( this.reportloadding ) return false;
-			this.reportloadding=true;
-			dataBaseInterface
-				.chartSearch({
-					KeyWord: word || '',
-				})
-				.then((res) => {
-					if (res.Ret !== 200) return;
-					this.chartList = res.Data || [];
-					this.reportloadding=false;
-				});
-		},
-		// 删除页
-		delPage(index) {
-			this.pptList.splice(index,1)
-		},
-		// 打开弹窗
-		openDialog() {
-			this.isShowdialog = true
-		},
-		// 点击x关闭弹窗不保存填写的信息
-		closeDialog() {
-			this.isShowdialog = false
-		},
-		// 换一个模板
-		changeBg() {
-			this.default_bg++;
-			if(this.default_bg > this.bgList.length-1) {
-				this.default_bg = 0;
-			}
-			this.$set(this.firstPage,'bg',this.bgList[this.default_bg].image_url)
-		},
-		// 保存首页
-		saveFirstPage() {
-			if(!this.firstPage.title) {
-				this.$message.warning('请输入标题!')
-			}else if(!this.firstPage.type) {
-				this.$message.warning('请输入类型!')
-			}else if(!this.firstPage.date) {
-				this.$message.warning('请选择时间!')
-			}else {
-				this.isShowdialog = false
-			}
-		},
-		shuffle() {
-      this.pptList = _.shuffle(this.pptList);
-    },
-		// 开始位置
-		dragstart(value) {
-			this.oldNum = value;
-		},
-		// 拖动完成
-		dragend(value) {
-		if (this.oldNum != this.newNum) {
-			let oldIndex = this.pptList.indexOf(this.oldNum);
-			let newIndex = this.pptList.indexOf(this.newNum);
-			let newItems = [...this.pptList];
-			// 删除老的节点
-			newItems.splice(oldIndex, 1); 
-			// 在列表中目标位置增加新的节点
-			newItems.splice(newIndex, 0, this.oldNum);
-			this.pptList = [...newItems];
-			// console.log(this.pptList)
-		}
-		},
-    // 目标位置
-		dragenter(value) {
-			this.newNum = value;  
-		},
-		// 添加页
-		addPage(index) {
-			let obj ={
-				title:'',
-				resource_id:'',
-				timestamp:new Date().getTime()
-			}
-			if(index == 'last') {
-				this.pptList.push(obj)
-				// 定位到最后一页
-				this.default_ppt = this.pptList[this.pptList.length-1].timestamp;
-			}else {
-				this.pptList.splice(index,0,obj)
-				// 定位到最新的一页
-				this.default_ppt = this.pptList[index].timestamp;
-			}
-		},
-		// 获取图表信息
-		async gething(item,index) {
-			if(!this.pptList.length) {
-				this.$message.warning('请先添加ppt正文!')
-			}else {
-
-				let have_bool = this.pptList.some(x => x.resource_id === item.UniqueCode);
-				if(have_bool) return this.$message.warning('该图表已被使用');
-
-
-				const { Data } = await dataBaseInterface.getChartByCode({
-					UniqueCode: item.UniqueCode
-				})
-				this.chartInfo = Data.ChartInfo;
-        		this.dataList = Data.EdbInfoList;
-
-				// 定位指定的图表
-				this.pptList.forEach(pptItem => {
-					if(pptItem.timestamp === this.default_ppt) {
-						this.$set(pptItem,'resource_id',item.UniqueCode)
-					}
-				})
-
-				this.setOptions();
-
-				this.$nextTick(()=> {
-					const new_options = { ...defaultOpts, ...this.options };
-					new_options.chart = {
-						backgroundColor: 'transparent'
-					}
-					let is_scatter = this.options.series ? this.options.series.every(_ => _.type === 'scatter') : false ;
-					is_scatter ? Highcharts.chart('container'+item.UniqueCode, new_options) : Highcharts.stockChart('container'+item.UniqueCode, new_options);
-				})
-			}	
-		},
-
-		// 切换选中的ppt页
-		choosePPtItem(item,index,type) {
-			this.default_ppt = item.timestamp;
-			if(type == 0) {
-				let h_item = $('#pptItem'+index)[0].offsetHeight+80;
-				this.$refs.pptmid.scrollTo(0,parseInt(h_item*index),100)
-			}
-		},
-		// 保存为草稿
-		savePPt() {
-			console.log(this.firstPage,this.pptList)
-			if(!this.firstPage.title) {
-				this.$message.warning('请填写封面标题!')
-			}else if(!this.firstPage.type) {
-				this.$message.warning('请填写封面类型!')
-			}else if(!this.firstPage.date) {
-				this.$message.warning('请填写封面日期!')
-			}else if(!this.pptList.length) {
-				this.$message.warning('请添加ppt!')
-			}else {
-				// 校验ppt每一页必须有标题和内容
-				let B_check =  this.pptList.every(item => {
-					return item.title
-				})
-				let B_check2 =  this.pptList.every(item => {
-					return item.resource_id
-				})
-				if(!B_check) {
-					this.$message.warning('请填写ppt标题!')
-				}else if(!B_check2) {
-					this.$message.warning('请插入ppt内容!')
-				}else {
-					let content_page = []
-					this.pptList.forEach(item => {
-						content_page.push({
-							ResourceId:item.resource_id,
-							Title:item.title,
-							Timestamp:item.timestamp
-						})
-					})
-					let params = {
-						FirstPage:{
-							Title:this.firstPage.title,
-							ReportType:this.firstPage.type,
-							PptDate:this.firstPage.date,
-							ImgUrl:this.firstPage.bg,
-							BackIndex:parseInt(this.default_bg)
-						},
-						ContentPage:content_page,
-						PptId:this.ppt_id||0
-					}
-					pptadd(params).then(res => {
-						if(res.Ret == 200) {
-							this.$message.success(res.Msg)
-							this.ppt_id = res.Data.PptId;
-							// this.isSave = true;
-						}else {
-						}
-					})
-				}
-			}
-		},
-		cancelHandle() {
-			this.isSave = false
-		},
-		// 预览发布
-		previewHandle() {
-			if(this.ppt_id) {
-				sessionStorage.setItem('ppt_id',this.ppt_id);
-				sessionStorage.setItem('ppt_auth','true');
-				this.$router.push({path:'/pptdtl'});
-				// let {href} = this.$router.resolve({name:'预览ppt'});
-				// window.open(href,'_blank');
-			}else {
-				this.$message.warning('请先保存!')
-			}
-		},
-		// 返回列表
-		addAgain() {
-			this.$router.push({path:'/pptlist'});
-		},
-	},
-	created() {
-		
-	},
-	updated() {
-		// reset
-		$('.el-date-editor .el-input__inner').css({backgroundColor: 'transparent',border:'none',color:'#fff',textAlign:'center',fontSize:'16px'});
-		$('.el-date-editor .el-icon-date' ).css({display:'none'});
-		$('.ppt-item').css('height',$('.ppt-item').width()*0.7);
-	},
-	mounted() {
-		this.getreportlist();
-		this.firstPage.bg = this.bgList[0].image_url;
-	},
-}
-</script>
-<style lang='scss' scoped>
-* {
-	box-sizing: border-box;
-}
-/* 控制文字显示两行 */
-.text_twoLine {
-  overflow:hidden;
-  text-overflow:ellipsis;
-  display:-webkit-box;
-  -webkit-box-orient:vertical;
-  -webkit-line-clamp:2;
-}
-/*修改滚动条样式*/
-	div::-webkit-scrollbar{
-		width:5px;
-		height:5px;
-	}
-	div::-webkit-scrollbar-track{
-		background: rgb(239, 239, 239);
-		border-radius:2px;
-	}
-	div::-webkit-scrollbar-thumb{
-		background: #ccc;
-		border-radius:10px;
-	}
-	div::-webkit-scrollbar-thumb:hover{
-		background: #888;
-	}
-	div::-webkit-scrollbar-corner{
-		background: #179a16;
-	}
-/**/
-// reset
-.addppt-container {
-	background: #fff;
-	padding: 20px;
-	display: flex;
-	position: relative;
-	// justify-content: space-between;
-	.flip-list-move {
-    	transition: transform 0.5s;
-   }
-	.addppt-left-cont {
-		// max-width: 260px;
-		max-width: 15%;
-		min-width: 190px;
-		border: 1px solid #B2B9C3;
-		max-height: calc(100vh - 125px);
-		padding-bottom: 12px;
-		overflow-y: auto;
-		overflow-x: hidden;
-		.first-page {
-			width: 100%;
-			height: 180px;
-			margin-bottom: 30px;
-			padding: 5px 7px;
-			position: relative;
-			.shade_first {
-				position: absolute;
-				left: 50%;
-				top: 50%;
-				transform: translate(-50%,-50%);
-				color: #fff;
-				img {
-					width: 44px;
-					height: 44px;
-					display: block;
-					margin: 0 auto 11px;
-				}
-			}
-			.first-bg {
-				// min-width: 267px;
-				max-width:100%;
-				height: 180px;
-			}
-		}
-		.drag-item {
-			height: 80px;
-			padding: 20px 56px 20px 7px;
-			border: 1px solid #ccc;
-			position: relative;
-			display: flex;
-			align-items: center;
-			&.choose {
-				border-color: rgba($color: #4B8DFF, $alpha: 1);
-			}
-			.drag-left {
-				width: 40px;
-				height: 34px;
-				margin-right: 10px;
-			}
-			.drag-right {
-				width: 168px;
-				word-break: break-all;
-				color: #666;
-				font-size: 14px;
-			}
-			.close_ico {
-				width: 12px;
-				height: 12px;
-				position: absolute;
-				right: 10px;
-				top: 10px;
-			}
-			.move_ico {
-				width: 12px;
-				height: 12px;
-				position: absolute;
-				right: 10px;
-				top: 38px;
-			}
-		}
-	}
-	.addppt-mid-cont {
-		max-width: 850px;
-		min-width: 700px;
-		flex: 1;
-		max-height: calc(100vh - 125px);
-		overflow-y: auto;
-		overflow-x: hidden;
-		padding: 30px 14px;
-		border:1px solid #B2B9C3;
-		margin: 0 5px;
-		.ppt-list {
-			position: relative;
-			.add_ico {
-				width: 28px;
-				height: 28px;
-				display: block;
-				margin-bottom: 20px;
-			}
-			.ppt-item {
-				width: 100%;
-				height: 580px;
-				background: url('~@/assets/img/pptnextimg.png') no-repeat center;
-				background-size: cover;
-				margin-bottom: 30px;
-				position: relative;
-				border: 4px solid transparent;
-				&.choose {
-					// box-shadow: 1px 1px 2px rgba($color: #409eff, $alpha: 0.6);
-					border: 4px solid rgba($color: #4B8DFF, $alpha: 0.7);
-				}
-				.item_tit {
-					width: 65%;
-					position: absolute;
-					left: 90px;
-					top: 40px;
-					font-size: 24px;
-					border: none;
-					color: #666;
-					background: transparent;
-				}
-			}
-			.last-page {
-				max-width: 850px;
-				height: 580px;
-			}
-			.container {
-				width: 80%;
-				position: absolute;
-				left: 50%;
-				top: 55%;
-				transform: translate(-50%,-50%);
-			}
-		}
-	}
-	.addppt-right-cont {
-		width: 26%;
-		.chart-item {
-			text-align: center;
-			color: #74818D;
-			font-size: 18px;
-			margin-bottom: 12px;
-		}
-	}
-	.first_dialog {
-		position: fixed;
-		top: 0;
-		right: 0;
-		left: 0;
-		bottom: 0;
-		background:rgba($color: #000000, $alpha: 0.4);
-		z-index: 999;
-		.dialog-min {
-			width: 50%;
-			padding: 30px 54px 26px;
-			position: absolute;
-			left: 50%;
-			top: 50%;
-			transform: translate(-50%,-50%);
-			background: #fff;
-			.dialog-top {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				font-size: 24px;
-				color: #1F2E4D;
-				margin-bottom: 22px;
-				.close_ico {
-					width: 28px;
-					height: 28px;
-				}
-			}
-			.dialog-bg {
-				width: 100%;
-				height: 645px;
-				position: relative;
-				.select_ico {
-					width: 48px;
-					height: 48px;
-					position: absolute;
-					right: 15px;
-					top: 15px;
-				}
-			}
-			.dialog-bot {
-				margin-top: 22px;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-			}
-		}
-	}
-}
-</style>

+ 0 - 761
src/views/ppt_manage/editpptNew.vue

@@ -1,761 +0,0 @@
-<template>
-	<div class="addppt-container">
-		<div class="addppt-left-cont">
-			<div class="first-page" @click="openDialog">
-				<img :src="firstPage.bg" alt="" class="first-bg" v-if="firstPage.bg">
-				<div class="shade_first" v-if="!firstPage.title">
-					<img src="~@/assets/img/ppt_m/add_first.png" alt="">
-					<span>选择封面页</span>
-				</div>
-				<div v-else style="width:70%;textAlign:center;font-size:12px;line-height:1.6; color:#fff; position:absolute; right:10px; top:50%;">
-					<p>{{firstPage.title}}</p>
-					<p>{{firstPage.date}}</p>
-				</div>
-			</div>
-			<template v-if="pptList.length">
-				<div style="color:#409EFF;fontSize:15px;paddingLeft:10px;marginBottom:4px;">已添加{{pptList.length}}页</div>
-				<transition-group name="flip-list">
-					<div 
-					v-for="(item,index) in pptList" 
-					:key="item" 
-					draggable="true" 
-					:class="['drag-item',{'choose':item.timestamp===default_ppt}]"
-					@click="choosePPtItem(item,index,0)"
-					@dragstart="dragstart(item)" 
-					@dragenter="dragenter(item)" 
-					@dragend="dragend(item)">
-						<img src="~@/assets/img/ppt_m/pppage_ico.png" class="drag-left">
-						<div class="drag-right text_twoLine">
-							{{item.title}}
-						</div>
-						<el-popconfirm
-						@onConfirm="delPage(index)"
-						confirmButtonText='删除'
-						cancelButtonText='取消'
-						confirmButtonType="text"
-						icon="el-icon-info"
-						iconColor="red"
-						title="确定删除该页ppt吗"
-						>
-							<img src="~@/assets/img/ppt_m/close.png" class="close_ico" slot="reference">
-						</el-popconfirm>
-						<img src="~@/assets/img/ppt_m/move_ico.png" alt="" class="move_ico">
-						<span style="position:absolute;right:10px;bottom:5px;color:#888;fontSize:12px;">第{{index+1}}页</span>
-					</div>
-				</transition-group>
-			</template>
-			<div style="color:#A3AFBB;fontSize:14px;textAlign:center;marginTop:124px;" v-else>
-				<img src="~@/assets/img/ppt_m/noppt.png" alt="" style="width:60px;height:33px;display:block;margin:0 auto 10px;">	
-				<span>添加正文后,会在这里生成</span>
-			</div>
-		</div>
-		<!-- ppt正文 -->
-		<div class="addppt-mid-cont" ref="pptmid">
-			<template v-if="pptList.length">
-				<transition-group name="flip-list">
-					<div class="ppt-list" v-for="(item,index) in pptList" :key="item">
-						<div style="display:flex;alignItems:center;justifyContent:space-between;">
-							<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" @click="addPage(index)">
-							<el-popconfirm
-							@onConfirm="delPage(index)"
-							confirmButtonText='删除'
-							cancelButtonText='取消'
-							confirmButtonType="text"
-							icon="el-icon-info"
-							iconColor="red"
-							title="确定删除该页ppt吗"
-							>
-								<img src="~@/assets/img/ppt_m/close.png" alt="" style="width:18px;height:18px;marginBottom:20px;" slot="reference">
-							</el-popconfirm>
-						</div>
-						<div :class="['ppt-item',{'choose':item.timestamp===default_ppt}]" @click="choosePPtItem(item,index,1)" :id="'pptItem'+index">
-							<input type="text" placeholder="请输入页面标题" class="item_tit" v-model="item.title"> 
-							<div class="container" :id="'container'+item.resource_id" v-if="item.resource_id"></div>
-							<div class="container" v-if="item.noSource">
-								<img src="https://hzstatic.hzinsights.com/static/ppt_default.png" alt="" style="width:400px;height:300px;margin:0 auto;display:block;">
-							</div>
-						</div>
-						<span style="position:absolute; bottom:3%; right:20px; color:#666;">第{{index+1}}页</span>
-					</div>
-				</transition-group>
-			</template>
-			<div v-else class="ppt-list" style="display:flex;alignItems:center;" @click="addPage('last')">
-				<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" style="display:inline-block;marginBottom:0">
-				<span style="display:inline;color:#999;fontSize:20px;">点击添加正文</span>
-			</div>
-			<div class="ppt-list" v-if="pptList.length">
-				<img src="~@/assets/img/ppt_m/add.png" alt="" class="add_ico" @click="addPage('last')">
-			</div>
-		</div>
-		<!-- 右侧图表 -->
-		<div class="addppt-right-cont">
-			<!-- <span style="marginRight:43%"></span> -->
-			<el-button type="primary" @click="previewHandle" style="marginRight:15px;">去发布</el-button>
-			<el-button type="primary" @click="savePPt" plain>保存</el-button>
-			<el-input placeholder="关键字查找" v-model="key_word" size="medium" prefix-icon="el-icon-search" @input="getreportlist(key_word)" style="margin:20px 0;maxWidth:100%;"></el-input>
-			<div id="chartList" style="height:calc(100vh - 250px); overflow-x:hidden; overflow-y:auto; border:1px solid #B2B9C3; position:relative;padding:30px 20px;" v-loading="reportloadding">
-				<template v-if="chartList.length">
-					<div v-for="(item,index) in chartList" :key="index" class="chart-item" @click="gething(item,index)" >
-						<p class="chart_tit">{{item.ChartName}}</p>
-						<img :src="item.ChartImage" ref="insert_img" style="width:100%;height:263px"/>
-					</div>
-				</template>
-				<img v-else src="../../assets/img/ppt_m/nodata.png" alt="" style="max-width:186px;height:195px;position:absolute;left:30%;top:30%;">
-			</div>
-		</div>
-		<!-- 封面选择弹窗 -->
-		<div class="first_dialog" v-if="isShowdialog">
-			<div class="dialog-min">
-				<header class="dialog-top">
-					<span>选择封面</span>
-					<img src="~@/assets/img/ppt_m/close.png" alt="" class="close_ico" @click="closeDialog">
-				</header>
-				<div class="dialog-bg" :style="'backgroundImage:url('+firstPage.bg+');backgroundPosition:center;backgroundRepeat:no-repeat;backgroundSize:cover;'">
-					<div style="width:62%; font-size:16px; text-align:center; line-height:1.6; color:#fff; position:absolute; right:20px; top:50%;">
-						<p style="height:5px; border-top:1px solid #fff;marginBottom:21px;"></p>
-						<!-- <p style="max-width:90%; font-size:28px; line-height:1.4; font-weight:bolder; margin:0 auto;">{{firstPage.title}}</p> -->
-						<input 
-						type="text" 
-						style="max-width:90%; font-size:28px; line-height:1.4; font-weight:bolder; margin:0 auto;background:transparent;color:#fff;border:none;textAlign:center;" 
-						v-model="firstPage.title" 
-						placeholder="请输入标题">
-						<p style="display:flex; align-items:center; justify-content:center;margin:10px 0;">
-							<span style="display:inline-block; width:15px; margin-right:5px; border-top:1px solid #fff;"></span>
-							<span>弘则弥道(上海)投资咨询有限公司</span>
-							<span style="display:inline-block; width:14px; height:14px; background:#fff; border-radius:100%; margin:0 5px;"></span>
-							<input 
-							type="text" 
-							style="max-width:80px;background:transparent;color:#fff;border:none;textAlign:center;display:inline-block" 
-							v-model="firstPage.type" 
-							placeholder="请输入类型">
-							<span style="display:inline-block; width:15px; margin-left:5px; border-top:1px solid #fff;"></span>
-						</p>
-						<p>FICC研究部</p>
-						<el-date-picker
-							v-model="firstPage.date"
-							type="month"
-							ref="date_pic"
-							format="yyyy年M月"
-							value-format="yyyy年M月"
-							placeholder="请选择日期">
-						</el-date-picker>
-						<p style="width:80%; height:1px; border-bottom:1px solid #fff; margin:21px auto 0;"></p>
-					</div>
-					<!-- <img src="~@/assets/img/ppt_m/bg_select.png" alt="" class="select_ico"> -->
-				</div>
-				<div class="dialog-bot">
-					<span></span>
-					<div>
-						<el-button  type="primary" style="width:120px" @click="saveFirstPage">保存</el-button>
-						<el-button style="width:120px" @click="changeBg">换一个模板</el-button>
-					</div>
-				</div>
-			</div>
-		</div>
-		<el-dialog
-		title="提示" 
-		:visible.sync="isSave"
-		:close-on-click-modal="false"
-		:modal-append-to-body='false'
-		:show-close="false"
-		@close="cancelHandle"
-		center
-		width="30%">
-			<div slot="title" style="display:flex;alignItems:center;">
-				<img :src="$icons.warn" style="color:#fff;width:16px;height:16px;marginRight:5px;">
-				<span style="fontSize:16px;">提示</span>
-			</div>
-			<div style="color:#3377FF;fontSize:24px;paddingTop:54px;text-align:center;">编辑成功</div>
-			<div style="display:flex;justifyContent:center;margin:45px 0 47px;">
-				<el-button type="primary" style="width:120px;marginRight:60px;" @click="previewHandle">预览发布</el-button>
-				<el-button type="primary" plain style="width:120px;" @click="back">返回列表</el-button>
-			</div>
-		</el-dialog>
-	</div>
-</template>
-
-<script>
-import { pptedit,pptdetail,dataBaseInterface } from '@/api/api.js';
-import html2canvas from 'html2canvas';
-import Highcharts from 'highcharts/highstock';
-import HighchartszhCN  from '@/utils/highcahrts-zh_CN'
-HighchartszhCN(Highcharts)
-import { defaultOpts, seasonOptions,getTerminal,browser } from '@/utils/defaultOptions';
-import chartMixin from './mixins/mixins'
-
-export default {
-	name:'',
-	mixins: [ chartMixin ],
-	components: {
-		html2canvas
-	},
-	data () {
-		return {
-			chartList:[],//图表列表
-			reportloadding:false,//图表loading
-			key_word:'',//搜索关键字
-			default_bg:0,//默认封面背景
-			firstPage:{
-				title:'',
-				bg:'',
-				type:'',
-				date:''
-			},//ppt首页
-			isSave:false,
-			isShowdialog:false,
-			pptList:[],//内容页
-			default_ppt:'',//默认选中ppt的时间戳
-			oldNum:0,//拖拽前的位置
-			newNum:0,//拖拽后的位置
-			zchart:null,//图表配置
-			axisOption:{
-				gridLineWidth: 0,
-				minorGridLineWidth: 0,
-				opposite: false,
-				lineWidth: 1,
-				lineColor: '#bfbfbf',
-				tickColor: '#bfbfbf',
-				tickLength: 5,
-				tickWidth: 1,
-				title: {
-					text: ""
-				},
-				endOnTick: false,
-				startOnTick: false,
-				labels: {x: -5,},
-				visible: false,
-			},
-			hcredits:'',
-			datasource:'',
-			ppt_id:this.$route.query.id,
-			loading:null,
-			/* new source */
-			chartInfo: {},//图表信息
-			dataList: [],//图表关联指标
-			options:{}
-		};
-	},
-	methods: {
-		// 获取图表列表
-		getreportlist(word){
-			$('#chartList').animate({scrollTop:0},100);
-			if( this.reportloadding ) return false;
-			this.reportloadding=true;
-			dataBaseInterface
-				.chartSearch({
-					KeyWord: word || '',
-				})
-				.then((res) => {
-					if (res.Ret !== 200) return;
-					this.chartList = res.Data || [];
-					this.reportloadding=false;
-				});
-		},
-		// 获取ppt详情
-		getpptdtl(){
-			this.loading = this.$loading({
-				target:'.addppt-container',
-				lock: true,
-				text: '拼命加载中...',
-				spinner: 'el-icon-loading',
-				background: 'rgba(0, 0, 0, 0.6)'
-			});
-			pptdetail({PptId:this.ppt_id}).then(res =>{
-				if( res.Ret === 200 ){
-					let pptpage=res.Data.PptPages || [];
-					this.firstPage={
-						title:res.Data.Ppt.Title,
-						type:res.Data.Ppt.ReportType,
-						date:res.Data.Ppt.PptDate,
-						bg:this.bgList[parseInt(pptpage[0].BackIndex)].image_url,
-						ppt_pages_id:parseInt(pptpage[0].PptPagesId),
-					}
-					this.pageitem=[];
-					pptpage.forEach((item,i)=>{
-						if( i!=0 ){
-							this.pptList.push({
-								title:item.Title,
-								ppt_pages_id:parseInt(item.PptPagesId),
-								resource_id:item.ResourceId,
-								timestamp:parseInt(item.Timestamp)
-							});
-						}
-					});
-					this.default_ppt = this.pptList[0].timestamp;//默认选中第一个
-					this.listHandle()
-				}
-			});
-		},
-		async listHandle() {
-			// this.pptList.forEach((item,index) => {
-			// 	await this.getChart(item,index)
-			// })
-			for(let i=0;i<this.pptList.length;i++) {
-				await this.getChart(this.pptList[i],i)
-			}
-		},
-		// 加载图表
-		async getChart(item,index) {
-
-			const { Data } = await dataBaseInterface.getChartByCode({
-				UniqueCode: item.resource_id
-			})
-			this.chartInfo = Data.ChartInfo;
-			this.dataList = Data.EdbInfoList;
-
-			Data.Status && this.setOptions();
-
-			this.$nextTick(()=> {
-				if(	Data.Status) {
-					const new_options = { ...defaultOpts, ...this.options };
-					new_options.chart = {
-						backgroundColor: 'transparent'
-					}
-					let is_scatter = this.options.series ? this.options.series.every(_ => _.type === 'scatter') : false ;
-					is_scatter ? Highcharts.chart('container'+item.resource_id, new_options) : Highcharts.stockChart('container'+item.resource_id, new_options);
-				}else {
-					this.$set(item,'noSource',true);
-				}
-				if(index === this.pptList.length-1)  {
-					this.loading.close();
-				}
-			})
-		},
-		// 删除页
-		delPage(index) {
-			this.pptList.splice(index,1)
-		},
-		// 打开弹窗
-		openDialog() {
-			this.isShowdialog = true
-		},
-		// 点击x关闭弹窗不保存填写的信息
-		closeDialog() {
-			this.isShowdialog = false
-		},
-		// 换一个模板
-		changeBg() {
-			this.default_bg++;
-			if(this.default_bg > this.bgList.length-1) {
-				this.default_bg = 0;
-			}
-			this.$set(this.firstPage,'bg',this.bgList[this.default_bg].image_url)
-		},
-		// 保存首页
-		saveFirstPage() {
-			if(!this.firstPage.title) {
-				this.$message.warning('请输入标题!')
-			}else if(!this.firstPage.type) {
-				this.$message.warning('请输入类型!')
-			}else if(!this.firstPage.date) {
-				this.$message.warning('请选择时间!')
-			}else {
-				this.isShowdialog = false
-			}
-		},
-		shuffle() {
-       	this.pptList = _.shuffle(this.pptList);
-      },
-      // 开始位置
-      dragstart(value) {
-       	this.oldNum = value;
-      },
-      // 拖动完成
-      dragend(value) {
-			if (this.oldNum != this.newNum) {
-				let oldIndex = this.pptList.indexOf(this.oldNum);
-				let newIndex = this.pptList.indexOf(this.newNum);
-				let newItems = [...this.pptList];
-				// 删除老的节点
-				newItems.splice(oldIndex, 1); 
-				// 在列表中目标位置增加新的节点
-				newItems.splice(newIndex, 0, this.oldNum);
-				this.pptList = [...newItems];
-				console.log(this.pptList)
-			}
-      },
-      // 目标位置
-      dragenter(value) {
-        this.newNum = value;
-		},
-		// 添加页
-		addPage(index) {
-			let obj ={
-				title:'',
-				resource_id:'',
-				timestamp:new Date().getTime()
-			}
-			if(index == 'last') {
-				this.pptList.push(obj);
-				this.default_ppt = this.pptList[this.pptList.length-1].timestamp;
-			}else {
-				this.pptList.splice(index,0,obj);
-				this.default_ppt = this.pptList[index].timestamp;
-			}
-		},
-		// 获取图表
-		async gething(item,index) {
-
-			let have_bool = this.pptList.some(x => x.resource_id === item.UniqueCode);
-			if(have_bool) return this.$message.warning('该图表已被使用');
-
-			const { Data } = await dataBaseInterface.getChartByCode({
-				UniqueCode: item.UniqueCode
-			})
-			this.chartInfo = Data.ChartInfo;
-			this.dataList = Data.EdbInfoList;
-
-			// 定位指定的图表
-			this.pptList.forEach(pptItem => {
-				if(pptItem.timestamp === this.default_ppt) {
-					this.$set(pptItem,'resource_id',item.UniqueCode)
-					this.$set(pptItem,'noSource',false)
-				}
-			})
-
-			this.setOptions();
-
-			this.$nextTick(()=> {
-				const new_options = { ...defaultOpts, ...this.options };
-				new_options.chart = {
-					backgroundColor: 'transparent'
-				}
-				
-				let is_scatter = this.options.series ? this.options.series.every(_ => _.type === 'scatter') : false ;
-				is_scatter ? Highcharts.chart('container'+item.UniqueCode, new_options) : Highcharts.stockChart('container'+item.UniqueCode, new_options);
-				
-			})
-		},
-		// 切换选中的ppt页
-		choosePPtItem(item,index,type) {
-			this.default_ppt = item.timestamp;
-			if(type == 0) {
-				let h_item = $('#pptItem'+index)[0].offsetHeight+80;
-				this.$refs.pptmid.scrollTo(0,parseInt(h_item*index),100)
-			}
-		},
-		// 保存为草稿
-		savePPt() {
-			console.log(this.firstPage,this.pptList)
-			if(!this.firstPage.title) {
-				this.$message.warning('请填写封面标题!')
-			}else if(!this.firstPage.type) {
-				this.$message.warning('请填写封面类型!')
-			}else if(!this.firstPage.date) {
-				this.$message.warning('请填写封面日期!')
-			}else if(!this.pptList.length) {
-				this.$message.warning('请添加ppt!')
-			}else {
-				// 校验ppt每一页必须有标题和内容
-				let B_check =  this.pptList.every(item => {
-					return item.title
-				})
-				let B_check2 =  this.pptList.every(item => {
-					return item.resource_id
-				})
-				if(!B_check) {
-					this.$message.warning('请填写ppt标题!')
-				}else if(!B_check2) {
-					this.$message.warning('请插入ppt内容!')
-				}else {
-					let content_page = []
-					this.pptList.forEach(item => {
-						content_page.push({
-							ResourceId:item.resource_id,
-							Title:item.title,
-							Timestamp:item.timestamp,
-							PptPagesId:item.ppt_pages_id
-						})
-					})
-					let params = {
-						FirstPage:{
-							Title:this.firstPage.title,
-							ReportType:this.firstPage.type,
-							PptDate:this.firstPage.date,
-							ImgUrl:this.firstPage.bg,
-							PptPagesId:this.firstPage.ppt_pages_id,
-							BackIndex:parseInt(this.default_bg)
-						},
-						ContentPage:content_page,
-						PptId:parseInt(this.ppt_id),
-					}
-					// console.log(params)
-					pptedit(params).then(res => {
-						if(res.Ret === 200) {
-							// this.ppt_id = res.ppt_id;
-							// this.isSave = true;
-							this.$message.success('保存成功!')
-						}
-					})
-				}
-			}
-		},
-		cancelHandle() {
-			this.isSave = false
-		},
-		// 预览发布
-		previewHandle() {
-			sessionStorage.setItem('ppt_id',this.ppt_id);
-			this.$router.push({path:'/pptdtl'});
-			// let {href} = this.$router.resolve({name:'预览ppt'});
-			// window.open(href,'_blank');
-		},
-		// 返回列表
-		back() {
-			this.$router.push({path:'/pptlist'});
-		},
-		init() {
-			this.key_word = ''//搜索关键字
-			this.default_bg = 0//默认封面背景
-			this.firstPage = {
-				title:'',
-				type:'',
-				date:'',
-				bg:this.bgList[0].image_url
-			}//ppt首页
-			this.pptList = []//内容页
-			this.ppt_id = ''
-		},
-	},
-	created() {
-		
-	},
-	updated() {
-		// reset
-		$('.el-date-editor .el-input__inner').css({backgroundColor: 'transparent',border:'none',color:'#fff',textAlign:'center',fontSize:'16px'});
-		$('.el-date-editor .el-icon-date' ).css({display:'none'});
-		$('.ppt-item').css('height',$('.ppt-item').width()*0.7);
-	},
-	mounted() {
-		this.getpptdtl();
-		this.getreportlist();
-		// this.firstPage.bg = this.bgList[0].image_url;
-	},
-}
-</script>
-<style lang='scss' scoped>
-* {
-	box-sizing: border-box;
-}
-/* 控制文字显示两行 */
-.text_twoLine {
-  overflow:hidden;
-  text-overflow:ellipsis;
-  display:-webkit-box;
-  -webkit-box-orient:vertical;
-  -webkit-line-clamp:2;
-}
-/*修改滚动条样式*/
-	div::-webkit-scrollbar{
-		width:5px;
-		height:5px;
-	}
-	div::-webkit-scrollbar-track{
-		background: rgb(239, 239, 239);
-		border-radius:2px;
-	}
-	div::-webkit-scrollbar-thumb{
-		background: #ccc;
-		border-radius:10px;
-	}
-	div::-webkit-scrollbar-thumb:hover{
-		background: #888;
-	}
-	div::-webkit-scrollbar-corner{
-		background: #179a16;
-	}
-/**/
-// reset
-.addppt-container {
-	background: #fff;
-	padding: 20px;
-	display: flex;
-	position: relative;
-	// justify-content: space-between;
-	.flip-list-move {
-    	transition: transform 0.5s;
-   }
-	.addppt-left-cont {
-		// max-width: 260px;
-		max-width: 15%;
-		min-width: 190px;
-		border: 1px solid #B2B9C3;
-		max-height: calc(100vh - 125px);
-		padding-bottom: 12px;
-		overflow-y: auto;
-		overflow-x: hidden;
-		.first-page {
-			width: 100%;
-			height: 180px;
-			margin-bottom: 30px;
-			padding: 5px 7px;
-			position: relative;
-			.shade_first {
-				position: absolute;
-				left: 50%;
-				top: 50%;
-				transform: translate(-50%,-50%);
-				color: #fff;
-				img {
-					width: 44px;
-					height: 44px;
-					display: block;
-					margin: 0 auto 11px;
-				}
-			}
-			.first-bg {
-				// min-width: 267px;
-				max-width:100%;
-				height: 180px;
-			}
-		}
-		.drag-item {
-			height: 80px;
-			padding: 20px 56px 20px 7px;
-			border: 1px solid #ccc;
-			position: relative;
-			display: flex;
-			align-items: center;
-			&.choose {
-				border-color: rgba($color: #4B8DFF, $alpha: 1);
-			}
-			.drag-left {
-				width: 40px;
-				height: 34px;
-				margin-right: 10px;
-			}
-			.drag-right {
-				width: 168px;
-				word-break: break-all;
-				color: #666;
-				font-size: 14px;
-			}
-			.close_ico {
-				width: 12px;
-				height: 12px;
-				position: absolute;
-				right: 10px;
-				top: 10px;
-			}
-			.move_ico {
-				width: 12px;
-				height: 12px;
-				position: absolute;
-				right: 10px;
-				top: 38px;
-			}
-		}
-	}
-	.addppt-mid-cont {
-		max-width: 850px;
-		min-width: 700px;
-		flex: 1;
-		max-height: calc(100vh - 125px);
-		overflow: auto;
-		// overflow-x: hidden;
-		padding: 30px 14px;
-		border:1px solid #B2B9C3;
-		margin: 0 5px;
-		.ppt-list {
-			position: relative;
-			.add_ico {
-				width: 28px;
-				height: 28px;
-				display: block;
-				margin-bottom: 20px;
-			}
-			.ppt-item {
-				width: 100%;
-				height: 580px;
-				background: url('~@/assets/img/pptnextimg.png') no-repeat center;
-				background-size: cover;
-				margin-bottom: 30px;
-				position: relative;
-				border: 4px solid transparent;
-				&.choose {
-					// box-shadow: 1px 1px 2px rgba($color: #409eff, $alpha: 0.6);
-					border: 4px solid rgba($color: #4B8DFF, $alpha: 0.7);
-				}
-				.item_tit {
-					width: 65%;
-					position: absolute;
-					left: 90px;
-					top: 40px;
-					font-size: 24px;
-					border: none;
-					color: #666;
-					background: transparent;
-				}
-			}
-			.last-page {
-				max-width: 850px;
-				height: 580px;
-			}
-			.container {
-				width: 80%;
-				position: absolute;
-				left: 50%;
-				top: 55%;
-				transform: translate(-50%,-50%);
-			}
-		}
-	}
-	.addppt-right-cont {
-		width: 26%;
-		.chart-item {
-			text-align: center;
-			color: #74818D;
-			font-size: 18px;
-			margin-bottom: 12px;
-		}
-	}
-	.first_dialog {
-		position: fixed;
-		top: 0;
-		right: 0;
-		left: 0;
-		bottom: 0;
-		background:rgba($color: #000000, $alpha: 0.4);
-		z-index: 999;
-		.dialog-min {
-			width: 50%;
-			padding: 30px 54px 26px;
-			position: absolute;
-			left: 50%;
-			top: 50%;
-			transform: translate(-50%,-50%);
-			background: #fff;
-			.dialog-top {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-				font-size: 24px;
-				color: #1F2E4D;
-				margin-bottom: 22px;
-				.close_ico {
-					width: 28px;
-					height: 28px;
-				}
-			}
-			.dialog-bg {
-				width: 100%;
-				height: 645px;
-				position: relative;
-				.select_ico {
-					width: 48px;
-					height: 48px;
-					position: absolute;
-					right: 15px;
-					top: 15px;
-				}
-			}
-			.dialog-bot {
-				margin-top: 22px;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-			}
-		}
-	}
-}
-</style>

+ 6 - 1
src/views/ppt_manage/newVersion/components/formatPage/mixins.js

@@ -1,5 +1,6 @@
 import {checkClipboard,checkClipboardItems,getTextContentSize} from '../../utils/untils';
 import {defaultPosition} from "../../utils/config";
+import { copyFit } from '@/utils/svgToblob.js';
 import Ediotr from '../TextEditor.vue';
 import BaseShape from '../layer/Element/BaseShape.vue';
 import LineShape from "../layer/Element/LineShape.vue";
@@ -286,7 +287,11 @@ export default {
           const chartTitle = this.$store.state.ppt.chartInfoMap[chartId].chartTitle
           console.log('chart_title',chartTitle)
           try{
-            await navigator.clipboard.writeText(chartTitle)
+            if(navigator.clipboard) { //兼容禁止粘贴板的场景
+              await navigator.clipboard.writeText(chartTitle)
+            }else {
+              copyFit(chartTitle)
+            }
             this.$message.success('复制成功')
           }catch(err){
             this.$message.error('复制失败')

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
static/css/indexstyle.css


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است