From 952a20f1c005d80e9bf881287c40e6f4e4266a0b Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期三, 12 三月 2025 15:34:52 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev

---
 src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue |  364 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 364 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue b/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue
new file mode 100644
index 0000000..04e8033
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue
@@ -0,0 +1,364 @@
+<template>
+  <div>
+    <div class="search-list">
+      <span class="search-input">
+        <span class="search-label">
+          <span style="width: 120px;font-size: 14px;line-height: 32px">浜哄憳鍚嶇О锛�</span>
+          <el-input v-model="entity.name" clearable placeholder="璇疯緭鍏�" size="small" style="width: 100%;"
+            @keyup.enter.native="refreshTable()">
+          </el-input>
+        </span>
+        <el-button size="small" style="margin-left: 10px" @click="refresh()">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+      </span>
+      <span>
+        <el-button :loading="synchronousLoading" size="small" type="primary" @click="synchronous"
+          :v-show="departId">鍚屾绗笁鏂逛汉鍛樹俊鎭�</el-button>
+        <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button>
+        <el-button size="small" type="primary"
+          @click="selectUserDia = true, getList(), queryParams.name = '', multipleSelection = []">鏂板缓</el-button>
+      </span>
+    </div>
+    <div class="search-table">
+      <el-table v-loading="tableLoading" :data="tableData" border height="calc(100vh - 20em)" style="width: 100%;">
+        <el-table-column align="center" label="搴忓彿" width="60">
+          <template v-slot="scope">
+            <span>{{ (page.current - 1) * page.size + scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鍛樺伐缂栧彿" prop="account" width="150"></el-table-column>
+        <el-table-column label="濮撳悕" prop="name" width="120"></el-table-column>
+        <el-table-column label="鍏ラ泦鍥㈡椂闂�" prop="groupTime" width="120"></el-table-column>
+        <el-table-column label="绫嶈疮" prop="nativePlace" width="120"></el-table-column>
+        <el-table-column label="璇佷欢鍙风爜" prop="identityCard" show-overflow-tooltip width="300"></el-table-column>
+        <el-table-column label="璇佷欢鍦板潃" prop="idAddress" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column label="鎵嬫満鍙�" prop="telephone" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column label="姣曚笟闄㈡牎" prop="graduatedInstitutions1" width="100"></el-table-column>
+        <el-table-column label="鎵�瀛︿笓涓�" prop="major1" width="100"></el-table-column>
+        <el-table-column label="姣曚笟鏃堕棿" prop="graduationTime1" width="100"></el-table-column>
+        <el-table-column label="鏈�楂樺鍘�" prop="officialAcademicRedentials" width="100"></el-table-column>
+        <el-table-column label="鏈�楂樺浣�" prop="highestDegree" width="100"></el-table-column>
+        <el-table-column label="鑱岀О" prop="professionalTitle" width="100"></el-table-column>
+        <el-table-column label="绱ф�ヨ仈绯讳汉" prop="emergencyContact" width="120"></el-table-column>
+        <el-table-column label="绱ф�ヨ仈绯荤數璇�" prop="emergencyContactPhone" width="120"></el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔" width="140">
+          <template slot-scope="scope">
+            <el-button size="small" type="text" @click="downPerson(scope.row)">涓嬭浇</el-button>
+            <el-button size="small" type="text" @click="$emit('updatePerson', scope.row)">缂栬緫
+            </el-button>
+            <el-button size="small" type="text" @click="deletePerson(scope.row)">鍒犻櫎
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination :current-page="1" :current-page.sync="page.current" :page-size="page.size"
+        :page-sizes="[10, 20, 30, 50, 100]" :total="page.total" layout="->,total, sizes, prev, pager, next, jumper"
+        style="margin-top: 16px" @size-change="handleSizeChange" @current-change="handleCurrentChange">
+      </el-pagination>
+    </div>
+    <el-dialog :visible.sync="selectUserDia" title="閫夋嫨鐢ㄦ埛" width="70%">
+      <div class="search" style="margin-bottom: 9px;">
+        <div class="search_thing" style="display: flex;">
+          <div class="search_label">鐢ㄦ埛鍚嶏細</div>
+          <div class="search_input">
+            <el-input v-model="queryParams.name" clearable placeholder="璇疯緭鍏�" size="small"
+              @keyup.enter.native="getList()" style="width: 150px;"></el-input>
+          </div>
+        </div>
+      </div>
+      <div v-if="selectUserDia" class="body" style="height: 60vh;">
+        <lims-table :tableData="personTableData" :column="column" :tableLoading="tableLoading"
+          :height="'calc(100vh - 290px)'" :page="personPage" :isSelection="true"
+          :handleSelectionChange="handleSelectionChange"></lims-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="selectUserDia = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="selectUser">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  getEmployees,
+  basicInformationOfPersonnelSelectPage,
+  delUserDepardLimsId,
+  upUserDepardLimsId,
+  exportPersonBasicInfo,
+  exportPersonBasicInfoById,
+  selectUserList,
+} from '@/api/cnas/personnel/personnelInfo.js'
+export default {
+  name: 'PersonnelList',
+  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+  components: { limsTable },
+  props: {
+    departId: {
+      type: Number,
+      default: () => {
+        return null;
+      }
+    },
+    isDepartment: {
+      type: Boolean,
+      default: false
+    },
+    currentCompaniesList: {
+      type: Array,
+      default: []
+    }
+  },
+  data() {
+    // 杩欓噷瀛樻斁鏁版嵁
+    return {
+      entity: {},
+      multipleSelection: [],
+      synchronousLoading: false,
+      page: {
+        size: 20,
+        current: 1,
+      },
+      outLoading: false,
+      tableLoading: false,
+      tableData: [], // 浜哄憳鎬诲垪琛ㄦ暟鎹�
+      selectUserDia: false, // 娣诲姞浜哄憳寮规,
+      stateList: [
+        {
+          value: 1,
+          type: 'success',
+          label: '鍚敤'
+        },
+        {
+          value: 0,
+          type: 'danger',
+          label: '鍋滅敤'
+        }
+      ],
+      queryParams: {
+        name: ''
+      },
+      personTableData: [],
+      column: [
+        { label: "濮撳悕", prop: "name" },
+        { label: "璐﹀彿", prop: "account" },
+        {
+          label: "瑙掕壊",
+          prop: "roleName",
+        },
+        {
+          label: "鐘舵��", prop: "state", dataType: "tag",
+          formatData: (params) => {
+            let index = this.stateList.findIndex(
+              (item) => item.value == params
+            );
+            if (index > -1) {
+              return this.stateList[index].label;
+            } else {
+              return null;
+            }
+          },
+          formatType: (params) => {
+            let index = this.stateList.findIndex(
+              (item) => item.value == params
+            );
+            if (index > -1) {
+              return this.stateList[index].type;
+            } else {
+              return null;
+            }
+          },
+        },
+        { label: "鐢佃瘽鍙风爜", prop: "phone" },
+      ],
+      personPage: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+    };
+  },
+  mounted() {
+    this.refreshTable();
+  },
+  // 鏂规硶闆嗗悎
+  methods: {
+    synchronous() {
+      console.log('departId', this.departId);
+      this.$message.warning("姝e湪鍚屾锛岃绋嶅悗...")
+      this.synchronousLoading = true
+      getEmployees({ departId: this.departId }).then(res => {
+        this.synchronousLoading = false
+        this.$message.success("鍚屾鎴愬姛")
+      })
+    },
+    /**
+     * @desc 鑾峰彇璁惧id
+     */
+    // 閲嶇疆
+    refresh() {
+      this.page = {
+        size: 20,
+        current: 1,
+      };
+      this.entity.name = ''
+      this.refreshTable();
+    },
+    // 鏌ヨ浜哄憳鍒楄〃鏁版嵁
+    refreshTable(entity, type) {
+      try {
+        this.tableLoading = true;
+        this.entity.departmentId = this.departId;
+        let params = { ...this.page, ...this.entity }
+        delete params.total
+        basicInformationOfPersonnelSelectPage(params).then(res => {
+          this.tableLoading = false;
+          if (res.code === 201) {
+            return;
+          }
+          this.page.total = res.data.total;
+          this.tableData = res.data.records;
+        });
+      } catch (e) {
+        this.tableLoading = false;
+      }
+    },
+    // 鍒犻櫎浜哄憳
+    deletePerson(row) {
+      this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', '璀﹀憡', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      })
+        .then(() => {
+          delUserDepardLimsId({ id: row.id }).then(res => {
+            if (res.code === 201) {
+              return;
+            }
+            this.$message.success('鍒犻櫎鎴愬姛');
+            this.refreshTable();
+          })
+            .catch(e => {
+              this.$message.error('鍒犻櫎澶辫触');
+            });
+        })
+        .catch(() => {
+        });
+    },
+    handleSizeChange(val) {
+      this.page.size = val;
+      this.refreshTable();
+    },
+    handleCurrentChange(val) {
+      this.page.current = val;
+      this.refreshTable();
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val
+    },
+    selectUser() {
+      if (!this.currentCompaniesList.length > 0) {
+        this.$message.warning("璇烽�夋嫨閮ㄩ棬锛�")
+        return;
+      }
+      let selects = this.multipleSelection;
+      if (selects.length == 0) {
+        this.$message.error('鏈�夋嫨鏁版嵁');
+        return;
+      }
+      let ids = [];
+      selects.forEach(a => {
+        ids.push(a.id);
+      });
+      let str = '';
+      this.currentCompaniesList.forEach(a => {
+        if (a) {
+          str += a + ',';
+        }
+      });
+      this.selectUserDia = false;
+      upUserDepardLimsId({
+        ids: JSON.stringify(ids),
+        id: str
+      }).then(res => {
+        if (res.code === 201) {
+          return;
+        }
+        this.$message.success('娣诲姞鎴愬姛');
+        this.refreshTable();
+      });
+      this.$emit('refreshTree')
+    },
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.personPage };
+      delete param.total;
+      selectUserList({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.personTableData = res.data;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.personPage.current = page;
+      this.personPage.size = limit;
+      this.getList();
+    },
+    handleDown() {
+      this.outLoading = true;
+      let entity = this.HaveJson(this.entity)
+      exportPersonBasicInfo(entity).then(res => {
+        this.outLoading = false;
+        if (res.code === 201) {
+          return;
+        }
+        const blob = new Blob([res], { type: 'application/octet-stream' });
+        this.$download.saveAs(blob, '浜哄憳淇℃伅.xlsx')
+      });
+    },
+    downPerson(row) {
+      exportPersonBasicInfoById({ id: row.userId }).then(res => {
+        this.$download.saveAs(res.data, res.data)
+        this.$message.success('涓嬭浇鎴愬姛')
+      });
+    }
+  },
+  watch: {
+    departId: {
+      handler(newId, oldId) {
+        if (newId) {
+          this.page.current = 1
+          this.refreshTable();
+        }
+      }
+    }
+  }
+};
+</script>
+
+<style scoped>
+.search-list {
+  padding: 0 16px 16px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search-table {
+  padding: 0 16px;
+}
+
+.search-input {
+  display: flex;
+}
+
+.search-label {
+  display: flex;
+}
+</style>

--
Gitblit v1.9.3