瀏覽代碼

自定义流程组件

zhangchong 2 年之前
父節點
當前提交
6ea4e42776
共有 36 個文件被更改,包括 372 次插入97 次删除
  1. 81 17
      src/components/LogicFlow/index.vue
  2. 12 0
      src/components/LogicFlow/snakerflow/custom/index.ts
  3. 12 0
      src/components/LogicFlow/snakerflow/decision/index.ts
  4. 12 0
      src/components/LogicFlow/snakerflow/end/index.ts
  5. 12 0
      src/components/LogicFlow/snakerflow/fork/index.ts
  6. 12 0
      src/components/LogicFlow/snakerflow/join/index.ts
  7. 12 0
      src/components/LogicFlow/snakerflow/start/index.ts
  8. 25 1
      src/components/LogicFlow/snakerflow/subProcess/index.ts
  9. 12 0
      src/components/LogicFlow/snakerflow/task/index.ts
  10. 4 4
      src/components/LogicFlow/snakerflow/tool.ts
  11. 19 2
      src/components/LogicFlow/snakerflow/transition/index.ts
  12. 3 2
      src/components/Pagination/index.vue
  13. 3 2
      src/components/iconSelector/index.vue
  14. 15 3
      src/layout/component/main.vue
  15. 5 0
      src/layout/main/columns.vue
  16. 5 0
      src/layout/main/defaults.vue
  17. 1 1
      src/layout/navBars/breadcrumb/breadcrumb.vue
  18. 23 23
      src/layout/navBars/breadcrumb/setings.vue
  19. 4 4
      src/layout/navBars/breadcrumb/telControl.vue
  20. 58 3
      src/layout/navBars/breadcrumb/user.vue
  21. 2 2
      src/layout/navBars/tagsView/tagsView.vue
  22. 3 2
      src/stores/themeConfig.ts
  23. 1 1
      src/theme/app.scss
  24. 3 2
      src/theme/dark.scss
  25. 2 2
      src/theme/element.scss
  26. 1 0
      src/types/mitt.ts
  27. 1 0
      src/utils/storage.ts
  28. 17 17
      src/views/changePwd/component/changePwd.vue
  29. 2 2
      src/views/changePwd/index.vue
  30. 1 1
      src/views/deviceManagement/ivrCategroy/index.vue
  31. 1 0
      src/views/home/component/entrance.vue
  32. 2 2
      src/views/home/index.vue
  33. 3 1
      src/views/login/component/account.vue
  34. 1 1
      src/views/system/menu/index.vue
  35. 1 1
      src/views/system/organizational/index.vue
  36. 1 1
      src/views/system/public/index.vue

文件差異過大導致無法顯示
+ 81 - 17
src/components/LogicFlow/index.vue


+ 12 - 0
src/components/LogicFlow/snakerflow/custom/index.ts

@@ -1,4 +1,8 @@
 import { h, RectNodeModel, RectNode, GraphModel, NodeConfig } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 /**
  * 自定义节点
@@ -23,6 +27,14 @@ class CustomModel extends RectNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 12 - 0
src/components/LogicFlow/snakerflow/decision/index.ts

@@ -1,4 +1,8 @@
 import { GraphModel, h, NodeConfig, PolygonNode, PolygonNodeModel } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 
 class DecisionModel extends PolygonNodeModel {
@@ -30,6 +34,14 @@ class DecisionModel extends PolygonNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 12 - 0
src/components/LogicFlow/snakerflow/end/index.ts

@@ -1,4 +1,8 @@
 import { CircleNode, CircleNodeModel, ConnectRule, GraphModel, h, NodeConfig } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 
 class EndModel extends CircleNodeModel {
@@ -39,6 +43,14 @@ class EndModel extends CircleNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 12 - 0
src/components/LogicFlow/snakerflow/fork/index.ts

@@ -1,4 +1,8 @@
 import { GraphModel, h, NodeConfig, PolygonNode, PolygonNodeModel } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 
 class ForkModel extends PolygonNodeModel {
@@ -30,6 +34,14 @@ class ForkModel extends PolygonNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 12 - 0
src/components/LogicFlow/snakerflow/join/index.ts

@@ -1,4 +1,8 @@
 import { GraphModel, h, NodeConfig, PolygonNode, PolygonNodeModel } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 
 class JoinModel extends PolygonNodeModel {
@@ -30,6 +34,14 @@ class JoinModel extends PolygonNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 12 - 0
src/components/LogicFlow/snakerflow/start/index.ts

@@ -1,4 +1,8 @@
 import { CircleNode, CircleNodeModel, ConnectRule, GraphModel, NodeConfig } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 class StartModel extends CircleNodeModel {
   static extendKey = 'StartModel';
@@ -38,6 +42,14 @@ class StartModel extends CircleNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 25 - 1
src/components/LogicFlow/snakerflow/subProcess/index.ts

@@ -1,5 +1,9 @@
 import { GroupNode } from '@logicflow/extension'
-
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+import { nodeStyleHandle } from '../tool'
 class SubProcessView extends GroupNode.view {
 }
 class SubProcessModel extends GroupNode.model {
@@ -13,6 +17,26 @@ class SubProcessModel extends GroupNode.model {
     this.foldedWidth = 50
     this.foldedHeight = 50
   }
+  getNodeStyle ():{
+    [x: string]: any;
+    width?: number;
+    height?: number;
+    radius?: number;
+    fill?: string;
+    stroke?: string;
+    strokeWidth?: number;
+    } {
+    const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
+    return nodeStyleHandle(this, style)
+  }
 }
 
 const SubProcess = {

+ 12 - 0
src/components/LogicFlow/snakerflow/task/index.ts

@@ -1,4 +1,8 @@
 import { GraphModel, h, NodeConfig, RectNode, RectNodeModel } from '@logicflow/core'
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 import { nodeStyleHandle } from '../tool'
 class TaskModel extends RectNodeModel {
   static extendKey = 'TaskModel';
@@ -20,6 +24,14 @@ class TaskModel extends RectNodeModel {
     strokeWidth?: number;
     } {
     const style = super.getNodeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.fill = "#191919";
+      style.stroke = "#fff"
+    }else{
+      style.fill = "#fff";
+      style.stroke = "#3C50E0";
+    }
     return nodeStyleHandle(this, style)
   }
 }

+ 4 - 4
src/components/LogicFlow/snakerflow/tool.ts

@@ -208,7 +208,7 @@ export const logicFlowJsonToSnakerXml = (data: any): string => {
   let xml = ''
   // data的数据由流程定义文件信息+logicFlow数据构成
   // 先构建成流程对象
-  const processObj = {
+  const processObj = <any>{
     name: data.name, // 流程定义名称
     displayName: data.displayName, // 流程定义显示名称
     instanceUrl: data.instanceUrl, // 实例启动Url
@@ -258,7 +258,7 @@ export const logicFlowJsonToSnakerXml = (data: any): string => {
   const getTransitions = (id:string) => {
     return data.edges.filter((edge:any) => {
       return edge.sourceNodeId === id
-    }).map(edge => {
+    }).map((edge:any) => {
       return {
         name: edge.id,
         displayName: (edge.text instanceof String || edge.text === undefined) ? edge.text : edge.text.value,
@@ -319,7 +319,7 @@ export const logicFlowJsonToSnakerXml = (data: any): string => {
     if (!processObj[nodeName + '_' + node.id]) {
       processObj[nodeName + '_' + node.id] = buildNode(node)
       const nextNodes = getNextNodes(node.id)
-      nextNodes.forEach(nextNode => {
+      nextNodes.forEach((nextNode:any) => {
         recursionBuildNode(nextNode)
       })
     }
@@ -380,7 +380,7 @@ export const logicFlowJsonToSnakerXml = (data: any): string => {
   // 构建子流程模型数据
   const buildSubProcessList = () => {
     const subProcessNodes = getSubProcessNodes()
-    const subProcessModel = subProcessNodes.map(n => {
+    const subProcessModel = subProcessNodes.map((n:any) => {
       const subModel = {
         name: n.id, // 流程定义名称
         displayName: n.properties.displayName, // 流程定义显示名称

+ 19 - 2
src/components/LogicFlow/snakerflow/transition/index.ts

@@ -1,5 +1,8 @@
-import { PolylineEdge, PolylineEdgeModel } from '@logicflow/core'
-
+import { PolylineEdge, PolylineEdgeModel } from '@logicflow/core';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 class TransitionModel extends PolylineEdgeModel {
   static extendKey = 'TransitionModel';
   getEdgeStyle (): {
@@ -9,6 +12,13 @@ class TransitionModel extends PolylineEdgeModel {
     strokeWidth?: number;
     } {
     const style = super.getEdgeStyle()
+    // 设置样式
+    if(themeConfig.value.isIsDark){
+      style.stroke = "#ccc";
+    }else{
+      style.stroke = "#3C50E0";
+    }
+    // style.stroke = "#ccc";
     if (this.properties.state === 'active') {
       style.stroke = '#00ff00'
     } else if (this.properties.state === 'history') {
@@ -16,6 +26,13 @@ class TransitionModel extends PolylineEdgeModel {
     }
     return style
   }
+  getTextStyle() {
+    const style = super.getTextStyle();
+    if(themeConfig.value.isIsDark) { // @ts-ignore
+      style.background.fill = "transparent";
+    }
+    return style;
+  }
 }
 
 class TransitionView extends PolylineEdge {

+ 3 - 2
src/components/Pagination/index.vue

@@ -110,8 +110,9 @@ export default {
 </script>
 <style scoped>
 .pagination-container {
-  /* background: #fff; */
-  padding: 32px 16px 20px 16px;
+  padding: 30px 16px 20px 16px;
+  display: flex;
+  justify-content: flex-end;
 }
 .pagination-container.hidden {
   display: none;

+ 3 - 2
src/components/iconSelector/index.vue

@@ -20,6 +20,7 @@
 					@clear="onClearFontIcon"
 					@focus="onIconFocus"
 					@blur="onIconBlur"
+					readonly
 				>
 					<template #prepend>
 						<SvgIcon
@@ -79,7 +80,7 @@ export default defineComponent({
 		// 输入框占位文本
 		placeholder: {
 			type: String,
-			default: () => '请输入内容搜索图标或者选择图标',
+			default: () => '请选择图标',
 		},
 		// 输入框占位文本
 		size: {
@@ -125,7 +126,7 @@ export default defineComponent({
 			fontIconSearch: '',
 			fontIconTabsIndex: 0,
 			fontIconSheetsList: [],
-			fontIconPlaceholder: '请输入你要查找的图标的名称',
+			fontIconPlaceholder: '请选择图标',
 			fontIconType: 'ali',
 			fontIconShow: true,
 			showSelect:false,

+ 15 - 3
src/layout/component/main.vue

@@ -1,10 +1,10 @@
 <template>
 	<el-main class="layout-main" :style="isFixedHeader ? `height: calc(100% - ${setMainHeight})` : `minHeight: calc(100% - ${setMainHeight})`">
-		<el-scrollbar ref="layoutMainScrollbarRef" class="layout-main-scroll" wrap-class="layout-main-scroll" view-class="layout-main-scroll">
+		<el-scrollbar ref="layoutMainScrollbarRef" class="layout-main-scroll layout-backtop-header-fixed" wrap-class="layout-main-scroll" view-class="layout-main-scroll">
 			<LayoutParentView />
 			<LayoutFooter v-if="isFooter" />
 		</el-scrollbar>
-		<el-backtop target=".layout-backtop .el-scrollbar__wrap" />
+		<el-backtop :target="setBacktopClass"/>
 	</el-main>
 </template>
 
@@ -16,6 +16,7 @@ import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
 import { useThemeConfig } from '/@/stores/themeConfig';
 import { useUserInfo } from '/@/stores/userInfo';
 import { NextLoading } from '/@/utils/loading';
+import mittBus from '/@/utils/mitt';
 
 export default defineComponent({
 	name: 'layoutMain',
@@ -24,7 +25,7 @@ export default defineComponent({
 		LayoutFooter: defineAsyncComponent(() => import('/@/layout/footer/index.vue')),
 	},
 	setup() {
-		const layoutMainScrollbarRef = ref('');
+		const layoutMainScrollbarRef = ref();
 		const route = useRoute();
 		const storesTagsViewRoutes = useTagsViewRoutes();
 		const storesThemeConfig = useThemeConfig();
@@ -56,16 +57,27 @@ export default defineComponent({
 			}
 			
 		});
+		// 设置 Backtop 回到顶部
+		const setBacktopClass = computed(() => {
+			if (themeConfig.value.isFixedHeader) return `.layout-backtop-header-fixed .el-scrollbar__wrap`;
+			else return `.layout-backtop .el-scrollbar__wrap`;
+		});
 		// 页面加载前
 		onMounted(() => {
 			NextLoading.done(600);
+			// 监听页面需要滚动事件
+			mittBus.on('scrollTopEmit', (res: any) => {
+				layoutMainScrollbarRef.value?.scrollTo(res.top ? res.top : 0,res.left ? res.left : 0)// 滚动到一组特定坐标(x,y)  示例参考/componets/Pagination
+			});
 		});
 		return {
 			layoutMainScrollbarRef,
 			isFooter,
 			isFixedHeader,
 			setMainHeight,
+			setBacktopClass,
 		};
 	},
+
 });
 </script>

+ 5 - 0
src/layout/main/columns.vue

@@ -16,6 +16,7 @@ import { defineAsyncComponent, watch, defineComponent, onMounted, nextTick, ref
 import { useRoute } from 'vue-router';
 import { storeToRefs } from 'pinia';
 import { useThemeConfig } from '/@/stores/themeConfig';
+import mittBus from '/@/utils/mitt';
 
 export default defineComponent({
 	name: 'layoutColumns',
@@ -68,6 +69,10 @@ export default defineComponent({
 		// 页面加载时
 		onMounted(() => {
 			initScrollBarHeight();
+			// 监听页面需要滚动事件
+			mittBus.on('scrollTopEmit', (res: any) => {
+				layoutScrollbarRef.value?.scrollTo(res.top ? res.top : 0,res.left ? res.left : 0)// 滚动到一组特定坐标(x,y)  示例参考/componets/Pagination
+			});
 		});
 		return {
 			layoutScrollbarRef,

+ 5 - 0
src/layout/main/defaults.vue

@@ -16,6 +16,7 @@ import { useRoute } from 'vue-router';
 import { storeToRefs } from 'pinia';
 import { useThemeConfig } from '/@/stores/themeConfig';
 import { NextLoading } from '/@/utils/loading';
+import mittBus from '/@/utils/mitt';
 
 export default defineComponent({
 	name: 'layoutDefaults',
@@ -68,6 +69,10 @@ export default defineComponent({
 		onMounted(() => {
 			initScrollBarHeight();
 			NextLoading.done(600);
+			// 监听页面需要滚动事件
+			mittBus.on('scrollTopEmit', (res: any) => {
+				layoutScrollbarRef.value?.scrollTo(res.top ? res.top : 0,res.left ? res.left : 0)// 滚动到一组特定坐标(x,y)  示例参考/componets/Pagination
+			});
 		});
 		return {
 			layoutScrollbarRef,

+ 1 - 1
src/layout/navBars/breadcrumb/breadcrumb.vue

@@ -5,7 +5,7 @@
 			:name="themeConfig.isCollapse ? 'ele-Expand' : 'ele-Fold'"
 			size="24"
 			@click="onThemeConfigChange"
-			color="#3A51E0"
+			color="var(--el-color-primary)"
 		/>
 		<!-- <el-breadcrumb class="layout-navbars-breadcrumb-hide">
 			<transition-group name="breadcrumb">

+ 23 - 23
src/layout/navBars/breadcrumb/setings.vue

@@ -18,7 +18,7 @@
 				</div>
 
 				<!-- 顶栏设置 -->
-				<el-divider content-position="left">顶栏设置</el-divider>
+				<!-- <el-divider content-position="left">顶栏设置</el-divider>
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">顶栏背景</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
@@ -36,7 +36,7 @@
 					<div class="layout-breadcrumb-seting-bar-flex-value">
 						<el-switch v-model="getThemeConfig.isTopBarColorGradual" size="small" @change="onTopBarGradualChange"></el-switch>
 					</div>
-				</div>
+				</div> -->
 
 				<!-- 菜单设置 -->
 				<el-divider content-position="left">菜单设置</el-divider>
@@ -60,7 +60,7 @@
 				</div>
 
 				<!-- 分栏设置 -->
-				<el-divider content-position="left" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">分栏设置</el-divider>
+				<!-- <el-divider content-position="left" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">分栏设置</el-divider>
 				<div class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
 					<div class="layout-breadcrumb-seting-bar-flex-label">分栏菜单背景</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
@@ -97,7 +97,7 @@
 							:disabled="getThemeConfig.layout !== 'columns'"
 						></el-switch>
 					</div>
-				</div>
+				</div> -->
 
 				<!-- 界面设置 -->
 				<el-divider content-position="left">界面设置</el-divider>
@@ -129,7 +129,7 @@
 						<el-switch v-model="getThemeConfig.isFixedHeader" size="small" @change="onIsFixedHeaderChange"></el-switch>
 					</div>
 				</div>
-				<div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: getThemeConfig.layout !== 'classic' ? 0.5 : 1 }">
+				<!-- <div class="layout-breadcrumb-seting-bar-flex mt15" :style="{ opacity: getThemeConfig.layout !== 'classic' ? 0.5 : 1 }">
 					<div class="layout-breadcrumb-seting-bar-flex-label">经典布局分割菜单</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
 						<el-switch
@@ -140,7 +140,7 @@
 						>
 						</el-switch>
 					</div>
-				</div>
+				</div> -->
 				<!-- <div class="layout-breadcrumb-seting-bar-flex mt15">
 					<div class="layout-breadcrumb-seting-bar-flex-label">开启锁屏</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
@@ -171,7 +171,7 @@
 						<el-switch v-model="getThemeConfig.isShowLogo" size="small" @change="onIsShowLogoChange"></el-switch>
 					</div>
 				</div>
-				<div
+				<!-- <div
 					class="layout-breadcrumb-seting-bar-flex mt15"
 					:style="{ opacity: getThemeConfig.layout === 'classic' || getThemeConfig.layout === 'transverse' ? 0.5 : 1 }"
 				>
@@ -231,7 +231,7 @@
 					<div class="layout-breadcrumb-seting-bar-flex-value">
 						<el-switch v-model="getThemeConfig.isFooter" size="small" @change="setLocalThemeConfig"></el-switch>
 					</div>
-				</div>
+				</div> -->
 				<div class="layout-breadcrumb-seting-bar-flex mt15">
 					<div class="layout-breadcrumb-seting-bar-flex-label">灰色模式</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
@@ -258,7 +258,7 @@
 				</div> -->
 
 				<!-- 其它设置 -->
-				<el-divider content-position="left">其它设置</el-divider>
+				<!-- <el-divider content-position="left">其它设置</el-divider>
 				<div class="layout-breadcrumb-seting-bar-flex mt15">
 					<div class="layout-breadcrumb-seting-bar-flex-label">Tagsview 风格</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
@@ -310,13 +310,13 @@
 							<el-option label="垂直" value="columns-vertical"></el-option>
 						</el-select>
 					</div>
-				</div>
+				</div> -->
 
 				<!-- 布局切换 -->
-				<el-divider content-position="left">布局切换</el-divider>
+				<!-- <el-divider content-position="left">布局切换</el-divider> -->
 				<div class="layout-drawer-content-flex">
 					<!-- defaults 布局 -->
-					<div class="layout-drawer-content-item" @click="onSetLayout('defaults')">
+					<!-- <div class="layout-drawer-content-item" @click="onSetLayout('defaults')">
 						<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'defaults' }">
 							<aside class="el-aside" style="width: 20px"></aside>
 							<section class="el-container is-vertical">
@@ -329,9 +329,9 @@
 								<p class="layout-tips-txt">默认</p>
 							</div>
 						</div>
-					</div>
+					</div> -->
 					<!-- classic 布局 -->
-					<div class="layout-drawer-content-item" @click="onSetLayout('classic')">
+					<!-- <div class="layout-drawer-content-item" @click="onSetLayout('classic')">
 						<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'classic' }">
 							<header class="el-header" style="height: 10px"></header>
 							<section class="el-container">
@@ -346,9 +346,9 @@
 								<p class="layout-tips-txt">经典</p>
 							</div>
 						</div>
-					</div>
+					</div> -->
 					<!-- transverse 布局 -->
-					<div class="layout-drawer-content-item" @click="onSetLayout('transverse')">
+					<!-- <div class="layout-drawer-content-item" @click="onSetLayout('transverse')">
 						<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'transverse' }">
 							<header class="el-header" style="height: 10px"></header>
 							<section class="el-container">
@@ -362,9 +362,9 @@
 								<p class="layout-tips-txt">横向</p>
 							</div>
 						</div>
-					</div>
+					</div> -->
 					<!-- columns 布局 -->
-					<div class="layout-drawer-content-item" @click="onSetLayout('columns')">
+					<!-- <div class="layout-drawer-content-item" @click="onSetLayout('columns')">
 						<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'columns' }">
 							<aside class="el-aside-dark" style="width: 10px"></aside>
 							<aside class="el-aside" style="width: 20px"></aside>
@@ -378,7 +378,7 @@
 								<p class="layout-tips-txt">分栏</p>
 							</div>
 						</div>
-					</div>
+					</div> -->
 				</div>
 				<div class="copy-config">
 					<!-- <el-alert title="点击下方按钮,复制布局配置去 `src/store/modules/themeConfig.ts` 中修改。" type="warning" :closable="false"> </el-alert>
@@ -424,10 +424,10 @@ export default defineComponent({
 		});
 		// 颜色列表
 		const predefineColors = ref([
-			'#ff4500',
-			'#ff8c00',
-			'#ffd700',
-			'#90ee90',
+			'#3C50E0',
+			'#f41e1e',
+			'#34d367',
+			'#ffbb32',
 			'#00ced1',
 			'#1e90ff',
 			'#c71585',

+ 4 - 4
src/layout/navBars/breadcrumb/telControl.vue

@@ -408,12 +408,12 @@ const xiaoxiuEndFn = () => {
 .phoneControls {
     display: flex;
     flex: 1;
-    background: #FFFFFF;
+    background-color: var(--el-color-white) !important;
     box-shadow: 0px 1px 8px 0px rgba(0, 15, 49, 0.1);
     border-bottom-left-radius: 90px;
     border-bottom-right-radius: 90px;
     padding: 0 52px;
-    color: #333;
+    color: var(--hotline-color-text-main);
     height: 100%;
 
     .infos {
@@ -450,7 +450,7 @@ const xiaoxiuEndFn = () => {
             cursor: pointer;
             width: 100%;
             height: 100%;
-
+            user-select:none;
             &:hover {
                 color: #fff;
                 background-image: url('../../../assets/images/phoneControls/active.png');
@@ -510,7 +510,7 @@ const xiaoxiuEndFn = () => {
     border-radius:16px;
     opacity: .9;
     box-shadow: 0px 1px 8px 0px rgba(0,15,49,0.1);
-    border: 1px solid #667AED;
+    border: 1px solid var(--el-color-primary);
     padding:15px;
     .hangup-container{
         display: flex;

+ 58 - 3
src/layout/navBars/breadcrumb/user.vue

@@ -65,6 +65,11 @@
 							<ele-House />
 						</el-icon>首页
 					</el-dropdown-item>
+					<el-dropdown-item divided command="setting">
+						<el-icon class="el-input__icon">
+							<ele-Setting />
+						</el-icon>设置
+					</el-dropdown-item>
 					<el-dropdown-item divided command="changePwd">
 						<el-icon class="el-input__icon">
 							<ele-Lock />
@@ -110,7 +115,7 @@
 		</el-dialog>
 
 		<!-- 修改密码 -->
-		<el-dialog v-model="showDutyDialog" draggable  title="忘记密码" width="400px">
+		<el-dialog v-model="showDutyDialog" draggable  title="修改密码" width="500px">
 			<el-form :model="dutyForm" label-width="80px" :rules="rules" ref="dutyFormRef">
 				<el-form-item label="新密码" prop="password" class="mb30">
 					<el-input class="inputDeep" clearable type="password" show-password placeholder="请输入新密码"
@@ -121,6 +126,21 @@
 							</el-icon>
 						</template>
 					</el-input>
+					<div class="intensity login-animation4">
+						<span class="psdText">密码强度:{{modes === 1 ? '弱' : modes === 2 ? '中' : modes === 3 ? '强' : ''}}</span>
+						<span
+							class="line ruo"
+							:class="modes === 1 ? 'low' : ''"
+						></span>
+						<span
+							class="line zhong"
+							:class="modes === 2 ? 'middle' : ''"
+						></span>
+						<span
+							class="line qiang"
+							:class="modes === 3 ? 'high' : ''"
+						></span>
+					</div>
 				</el-form-item>
 				<el-form-item prop="confirmPassword" label="确认密码">
 					<el-input class="inputDeep" clearable type="password" show-password placeholder="请再次输入密码"
@@ -275,6 +295,9 @@ export default defineComponent({
 					}
 					showDutyDialog.value = true;
 					break;
+				case 'setting':// 设置
+					onLayoutSetingClick();
+					break;
 				case 'logOut'://退出登录
 					ElMessageBox({
 						closeOnClickModal: false,
@@ -300,7 +323,6 @@ export default defineComponent({
 							}
 						},
 					}).then(async () => {
-						
 						// 清除缓存/token等
 						Local.clear();
 						Session.clear();
@@ -410,6 +432,7 @@ export default defineComponent({
 			UserFilled,
 			isShowPassword,
 			rules,
+			modes,
 			dutyFormRef,
 			ruleFormRef,
 			...toRefs(state),
@@ -424,7 +447,6 @@ export default defineComponent({
 	align-items: center;
 	justify-content: flex-end;
 	margin-left: 40px;
-
 	&-link {
 		height: 100%;
 		display: flex;
@@ -471,5 +493,38 @@ export default defineComponent({
 	:deep(.el-badge__content.is-fixed) {
 		top: 12px;
 	}
+
+	.intensity {
+      .psdText {
+          font-size: 14px;
+          margin-right: 10px;
+          color: #5a5a5a;
+      }
+      .line {
+          display: inline-block;
+          width: 48px;
+          height: 10px;
+          background: #d8d8d8;
+          margin-right: 2px;
+          &.ruo {
+            border-radius: 6px 0 0 6px;
+          }
+          &.low {
+            background: #BFCDFF;
+          }
+          &.middle {
+            background: #93A6FA;
+          }
+          &.high {
+            background: #3C50E0;
+          }
+          &.qiang {
+            border-radius: 0 6px 6px 0;
+          }
+      }
+      .level {
+          margin: 0 16px 0 8px;
+      }
+    }
 }
 </style>

+ 2 - 2
src/layout/navBars/tagsView/tagsView.vue

@@ -785,13 +785,13 @@ export default defineComponent({
 		.layout-navbars-tagsview-ul-li {
 			&:hover {
 				@extend .tags-style-five-svg;
-				background: var(--el-color-primary-light-8);
+				// background: var(--el-color-primary-light-8);
 				color: unset;
 			}
 		}
 		.is-active {
 			@extend .tags-style-five-svg;
-			background: #fff !important;
+			background-color: var(--el-color-white) !important;
 		}
 	}
 }

+ 3 - 2
src/stores/themeConfig.ts

@@ -1,6 +1,7 @@
 import { defineStore } from 'pinia';
 import { ThemeConfigStates, ThemeConfigState } from './interface';
 import appConfig from "/@/utils/appConfig";
+import { Session } from '/@/utils/storage';
 /**
  * 布局配置
  * 修复:https://gitee.com/lyt-top/vue-next-admin/issues/I567R1,感谢@lanbao123
@@ -94,9 +95,9 @@ export const useThemeConfig = defineStore('themeConfig', {
 			// 是否开启色弱模式
 			isInvert: false,
 			// 是否开启水印
-			isWartermark: false,
+			isWartermark: true,
 			// 水印文案
-			wartermarkText:'',
+			wartermarkText:Session.get('userName') ?? '',
 
 			/**
 			 * 其它设置

+ 1 - 1
src/theme/app.scss

@@ -17,7 +17,7 @@
 	--hotline-color-warning-lighter: #fdf6ec;
 	--hotline-color-danger-lighter: #fef0f0;
 	--hotline-color-dark-hover: #0000001a;
-	--hotline-color-menu-hover: #2935BA;
+	--hotline-color-menu-hover: rgba(0, 0, 0, .3);
 	--hotline-color-user-hover: rgba(0, 0, 0, 0.04);
 	--hotline-color-seting-main: #e9eef3;
 	--hotline-color-seting-aside: #d3dce6;

+ 3 - 2
src/theme/dark.scss

@@ -5,7 +5,7 @@
 	--hotline-bg-main: #1f1f1f;
 	--hotline-color-white: #ffffff;
 	--hotline-color-disabled: #191919;
-	--hotline-color-bar: #dadada;
+	--hotline-color-bar: #7a7a7a;
 	--hotline-color-primary: #303030;
 	--hotline-border-color: #424242;
 	--hotline-border-black: #333333;
@@ -15,7 +15,8 @@
 	--hotline-text-color-placeholder: #7a7a7a;
 	--hotline-color-hover: #3c3c3c;
 	// --hotline-color-hover-rgba: rgba(0, 0, 0, 0.3);
-	--hotline-color-hover-rgba:var(--el-color-info-dark-2);
+	// --hotline-color-hover-rgba:var(--el-color-info-dark-2);
+	--hotline-color-hover-rgba: rgba(0, 0, 0, 0.3);
 
 	--hotline-color-text-main: #dadada;
 	--hotline-color-text-main-light: #d1d1d1;

+ 2 - 2
src/theme/element.scss

@@ -148,14 +148,14 @@
 						color: var(--hotline-bg-topBarColor);
 					}
 					.el-sub-menu.is-active .el-sub-menu__title {
-						color: var(--el-menu-active-color);
+						color: var(--hotline-color-white);
 					}
 				}
 			}
 		}
 		.el-menu-item.is-active,
 		.el-sub-menu.is-active .el-sub-menu__title {
-			color: var(--el-menu-active-color);
+			color: var(--hotline-color-white);
 		}
 	}
 }

+ 1 - 0
src/types/mitt.ts

@@ -10,4 +10,5 @@ export type MittType = {
 	openShareTagsView?: string; // 布局设置弹窗,开启 TagsView 共用
 	onTagsViewRefreshRouterView?: any; // tagsview 刷新界面
 	onCurrentContextmenuClick?: any; // tagsview 右键菜单每项点击时
+	scrollTopEmit?:object; //点击分页跳转滚动到顶部
 };

+ 1 - 0
src/utils/storage.ts

@@ -46,6 +46,7 @@ export const Session = {
 	// 设置临时缓存
 	set(key: string, val: any) {
 		if (key === 'token') return Cookies.set(key, val);
+		if (key === 'userName') return Cookies.set(key,val);
 		window.sessionStorage.setItem(key, JSON.stringify(val));
 	},
 	// 获取临时缓存

+ 17 - 17
src/views/changePwd/component/changePwd.vue

@@ -9,23 +9,23 @@
 					</el-icon>
 				</template>
 			</el-input>
-        <div class="intensity login-animation4">
-            <span class="psdText">密码强度:{{modes === 1 ? '弱' : modes === 2 ? '中' : modes === 3 ? '强' : ''}}</span>
-            <span
-                class="line ruo"
-                :class="modes === 1 ? 'low' : ''"
-            ></span>
-            <span
-                class="line zhong"
-                :class="modes === 2 ? 'middle' : ''"
-            ></span>
-            <span
-                class="line qiang"
-                :class="modes === 3 ? 'high' : ''"
-            ></span>
-        </div>
-      </el-form-item>
-      <el-form-item prop="confirmPassword" label="确认密码" class="login-animation2">
+      <div class="intensity login-animation4">
+          <span class="psdText">密码强度:{{modes === 1 ? '弱' : modes === 2 ? '中' : modes === 3 ? '强' : ''}}</span>
+          <span
+              class="line ruo"
+              :class="modes === 1 ? 'low' : ''"
+          ></span>
+          <span
+              class="line zhong"
+              :class="modes === 2 ? 'middle' : ''"
+          ></span>
+          <span
+              class="line qiang"
+              :class="modes === 3 ? 'high' : ''"
+          ></span>
+      </div>
+    </el-form-item>
+    <el-form-item prop="confirmPassword" label="确认密码" class="login-animation2">
           <el-input class="inputDeep" clearable type="password" show-password placeholder="请再次输入密码" v-model="ruleForm.confirmPassword" autocomplete="off">
               <template #prefix>
                   <el-icon class="el-input__icon">

+ 2 - 2
src/views/changePwd/index.vue

@@ -70,11 +70,11 @@ export default defineComponent({
   width: 100%;
   height: 100%;
   position: relative;
-  background-color: var(--hotline-color-white);
+  background-color: var(--el-color-white);
   .login-header{
     width: 100%;
     height: 60px;
-    background: #3C50E0;
+    background-color:var(--el-color-primary);
     box-shadow: 0 21px 38px 0 rgba(0,31,255,0.14);
     display: flex;
     align-items: center;

+ 1 - 1
src/views/deviceManagement/ivrCategroy/index.vue

@@ -50,7 +50,7 @@ export default {
     beforeRouteEnter(to: any, from: any,next:any) {
         const storesUserInfo = useUserInfo();
         const { userInfos } = storeToRefs(storesUserInfo);
-        if(!userInfos.value.authBtnList.includes('300301')){ // 没有授权直接跳转到401
+        if(!userInfos?.value.authBtnList.includes('300301')){ // 没有授权直接跳转到401
             next('/401')
         }else{
 			next();

+ 1 - 0
src/views/home/component/entrance.vue

@@ -197,6 +197,7 @@ defineExpose({ closeDialog, openDialog }) //暴漏方法
                 height: 110px;
                 color: var(--el-text-color-regular);
                 position: relative;
+                user-select:none;
                 .my-handle{
                     width: 40px;
                     height: 50px;

+ 2 - 2
src/views/home/index.vue

@@ -256,7 +256,6 @@ const { entranceList, noticeList, active, activities,loading,entranceLoading,lis
 	vertical-align: middle;
 }
 .home-container {
-	padding: 0 20px;
 	color: var(--hotline-color-text-main);
 	.left-content {
 		.statistics {
@@ -325,7 +324,7 @@ const { entranceList, noticeList, active, activities,loading,entranceLoading,lis
 					cursor: pointer;
 					&.active {
 						background-color: var(--el-color-primary);
-						color: var(--hotline-color-white);
+						color: var(--el-color-white);
 					}
 				}
 			}
@@ -391,6 +390,7 @@ const { entranceList, noticeList, active, activities,loading,entranceLoading,lis
 					height: 110px;
 					cursor: pointer;
 					color: var(--el-text-color-regular);
+					user-select:none;
 					.my-handle{
 						width: 40px;
 						height: 50px;

+ 3 - 1
src/views/login/component/account.vue

@@ -117,6 +117,7 @@ export default defineComponent({
 					signIn(req).then(async (res: any) => {//登录
 						// 存储 token 到浏览器缓存
 						Session.set('token', res.access_token);
+						
 						if (!themeConfig.value.isRequestRoutes) {
 							// 前端控制路由,2、请注意执行顺序
 							await initFrontEndControlRoutes();
@@ -154,7 +155,8 @@ export default defineComponent({
 			// 设置水印
 			themeConfig.value.isWartermark = true;
 			themeConfig.value.wartermarkText = state.ruleForm.username;
-			Watermark.set(state.ruleForm.username)
+			Watermark.set(state.ruleForm.username);
+			Session.set('userName', state.ruleForm.username);
 			setLocalThemeConfig();
 
 			// 登录成功提示

+ 1 - 1
src/views/system/menu/index.vue

@@ -11,7 +11,7 @@
 			</div>
 			<el-table :data="menuTableData" v-loading="loading" style="width: 100%" row-key="id"
 				:default-expand-all="true" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
-				<el-table-column label="菜单名称" show-overflow-tooltip width="200" fixed="left">
+				<el-table-column label="菜单名称" show-overflow-tooltip width="200">
 					<template #default="scope">
 						<SvgIcon :name="scope.row.icon" />
 						<span class="ml10">{{ scope.row.pageName }}</span>

+ 1 - 1
src/views/system/organizational/index.vue

@@ -56,7 +56,7 @@ export default {
     beforeRouteEnter(to: any, from: any,next:any) {
         const storesUserInfo = useUserInfo();
         const { userInfos } = storeToRefs(storesUserInfo);
-        if(!userInfos.value.authBtnList.includes('100504')){ // 没有授权直接跳转到401
+        if(!userInfos?.value.authBtnList.includes('100504')){ // 没有授权直接跳转到401
             next('/401')
         }else{
 			next();

+ 1 - 1
src/views/system/public/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="layout-padding">
-        <div  class="layout-padding-auto layout-padding-view pd20">
+        <div  class="layout-padding-auto layout-padding-view pd15">
             <LogicFlow style="flex:1" ref='designerRef' v-model="flowData" @on-save="handleSave"/>
         </div>
     </div>

部分文件因文件數量過多而無法顯示