From 6c497f71f5441633099fc7a7896da8e8c7835f05 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 09 三月 2026 15:46:37 +0800
Subject: [PATCH] 公司app 1.商机管理添加字段

---
 src/pages/login.vue |  343 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 343 insertions(+), 0 deletions(-)

diff --git a/src/pages/login.vue b/src/pages/login.vue
new file mode 100644
index 0000000..7c97065
--- /dev/null
+++ b/src/pages/login.vue
@@ -0,0 +1,343 @@
+<template>
+	<view class="normal-login-container">
+		<view class="logo-content">
+			<text>璐﹀彿瀵嗙爜鐧诲綍</text>
+		</view>
+		<view class="login-form-content">
+			<view class="input-item flex align-center">
+				<up-input prefixIcon="account" placeholder="璇疯緭鍏ヨ处鍙�" border="bottom"
+									@blur="getUserLoginFacotryList"
+									maxlength="30" v-model="loginForm.userName" clearable></up-input>
+			</view>
+			<view class="input-item flex align-center">
+				<up-input prefixIcon="lock" placeholder="璇疯緭鍏ュ瘑鐮�" border="bottom" maxlength="20" v-model="loginForm.password" clearable type="password"></up-input>
+			</view>
+			<view class="input-item flex align-center select-container">
+				<up-icon name="tags" size="18"></up-icon>
+				<up-picker-data
+					v-model="loginForm.factoryId"
+					title="璇烽�夋嫨鍏徃"
+					:options="factoryList"
+					valueKey="id"
+					style="width: 100%;"
+					labelKey="name">
+				</up-picker-data>
+			</view>
+			<view>
+				<button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">鐧诲綍</button>
+			</view>
+		</view>
+		<!-- 璁颁綇瀵嗙爜閫夐」 -->
+		<view class="remember-password">
+			<up-checkbox
+				:customStyle="{marginBottom: '8px'}"
+				label="璁颁綇瀵嗙爜"
+				name="agree"
+				usedAlone
+				v-model:checked="rememberPassword"
+			>
+			</up-checkbox>
+		</view>
+	</view>
+</template>
+
+<script setup>
+import {modal} from "@/plugins";
+
+const showToast = (message) => {
+	uni.showToast({
+		title: message,
+		icon: 'none'
+	})
+}
+import {
+	userLoginFacotryList,
+	updateClientId,
+	getNoticeCount,
+} from "@/api/login";
+import { ref, onMounted } from "vue";
+import useUserStore from '@/store/modules/user'
+import { getWxCode } from '@/utils/geek';
+import { wxLogin } from '@/api/oauth';
+import { setToken } from '@/utils/auth';
+import View from "@/pages/procurementManagement/procurementLedger/view.vue";
+const userStore = useUserStore()
+const useWxLogin = ref(false); // 鏄惁浣跨敤寰俊鐧诲綍
+const rememberPassword = ref(false); // 璁颁綇瀵嗙爜
+const loginForm = ref({
+	userName: "",
+	password: "",
+	factoryId: "",
+	currentFatoryName: "",
+});
+const factoryList = ref([]) // 鍏徃鍒楄〃
+
+// 淇濆瓨瀵嗙爜鍒版湰鍦板瓨鍌�
+function savePassword() {
+	if (rememberPassword.value) {
+		uni.setStorageSync('remembered_username', loginForm.value.userName);
+		uni.setStorageSync('remembered_password', loginForm.value.password);
+		uni.setStorageSync('remember_password', true);
+	} else {
+		uni.removeStorageSync('remembered_username');
+		uni.removeStorageSync('remembered_password');
+		uni.setStorageSync('remember_password', false);
+	}
+}
+
+// 浠庢湰鍦板瓨鍌ㄥ姞杞藉瘑鐮�
+function loadPassword() {
+	const remembered = uni.getStorageSync('remember_password');
+	if (remembered) {
+		rememberPassword.value = true;
+		const savedUsername = uni.getStorageSync('remembered_username');
+		const savedPassword = uni.getStorageSync('remembered_password');
+		if (savedUsername) {
+			loginForm.value.userName = savedUsername;
+		}
+		if (savedPassword) {
+			loginForm.value.password = savedPassword;
+		}
+	}
+}
+
+if (useWxLogin.value) {
+	getWxCode().then(res => {
+		console.log(res);
+		wxLogin('miniapp',res).then(res => {
+			if(res.token != null){
+				setToken(res.token);
+				loginSuccess()
+			}
+		});
+	})
+}
+
+function getUserLoginFacotryList() {
+	if(loginForm.value.userName){
+		userLoginFacotryList({userName:loginForm.value.userName}).then(res => {
+			console.log('res',res)
+			// 妫�鏌es.data鏄惁涓烘暟缁�
+			if (res.data && Array.isArray(res.data)) {
+				// 閲嶆柊缁勮鏁版嵁鏍煎紡锛歞eptId鍙樻垚id锛宒eptName鍙樻垚name
+				factoryList.value = res.data.map(item => ({
+					id: item.deptId,
+					name: item.deptName
+				}))
+			} else {
+				// 濡傛灉res.data涓嶆槸鏁扮粍锛岃缃负绌烘暟缁�
+				factoryList.value = []
+			}
+		}).catch(error => {
+			showToast('鑾峰彇鍏徃鍒楄〃澶辫触:', error)
+			factoryList.value = []
+		})
+	}else {
+		factoryList.value = []
+	}
+}
+
+async function handleLogin() {
+	if (loginForm.value.userName === "") {
+		showToast("璇疯緭鍏ユ偍鐨勮处鍙�")
+	} else if (loginForm.value.password === "") {
+		showToast("璇疯緭鍏ユ偍鐨勫瘑鐮�")
+	} else if (loginForm.value.factoryId === "") {
+		showToast("璇烽�夋嫨鍏徃")
+	} else {
+		showToast("鐧诲綍涓紝璇疯�愬績绛夊緟...")
+		pwdLogin()
+	}
+};
+// 瀵嗙爜鐧诲綍
+async function pwdLogin() {
+	userStore.loginCheckFactory(loginForm.value).then(() => {
+		modal.closeLoading()
+		// 鐧诲綍鎴愬姛鍚庝繚瀛樺瘑鐮�
+		savePassword();
+		loginSuccess()
+	}).catch(() => {
+		modal.closeLoading()
+	})
+};
+
+function loginSuccess(result) {
+	userStore.getInfo().then(res => {
+		const userId = res.user.userId;
+		// 鐧诲綍鎴愬姛鍚庯紝灏嗗鎴风鎺ㄩ�佹爣璇嗗彂閫佸埌鏈嶅姟鍣�
+		sendClientIdToServer();
+		// 鍚姩瀹氭椂鑾峰彇鏈娑堟伅鏁伴噺鐨勫畾鏃跺櫒
+		startNoticeCountTimer(userId);
+	})
+	// 璁剧疆鐢ㄦ埛淇℃伅
+	userStore.getInfo().then(res => {
+		uni.switchTab({
+			url: '/pages/index'
+		});
+	})
+}
+// 鍚姩瀹氭椂鑾峰彇鏈娑堟伅鏁伴噺鐨勫畾鏃跺櫒
+function startNoticeCountTimer(userId) {
+	// 绔嬪嵆鑾峰彇涓�娆℃湭璇绘秷鎭暟閲�
+	updateNoticeCount(userId);
+	// 璁剧疆瀹氭椂鍣紝姣�30绉掕幏鍙栦竴娆�
+	setInterval(() => {
+		updateNoticeCount(userId);
+	}, 30000);
+}
+
+// 鏇存柊鏈娑堟伅鏁伴噺
+function updateNoticeCount(userId) {
+	getNoticeCount(userId)
+		.then(res => {
+			const count = res.data || 0;
+			console.log("鏈娑堟伅鏁伴噺:", count);
+			// 鏇存柊tabbar鐨勮鏍�
+			if (count > 0) {
+				uni.setTabBarBadge({
+					index: 1, // 娑堟伅鏍囩椤电殑绱㈠紩
+					text: count.toString(),
+				});
+			} else {
+				uni.removeTabBarBadge({
+					index: 1,
+				});
+			}
+		})
+		.catch(error => {
+			console.error("鑾峰彇鏈娑堟伅鏁伴噺澶辫触:", error);
+		});
+}
+
+// 灏嗗鎴风鎺ㄩ�佹爣璇嗗彂閫佸埌鏈嶅姟鍣�
+function sendClientIdToServer() {
+	// 鑾峰彇鏈湴瀛樺偍鐨勫鎴风鏍囪瘑
+	const clientId = uni.getStorageSync("clientid");
+	if (clientId) {
+		console.log("鐧诲綍鎴愬姛锛屽噯澶囧彂閫佸鎴风鏍囪瘑鍒版湇鍔″櫒:", clientId);
+		// 杩欓噷璋冪敤鍚庣鎺ュ彛鍙戦�佸鎴风鏍囪瘑
+		updateClientId({ cid: clientId })
+			.then(res => {
+				console.log("鏈嶅姟鍣ㄥ搷搴�:", res);
+				if (res.code === 200) {
+					console.log("瀹㈡埛绔爣璇嗗凡鎴愬姛鍙戦�佸埌鏈嶅姟鍣�");
+				} else {
+					console.log("鏈嶅姟鍣ㄨ繑鍥為敊璇�:", res.msg);
+				}
+			})
+			.catch(error => {
+				console.log("鍙戦�佸鎴风鏍囪瘑鍒版湇鍔″櫒澶辫触:", error);
+			});
+		// 绀轰緥锛歛pi.updateClientId({ clientId: clientId });
+		// 鐢变簬娌℃湁鍏蜂綋鐨勬帴鍙o紝杩欓噷鍙墦鍗版棩蹇�
+		console.log("瀹㈡埛绔爣璇嗗凡鍙戦�佸埌鏈嶅姟鍣�");
+	} else {
+		console.log("鏈幏鍙栧埌瀹㈡埛绔帹閫佹爣璇�");
+	}
+}
+// 椤甸潰鍔犺浇鏃舵鏌ユ槸鍚︽湁淇濆瓨鐨勫瘑鐮�
+onMounted(() => {
+	loadPassword();
+	getUserLoginFacotryList()
+});
+</script>
+
+<style lang="scss">
+page {
+	background-color: #ffffff;
+}
+
+.normal-login-container {
+	width: 100%;
+	height: 100vh;
+	
+	.logo-content {
+		width: 90%;
+		font-weight: 400;
+		font-size: 30px;
+		color: #333333;
+		margin: 80px 0 0 30px;
+		
+		image {
+			border-radius: 4px;
+		}
+		
+		.title {
+			margin-left: 10px;
+		}
+	}
+	.u-checkbox {
+		margin-left: 34px;
+	}
+	
+	.login-form-content {
+		text-align: center;
+		margin: 58px auto;
+		padding: 0 30px;
+		
+		.input-item {
+			margin: 30px auto;
+			height: 45px;
+			
+			.icon {
+				font-size: 38rpx;
+				margin-left: 10px;
+				color: #999;
+			}
+			
+			.input {
+				width: 100%;
+				font-size: 14px;
+				line-height: 20px;
+				text-align: left;
+				padding-left: 15px;
+			}
+		}
+		.select-container {
+			flex: 1;
+			border-bottom: 1px solid #e5e5e5;
+			padding: 6px 9px;
+			
+			:deep(.up-select) {
+				border: none;
+				background: transparent;
+				
+				.up-select__label {
+					font-size: 14px;
+					color: #333;
+				}
+				
+				.up-select__value {
+					font-size: 14px;
+					color: #333;
+				}
+			}
+		}
+		
+		.login-btn {
+			margin-top: 60px;
+			height: 50px;
+			background: linear-gradient( 140deg, #00BAFF 0%, #006CFB 100%);
+			box-shadow: 0px 4px 10px 0px rgba(3,88,185,0.2);
+			border-radius: 40px 40px 40px 40px;
+		}
+		
+		.xieyi {
+			color: #333;
+			margin-top: 20px;
+		}
+		
+		.login-code {
+			height: 38px;
+			float: right;
+			
+			.login-code-img {
+				height: 38px;
+				position: absolute;
+				margin-left: 10px;
+				width: 200rpx;
+			}
+		}
+	}
+}
+</style>

--
Gitblit v1.9.3