whx 1 месяц назад
Родитель
Сommit
54ff881883
23 измененных файлов с 195 добавлено и 41 удалено
  1. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/index.html
  2. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/6191.bdd0e1b2.css
  3. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/7138.56646b94.css
  4. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/9855.7fa2519b.css
  5. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/8102.71cf4f4d.css
  6. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1031.9e6c56cf.js
  7. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1056.7ad7c923.js
  8. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2184.d36bab9b.js
  9. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/437.f3027b44.js
  10. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6191.57dcd3f1.js
  11. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6271.d771485c.js
  12. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7138.37d9416e.js
  13. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7809.eb834082.js
  14. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7941.86b08acd.js
  15. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8102.a1b01d53.js
  16. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8866.a406b8a4.js
  17. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8866.fc02c57b.js
  18. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9855.865b421c.js
  19. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/app.01392f6a.js
  20. 20 0
      virgo.wzfrontend/workark/src/api/loginRegister.js
  21. 8 8
      virgo.wzfrontend/workark/src/components/common/avatar.vue
  22. 151 20
      virgo.wzfrontend/workark/src/layout/components/share.vue
  23. 4 1
      virgo.wzfrontend/workark/src/views/login/login.vue

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/index.html


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/6191.bdd0e1b2.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/7941.56646b94.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/7138.56646b94.css


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/9855.7fa2519b.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/8102.71cf4f4d.css


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1031.9e6c56cf.js


virgo.wzfrontend/src/main/resources/static/workark/static/js/1056.00272dc5.js → virgo.wzfrontend/src/main/resources/static/workark/static/js/1056.7ad7c923.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2184.d36bab9b.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/437.f3027b44.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/6191.57dcd3f1.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6271.d771485c.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7138.37d9416e.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7809.eb834082.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7941.86b08acd.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8102.a1b01d53.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/8866.a406b8a4.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8866.fc02c57b.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9855.865b421c.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/app.01392f6a.js


+ 20 - 0
virgo.wzfrontend/workark/src/api/loginRegister.js

@@ -172,4 +172,24 @@ export function getWorkarkOrangaized(data) {
 		url: `/manager/userContext/workark/organization`,
 		method: 'get'
 	})
+}
+/* 
+ * 获取邀请码
+ * 
+ */
+export function getInviteQr() {
+	return request({
+		url: `/manager/inviteQr`,
+		method: 'get'
+	})
+}
+/* 
+ * 获取邀请码
+ * 
+ */
+export function getInviteUserListByPage(currPage,pageSize) {
+	return request({
+		url: `/manager/inviteQr/${currPage}/${pageSize}`,
+		method: 'get'
+	})
 }

+ 8 - 8
virgo.wzfrontend/workark/src/components/common/avatar.vue

@@ -4,7 +4,7 @@
 		<div class="el-image" v-else>
 			<div class="avatar-slot">
 				<div :style="`font-size:${size}px;line-height:${lineHeight}px`">
-					{{name}}
+					{{userName}}
 				</div>
 			</div>
 		</div>
@@ -13,13 +13,13 @@
 
 <script>
 	export default {
-		name: 'avatar',
+		userName: 'avatar',
 		props: {
 			user: {
 				type: Object,
 				default: () => {
 					return {
-						name: ''
+						userName: ''
 					}
 				}
 			},
@@ -34,16 +34,16 @@
 			}
 		},
 		computed: {
-			name() {
-				if (!this.user.name) return '';
-				let name = this.user.name.substring(0, 1);
-				let strCode = name.charCodeAt();
+			userName() {
+				if (!this.user.userName) return '';
+				let userName = this.user.userName.substring(0, 1);
+				let strCode = userName.charCodeAt();
 				if (strCode >= 97 && strCode <= 122) {
 					this.lineHeight = this.size + 2
 				} else {
 					this.lineHeight = this.size;
 				}
-				return name
+				return userName
 			}
 		},
 	}

+ 151 - 20
virgo.wzfrontend/workark/src/layout/components/share.vue

@@ -1,39 +1,136 @@
 <template>
 	<div class="share-box">
 		<div class="left hui-detail">
-			<div class="hui-detail-box">
-				<div class="hui-detail-content">
-					<div class="hui-detail-item">
-						<div class="hui-detail-label">已邀请人数</div>
-						<div class="hui-detail-value">1</div>
-					</div>
-					<div class="hui-detail-item">
-						<div class="hui-detail-label">邀请码</div>
-						<div class="hui-detail-value">2</div>
-					</div>
-					<div class="hui-detail-item">
-						<div class="hui-detail-label">分享链接</div>
-						<div class="hui-detail-value color-danger">3</div>
-					</div>
-				</div>
+			<div class="hui-detail-box">
+				<div class="hui-detail-content">
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">
+							<span class="label">邀请码</span>
+							<el-tooltip class="item" effect="dark" content="复制邀请码" placement="top">
+								<i class="el-icon-copy-document" @click="copyText(inviteData.content)"></i>
+							</el-tooltip>
+						</div>
+						<div class="hui-detail-value">{{inviteData.content}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">
+							<span class="label">分享链接</span>
+							<el-tooltip class="item" effect="dark" content="复制分享链接" placement="top">
+								<i class="el-icon-copy-document" @click="copyText(inviteData.url)"></i>
+							</el-tooltip>
+						</div>
+						<div class="hui-detail-value">{{inviteData.url}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">已邀请人数</div>
+						<div class="hui-detail-value">{{inviteData.inviteNumber}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">已邀请人</div>
+						<div class="hui-detail-value" style="display: flex;flex-wrap: wrap;">
+							<div class="cc-user-item" v-for="(item,index) in inviteUserList" :key="index">
+								<div class="cc-user-avatar">
+									<avatar :user="item" :size="10"></avatar>
+								</div>
+								<div class="cc-user-name">{{item.userName}}</div>
+							</div>
+						</div>
+					</div>
+				</div>
 			</div>
 		</div>
 		<div class="right">
 			<div class="qr-code-image">
-				<img src="/assets/ma.png" />
+				<img v-if="inviteData.qrCodeBase64" :src="inviteData.qrCodeBase64" />
 			</div>
-			<el-button type="primary" size="small">下载二维码</el-button>
+			<el-button type="primary" size="small" @click="download">下载二维码</el-button>
 		</div>
 	</div>
 </template>
 
 <script>
+	import {
+		getInviteQr,
+		getInviteUserListByPage
+	} from '@/api/loginRegister'
 	export default {
 		data() {
-			return {};
+			return {
+				inviteData: {},
+				inviteUserList: []
+			};
+		},
+		mounted() {
+			this.init();
+		},
+		methods: {
+			init() {
+				getInviteQr().then(res => {
+					if (res.state) {
+						this.inviteData = res.data;
+					}
+				})
+				getInviteUserListByPage(1, 100).then(res => {
+					if (res.state) {
+						this.inviteUserList = res.data.dataList;
+					}
+				})
+			},
+			async copyText(code) {
+				try {
+					await navigator.clipboard.writeText(code);
+					this.$message.success('复制成功');
+				} catch (error) {
+					this.$message.warning('复制失败');
+				}
+			},
+			download() {
+				this.downloadBase64Image(this.inviteData.qrCodeBase64, '邀请二维码');
+			},
+			downloadBase64Image(base64Data, filename = 'image', mimeType) {
+				try {
+					// 分离Base64元数据和编码数据
+					const metaAndData = base64Data.split(';base64,');
+					// 自动提取MIME类型(如果未手动指定)
+					const mime = mimeType || metaAndData[0].split(':')[1];
+					// 获取纯Base64编码字符串
+					const data = metaAndData[1] || base64Data; // 处理无前缀的情况
+					// 解码Base64字符串
+					const byteCharacters = atob(data);
+					// 将解码后的数据转换为Uint8Array
+					const byteArrays = [];
+					for (let offset = 0; offset < byteCharacters.length; offset += 512) {
+						const slice = byteCharacters.slice(offset, offset + 512);
+						const byteNumbers = new Array(slice.length);
+						for (let i = 0; i < slice.length; i++) {
+							byteNumbers[i] = slice.charCodeAt(i);
+						}
+						byteArrays.push(new Uint8Array(byteNumbers));
+					}
+					// 创建Blob对象
+					const blob = new Blob(byteArrays, {
+						type: mime
+					});
+					// 生成临时下载链接
+					const url = URL.createObjectURL(blob);
+					// 创建虚拟链接元素
+					const link = document.createElement('a');
+					link.style.display = 'none';
+					link.href = url;
+					// 处理文件扩展名
+					const extension = mime.split('/')[1] || 'png';
+					link.download = `${filename}.${extension}`;
+					// 添加到DOM并模拟点击
+					document.body.appendChild(link);
+					link.click();
+					// 清理资源
+					document.body.removeChild(link);
+					URL.revokeObjectURL(url);
+				} catch (error) {
+					this.$message.warning('下载失败');
+				}
+			}
 		},
-		onLoad() {},
-		methods: {},
 	}
 </script>
 
@@ -49,6 +146,40 @@
 			display: flex;
 			flex-direction: column;
 			padding: 20px;
+
+			.el-icon-copy-document {
+				color: $--color-primary;
+				cursor: pointer;
+			}
+
+			.hui-detail-label {
+				.label {
+					margin-right: 5px;
+				}
+			}
+
+			.cc-user-item {
+				display: flex;
+				height: 28px;
+				align-items: center;
+				margin-right: 15px;
+				background: rgba(31, 35, 41, .1);
+				border-radius: 15px;
+				padding: 0 8px 0 4px;
+
+				.cc-user-avatar {
+					width: 20px;
+					height: 20px;
+					border-radius: 50%;
+					overflow: hidden;
+					margin-right: 4px;
+				}
+
+				.cc-user-name {
+					overflow: hidden;
+					font-size: $--font-size-small;
+				}
+			}
 		}
 
 		.right {

+ 4 - 1
virgo.wzfrontend/workark/src/views/login/login.vue

@@ -67,7 +67,8 @@
 					phone: '',
 					code: '',
 					phoneCode: '',
-					password: ''
+					password: '',
+					qrContent: ''
 				},
 				loginLoading: false,
 				codeImg: '',
@@ -118,6 +119,7 @@
 			};
 		},
 		mounted() {
+			if (this.$route.query.content) this.loginForm['qrContent'] = this.$route.query.content;
 			this.imgCodeFunc();
 			if (this.$store.getters.codeNumber != 60) this.codeReset();
 		},
@@ -179,6 +181,7 @@
 					phone: this.loginForm.phone,
 					password: this.loginForm.password
 				};
+				if (this.loginForm.qrContent) postData['qrContent'] = this.loginForm.qrContent;
 				login(postData).then(res => {
 					if (res.state) {
 						setToken(res.data.token);