From a096000ec414988074803af7242f2a1bfceb0be0 Mon Sep 17 00:00:00 2001
From: feige <feige@qq.com>
Date: 星期二, 09 十二月 2025 07:56:38 +0800
Subject: [PATCH] 修改代码
---
ruoyi-ui/src/api/peopleSearch/index.js | 19 +
ruoyi-ui/src/views/search/peopleSerch.vue | 8
ruoyi-ui/src/views/peopleSearch/index.vue | 563 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 590 insertions(+), 0 deletions(-)
diff --git a/ruoyi-ui/src/api/peopleSearch/index.js b/ruoyi-ui/src/api/peopleSearch/index.js
new file mode 100644
index 0000000..5645492
--- /dev/null
+++ b/ruoyi-ui/src/api/peopleSearch/index.js
@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鎵�鏈夊搴ぇ浜嬶紝鍒嗛〉鏌ヨ
+export function getModules(query) {
+ return request({
+ url: '/zPeopleSearch/all',
+ method: 'get',
+ params: query
+ })
+}
+
+// 鏍规嵁id鏌ヨ鎵�鏈夊搴祫浜ц缁嗕俊鎭�
+export function searchPeople(query) {
+ return request({
+ url: '/zPeopleSearch/all',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/ruoyi-ui/src/views/peopleSearch/index.vue b/ruoyi-ui/src/views/peopleSearch/index.vue
new file mode 100644
index 0000000..f845890
--- /dev/null
+++ b/ruoyi-ui/src/views/peopleSearch/index.vue
@@ -0,0 +1,563 @@
+<template>
+ <div class="people-search-container">
+ <!-- 椤甸潰鏍囬 -->
+ <div class="page-header">
+ <h2>浜哄憳鎼滅储</h2>
+ <p>閫氳繃妯″潡鍜屾椂闂磋寖鍥寸瓫閫夌浉鍏充汉鍛樹俊鎭�</p>
+ </div>
+
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-card class="search-card">
+ <el-form
+ :model="searchForm"
+ :rules="searchRules"
+ ref="searchForm"
+ label-width="100px"
+ class="search-form"
+ >
+ <!-- 妯″潡閫夋嫨 -->
+ <el-form-item label="閫夋嫨妯″潡" prop="module">
+
+ <label v-for="item in modules" :key="item.label" class="signature-checkbox">
+ <input type="checkbox" v-model="searchForm.modules" :value="item.label">
+ <span>{{ item.value }}</span>
+ </label>
+ <!-- <el-select
+ v-model="searchForm.module"
+ placeholder="璇烽�夋嫨鎼滅储妯″潡"
+ clearable
+ @change="handleModuleChange"
+ >
+ <el-option
+ v-for="item in modules"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select> -->
+ </el-form-item>
+ <el-form-item class="left-align-btn">
+ <div v-if="selectedMemberNames.length > 0" class="selected-members">
+ <el-tag
+ v-for="(name, index) in selectedMemberNames"
+ :key="index"
+ closable
+ @close="handleTagClose(index, name)"
+ >
+ {{ name }}
+ </el-tag>
+ </div>
+ <el-button
+ type="primary"
+ plain
+ @click="openFamilyMemberDialog"
+ style="width: 100%; margin-bottom: 15px;"
+ >
+ 閫夋嫨瀹舵棌浜�
+ </el-button>
+ </el-form-item>
+ <!-- 鏃堕棿鑼冨洿閫夋嫨 -->
+ <el-form-item label="鏃堕棿鑼冨洿" prop="dateRange">
+ <el-date-picker
+ v-model="searchForm.dateRange"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ :disabled-date="disabledDate"
+ ></el-date-picker>
+ </el-form-item>
+
+ <!-- 楂樼骇鎼滅储閫夐」 (鏍规嵁閫夋嫨鐨勬ā鍧楀姩鎬佹樉绀�) -->
+<!-- <div v-if="showAdvancedOptions" class="advanced-options">
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨鐘舵��" clearable>
+ <el-option label="鍏ㄩ儴" value=""></el-option>
+ <el-option label="鍚敤" value="active"></el-option>
+ <el-option label="绂佺敤" value="inactive"></el-option>
+ </el-select>
+ </el-form-item>
+ </div> -->
+
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-form-item class="form-actions">
+ <el-button type="primary" @click="handleSearch">鎼滅储</el-button>
+ <el-button @click="handleReset">閲嶇疆</el-button>
+ <el-button type="text" @click="toggleAdvancedOptions">
+ {{ showAdvancedOptions ? '鏀惰捣楂樼骇閫夐」' : '灞曞紑楂樼骇閫夐」' }}
+ </el-button>
+ </el-form-item>
+ </el-form>
+ </el-card>
+
+ <!-- 鎼滅储缁撴灉 -->
+ <el-card class="result-card">
+ <!-- 缁撴灉缁熻 -->
+ <div class="result-stats" v-if="searchResult.length > 0">
+ <span>鍏辨壘鍒� {{ pagination.total }} 鏉$粨鏋�</span>
+ <el-button
+ type="text"
+ icon="el-icon-download"
+ size="small"
+ @click="exportResult"
+ >
+ 瀵煎嚭缁撴灉
+ </el-button>
+ </div>
+
+ <!-- 缁撴灉琛ㄦ牸 -->
+ <el-table
+ v-loading="loading"
+ :data="searchResult"
+ border
+ stripe
+ style="width: 100%"
+ @row-click="handleRowClick"
+ >
+ <el-table-column type="index" label="搴忓彿" width="60"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="120"></el-table-column>
+ <el-table-column prop="module" label="鎵�灞炴ā鍧�" min-width="120">
+ <template slot-scope="scope">
+ <el-tag>{{ getModuleLabel(scope.row.module) }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="160"></el-table-column>
+
+ <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="handleView(scope.row)">鏌ョ湅</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <!-- 鍒嗛〉鎺т欢 -->
+ <div class="pagination-container" v-if="pagination.total > 0">
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.currentPage"
+ :page-sizes="[10, 20, 50, 100]"
+ :page-size="pagination.pageSize"
+ :total="pagination.total"
+ layout="total, sizes, prev, pager, next, jumper"
+ ></el-pagination>
+ </div>
+
+ <!-- 鏃犵粨鏋滄彁绀� -->
+ <div v-else-if="!loading" class="no-result">
+ <el-empty description="鏆傛棤鎼滅储缁撴灉"></el-empty>
+ </div>
+ </el-card>
+
+
+
+
+ <!-- 娣诲姞瀹舵棌浜洪�夋嫨瀵硅瘽妗� -->
+ <el-dialog
+ :visible.sync="familyMemberDialogVisible"
+ title="閫夋嫨瀹舵棌鎴愬憳"
+ width="30%"
+ >
+ <el-form ref="familyForm" :model="familyForm" :rules="familyRules">
+ <el-form-item prop="selectedMember">
+<!-- <el-select
+ v-model="familyForm.selectedMember"
+ placeholder="璇烽�夋嫨瀹舵棌鎴愬憳"
+ style="width: 100%;"
+ >
+ <el-option
+ v-for="member in familyMembers"
+ :key="member.id"
+ :label="member.name"
+ :value="member.id"
+ ></el-option>
+ </el-select> -->
+
+ <label v-for="item in familyMembers" :key="item.userId" class="signature-checkbox">
+ <input type="checkbox" v-model="selectedMemberIds" :value="item.userId">
+ <span>{{ item.oldName }}</span>
+ </label>
+ </el-form-item>
+
+ <!-- 鎴栬�呬娇鐢ㄥ閫夋ā寮� -->
+ <!-- <el-form-item label="閫夋嫨瀹舵棌鎴愬憳">
+ <el-checkbox-group v-model="familyForm.selectedMembers">
+ <el-checkbox
+ v-for="member in familyMembers"
+ :key="member.id"
+ :label="member.id"
+ >
+ {{ member.name }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </el-form-item> -->
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="familyMemberDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="confirmFamilyMember">纭畾</el-button>
+ </span>
+ </el-dialog>
+ </div>
+ </template>
+
+ <script>
+ // 瀵煎叆API璇锋眰鍑芥暟锛堟牴鎹疄闄呴」鐩矾寰勮皟鏁达級
+ import { searchPeople, getModules } from '@/api/peopleSearch';
+import { getFamilyMembers } from '@/api/root'; // 鍋囪鑾峰彇瀹舵棌鎴愬憳鐨凙PI
+
+ export default {
+ name: 'PeopleSearch',
+ data() {
+ return {
+ names: "",
+ selectedModules: [],
+ selectedMemberIds:[],
+ // ... existing data ...
+ familyMemberDialogVisible: false, // 瀹舵棌鎴愬憳閫夋嫨瀵硅瘽妗嗘樉绀虹姸鎬�
+ familyForm: {
+ selectedMember: '', // 鍗曢�夋ā寮�
+ // selectedMembers: [] // 澶氶�夋ā寮�
+ },
+ familyRules: {
+ selectedMember: [
+ { required: true, message: '璇烽�夋嫨瀹舵棌鎴愬憳', trigger: 'change' }
+ ]
+ },
+ familyMembers: [
+ // 瀹舵棌鎴愬憳鏁版嵁锛屽疄闄呴」鐩腑鍙兘浠庢帴鍙h幏鍙�
+ { id: 1, name: '瀹舵棌鎴愬憳1' },
+ { id: 2, name: '瀹舵棌鎴愬憳2' },
+ { id: 3, name: '瀹舵棌鎴愬憳3' },
+ { id: 4, name: '瀹舵棌鎴愬憳4' },
+ { id: 5, name: '瀹舵棌鎴愬憳5' }
+ ],
+ // 鎼滅储琛ㄥ崟鏁版嵁
+ searchForm: {
+ modules: [],
+ dateRange: [],
+ peoples: ''
+ },
+ // 琛ㄥ崟楠岃瘉瑙勫垯
+ searchRules: {
+ // module: [
+ // { required: true, message: '璇烽�夋嫨鎼滅储妯″潡', trigger: 'change' }
+ // ],
+ // dateRange: [
+ // { type: 'array', required: true, message: '璇烽�夋嫨鏃堕棿鑼冨洿', trigger: 'change' }
+ // ]
+ },
+ // 妯″潡鍒楄〃
+ modules: [],
+ // 鎼滅储缁撴灉
+ searchResult: [],
+ // 鍒嗛〉淇℃伅
+ pagination: {
+ currentPage: 1,
+ pageSize: 10,
+ total: 0
+ },
+ // 鍔犺浇鐘舵��
+ loading: false,
+ // 鏄惁鏄剧ず楂樼骇閫夐」
+ showAdvancedOptions: false
+ };
+ },
+ created() {
+ // 鍒濆鍖栭〉闈㈡暟鎹�
+ this.loadFamilyMembers()
+ this.loadModules();
+ },
+ computed: {
+ // 宸查�夋垚鍛樺鍚嶏紙鐢ㄤ簬鍥炴樉锛�
+ selectedMemberNames() {
+ var od = this.familyMembers
+ .filter(member => this.selectedMemberIds.includes(member.userId))
+ .map(member => member.oldName);
+
+ return od
+ },
+ },
+ methods: {
+ // 鍔犺浇瀹舵棌鎴愬憳鍒楄〃
+ async loadFamilyMembers() {
+ this.loading = true;
+
+ let clanId = this.$store.state.user.clanId
+ try {
+ const res = await getFamilyMembers(clanId); // 鍋囪闇�瑕佸鏃廔D鍙傛暟
+
+
+ console.log(res)
+ console.log(res.data)
+ this.familyMembers = res.data;
+ // console.log(this.familyMembers.length)
+ // console.log(this.familyMembers.length)
+ // console.log(this.familyMembers[0])
+ // for(let i=0; i < this.familyMembers.length; i++)
+ // console.log(this.familyMembers[i])
+ // console.log("---999")
+ // 鏍煎紡锛歔{ id: 1, name: '寮犱笁', role: '瀹堕暱', relation: '鐖跺瓙', avatar: 'xxx' }, ...]
+ } catch (err) {
+ this.$message.error('鍔犺浇瀹舵棌鎴愬憳澶辫触锛岃閲嶈瘯');
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 鍔犺浇妯″潡鍒楄〃
+ async loadModules() {
+ try {
+ // const response = await getModules(); response.data ||
+ this.modules = [
+ { label: '浜嬬邯', value: '浜嬬邯' },
+ { label: '閮ㄩ棬绠$悊', value: 'department' },
+ // { label: '瑙掕壊绠$悊', value: 'role' },
+ // { label: '椤圭洰绠$悊', value: 'project' }
+ ];
+ } catch (error) {
+ this.$message.error('鍔犺浇妯″潡鍒楄〃澶辫触');
+ console.error('妯″潡鍔犺浇閿欒:', error);
+ }
+ },
+
+ // 澶勭悊妯″潡鍙樻洿
+ handleModuleChange(module) {
+ console.log('閫夋嫨鐨勬ā鍧�:', module);
+ // 鍙互鏍规嵁閫夋嫨鐨勬ā鍧楀姩鎬佽皟鏁磋〃鍗曢�夐」
+ },
+
+ // 鎼滅储鎸夐挳鐐瑰嚮浜嬩欢
+ async handleSearch() {
+ var nams = this.$store.state.user.name +","+this.selectedMemberNames.join(",")
+
+ this.searchForm.peoples = nams
+ this.names = nams
+ console.log(this.searchForm.module)
+ console.log("----3")
+ this.$refs.searchForm.validate(async (valid) => {
+ if (valid) {
+ this.loading = true;
+ try {
+ // 鏋勫缓鎼滅储鍙傛暟
+ const params = {
+ modules: this.searchForm.modules,
+ startTime: this.searchForm.dateRange[0] || '',
+ endTime: this.searchForm.dateRange[1] || '',
+ peoples: this.searchForm.peoples,
+ // status: this.searchForm.status,
+ pageNum: this.pagination.currentPage,
+ pageSize: this.pagination.pageSize
+ };
+ // alert(23)
+ // 璋冪敤API杩涜鎼滅储
+ const response = await searchPeople(params);
+ console.log(response)
+ // 鏇存柊鎼滅储缁撴灉鍜屽垎椤典俊鎭�
+ this.searchResult = response.data.data || [];
+ console.log(this.searchResult)
+ this.pagination.total = response.data.total || 0;
+
+ this.$message.success(`鎼滅储鎴愬姛锛屽叡鎵惧埌 ${this.pagination.total} 鏉¤褰昤);
+ } catch (error) {
+ this.$message.error('鎼滅储澶辫触锛岃閲嶈瘯');
+ console.error('鎼滅储閿欒:', error);
+ } finally {
+ this.loading = false;
+ }
+ }
+ });
+ },
+
+ // 閲嶇疆琛ㄥ崟
+ handleReset() {
+ this.$refs.searchForm.resetFields();
+ this.searchResult = [];
+ this.pagination = {
+ currentPage: 1,
+ pageSize: 10,
+ total: 0
+ };
+ },
+
+ // 鍒囨崲楂樼骇閫夐」鏄剧ず/闅愯棌
+ toggleAdvancedOptions() {
+ this.showAdvancedOptions = !this.showAdvancedOptions;
+ },
+
+ // 鏍规嵁鍊艰幏鍙栨ā鍧楁爣绛�
+ getModuleLabel(value) {
+ const module = this.modules.find(item => item.value === value);
+ return module ? module.label : value;
+ },
+
+ // 绂佹閫夋嫨鏈潵鏃ユ湡
+ disabledDate(date) {
+ return date > new Date();
+ },
+
+ // 鍒嗛〉鐩稿叧鏂规硶
+ handleSizeChange(val) {
+ this.pagination.pageSize = val;
+ this.pagination.currentPage = 1;
+ this.handleSearch();
+ },
+
+ handleCurrentChange(val) {
+ this.pagination.currentPage = val;
+ this.handleSearch();
+ },
+ handleTagClose(index, name) {
+ // 浠� selectedMemberNames 鏁扮粍涓Щ闄ゅ綋鍓嶅叧闂殑鏍囩鍚嶇О
+ // const index = this.selectedMemberNames.findIndex(item=== name);
+ selectedMemberIds: this.selectedMemberIds.filter(
+ item => item!== index // 杩囨护鎺変笌鍏抽棴鍚嶇О鐩稿悓鐨勫厓绱�
+ )
+ this.$forceUpdate();
+ console.log(this.selectedMemberIds)
+ this.selectedMemberNames.splice(index, 1);
+ this.$forceUpdate();
+ selectedMemberNames: this.selectedMemberNames.filter(
+ item => item !== name // 杩囨护鎺変笌鍏抽棴鍚嶇О鐩稿悓鐨勫厓绱�
+ )
+ console.log(this.selectedMemberNames)
+
+ },
+ // 鏌ョ湅璇︽儏
+ handleView(row) {
+ var id = row.id
+ this.$router.push("/familymodel/bignote/familyeventInfo/" + id);
+ },
+
+ // 缂栬緫
+ handleEdit(row) {
+ this.$router.push({ name: 'PeopleEdit', params: { id: row.id } });
+ },
+
+ // 琛岀偣鍑讳簨浠�
+ handleRowClick(row) {
+ console.log('鐐瑰嚮浜嗚:', row);
+ },
+
+ // 瀵煎嚭缁撴灉
+ exportResult() {
+ this.$confirm('纭畾瑕佸鍑哄綋鍓嶆悳绱㈢粨鏋滃悧锛�', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'info'
+ }).then(() => {
+ // 瀹炵幇瀵煎嚭閫昏緫
+ this.$message.success('瀵煎嚭鎴愬姛');
+ }).catch(() => {
+ this.$message.info('宸插彇娑堝鍑�');
+ });
+ },
+ // 鎵撳紑瀹舵棌鎴愬憳閫夋嫨瀵硅瘽妗�
+ openFamilyMemberDialog() {
+ this.familyMemberDialogVisible = true;
+ },
+ // 纭閫夋嫨瀹舵棌鎴愬憳
+ confirmFamilyMember() {
+ //this.formDat.selectedMemberIds = [...this.selectedMemberIds]; // 灏嗗脊绐楅�変腑鐨処D鍚屾鍒拌〃鍗�
+
+ // this.$message.success(`宸查�夋嫨瀹舵棌鎴愬憳: ${selectedName}`);
+ // 鍙互鍦ㄨ繖閲屽鐞嗛�夋嫨鍚庣殑閫昏緫锛屾瘮濡備繚瀛樺埌鐧诲綍琛ㄥ崟涓�
+ // this.loginForm.familyMemberId = this.familyForm.selectedMember;
+ // this.loginForm.familyMemberName = selectedName;
+
+ this.familyMemberDialogVisible = false;
+
+
+ }
+ }
+ };
+ </script>
+
+ <style scoped lang="scss">
+ .people-search-container {
+ padding: 20px;
+ background-color: #f5f7fa;
+ min-height: calc(100vh - 60px);
+ }
+
+ .page-header {
+ margin-bottom: 20px;
+
+ h2 {
+ margin-bottom: 5px;
+ color: #1f2d3d;
+ }
+
+ p {
+ color: #8391a5;
+ font-size: 14px;
+ }
+ }
+/* 鍙�夛細鏍囩鏍峰紡浼樺寲 */
+.member-tags {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+ margin: 10px 0;
+}
+ .search-card {
+ margin-bottom: 20px;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
+ }
+ ::v-deep .left-align-btn .el-form-item__content {
+ text-align: left; /* 鍏抽敭锛氳缃唴瀹瑰乏瀵归綈 */
+}
+ .search-form {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 5px;
+ padding: 10px 0;
+
+ .el-form-item {
+ margin-bottom: 15px;
+ flex: 1;
+ min-width: 180px;
+ text-align: left;
+ // &.form-actions {
+ // display: flex;
+ // align-items: flex-start;
+ // justify-content: flex-end;
+ // flex: 100%;
+ // }
+ }
+ }
+
+ .advanced-options {
+ border-top: 1px dashed #eaeaea;
+ margin-top: 15px;
+ padding-top: 15px;
+ }
+
+ .result-card {
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
+ padding: 15px;
+ min-height: 400px;
+
+ .el-table {
+ margin-bottom: 15px;
+ }
+ }
+
+ .pagination-container {
+ margin-top: 15px;
+ text-align: right;
+ }
+
+ .no-result {
+ padding: 50px 0;
+ text-align: center;
+ }
+/* 宸查�夋垚鍛樻爣绛炬牱寮� */
+.selected-members {
+ margin-bottom: 12px;
+ .el-tag {
+ margin-right: 8px;
+ margin-bottom: 8px;
+ }
+}
+
+ </style>
diff --git a/ruoyi-ui/src/views/search/peopleSerch.vue b/ruoyi-ui/src/views/search/peopleSerch.vue
new file mode 100644
index 0000000..48d48ea
--- /dev/null
+++ b/ruoyi-ui/src/views/search/peopleSerch.vue
@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>
--
Gitblit v1.9.1