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/PersonnelTraining/Edit.vue | 662 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 662 insertions(+), 0 deletions(-)
diff --git a/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelTraining/Edit.vue b/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelTraining/Edit.vue
new file mode 100644
index 0000000..b880fd0
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelTraining/Edit.vue
@@ -0,0 +1,662 @@
+<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" :disabled="![1, 4].includes(currentRow.state)">{{
+ currentRow.assessmentUserId ? '淇濆瓨' : '鎻愪氦' }}</el-button>
+ <el-button size="small" @click="$emit('goBack')">杩斿洖</el-button>
+ </div>
+ </div>
+ <div class="form_title">
+ <el-row>
+ <el-col :span="5">
+ <span class="form_label">璇剧▼缂栧彿锛�</span>
+ <span> {{ trainingForm.courseCode }} </span>
+ </el-col>
+ <el-col :span="6">
+ <span class="form_label">鍩硅鍐呭锛�</span>
+ <span> {{ trainingForm.trainingContent }} </span>
+ </el-col>
+ <el-col :span="4">
+ <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-tag v-if="trainingForm.state === 4" type="info">宸茬粨鏉�</el-tag>
+ </el-col>
+ <el-col :span="4">
+ <span class="form_label">鍩硅璁插笀锛�</span>
+ <span> {{ trainingForm.trainingLecturerId }} </span>
+ </el-col>
+ <el-col :span="4">
+ <span class="form_label">鍩硅鏃ユ湡锛�</span>
+ <span> {{ trainingForm.trainingDate }} </span>
+ </el-col>
+ </el-row>
+ <el-row style="margin: 15px 0">
+ <el-form>
+ <el-col :span="12">
+ <el-form-item label="鑰冩牳鏂瑰紡">
+ <el-input v-model="trainingForm.assessmentMethod"
+ :disabled="currentRow.state == 1 || currentRow.assessmentUserId" :rows="2" placeholder="璇疯緭鍏�"
+ size="small" style="width: 79%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈鍩硅缁煎悎璇勪环">
+ <el-input v-model="trainingForm.comprehensiveAssessment"
+ :disabled="currentRow.state == 1 || ((currentRow.assessmentUserId !== user.userId) && ![35, 16, 36].includes(user.userId)) || !currentRow.assessmentUserId"
+ :rows="2" placeholder="璇疯緭鍏�" size="small" style="width: 68%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璇勪环浜�">
+ <el-select v-model="trainingForm.assessmentUserId"
+ :disabled="currentRow.state == 1 || currentRow.assessmentUserId" placeholder="璇烽�夋嫨" size="small"
+ style="width: 68%">
+ <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-date-picker v-model="trainingForm.assessmentDate"
+ :disabled="currentRow.state == 1 || ((currentRow.assessmentUserId !== user.userId) && ![35, 16, 36].includes(user.userId)) || !currentRow.assessmentUserId"
+ style="width:40%" 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.trainingAbstract"
+ :disabled="currentRow.state == 1 || currentRow.assessmentUserId" :rows="2" placeholder="璇疯緭鍏�"
+ size="small" style="width: 79%" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item>
+ <!-- <el-upload
+ ref="upload"
+ :action="action"
+ :before-upload="beforeUpload"
+ :on-error="onError"
+ :data="uploadData"
+ :headers="uploadHeader"
+ :on-success="attachmentUpload"
+ >
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload> -->
+ <el-button type="primary" size="small" @click="attachmentFrame = true">闄勪欢</el-button>
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="12" :offset="12">
+ <el-image
+ v-if="currentRow.url"
+ style="width: 70%; height: 100px"
+ :src="javaApi + '/img/' + currentRow.url">
+ </el-image>
+ </el-col> -->
+ </el-form>
+ </el-row>
+ </div>
+ <!-- 鏂囦欢棰勮 -->
+ <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" width="800px">
+ <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="previewFile"
+ style="height: 90vh;overflow-y: auto;top: 0" />
+ </el-dialog>
+ <!-- 闄勪欢寮规 -->
+ <el-dialog title="闄勪欢" :visible.sync="attachmentFrame" width="70%" border :before-close="handleClose">
+ <el-upload ref="upload" :action="action" :before-upload="beforeUpload" :on-error="onError" :data="uploadData"
+ :headers="uploadHeader" :on-success="attachmentUpload" style="margin-bottom: 10px">
+ <el-button size="small" type="primary" :disabled="currentRow.state == 1">涓婁紶闄勪欢</el-button>
+ </el-upload>
+ <el-table ref="fileData" :data="fileData" height="400px">
+ <el-table-column label="搴忓彿" type="index" width="100" header-align="center" align="center">
+ </el-table-column>
+ <el-table-column label="鏂囦欢鍚嶇О" prop="fileName" header-align="center" align="center">
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" fixed="right" width="200px" header-align="center" align="center">
+ <template slot-scope="scope">
+ <el-button type="text" size="small" @click="preview(scope.row)">棰勮</el-button>
+ <el-button type="text" size="small" @click="download(scope.row)">涓嬭浇</el-button>
+ <el-button type="text" style="color: red;" size="small" @click="deleteFile(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="attachmentFrame = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="attachmentFrame = false">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+
+
+ <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-select v-model="scope.row.examinationResults" :disabled="currentRow.state === 1" size="small"
+ style="width: 100%" @change="updatePersonResult(scope.row)">
+ <el-option label="鍚堟牸" value="鍚堟牸"></el-option>
+ <el-option label="涓嶅悎鏍�" value="涓嶅悎鏍�"></el-option>
+ </el-select>
+ </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="queryParams.name" clearable placeholder="璇疯緭鍏�" size="small"
+ @keyup.enter.native="$refs.ValueTable.selectList()"></el-input>
+ </div>
+ </div>
+ </div>
+ <div v-if="selectUserDia" class="body" style="height: 60vh;">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
+ :page="page" @pagination="pagination" :isSelection="true"
+ :handleSelectionChange="handleSelectionChange"></lims-table>
+ <!-- <ValueTable ref="ValueTable" :componentData="addUserTableInfo" :isSelectedList="isSelectedList"
+ :url="$api.user.selectUserList" /> -->
+ </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 TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+// import ValueTable from '@/components/Table/value-table.vue';
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+ fileDownLoad,
+ deleteFile,
+ getFileData,
+ trainingAndAssessmentRecordsPage,
+ outOfFocusPreservation,
+ newPersonnelAddedToTrainingRecords,
+ deleteTrainingAndAssessmentRecords,
+ trainingAndAssessmentRecordsAdded,
+ selectUserList,
+} from '@/api/cnas/personnel/personnelInfo.js'
+import { selectUserCondition } from "@/api/system/user";
+import { mapGetters } from "vuex";
+export default {
+ name: 'Edit',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { limsTable, TableCard, filePreview },
+ props: {
+ currentRow: {
+ type: Object,
+ default: () => {
+ return {}
+ }
+ },
+ },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ previewFile: '',
+ lookDialogVisible: false,
+ user: {},
+ fileData: [],
+ attachmentFrame: false,
+ isSelectedList: [], // 绂佺敤鐨勫閫�
+ userName: undefined,
+ trainingForm: {
+ code: '111111',
+ date: '2024-10-10',
+ },
+ uploadData: {},
+ trainingColumn: [
+ {
+ label: '濮撳悕',
+ prop: 'userName'
+ },
+ {
+ label: '宸ュ彿',
+ prop: 'account'
+ },
+ {
+ label: '瑙掕壊',
+ prop: 'roleName'
+ },
+ {
+ label: '鐢佃瘽鍙风爜',
+ prop: 'phone'
+ },
+ {
+ label: '鑰冩牳缁撴灉',
+ prop: 'result'
+ }
+ ],
+ trainingTableData: [],
+ trainingLoading: false,
+ selectUserDia: false, // 娣诲姞浜哄憳寮规
+ addUserTableInfo: {
+ name: null,
+ entity: {
+ departLimsId: '1',
+ orderBy: {
+ field: 'id',
+ order: 'asc'
+ }
+ },
+ isIndex: true,
+ showSelect: true,
+ select: true,
+ do: [],
+ tagField: {
+ state: {
+ select: [
+ {
+ value: 1,
+ type: 'success',
+ label: '鍚敤'
+ },
+ {
+ value: 0,
+ type: 'danger',
+ label: '鍋滅敤'
+ }
+ ]
+ }
+ },
+ selectField: {},
+ upUserDepardLimsIdPower: true
+ },
+ multipleSelection: [],
+ multipleSelections: [],
+ userList: [],
+ stateList: [
+ {
+ value: 1,
+ type: 'success',
+ label: '鍚敤'
+ },
+ {
+ value: 0,
+ type: 'danger',
+ label: '鍋滅敤'
+ }
+ ],
+ queryParams: {},
+ tableData: [],
+ 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" },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ };
+ },
+ computed: {
+ action() {
+ return this.javaApi + '/personTraining/fileUpload';
+ },
+ ...mapGetters(["userId"]),
+ },
+ mounted() {
+ this.trainingForm = JSON.parse(JSON.stringify(this.currentRow))
+ this.getInfo()
+ this.getUserList()
+ this.getFileData(this.trainingForm.id)
+ // 鑾峰彇褰撳墠鐧诲綍浜轰俊鎭�
+ this.loginPerson();
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 闄勪欢棰勮
+ preview(row) {
+ let folder = '';
+ if (row.fileUrl.includes('xls')) {
+ folder = 'excel'
+ } else if (row.fileUrl.includes('docx')) {
+ folder = 'word'
+ } else {
+ folder = 'img'
+ }
+ this.previewFile = this.javaApi + folder + row.fileUrl
+ this.$nextTick(() => {
+ this.lookDialogVisible = true
+ })
+ },
+ // 涓嬭浇
+ download(row) {
+ fileDownLoad({ id: row.id }).then(res => {
+ console.log('2123');
+ const blob = new Blob([res], { type: row.mime });
+ this.$download.saveAs(blob, row.fileName)
+ })
+ },
+
+ // 鍒犻櫎
+ deleteFile(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteFile({ id: row.id }).then(res => {
+ this.$message({
+ type: 'success',
+ message: '鍒犻櫎鎴愬姛!'
+ });
+ this.getFileData(this.trainingForm.id);
+ })
+ })
+
+ },
+ // 鏌ヨ
+ getFileData(id) {
+ getFileData({ detailedId: id }).then(res => {
+ this.fileData = res.data
+ })
+ },
+ // 闄勪欢涓婁紶 鎴愬姛鐨勯挬瀛�
+ attachmentUpload(res, file, fileList) {
+ // 缁欏浘鐗囪矾寰勮祴鍊�
+ this.$message.success('涓婁紶鎴愬姛')
+ this.currentRow.url = res.data.url
+ this.$refs.upload.clearFiles();
+ this.getFileData(this.trainingForm.id);
+ },
+ // 澶辫触鐨勯挬瀛�
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ },
+ // 涓婁紶鍓嶇殑閽╁瓙
+ beforeUpload(file) {
+ // 缁欎紶閫掔殑鍙傛暟璧嬪��
+ this.$set(this.uploadData, "id", this.currentRow.id)
+ },
+ // 褰撳墠鐧诲綍浜轰俊鎭�
+ loginPerson() {
+ this.user = {
+ userId: this.userId
+ }
+ },
+ // 鑾峰彇褰撳墠鏁版嵁
+ async getInfo() {
+ this.trainingLoading = true
+ trainingAndAssessmentRecordsPage({
+ trainingDetailedId: this.currentRow.id,
+ userName: this.userName
+ }).then(res => {
+ if (res.code === 200) {
+ this.trainingTableData = res.data
+ }
+ this.trainingLoading = false
+ })
+ },
+ async updatePersonResult(row) {
+ const { code } = await outOfFocusPreservation(row)
+ if (code === 200) {
+ this.$message.success("鎿嶄綔鎴愬姛锛�")
+ }
+ },
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ selectUserList({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.getList();
+ },
+ handleSelectionChange(val) {
+ this.multipleSelections = val
+ },
+ addPerson() {
+ this.isSelectedList = this.trainingTableData.map(item => item.userId)
+ this.getList()
+ this.selectUserDia = true;
+ },
+ selectUser() {
+ let selects = this.multipleSelections;
+ 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)
+ // this.trainingTableData.push(obj);
+ });
+ newPersonnelAddedToTrainingRecords(list).then(res => {
+ this.isSelectedList = []
+ this.selectUserDia = false;
+ this.getInfo()
+ })
+ },
+ // 鎵归噺鍒犻櫎
+ handleSelectionChange(list) {
+ this.multipleSelection = list
+ },
+ batchDelete() {
+ console.log('鎵归噺鍒犻櫎', this.multipleSelection)
+ 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() {
+ console.log('this.currentRow.state', this.currentRow.state);
+ if (this.currentRow.state !== 4 && this.currentRow.state !== 1) {
+ this.$message.warning("褰撳墠鐘舵�佹棤娉曟彁浜�/鎾ら攢锛�")
+ return
+ }
+ // 濡傛灉绛変簬4 琛ㄧず璇ョ姸鎬佷负宸茬粨鏉燂紝1 琛ㄧず宸插畬鎴�
+ let state = 4
+ if (this.currentRow.assessmentUserId == this.user.userId) {
+ state = 1
+ }
+ let data = {
+ assessmentMethod: this.trainingForm.assessmentMethod,
+ comprehensiveAssessment: this.trainingForm.comprehensiveAssessment,
+ trainingDetailedId: this.trainingForm.id,
+ assessmentUserId: this.currentRow.assessmentUserId ? this.currentRow.assessmentUserId : this.trainingForm.assessmentUserId,
+ assessmentDate: this.trainingForm.assessmentDate,
+ state: state,
+ trainingAbstract: this.trainingForm.trainingAbstract
+ }
+ const { code } = await trainingAndAssessmentRecordsAdded(data)
+ if (code === 200) {
+ this.currentRow.state = state
+ this.$message.success("鎿嶄綔鎴愬姛")
+ // this.$emit('refresh',this.currentRow.id)
+ }
+ },
+ getUserList() {
+ selectUserCondition().then(res => {
+ if (res.code === 201) {
+ return
+ }
+ this.userList = res.data
+ })
+ },
+ handleClose() {
+ this.attachmentFrame = false;
+ },
+ }
+};
+</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