From ad3ecc9167a5f837e0a6292d8e697b799eb6bfc2 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 17 四月 2026 15:57:31 +0800
Subject: [PATCH] 发货审批人列表来源修改
---
src/api/system/user.js | 62 +++--
src/pages/sales/salesAccount/goOut.vue | 2
src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue | 576 ++++++++++++++++++++++++++-------------------------
3 files changed, 332 insertions(+), 308 deletions(-)
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 60f1913..32d5495 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -1,56 +1,64 @@
-import upload from '@/utils/upload'
-import request from '@/utils/request'
+import upload from "@/utils/upload";
+import request from "@/utils/request";
// 鐢ㄦ埛瀵嗙爜閲嶇疆
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
- newPassword
- }
+ newPassword,
+ };
return request({
- url: '/system/user/profile/updatePwd',
- method: 'put',
- params: data
- })
+ url: "/system/user/profile/updatePwd",
+ method: "put",
+ params: data,
+ });
}
// 鏌ヨ鐢ㄦ埛涓汉淇℃伅
export function getUserProfile() {
return request({
- url: '/system/user/profile',
- method: 'get'
- })
+ url: "/system/user/profile",
+ method: "get",
+ });
}
// 淇敼鐢ㄦ埛涓汉淇℃伅
export function updateUserProfile(data) {
return request({
- url: '/system/user/profile',
- method: 'put',
- data: data
- })
+ url: "/system/user/profile",
+ method: "put",
+ data: data,
+ });
}
// 鐢ㄦ埛澶村儚涓婁紶
export function uploadAvatar(data) {
return request({
- url: '/system/user/profile/avatar',
- method: 'post',
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- data: data
- })
+ url: "/system/user/profile/avatar",
+ method: "post",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ data: data,
+ });
}
// 鏌ヨ鐢ㄦ埛鍒楄〃
export function userListNoPage() {
return request({
- url: '/system/user/userListNoPage',
- method: 'get'
- })
+ url: "/system/user/userListNoPage",
+ method: "get",
+ });
}
// 鏌ヨ鐢ㄦ埛鍒楄〃
export function userListNoPageByTenantId() {
return request({
- url: '/system/user/userListNoPageByTenantId',
- method: 'get'
- })
-}
\ No newline at end of file
+ url: "/system/user/userListNoPageByTenantId",
+ method: "get",
+ });
+}
+// 鏌ヨ瀹℃壒浜�
+export function approveUserList(query) {
+ return request({
+ url: "/approveUser/getList",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue b/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
index 31022f2..430c5c0 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
@@ -1,27 +1,29 @@
<template>
<view class="contact-select">
<!-- 椤堕儴鏍囬鏍� -->
- <PageHeader title="閫夋嫨鑱旂郴浜�" @back="goBack">
+ <PageHeader title="閫夋嫨鑱旂郴浜�"
+ @back="goBack">
<template #right>
- <text class="confirm-btn" @click="confirmSelect">纭畾</text>
+ <text class="confirm-btn"
+ @click="confirmSelect">纭畾</text>
</template>
</PageHeader>
-
<!-- 鎼滅储妗� -->
-<!-- <view class="search-section">-->
-<!-- <van-search-->
-<!-- v-model="searchValue"-->
-<!-- placeholder="鎼滅储鑱旂郴浜�"-->
-<!-- @search="onSearch"-->
-<!-- @input="onSearch"-->
-<!-- />-->
-<!-- </view>-->
-
+ <!-- <view class="search-section">-->
+ <!-- <van-search-->
+ <!-- v-model="searchValue"-->
+ <!-- placeholder="鎼滅储鑱旂郴浜�"-->
+ <!-- @search="onSearch"-->
+ <!-- @input="onSearch"-->
+ <!-- />-->
+ <!-- </view>-->
<!-- 宸查�夋嫨鐨勮仈绯讳汉 -->
- <view class="selected-section" v-if="selectedContact">
+ <view class="selected-section"
+ v-if="selectedContact">
<view class="selected-header">
<text class="selected-title">宸查�夋嫨</text>
- <text class="clear-btn" @click="clearSelected">娓呯┖</text>
+ <text class="clear-btn"
+ @click="clearSelected">娓呯┖</text>
</view>
<view class="selected-item">
<view class="contact-avatar">
@@ -30,36 +32,33 @@
<view class="contact-details">
<text class="contact-name">{{ selectedContact.nickName }}</text>
</view>
- <u-icon name="close" size="16" color="#999" @click="clearSelected" />
+ <u-icon name="close"
+ size="16"
+ color="#999"
+ @click="clearSelected" />
</view>
</view>
-
<!-- 鑱旂郴浜哄垪琛� -->
<view class="contact-list">
<view class="list-header">
<text class="list-title">鍏ㄩ儴鑱旂郴浜�</text>
</view>
-
- <u-list
- v-model:loading="loading"
- :finished="finished"
- finished-text="娌℃湁鏇村浜�"
- @load="onLoad"
- >
- <view
- v-for="contact in userList"
- :key="contact.userId"
- class="contact-item"
- :class="{ 'selected': isSelected(contact) }"
- @click="selectContact(contact)"
- >
+ <u-list v-model:loading="loading"
+ :finished="finished"
+ finished-text="娌℃湁鏇村浜�"
+ @load="onLoading">
+ <view v-for="contact in userList"
+ :key="contact.userId"
+ class="contact-item"
+ :class="{ 'selected': isSelected(contact) }"
+ @click="selectContact(contact)">
<view class="contact-info">
<view class="contact-avatar">
<text class="avatar-text">{{ contact.nickName.charAt(0) }}</text>
</view>
<view class="contact-details">
<text class="contact-name">{{ contact.nickName }}</text>
-<!-- <text class="contact-dept">{{ contact.department }}</text>-->
+ <!-- <text class="contact-dept">{{ contact.department }}</text>-->
</view>
</view>
</view>
@@ -69,277 +68,294 @@
</template>
<script setup>
-import { ref, onMounted } from 'vue'
-import { userListNoPageByTenantId } from "@/api/system/user"
+ import { ref, onMounted } from "vue";
+ import { userListNoPageByTenantId, approveUserList } from "@/api/system/user";
+ import { onLoad } from "@dcloudio/uni-app";
+ const loading = ref(false);
+ const finished = ref(false);
+ const selectedContact = ref(null);
+ const userList = ref([]);
-const loading = ref(false)
-const finished = ref(false)
-const selectedContact = ref(null)
-const userList = ref([])
+ // 鎺ユ敹浼犻�掔殑鍙傛暟
+ const stepIndex = ref(0);
-// 鎺ユ敹浼犻�掔殑鍙傛暟
-const stepIndex = ref(0)
+ onMounted(() => {
+ // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧弬鏁�
+ const storedStepIndex = uni.getStorageSync("stepIndex");
+ if (storedStepIndex !== undefined && storedStepIndex !== null) {
+ stepIndex.value = parseInt(storedStepIndex);
+ }
-onMounted(() => {
- // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧弬鏁�
- const storedStepIndex = uni.getStorageSync('stepIndex');
- if (storedStepIndex !== undefined && storedStepIndex !== null) {
- stepIndex.value = parseInt(storedStepIndex)
- }
-
- // 鍒濆鍖栬仈绯讳汉鏁版嵁
- initContacts()
-})
+ // 鍒濆鍖栬仈绯讳汉鏁版嵁
+ initContacts();
+ });
-const initContacts = () => {
- userListNoPageByTenantId().then((res) => {
- userList.value = res.data
- })
- finished.value = true
-}
+ const initContacts = () => {
+ if (approveType.value) {
+ approveUserList({ approveType: approveType.value }).then(res => {
+ userList.value = [...res.data];
+ userList.value.forEach(item => {
+ item.nickName = item.nickName || item.userName;
+ });
+ });
+ } else {
+ userListNoPageByTenantId().then(res => {
+ userList.value = res.data;
+ });
+ }
+ finished.value = true;
+ };
-const onLoad = () => {
- // 妯℃嫙鍔犺浇鏇村鏁版嵁
- setTimeout(() => {
- loading.value = false
- finished.value = true
- }, 1000)
-}
+ const onLoading = () => {
+ // 妯℃嫙鍔犺浇鏇村鏁版嵁
+ setTimeout(() => {
+ loading.value = false;
+ finished.value = true;
+ }, 1000);
+ };
-const isSelected = (contact) => {
- return selectedContact.value && selectedContact.value.userId === contact.userId
-}
+ const isSelected = contact => {
+ return (
+ selectedContact.value && selectedContact.value.userId === contact.userId
+ );
+ };
-const selectContact = (contact) => {
- // 鍗曢�夋ā寮忥紝鐩存帴鏇挎崲閫変腑鐨勮仈绯讳汉
- selectedContact.value = contact
-}
+ const selectContact = contact => {
+ // 鍗曢�夋ā寮忥紝鐩存帴鏇挎崲閫変腑鐨勮仈绯讳汉
+ selectedContact.value = contact;
+ };
-const clearSelected = () => {
- selectedContact.value = null
-}
+ const clearSelected = () => {
+ selectedContact.value = null;
+ };
-const goBack = () => {
- uni.removeStorageSync('stepIndex');
- uni.navigateBack()
-}
+ const goBack = () => {
+ uni.removeStorageSync("stepIndex");
+ uni.navigateBack();
+ };
-const confirmSelect = () => {
- if (!selectedContact.value) {
- uni.showToast({
- title: '璇烽�夋嫨涓�涓仈绯讳汉',
- icon: 'none'
- })
- return
- }
- // 浣跨敤 uni.$emit 鍙戦�佹暟鎹�
- uni.$emit('selectContact', {
- stepIndex: stepIndex.value,
- contact: selectedContact.value
- })
- uni.navigateBack()
-}
+ const confirmSelect = () => {
+ if (!selectedContact.value) {
+ uni.showToast({
+ title: "璇烽�夋嫨涓�涓仈绯讳汉",
+ icon: "none",
+ });
+ return;
+ }
+ // 浣跨敤 uni.$emit 鍙戦�佹暟鎹�
+ uni.$emit("selectContact", {
+ stepIndex: stepIndex.value,
+ contact: selectedContact.value,
+ });
+ uni.navigateBack();
+ };
+ const approveType = ref(null);
+ onLoad(options => {
+ if (options.approveType) {
+ approveType.value = options.approveType;
+ }
+ });
</script>
<style scoped lang="scss">
-.contact-select {
- min-height: 100vh;
- background: #f8f9fa;
-}
-
-.header {
- background: #ffffff;
- padding: 16px 20px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- border-bottom: 1px solid #f0f0f0;
- position: sticky;
- /* 鍏煎 iOS 鍒樻捣/鐏靛姩宀涘畨鍏ㄥ尯 */
- padding-top: calc(env(safe-area-inset-top));
- top: 0;
- z-index: 100;
- position: relative;
-}
-
-.title {
- font-size: 18px;
- font-weight: 600;
- color: #333;
-}
-
-.confirm-btn {
- color: #006cfb;
- font-size: 16px;
- font-weight: 500;
-}
-
-.search-section {
- background: #fff;
- padding: 12px 16px;
- border-bottom: 1px solid #f0f0f0;
-}
-
-.selected-section {
- background: #fff;
- margin-top: 8px;
- padding: 16px;
-}
-
-.selected-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 12px;
-}
-
-.selected-title {
- font-size: 14px;
- color: #333;
- font-weight: 500;
-}
-
-.clear-btn {
- color: #006cfb;
- font-size: 14px;
-}
-
-.selected-item {
- display: flex;
- align-items: center;
- background: #f0f8ff;
- border: 1px solid #006cfb;
- border-radius: 12px;
- padding: 12px;
- gap: 12px;
- position: relative;
-
- &::before {
- content: '';
- position: absolute;
- top: -2px;
- right: -2px;
- width: 16px;
- height: 16px;
- background: #52c41a;
- border-radius: 50%;
- border: 2px solid #fff;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ .contact-select {
+ min-height: 100vh;
+ background: #f8f9fa;
}
-
- &::after {
- content: '鉁�';
- position: absolute;
- top: -1px;
- right: -1px;
- width: 16px;
- height: 16px;
+
+ .header {
+ background: #ffffff;
+ padding: 16px 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 1px solid #f0f0f0;
+ position: sticky;
+ /* 鍏煎 iOS 鍒樻捣/鐏靛姩宀涘畨鍏ㄥ尯 */
+ padding-top: calc(env(safe-area-inset-top));
+ top: 0;
+ z-index: 100;
+ position: relative;
+ }
+
+ .title {
+ font-size: 18px;
+ font-weight: 600;
+ color: #333;
+ }
+
+ .confirm-btn {
+ color: #006cfb;
+ font-size: 16px;
+ font-weight: 500;
+ }
+
+ .search-section {
+ background: #fff;
+ padding: 12px 16px;
+ border-bottom: 1px solid #f0f0f0;
+ }
+
+ .selected-section {
+ background: #fff;
+ margin-top: 8px;
+ padding: 16px;
+ }
+
+ .selected-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 12px;
+ }
+
+ .selected-title {
+ font-size: 14px;
+ color: #333;
+ font-weight: 500;
+ }
+
+ .clear-btn {
+ color: #006cfb;
+ font-size: 14px;
+ }
+
+ .selected-item {
+ display: flex;
+ align-items: center;
+ background: #f0f8ff;
+ border: 1px solid #006cfb;
+ border-radius: 12px;
+ padding: 12px;
+ gap: 12px;
+ position: relative;
+
+ &::before {
+ content: "";
+ position: absolute;
+ top: -2px;
+ right: -2px;
+ width: 16px;
+ height: 16px;
+ background: #52c41a;
+ border-radius: 50%;
+ border: 2px solid #fff;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ }
+
+ &::after {
+ content: "鉁�";
+ position: absolute;
+ top: -1px;
+ right: -1px;
+ width: 16px;
+ height: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 10px;
+ color: #fff;
+ font-weight: bold;
+ }
+ }
+
+ .contact-list {
+ background: #fff;
+ margin-top: 8px;
+ }
+
+ .list-header {
+ padding: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ }
+
+ .list-title {
+ font-size: 14px;
+ color: #666;
+ }
+
+ .contact-item {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 12px 16px;
+ border-bottom: 1px solid #f8f9fa;
+ transition: all 0.2s;
+ position: relative;
+
+ &.selected {
+ background-color: #f0f8ff;
+
+ &::before {
+ content: "";
+ position: absolute;
+ left: 8px;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 4px;
+ height: 4px;
+ background: #006cfb;
+ border-radius: 50%;
+ box-shadow: 0 0 0 4px rgba(0, 108, 251, 0.2);
+ }
+ }
+
+ &:active {
+ background-color: #f5f5f5;
+ }
+ }
+
+ .contact-info {
+ display: flex;
+ align-items: center;
+ flex: 1;
+ padding-left: 16px;
+ }
+
+ .contact-avatar {
+ width: 40px;
+ height: 40px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
- font-size: 10px;
- color: #fff;
- font-weight: bold;
+ margin-right: 12px;
+ position: relative;
}
-}
-.contact-list {
- background: #fff;
- margin-top: 8px;
-}
+ .avatar-text {
+ color: #fff;
+ font-size: 16px;
+ font-weight: 500;
+ }
-.list-header {
- padding: 16px;
- border-bottom: 1px solid #f0f0f0;
-}
+ .contact-details {
+ flex: 1;
+ }
-.list-title {
- font-size: 14px;
- color: #666;
-}
+ .contact-name {
+ display: block;
+ font-size: 16px;
+ color: #333;
+ }
-.contact-item {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 12px 16px;
- border-bottom: 1px solid #f8f9fa;
- transition: all 0.2s;
- position: relative;
-
- &.selected {
- background-color: #f0f8ff;
-
- &::before {
- content: '';
- position: absolute;
- left: 8px;
- top: 50%;
- transform: translateY(-50%);
- width: 4px;
- height: 4px;
- background: #006cfb;
- border-radius: 50%;
- box-shadow: 0 0 0 4px rgba(0, 108, 251, 0.2);
+ .contact-dept {
+ font-size: 12px;
+ color: #999;
+ }
+
+ // 鑷畾涔夊崟閫夋寜閽牱寮�
+ /* uview-plus鐨剅adio缁勪欢鏍峰紡涓嶉渶瑕侀澶栫殑deep鏍峰紡绌块�忥紝淇濇寔鍘熸湁鏍峰紡 */
+
+ @keyframes ripple {
+ 0% {
+ transform: scale(0.8);
+ opacity: 1;
+ }
+ 100% {
+ transform: scale(1.2);
+ opacity: 0;
}
}
-
- &:active {
- background-color: #f5f5f5;
- }
-}
-
-.contact-info {
- display: flex;
- align-items: center;
- flex: 1;
- padding-left: 16px;
-}
-
-.contact-avatar {
- width: 40px;
- height: 40px;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 12px;
- position: relative;
-}
-
-.avatar-text {
- color: #fff;
- font-size: 16px;
- font-weight: 500;
-}
-
-.contact-details {
- flex: 1;
-}
-
-.contact-name {
- display: block;
- font-size: 16px;
- color: #333;
-}
-
-.contact-dept {
- font-size: 12px;
- color: #999;
-}
-
-// 鑷畾涔夊崟閫夋寜閽牱寮�
-/* uview-plus鐨剅adio缁勪欢鏍峰紡涓嶉渶瑕侀澶栫殑deep鏍峰紡绌块�忥紝淇濇寔鍘熸湁鏍峰紡 */
-
-@keyframes ripple {
- 0% {
- transform: scale(0.8);
- opacity: 1;
- }
- 100% {
- transform: scale(1.2);
- opacity: 0;
- }
-}
</style>
\ No newline at end of file
diff --git a/src/pages/sales/salesAccount/goOut.vue b/src/pages/sales/salesAccount/goOut.vue
index 9980e5f..35e2a3f 100644
--- a/src/pages/sales/salesAccount/goOut.vue
+++ b/src/pages/sales/salesAccount/goOut.vue
@@ -242,7 +242,7 @@
// 璺宠浆鍒拌仈绯讳汉閫夋嫨椤甸潰
uni.setStorageSync("stepIndex", stepIndex);
uni.navigateTo({
- url: "/pages/cooperativeOffice/collaborativeApproval/contactSelect",
+ url: "/pages/cooperativeOffice/collaborativeApproval/contactSelect?approveType=7",
});
};
--
Gitblit v1.9.3