From dc3af0cbb4a6d105bdff497b510cc0a87b3e8d0a Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 28 二月 2025 17:53:44 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev
---
src/views/CNAS/personnel/personnelInfo/components/Edit.vue | 452 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 452 insertions(+), 0 deletions(-)
diff --git a/src/views/CNAS/personnel/personnelInfo/components/Edit.vue b/src/views/CNAS/personnel/personnelInfo/components/Edit.vue
new file mode 100644
index 0000000..3992697
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/components/Edit.vue
@@ -0,0 +1,452 @@
+<template>
+ <div>
+ <div class="page-header">
+ <h4><span class="line"></span><span>鍩硅涓庤�冩牳璁板綍</span></h4>
+ <div class="btns">
+ <el-button size="small" type="primary" @click="submitForm(3)" v-if="this.currentRow.state !== 1">鎾ら攢</el-button>
+ <el-button size="small" type="primary" @click="submitForm(0)" v-if="this.currentRow.state !== 1">鎻愪氦</el-button>
+ <el-button size="small" @click="$emit('goBack')">杩斿洖</el-button>
+ </div>
+ </div>
+ <div class="form_title">
+ <el-row>
+ <el-col :span="7">
+ <span class="form_label">鍩硅鍐呭锛�</span>
+ <span> {{ trainingForm.trainingContent }} </span>
+ </el-col>
+ <el-col :span="5">
+ <span class="form_label">鐘舵�侊細</span>
+ <el-tag v-if="trainingForm.state === 1" type="success">宸插畬鎴�</el-tag>
+ <el-tag v-if="trainingForm.state === 2" type="warning">寰呰瘎浠�</el-tag>
+ <el-tag v-if="trainingForm.state === 3" type="primary">鏈紑濮�</el-tag>
+ </el-col>
+ <el-col :span="4">
+ <span class="form_label">鍩硅璁插笀锛�</span>
+ <span> {{ trainingForm.trainingLecturerName }} </span>
+ </el-col>
+ </el-row>
+ <el-row style="margin: 15px 0">
+ <el-form>
+ <el-row>
+ <el-col :span="5">
+ <el-form-item label="鍩硅鏃ユ湡:">
+ <el-date-picker v-model="trainingForm.openingTime" format="yyyy-MM-dd" :disabled="currentRow.state !== 3"
+ placeholder="閫夋嫨鏃ユ湡" size="small" value-format="yyyy-MM-dd"
+ type="date" style="width: 60%"></el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="7">
+ <el-form-item label="鍩硅鍦扮偣">
+ <el-input v-model="trainingForm.placeTraining" :disabled="currentRow.state !== 3" :rows="2" placeholder="璇疯緭鍏�"
+ size="small" style="width: 60%" type="text"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="璇勪环浜�">
+ <el-select v-model="trainingForm.assessmentUserId" :disabled="currentRow.state !== 3" placeholder="璇烽�夋嫨" size="small" style="width: 50%">
+ <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑰冩牳鏂瑰紡">
+ <el-input v-model="trainingForm.assessmentMethod" :disabled="currentRow.state !== 3" :rows="2" placeholder="璇疯緭鍏�"
+ size="small" style="width: 79%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="璇勪环鏃堕棿">
+ <el-date-picker v-model="trainingForm.assessmentDate" :disabled="currentRow.state !== 2 || isDisabled"
+ type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" size="small"
+ placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈鍩硅缁煎悎璇勪环">
+ <el-input v-model="trainingForm.comprehensiveAssessment" :disabled="currentRow.state !== 2 || isDisabled" :rows="2" placeholder="璇疯緭鍏�"
+ size="small" style="width: 68%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-row>
+ </div>
+ <el-divider>浜哄憳璇︽儏</el-divider>
+ <div>
+ <div class="items_center">
+ <span>濮撳悕</span>
+ <el-input v-model="userName" class="search" placeholder="璇疯緭鍏�"
+ size="small"></el-input>
+ <el-button size="small" type="primary" @click="getInfo">鏌ヨ</el-button>
+ </div>
+ <div class="items_btn">
+ <el-button :disabled="currentRow.state === 1" size="small" type="primary" @click="addPerson">鏂板浜哄憳</el-button>
+ <el-button :disabled="currentRow.state === 1" size="small" @click="batchDelete">鎵归噺鍒犻櫎</el-button>
+ </div>
+ <el-table :data="trainingTableData" height="calc(100vh - 30em)" stripe style="width: 100%"
+ @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column label="搴忓彿" type="index" width="60"></el-table-column>
+ <el-table-column label="濮撳悕" prop="userName"></el-table-column>
+ <el-table-column label="宸ュ彿" prop="account"></el-table-column>
+ <el-table-column label="瑙掕壊" prop="roleName"></el-table-column>
+ <el-table-column label="鐢佃瘽鍙风爜" prop="phone"></el-table-column>
+ <el-table-column label="鑰冩牳缁撴灉" prop="examinationResults">
+ <template v-slot="scope">
+ <el-input v-model="scope.row.examinationResults" :disabled="currentRow.state === 1" clearable size="small" style="width: 100%" @blur="updatePersonResult(scope.row)"></el-input>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <el-dialog :visible.sync="selectUserDia" title="閫夋嫨鐢ㄦ埛" width="70%">
+ <div class="search" style="margin-bottom: 9px;">
+ <div class="search_thing">
+ <div class="search_label">鐢ㄦ埛鍚嶏細</div>
+ <div class="search_input">
+ <el-input
+ v-model="addUserTableInfo.name"
+ clearable
+ placeholder="璇疯緭鍏�"
+ size="small"
+ @keyup.enter.native="selectUserList"
+ ></el-input>
+ </div>
+ </div>
+ </div>
+ <div v-if="selectUserDia" class="body" style="height: 60vh;">
+ <lims-table :tableData="tableData1" :column="column1"
+ :isSelection="true" :handleSelectionChange="selectMethod"
+ @pagination="pagination1" :height="'calc(100vh - 290px)'"
+ :page="page1" :tableLoading="tableLoading1"></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 {selectUserCondition} from "@/api/business/inspectionTask";
+import {mapGetters} from "vuex";
+import {
+ newPersonnelAddedToTrainingRecords,
+ outOfFocusPreservation, trainingAndAssessmentRecordsAdded, trainingAndAssessmentRecordsEvaluate,
+ trainingAndAssessmentRecordsPage
+} from "@/api/cnas/personal/personalTraining";
+
+export default {
+ name: 'Edit',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {limsTable},
+ props: {
+ currentRow: {
+ type: Object,
+ default: () => {
+ return {}
+ }
+ },
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ isSelectedList: [], // 绂佺敤鐨勫閫�
+ userName: undefined,
+ trainingForm: {
+ code: '111111',
+ date: '2024-10-10',
+ },
+ trainingColumn: [
+ {
+ label: '濮撳悕',
+ prop: 'userName'
+ },
+ {
+ label: '宸ュ彿',
+ prop: 'account'
+ },
+ {
+ label: '瑙掕壊',
+ prop: 'roleName'
+ },
+ {
+ label: '鐢佃瘽鍙风爜',
+ prop: 'phone'
+ },
+ {
+ label: '鑰冩牳缁撴灉',
+ prop: 'result'
+ }
+ ],
+ trainingTableData: [],
+ trainingLoading: false,
+ isDisabled: false,
+ selectUserDia: false, // 娣诲姞浜哄憳寮规
+ tableData1: [],
+ tableLoading1: false,
+ column1: [
+ {label: '濮撳悕', prop: 'name'},
+ {label: '璐﹀彿', prop: 'account'},
+ {label: '瑙掕壊', prop: 'roleName'},
+ {
+ dataType: 'tag',
+ label: '鐘舵��',
+ prop: 'status',
+ formatData: (params) => {
+ if (params == 0) {
+ return '鍚敤'
+ } else {
+ return ''
+ }
+ },
+ formatType: (params) => {
+ if (params == 0) {
+ return 'success'
+ } else {
+ return 'danger'
+ }
+ }
+ },
+ {label: '鐢佃瘽鍙风爜', prop: 'phone'},
+ ],
+ page1: {
+ total:0,
+ size:10,
+ current:1
+ },
+ addUserTableInfo: {
+ name: null,
+ },
+ multipleSelection: [],
+ userList: [],
+ };
+ },
+ computed: {
+ ...mapGetters(["userId"]),
+ },
+ mounted() {
+ this.trainingForm = this.currentRow
+ this.getInfo()
+ this.getUserList()
+ this.isDisabled = this.trainingForm.assessmentUserId !== this.userId
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鑾峰彇褰撳墠鏁版嵁
+ async getInfo() {
+ this.trainingLoading = true
+ await trainingAndAssessmentRecordsPage({
+ trainingDetailedId: this.currentRow.id,
+ userName: this.userName
+ }).then(res => {
+ if (res.code === 200) {
+ this.trainingTableData = res.data
+ }
+ this.trainingLoading = false
+ })
+ },
+ updatePersonResult(row) {
+ outOfFocusPreservation(row).then(res => {
+ this.$message.success("鎿嶄綔鎴愬姛锛�")
+ })
+ },
+ addPerson() {
+ this.isSelectedList = this.trainingTableData.map(item => item.userId)
+ this.selectUserDia = true;
+ },
+ selectUserList () {
+ this.tableLoading1 = true
+ selectUserCondition({...this.addUserTableInfo}).then(res => {
+ this.tableData1 = res.data.records
+ this.page1.total = res.data.total
+ }).catch(err => {
+ this.tableLoading1 = false
+ })
+ },
+ pagination1 (page) {
+ this.page1.size = page.limit
+ this.selectUserList()
+ },
+ // 琛ㄦ牸閫夋嫨鏂规硶
+ selectMethod(val) {
+ this.multipleSelection = val
+ },
+ selectUser() {
+ let selects = this.multipleSelection;
+ if (selects.length == 0) {
+ this.$message.error('鏈�夋嫨鏁版嵁');
+ return;
+ }
+ let list = []
+ selects.forEach(a => {
+ const obj = {
+ courseId: this.currentRow.id,
+ examinationResults: "",
+ userId: a.id
+ }
+ list.push(obj)
+ });
+ newPersonnelAddedToTrainingRecords(list).then(res => {
+ this.isSelectedList = []
+ this.selectUserDia = false;
+ this.getInfo()
+ })
+ },
+ // 鎵归噺鍒犻櫎
+ handleSelectionChange(list) {
+ this.multipleSelection = list
+ },
+ batchDelete() {
+ if (this.multipleSelection.length > 0) {
+ let ids = this.multipleSelection.map(item => item.trainingRecordId)
+ this.$confirm('鏄惁纭鍒犻櫎鎵�閫夋嫨鐨勬暟鎹�?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ let formData = new FormData()
+ formData.append('ids', ids)
+ deleteTrainingAndAssessmentRecords(formData).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛');
+ this.getInfo()
+ }
+ });
+ }).catch(() => {
+ this.$message.warning('鍙栨秷鍒犻櫎');
+ });
+ } else {
+ this.$message.warning('璇烽�夋嫨闇�瑕佸垹闄ょ殑鏁版嵁')
+ }
+ },
+ handleSizeChange(val) {
+ this.search.size = val;
+ this.getInfo();
+ },
+ handleCurrentChange(val) {
+ this.search.current = val;
+ this.getInfo();
+ },
+ /**
+ * @desc 鎻愪氦琛ㄥ崟
+ */
+ async submitForm(status) {
+ let state = this.currentRow.state
+ if (this.trainingForm.assessmentUserId) {
+ state = 2
+ }
+ if (this.trainingForm.comprehensiveAssessment) {
+ state = 1
+ }
+ if (status === 3) {
+ state = 3
+ }
+ let data = {
+ assessmentMethod: this.trainingForm.assessmentMethod,
+ openingTime: this.trainingForm.openingTime,
+ placeTraining: this.trainingForm.placeTraining,
+ comprehensiveAssessment: this.trainingForm.comprehensiveAssessment,
+ trainingDetailedId: this.trainingForm.id,
+ assessmentUserId: this.trainingForm.assessmentUserId,
+ assessmentDate: this.trainingForm.assessmentDate,
+ state: state
+ }
+ let code = {}
+ if (state === 2) {
+ code = await trainingAndAssessmentRecordsAdded(data)
+ } else {
+ code = await trainingAndAssessmentRecordsEvaluate(data)
+ }
+ this.isDisabled = this.trainingForm.assessmentUserId !== this.userId
+ if(code.code === 200) {
+ this.currentRow.state = state
+ this.$message.success("鎿嶄綔鎴愬姛")
+ }
+ },
+ getUserList(){
+ selectUserCondition({ type: 0 }).then((res) => {
+ this.userList = res.data;
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+.page-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 20px;
+ margin-bottom: 10px;
+}
+
+h4 {
+ display: flex;
+ align-items: center;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.form_title {
+ font-size: 14px;
+ padding: 0 20px;
+ margin-bottom: 10px;
+}
+
+.el-divider {
+ margin: 0 1em 1em 0;
+}
+
+.form__input_label {
+ width: 90px;
+ margin-right: 6px;
+ color: #606266;
+}
+
+.form__input_label2 {
+ width: 210px;
+ margin-right: 6px;
+ color: #606266;
+}
+.search_thing {
+ display: flex;
+ align-items: center
+}
+.search_label {
+ width: 120px;
+}
+.pagination {
+ display: flex;
+ justify-content: space-between
+}
+
+.items_center {
+ float: left;
+ width: 50%;
+ text-align: left;
+}
+.items_btn {
+ text-align: right;
+ width: 50%;
+ float: right;
+ margin-bottom: 1em;
+}
+
+.search {
+ width: 180px;
+ padding: 0 16px;
+}
+</style>
--
Gitblit v1.9.3