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