Bläddra i källkod

Merge branch 'master' of https://git.cocorobo.cn/CocoRoboLabs/pblUserManage

lzw 3 månader sedan
förälder
incheckning
04720b0348

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/css/app.2b12fe82.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/css/app.54cc4b88.css


+ 1 - 1
dist/index.html

@@ -36,4 +36,4 @@
         width: 100%;
         background: #e6eaf0;
         font-family: '黑体';
-      }</style><script defer="defer" src="/js/chunk-vendors.3a922260.js"></script><script defer="defer" src="/js/app.88c38243.js"></script><link href="/css/chunk-vendors.7cfe4581.css" rel="stylesheet"><link href="/css/app.54cc4b88.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but userManage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
+      }</style><script defer="defer" src="/js/chunk-vendors.3a922260.js"></script><script defer="defer" src="/js/app.62dfa142.js"></script><link href="/css/chunk-vendors.7cfe4581.css" rel="stylesheet"><link href="/css/app.2b12fe82.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but userManage doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/js/app.62dfa142.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/js/app.62dfa142.js.map


+ 15 - 3
src/components/desktopToolList.vue

@@ -91,7 +91,7 @@
 												<span v-else>-</span>
 											</div>
 										</div>
-										<!-- <div>
+										<div>
 											<span>默认图标:</span>
 											<div class="ui_m_image">
 												<el-image
@@ -114,7 +114,19 @@
 												></el-image>
 												<span v-else>-</span>
 											</div>
-										</div> -->
+										</div>
+										<div>
+											<span>激活图标:</span>
+											<div class="ui_m_image">
+												<el-image
+													v-if="item.hoverIcon"
+													style="width: 100%; height: 100%"
+													:src="item.hoverIcon"
+													fit="cover"
+												></el-image>
+												<span v-else>-</span>
+											</div>
+										</div>
 									</div>
 								</div>
 							</div>
@@ -480,7 +492,7 @@ export default {
 
 .urlItem {
 	width: 400px;
-	height: 170px;
+	height: 300px;
 	overflow: auto;
 	position: relative;
 	box-sizing: border-box;

+ 54 - 18
src/components/dialog/addDesktopToolDialog.vue

@@ -148,7 +148,7 @@
 										</el-tooltip>
 									</div>
 								</div>
-<!-- 
+
 								<div class="f_aRow f_ar_icon">
 									<span>默认图标</span>
 									<div class="f_icon" style="margin-left: 10px">
@@ -201,7 +201,34 @@
 											</el-image>
 										</el-tooltip>
 									</div>
-								</div> -->
+								</div>
+
+								<div class="f_aRow f_ar_icon">
+									<span>hover图标</span>
+									<div class="f_icon" style="margin-left: 10px">
+										<el-tooltip
+											class="item"
+											effect="dark"
+											:content="item.hoverIcon ? '更改图标' : '上传图标'"
+											placement="top"
+										>
+											<el-image
+												style="width: 100%; height: 100%"
+												:src="item.hoverIcon"
+												fit="cover"
+												@click="addUrlIcon(index, 'hoverIcon')"
+											>
+												<div
+													slot="error"
+													class="image-slot"
+														@click="addUrlIcon(index, 'hoverIcon')"
+												>
+													<i class="el-icon-picture-outline"></i>
+												</div>
+											</el-image>
+										</el-tooltip>
+									</div>
+								</div>
 							</div>
 							<div class="f_hr"></div>
 						</div>
@@ -237,8 +264,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "beta",
@@ -246,8 +274,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "hk",
@@ -255,8 +284,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "com",
@@ -264,8 +294,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 				],
 				json: "",
@@ -311,8 +342,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "beta",
@@ -320,8 +352,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "hk",
@@ -329,8 +362,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 					{
 						region: "com",
@@ -338,8 +372,9 @@ export default {
 						icon: "",
 						name: "",
 						platformIcon: "",
-						// activeIcon: "",
-						// defaultIcon: "",
+						activeIcon: "",
+						defaultIcon: "",
+						hoverIcon:""
 					},
 				],
 				json: "",
@@ -363,6 +398,7 @@ export default {
 			let _url = await this.uploadFile("image/*");
 			if (_url) {
 				this.form.url[index][type] = _url;
+				this.$forceUpdate();
 			} else {
 				return console.log("无图片");
 			}

+ 343 - 56
src/components/dialog/permissionSettingDialog.vue

@@ -20,11 +20,17 @@
 						@click="changeTagType('desktop')"
 						>桌面工具</span
 					>
+
 					<span
 						:class="{ pa_a_h_active: tagType == 'admin-index' }"
 						@click="changeTagType('admin-index')"
 						>管理平台侧首页</span
 					>
+					<span
+						:class="{ pa_a_h_active: tagType == 'admin-cocoFlow' }"
+						@click="changeTagType('admin-cocoFlow')"
+						>管理平台首页CocoFlow</span
+					>
 					<span
 						:class="{ pa_a_h_active: tagType == 'admin-sidebar' }"
 						@click="changeTagType('admin-sidebar')"
@@ -38,6 +44,13 @@
 							@click="addMenu()"
 							>添加菜单</el-button
 						>
+						<el-button
+							size="mini"
+							v-if="['admin-cocoFlow'].includes(tagType)"
+							type="primary"
+							@click="addApp()"
+							>添加应用</el-button
+						>
 						<el-button
 							size="mini"
 							v-if="
@@ -76,12 +89,54 @@
 								placement="top"
 							>
 								<el-image
-									style="width: 100%; height: 100%"
+								style="width: 60px; height: 60px;margin-left: 20px;"
 									:src="form.basics.logo"
 									fit="cover"
-									@click="addBasicsIcon()"
+									@click="addBasicsIcon('logo')"
+								>
+									<div slot="error" class="image-slot" @click="addBasicsIcon('logo')">
+										<i class="el-icon-picture-outline"></i>
+									</div>
+								</el-image>
+							</el-tooltip>
+						</div>
+
+						<div class="ea_basics_logo">
+							<span>登录页logo</span>
+							<el-tooltip
+								class="item"
+								effect="dark"
+								:content="form.basics.loginLogo ? '更改图标' : '上传图标'"
+								placement="top"
+							>
+								<el-image
+									style="width: 60px; height: 60px;margin-left: 20px;"
+									:src="form.basics.loginLogo"
+									fit="cover"
+									@click="addBasicsIcon('loginLogo')"
+								>
+									<div slot="error" class="image-slot" @click="addBasicsIcon('loginLogo')">
+										<i class="el-icon-picture-outline"></i>
+									</div>
+								</el-image>
+							</el-tooltip>
+						</div>
+
+						<div class="ea_basics_logo">
+							<span>登录页banner</span>
+							<el-tooltip
+								class="item"
+								effect="dark"
+								:content="form.basics.loginBanner ? '更改' : '上传'"
+								placement="top"
+							>
+								<el-image
+									style="width: 60px; height: 60px;margin-left: 20px;"
+									:src="form.basics.loginBanner"
+									fit="cover"
+									@click="addBasicsIcon('loginBanner')"
 								>
-									<div slot="error" class="image-slot" @click="addBasicsIcon()">
+									<div slot="error" class="image-slot" @click="addBasicsIcon('loginBanner')">
 										<i class="el-icon-picture-outline"></i>
 									</div>
 								</el-image>
@@ -208,6 +263,18 @@
 																<span v-else>-</span>
 															</div>
 														</div>
+														<div>
+															<span>hover图标:</span>
+															<div class="ui_m_image">
+																<el-image
+																	v-if="item.hoverIcon"
+																	style="width: 100%; height: 100%"
+																	:src="item.hoverIcon"
+																	fit="cover"
+																></el-image>
+																<span v-else>-</span>
+															</div>
+														</div>
 													</div>
 												</div>
 											</div>
@@ -276,6 +343,31 @@
 							</el-table>
 						</div>
 					</div>
+					<div class="editArea appList" v-show="tagType == 'admin-cocoFlow'">
+						<template v-if="form.admin.cocoFlow">
+							<div
+								class="appItem"
+								v-for="(item,index) in form.admin.cocoFlow"
+								:key="item.id"
+							>
+								<div class="ai_left">
+									<el-image
+										style="width: 100%; height: 100%"
+										:src="item.json.icon"
+										fit="cover"
+									></el-image>
+								</div>
+								<div class="ai_right">
+									<div>{{ item.name }}</div>
+									<div class="ai_r_btn">
+										<svg @click="moveApp(item.id,0)" v-if="index!=0" t="1744598539024" class="icon" viewBox="0 0 1470 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2613" width="200" height="200"><path d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z" p-id="2614"></path></svg>
+										<svg @click="moveApp(item.id,1)" v-if="index!=(form.admin.cocoFlow.length-1)" style="transform: rotate(180deg);" t="1744598539024" class="icon" viewBox="0 0 1470 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2613" width="200" height="200"><path d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z" p-id="2614"></path></svg>
+									</div>
+									<span>{{ item.detail }}</span>
+								</div>
+							</div>
+						</template>
+					</div>
 					<div
 						class="editArea pa_a_eb_admin-index"
 						v-show="tagType == 'admin-index'"
@@ -399,6 +491,19 @@
 																<span v-else>-</span>
 															</div>
 														</div>
+
+														<div>
+															<span>hover图标:</span>
+															<div class="ui_m_image">
+																<el-image
+																	v-if="item.hoverIcon"
+																	style="width: 100%; height: 100%"
+																	:src="item.hoverIcon"
+																	fit="cover"
+																></el-image>
+																<span v-else>-</span>
+															</div>
+														</div>
 													</div>
 												</div>
 											</div>
@@ -631,6 +736,19 @@
 																<span v-else>-</span>
 															</div>
 														</div>
+
+														<div>
+															<span>hover图标:</span>
+															<div class="ui_m_image">
+																<el-image
+																	v-if="item.hoverIcon"
+																	style="width: 100%; height: 100%"
+																	:src="item.hoverIcon"
+																	fit="cover"
+																></el-image>
+																<span v-else>-</span>
+															</div>
+														</div>
 													</div>
 												</div>
 											</div>
@@ -739,6 +857,7 @@
 		</el-dialog>
 		<selectToolDialog ref="selectToolDialogRef" @success="selectToolSuccess" />
 		<addMenuDialog ref="addMenuDialogRef" @success="addMenuSuccess" />
+		<selectAppDialog ref="selectAppDialogRef" @success="selectAppSuccess" />
 	</div>
 </template>
 
@@ -749,10 +868,12 @@ import { API_CONFIG } from "@/common/apiConfig";
 import addMenuDialog from "./addMenuDialog.vue";
 import { addOp } from "@/api/user";
 import { mapGetters } from "vuex";
+import selectAppDialog from "./selectAppDialog.vue";
 export default {
 	components: {
 		selectToolDialog,
 		addMenuDialog,
+		selectAppDialog,
 	},
 	computed: {
 		...mapGetters(["userid"]),
@@ -766,6 +887,7 @@ export default {
 			tagType: "basics",
 			addToolIndex: null,
 			toolList: [],
+			appList: [],
 			form: {
 				basics: {
 					title: "",
@@ -779,6 +901,7 @@ export default {
 				admin: {
 					index: {
 						list: [],
+						cocoFlow: [],
 					},
 					sidebar: {
 						list: [],
@@ -794,7 +917,15 @@ export default {
 			if (_data.json) {
 				this.form = JSON.parse(_data.json);
 			}
-			this.getToolData();
+			// this.getToolData();
+			Promise.all([this.getToolData(), this.getAppData()])
+				.then(() => {
+					// console.log(JSON.parse(JSON.stringify([this.toolList,this.appList])))
+					this.setDataListToo(this.toolList, this.appList);
+				})
+				.catch((e) => {
+					console.log("👉", e);
+				});
 			this.data = _data;
 			this.type = type;
 			this.show = true;
@@ -809,6 +940,8 @@ export default {
 					title: "",
 					brief: "",
 					logo: "",
+					loginLogo:"",
+					loginBanner:"",
 				},
 				//桌面  管理平台首页  管理平台侧边栏
 				desktop: {
@@ -817,6 +950,7 @@ export default {
 				admin: {
 					index: {
 						list: [],
+						cocoFlow: [],
 					},
 					sidebar: {
 						list: [],
@@ -832,16 +966,18 @@ export default {
 			console.log(this.form);
 			this.setJson();
 		},
-		async addBasicsIcon() {
+		async addBasicsIcon(type='logo') {
 			let _url = await this.uploadFile("image/*");
 			if (_url) {
-				this.form.basics.logo = _url;
+				this.form.basics[type] = _url;
+				this.$forceUpdate()
+				console.log(this.form)
 				await addOp({
-					uid:this.userid,
+					uid: this.userid,
 					cid: this.data.id,
 					type: "user_op",
-					content:`修改了${this.data.name}的基本信息的logo`
-				})
+					content: `修改了${this.data.name}的基本信息的${type}`,
+				});
 			} else {
 				return console.log("无图片");
 			}
@@ -923,20 +1059,20 @@ export default {
 				this.form.desktop.list = list;
 				this.$refs.selectToolDialogRef.close();
 				await addOp({
-					uid:this.userid,
+					uid: this.userid,
 					cid: this.data.id,
 					type: "user_op",
-					content:`修改了${this.data.name}的桌面端工具`
-				})
+					content: `修改了${this.data.name}的桌面端工具`,
+				});
 			} else if (type == "admin-index") {
 				this.form.admin.index.list = list;
 				this.$refs.selectToolDialogRef.close();
 				await addOp({
-					uid:this.userid,
+					uid: this.userid,
 					cid: this.data.id,
 					type: "user_op",
-					content:`修改了${this.data.name}的平台首页工具`
-				})
+					content: `修改了${this.data.name}的平台首页工具`,
+				});
 			} else if (type == "admin-sidebar" || type == "admin-sidebar2") {
 				if (this.addToolIndex != null) {
 					let _index = this.form.admin.sidebar.list.findIndex(
@@ -955,11 +1091,11 @@ export default {
 					);
 				}
 				await addOp({
-					uid:this.userid,
+					uid: this.userid,
 					cid: this.data.id,
 					type: "user_op",
-					content:`修改了${this.data.name}的平台侧边栏工具`
-				})
+					content: `修改了${this.data.name}的平台侧边栏工具`,
+				});
 				this.$refs.selectToolDialogRef.close();
 			}
 			this.$forceUpdate();
@@ -1104,35 +1240,67 @@ export default {
 			}
 		},
 		getToolData() {
-			let params = [
-				{
-					functionName: "select_desktopToolByPage",
-					status: "",
-					page: 1,
-					lim: 9999999,
-				},
-			];
-			this.loading = true;
-			this.$ajax
-				.post(API_CONFIG.baseUrl, params)
-				.then((res) => {
-					let _data = res.data;
-					let _list = _data[0];
-					_list.forEach((i) => {
-						i.url = JSON.parse(i.url);
-						i.json = JSON.parse(i.json);
-						i.argumentList = JSON.parse(i.argumentList);
+			return new Promise((resolve) => {
+				let params = [
+					{
+						functionName: "select_desktopToolByPage",
+						status: "",
+						page: 1,
+						lim: 9999999,
+					},
+				];
+				this.loading = true;
+				this.$ajax
+					.post(API_CONFIG.baseUrl, params)
+					.then((res) => {
+						let _data = res.data;
+						let _list = _data[0];
+						_list.forEach((i) => {
+							i.url = JSON.parse(i.url);
+							i.json = JSON.parse(i.json);
+							i.argumentList = JSON.parse(i.argumentList);
+						});
+						this.toolList = _list;
+						this.loading = false;
+						resolve(_list);
+					})
+					.catch((err) => {
+						console.log(err);
+						this.loading = false;
+						this.$message.error("获取工具数据失败");
+						this.close();
 					});
-					this.toolList = _list;
-					this.setDataListToo(_list);
-					this.loading = false;
-				})
-				.catch((err) => {
-					console.log(err);
-					this.loading = false;
-					this.$message.error("获取工具数据失败");
-					this.close();
-				});
+			});
+		},
+		getAppData() {
+			return new Promise((resolve) => {
+				let params = [
+					{
+						functionName: "select_schUsuallyApp",
+						userid: "",
+						stand: "cn",
+					},
+				];
+				this.loading = true;
+				this.$ajax
+					.post(API_CONFIG.baseUrl, params)
+					.then((res) => {
+						let _data = res.data;
+						let _list = _data[0];
+						_list.forEach((i) => {
+							i.json = JSON.parse(i.json);
+						});
+						this.appList = _list;
+						this.loading = false;
+						resolve(_list);
+					})
+					.catch((err) => {
+						console.log(err);
+						this.loading = false;
+						this.$message.error("获取应用数据失败");
+						this.close();
+					});
+			});
 		},
 		setJson() {
 			let _form = JSON.parse(JSON.stringify(this.form));
@@ -1147,7 +1315,9 @@ export default {
 					_form.admin.sidebar.list[index] = i.id;
 				}
 			});
-
+			_form.admin.cocoFlow = _form.admin.cocoFlow
+				? _form.admin.cocoFlow.map((i) => i.id)
+				: [];
 			let params = [
 				{
 					functionName: "update_orgOroid_json_byId",
@@ -1156,6 +1326,7 @@ export default {
 					type: this.type,
 				},
 			];
+			console.log(_form);
 			this.loading = true;
 			this.$ajax
 				.post(API_CONFIG.baseUrl, params)
@@ -1164,13 +1335,13 @@ export default {
 					if (_data == 1) {
 						this.$message.success("修改权限成功");
 						this.$emit("getData");
-						
+
 						await addOp({
-							uid:this.userid,
+							uid: this.userid,
 							cid: this.data.id,
 							type: "user_op",
-							content:`修改了${this.data.name}的权限设置`
-						})
+							content: `修改了${this.data.name}的权限设置`,
+						});
 						this.close();
 					} else {
 						this.$message.error("修改权限失败");
@@ -1183,7 +1354,7 @@ export default {
 					this.$message.error("修改权限失败");
 				});
 		},
-		setDataListToo(toolList = []) {
+		setDataListToo(toolList = [], appList = []) {
 			let _form = JSON.parse(JSON.stringify(this.form));
 			_form.desktop.list.forEach((i, index) => {
 				let _index = toolList.findIndex((i2) => i == i2.id);
@@ -1194,6 +1365,17 @@ export default {
 				}
 			});
 
+			if (_form.admin.cocoFlow) {
+				_form.admin.cocoFlow.forEach((i, index) => {
+					let _index = appList.findIndex((i2) => i == i2.id);
+					if (_index != -1) {
+						_form.admin.cocoFlow[index] = appList[_index];
+					} else {
+						console.log("无应用", i);
+					}
+				});
+			}
+
 			_form.admin.index.list.forEach((i, index) => {
 				let _index = toolList.findIndex((i2) => i == i2.id);
 				if (_index != -1) {
@@ -1285,6 +1467,29 @@ export default {
 		editMenu(row) {
 			this.$refs.addMenuDialogRef.open(row, "edit");
 		},
+		addApp() {
+			this.$refs.selectAppDialogRef.open({
+				select: this.form.admin.cocoFlow ? this.form.admin.cocoFlow : [],
+			});
+		},
+		moveApp(id,type){
+			let _index = this.form.admin.cocoFlow.findIndex(i=>i.id==id);
+			if(type == 0 && _index!=0){//上移
+			let temp = this.form.admin.cocoFlow[_index - 1];
+			this.form.admin.cocoFlow[_index - 1] = this.form.admin.cocoFlow[_index];
+			this.form.admin.cocoFlow[_index] = temp;
+			}else if(type == 1 && _index!=this.form.admin.cocoFlow.length-1){
+			let temp = this.form.admin.cocoFlow[_index + 1];
+			this.form.admin.cocoFlow[_index + 1] = this.form.admin.cocoFlow[_index];
+			this.form.admin.cocoFlow[_index] = temp;
+			}
+			this.$forceUpdate()
+		},
+		selectAppSuccess(data) {
+			this.form.admin.cocoFlow = JSON.parse(JSON.stringify(data));
+			this.$forceUpdate();
+			this.$refs.selectAppDialogRef.close();
+		},
 	},
 };
 </script>
@@ -1365,8 +1570,8 @@ export default {
 
 .ea_basics_logo {
 	margin-top: 30px;
-	width: 110px;
-	height: 50px;
+	width: auto;
+	height: auto;
 	cursor: pointer;
 	display: flex;
 	align-items: center;
@@ -1374,7 +1579,7 @@ export default {
 
 .ea_basics_logo > span {
 	display: block;
-	min-width: 60px;
+	min-width: 80px;
 }
 
 .ea_basics_logo >>> .image-slot {
@@ -1415,7 +1620,7 @@ export default {
 
 .urlItem {
 	width: 400px;
-	height: 250px;
+	height: 300px;
 	overflow: auto;
 	position: relative;
 	box-sizing: border-box;
@@ -1447,4 +1652,86 @@ export default {
 .ui_message > div > span {
 	white-space: nowrap;
 }
+
+.appList {
+	display: flex;
+	flex-wrap: wrap;
+	box-sizing: border-box;
+	padding-top:20px ;
+}
+
+.appItem {
+	width: 298px;
+	height: 100px;
+	background-color: white;
+	box-sizing: border-box;
+	border: solid 1px #f3f4f6;
+	padding: 10px;
+	border-radius: 8px;
+	cursor: pointer;
+	margin-bottom: 20px;
+	margin-right: 20px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	transition: 0.3s;
+}
+
+.appActive {
+	border-color: #409eff;
+	box-shadow: 0px 6px 30px 5px #00000015;
+}
+
+.appItem:hover {
+	box-shadow: 0px 6px 30px 5px #00000015;
+}
+
+.ai_left {
+	width: 80px;
+	height: 80px;
+	box-sizing: border-box;
+	padding: 10px;
+	margin-right: 10px;
+}
+
+.ai_right {
+	width: calc(100% - 80px - 10px);
+	position: relative;
+}
+
+.ai_right > div {
+	max-width: calc( 100% - 50px);
+	font-weight: bold;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	font-size: 16px;
+	color: #000;
+	margin-bottom: 10px;
+}
+
+.ai_r_btn{
+	width: auto;
+	display: flex;
+	position: absolute;
+	right: 0;
+	top: 0;
+}
+
+.ai_r_btn>svg{
+	width: 10px;
+	height: 10px;
+	margin-left: 15px;
+	cursor: pointer;
+}
+
+.ai_right > span {
+	font-size: 14px;
+	color: #00000099;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
 </style>

+ 200 - 0
src/components/dialog/selectAppDialog.vue

@@ -0,0 +1,200 @@
+<template>
+	<div>
+		<el-dialog
+			title="选择应用"
+			class="selectAppDialog"
+			:visible.sync="show"
+			:close-on-click-modal="false"
+			width="1400px"
+			@before-close="beforeClose"
+			:destroy-on-close="true"
+			top="8vh"
+		>
+			<div v-loading="loading" class="sad_body">
+				<div
+					class="appItem"
+					:class="{ appActive: selectList.map((i) => i.id).includes(item.id) }"
+					v-for="item in dataList"
+					:key="item.id"
+					@click="selectApp(item)"
+				>
+					<div class="ai_left">
+						<!-- <div class="ai_l_image"> -->
+						<el-image
+							style="width: 100%; height: 100%"
+							:src="item.json.icon"
+							fit="cover"
+						></el-image>
+						<!-- </div> -->
+					</div>
+					<div class="ai_right">
+						<div>{{ item.name }}</div>
+						<span>{{ item.detail }}</span>
+					</div>
+				</div>
+			</div>
+			<!-- 按钮区域 -->
+			<div slot="footer" class="el-dialog__footer">
+				<el-button @click="close()">取 消</el-button>
+				<el-button type="primary" @click="submit()">确认</el-button>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import { API_CONFIG } from "@/common/apiConfig";
+export default {
+	data() {
+		return {
+			show: false,
+			loading: false,
+			dataList: [],
+			selectList: [],
+		};
+	},
+	methods: {
+		// 表头的背景色
+		headerCellStyle() {
+			return { backgroundColor: "#f1f1f1" };
+		},
+		open({ select }) {
+			this.selectList = JSON.parse(JSON.stringify(select));
+			this.getData();
+			this.show = true;
+		},
+		close() {
+			this.show = false;
+		},
+		init() {
+			this.dataList = [];
+			this.selectList = [];
+		},
+		getData() {
+			new Promise((resolve) => {
+				let params = [
+					{
+						functionName: "select_schUsuallyApp",
+						userid: "",
+						stand: "cn",
+					},
+				];
+				this.loading = true;
+				this.$ajax
+					.post(API_CONFIG.baseUrl, params)
+					.then((res) => {
+						console.log("👉", res);
+						let _data = res.data;
+						let _list = _data[0];
+						_list.forEach((i) => {
+							i.json = JSON.parse(i.json);
+						});
+						this.dataList = _list;
+						this.loading = false;
+						resolve();
+					})
+					.catch((err) => {
+						console.log(err);
+						this.loading = false;
+						this.$message.error("获取应用数据失败");
+					});
+			});
+		},
+		submit() {
+			this.$emit("success", this.selectList);
+		},
+		selectApp(item) {
+			if (this.selectList.map((i) => i.id).includes(item.id)) {
+				this.selectList = this.selectList.filter((i) => i.id !== item.id);
+			} else {
+				this.selectList.push(item);
+			}
+		},
+		beforeClose(done) {
+			this.init();
+			done();
+		},
+	},
+};
+</script>
+
+<style scoped>
+.selectAppDialog >>> .el-dialog__header {
+	padding: 15px 20px;
+	background: #454545;
+}
+
+.selectAppDialog >>> .el-dialog__title {
+	color: #fff;
+}
+
+.sad_body {
+	width: 100%;
+	height: 800px;
+	overflow: auto;
+	display: flex;
+	/* align-items: center; */
+	/* justify-content: center; */
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.appItem {
+	width: 315px;
+	height: 100px;
+	background-color: white;
+	box-sizing: border-box;
+	border: solid 1px #f3f4f6;
+	padding: 10px;
+	border-radius: 8px;
+	cursor: pointer;
+	margin-bottom: 20px;
+	margin-right: 20px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	transition: 0.3s;
+}
+
+.appActive {
+	border-color: #409eff;
+	box-shadow: 0px 6px 30px 5px #00000015;
+}
+
+.appItem:hover {
+	box-shadow: 0px 6px 30px 5px #00000015;
+}
+
+.ai_left {
+	width: 80px;
+	height: 80px;
+	box-sizing: border-box;
+	padding: 10px;
+	margin-right: 10px;
+}
+
+.ai_right {
+	width: calc(100% - 80px - 10px);
+}
+
+.ai_right > div {
+	max-width: 100%;
+	font-weight: bold;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	font-size: 16px;
+	color: #000;
+	margin-bottom: 10px;
+}
+
+.ai_right > span {
+	font-size: 14px;
+	color: #00000099;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+</style>

Vissa filer visades inte eftersom för många filer har ändrats