From c87ec8dac5f2b8f16036b794850b8f4e552a71d7 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 28 二月 2025 15:40:04 +0800
Subject: [PATCH] 人员-任职授权记录搬迁
---
src/views/CNAS/personnel/personnelInfo/index.vue | 6
src/views/CNAS/personnel/personnelInfo/components/mandateAdd.vue | 200 ++++++++++++++++++
src/api/cnas/personal/personPostAuthorizationRecord.js | 35 +++
src/views/CNAS/personnel/personnelInfo/tabs/mandate.vue | 404 +++++++++++++----------------------
4 files changed, 391 insertions(+), 254 deletions(-)
diff --git a/src/api/cnas/personal/personPostAuthorizationRecord.js b/src/api/cnas/personal/personPostAuthorizationRecord.js
new file mode 100644
index 0000000..b3be2eb
--- /dev/null
+++ b/src/api/cnas/personal/personPostAuthorizationRecord.js
@@ -0,0 +1,35 @@
+import request from "@/utils/request";
+
+// 浠昏亴鎺堟潈璁板綍鏌ヨ琛ㄦ牸
+export function PersonPostAuthorizationRecordPage(query) {
+ return request({
+ url: "/personPostAuthorizationRecord/PersonPostAuthorizationRecordPage",
+ method: "get",
+ params: query
+ });
+}
+// 浠昏亴鎺堟潈璁板綍鍒犻櫎
+export function deletePersonPostAuthorizationRecord(query) {
+ return request({
+ url: "/personPostAuthorizationRecord/deletePersonPostAuthorizationRecord",
+ method: "delete",
+ params: query
+ });
+}
+// 浠昏亴鎺堟潈瀵煎嚭
+export function exportPersonPostAuthorizationRecord(query) {
+ return request({
+ url: "/personPostAuthorizationRecord/exportPersonPostAuthorizationRecord",
+ method: "get",
+ params: query,
+ responseType: "blob"
+ });
+}
+// 浠昏亴鎺堟潈瀵煎嚭
+export function addOrUpdatePersonPostAuthorizationRecord(query) {
+ return request({
+ url: "/personPostAuthorizationRecord/addOrUpdatePersonPostAuthorizationRecord",
+ method: "post",
+ data: query,
+ });
+}
diff --git a/src/views/CNAS/personnel/personnelInfo/components/mandateAdd.vue b/src/views/CNAS/personnel/personnelInfo/components/mandateAdd.vue
new file mode 100644
index 0000000..9e77475
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/components/mandateAdd.vue
@@ -0,0 +1,200 @@
+<template>
+ <div class="add">
+ <el-dialog
+ :title="isEdit ?'缂栬緫闄勪欢璧勬枡':'鏂板闄勪欢璧勬枡'"
+ :visible.sync="dialogVisible"
+ width="50%"
+ >
+ <el-form
+ ref="ruleForm"
+ :rules="rules"
+ :model="form"
+ label-width="130px"
+ size="medium"
+ >
+ <el-form-item label="璇佷功缂栧彿" prop="certificateNumber">
+ <el-input v-model="form.certificateNumber" placeholder="璇疯緭鍏�" style="width: 100%">
+ </el-input>
+ </el-form-item >
+ <el-form-item label="琚换鑱屼汉鍛�" prop="userId">
+ <el-select v-model="form.userId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(item, index) in userList"
+ :key="index"
+ :label="item.name"
+ :value="item.id"
+ ></el-option>
+ </el-select>
+ </el-form-item >
+ <el-form-item label="浠昏亴宀椾綅" prop="post">
+ <el-input v-model="form.post" placeholder="璇疯緭鍏�"></el-input>
+ </el-form-item >
+ <el-form-item label="鐞嗚鑰冭瘯鎴愮哗" prop="num1">
+ <el-input v-model="form.num1" placeholder="璇疯緭鍏�"></el-input>
+ </el-form-item >
+ <el-form-item label="鎿嶄綔鎶�鑳借�冭瘯鎴愮哗" prop="num2">
+ <el-input v-model="form.num2" placeholder="璇疯緭鍏�"></el-input>
+ </el-form-item >
+ <el-form-item label="鎿嶄綔绫诲瀷" prop="operationType">
+ <el-input v-model="form.operationType" placeholder="璇烽�夋嫨"></el-input>
+ </el-form-item >
+ <el-row>
+ <el-col :span="20">
+ <el-form-item label="涓婂矖璇佷功">
+ <el-input v-model="form.systemFileName" size="small" disabled>
+ <el-button slot="append" icon="el-icon-delete-solid"
+ @click="deleteFile(form.systemFileName)"></el-button>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <el-upload ref="upload" style="float: left; margin: 0 12px 0 20px;" :action="action"
+ :headers="uploadHeader"
+ :show-file-list="false"
+ :on-success="onSuccess">
+ <el-button class="uploadFile" slot="trigger" size="small" type="primary">涓婁紶</el-button>
+ </el-upload>
+ </el-col>
+ </el-row>
+ <el-form-item label="澶囨敞">
+ <el-input v-model="form.remarks" placeholder="璇烽�夋嫨"></el-input>
+ </el-form-item >
+ </el-form>
+ <div slot="footer" class="foot">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" :loading="loading" @click="submitForm">纭� 瀹�</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {deleteCNASFile} from "@/api/cnas/personal/personalList";
+import {selectUserCondition} from "@/api/business/inspectionTask";
+import {addOrUpdatePersonPostAuthorizationRecord} from "@/api/cnas/personal/personPostAuthorizationRecord";
+
+export default {
+ data() {
+ return {
+ isEdit: false,
+ dialogVisible: false,
+ form: {
+ id: undefined,
+ certificateNumber: undefined,
+ userId: undefined,
+ post: undefined,
+ operationType: undefined,
+ fileList: [],
+ fileName: undefined,
+ systemFileName: undefined,
+ remarks: undefined,
+ num2:undefined,
+ num1:undefined
+ },
+ rules: {
+ certificateNumber: [{ required: true, message: '璇疯緭鍏ヨ瘉涔︾紪鍙�', trigger: 'blur' }],
+ userId: [{ required: true, message: '璇烽�夋嫨琚换鑱屼汉鍛�', trigger: 'change' }],
+ post: [{ required: true, message: '浠昏亴宀椾綅', trigger: 'blur' }],
+ operationType: [{ required: true, message: '鎿嶄綔绫诲瀷', trigger: 'blur' }],
+ },
+ loading: false,
+ userList: []
+ }
+ },
+ computed: {
+ action() {
+ return this.javaApi + '/personBasicInfo/saveCNASFile'
+ }
+ },
+ methods: {
+ onSuccess(response, file, fileList) {
+ this.$set(this.form, "systemFileName", response.data)
+ },
+ deleteFile(fileName) {
+ deleteCNASFile({fileName: fileName}).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ this.$set(this.form, "systemFileName", null)
+ })
+ },
+ async openDialog(row, type) {
+ await this.getUserList()
+ this.dialogVisible = true
+ if(type) {
+ this.isEdit = true
+ this.form.id = row.id
+ this.form.certificateNumber = row.certificateNumber
+ this.form.userId = Number(row.userId)
+ this.form.post = row.post
+ this.form.operationType = row.operationType
+ this.form.systemFileName = row.systemFileName
+ this.form.remarks = row.remarks
+ this.form.num1 = row.num1
+ this.form.num2 = row.num2
+ } else {
+ this.resetForm('ruleForm')
+ }
+ },
+ closeDialog() {
+ this.resetForm('ruleForm')
+ this.dialogVisible = false
+ },
+ /**
+ * @desc 鑾峰彇鐢ㄦ埛淇℃伅
+ */
+ async getUserList() {
+ selectUserCondition().then((res) => {
+ this.userList = res.data;
+ })
+ },
+ /**
+ * @desc 鎻愪氦琛ㄥ崟
+ */
+ submitForm() {
+ this.$refs.ruleForm.validate((valid) => {
+ if(valid) {
+ const params = {
+ id: this.form.id,
+ certificateNumber: this.form.certificateNumber,
+ userId: this.form.userId,
+ post: this.form.post,
+ operationType: this.form.operationType,
+ systemFileName: this.form.systemFileName,
+ remarks: this.form.remarks,
+ num1: this.form.num1,
+ num2: this.form.num2
+ }
+ this.loading = true
+ addOrUpdatePersonPostAuthorizationRecord(params).then(res => {
+ this.loading = false
+ this.closeDialog()
+ this.$emit('refresh')
+ }).catch(err => {
+ this.loading = false
+ })
+ }
+ })
+ },
+ /**
+ * @desc 涓婁紶鏂囦欢
+ */
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ this.form.fileList = [file]
+ this.form.fileName = file.name
+ return true;
+ }
+ },
+ }
+}
+</script>
+<style scoped>
+.foot {
+ width: 100%;
+}
+.add >>> .el-dialog__footer {
+ padding-right: 20px;
+}
+</style>
diff --git a/src/views/CNAS/personnel/personnelInfo/index.vue b/src/views/CNAS/personnel/personnelInfo/index.vue
index 5cbb11a..0fa410d 100644
--- a/src/views/CNAS/personnel/personnelInfo/index.vue
+++ b/src/views/CNAS/personnel/personnelInfo/index.vue
@@ -75,9 +75,9 @@
:departId="departId"
:isDepartment="isDepartment"></training-record>
</el-tab-pane>
-<!-- <el-tab-pane label="浠昏亴鎺堟潈璁板綍" name="浠昏亴鎺堟潈璁板綍">-->
-<!-- <Mandate v-if="activeName === '浠昏亴鎺堟潈璁板綍'" ref="manDateRef" :departId="departId" :isDepartment="isDepartment"></Mandate>-->
-<!-- </el-tab-pane>-->
+ <el-tab-pane label="浠昏亴鎺堟潈璁板綍" name="浠昏亴鎺堟潈璁板綍">
+ <Mandate v-if="activeName === '浠昏亴鎺堟潈璁板綍'" ref="manDateRef" :departId="departId" :isDepartment="isDepartment"></Mandate>
+ </el-tab-pane>
<!-- <el-tab-pane label="浜哄憳鑳藉姏" name="浜哄憳鑳藉姏">-->
<!-- <personnel-capacity v-if="activeName === '浜哄憳鑳藉姏'" ref="personnelCapacity"-->
<!-- :departId="departId"-->
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/mandate.vue b/src/views/CNAS/personnel/personnelInfo/tabs/mandate.vue
index 72b75ba..691970d 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/mandate.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/mandate.vue
@@ -1,47 +1,31 @@
<template>
- <div class="flex_column">
-<!-- <TableCard :showForm="isDepartment" title="浠昏亴鎺堟潈璁板綍">-->
-<!-- <template v-slot:form>-->
-<!-- <div v-if="isDepartment" class="w100 items_center justify_between">-->
-<!-- <div></div>-->
-<!-- <div>-->
-<!-- <el-button size="small" type="primary" @click="openDialog">鏂板</el-button>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </template>-->
-<!-- <template v-slot:table>-->
-<!-- <ZTTable-->
-<!-- :column="columnData"-->
-<!-- :height="'calc(100vh - 21em)'"-->
-<!-- :table-data="tableData"-->
-<!-- :table-loading="loading"-->
-<!-- style="margin-top: 18px; padding: 0 15px;"-->
-<!-- ></ZTTable>-->
-<!-- <el-divider></el-divider>-->
-<!-- <div class="pagination">-->
-<!-- <div></div>-->
-<!-- <el-pagination-->
-<!-- :page-size="pagination.pageSize"-->
-<!-- :page-sizes="[10, 20, 30, 40]"-->
-<!-- :total="pagination.total"-->
-<!-- layout="total, sizes, prev, pager, next, jumper"-->
-<!-- @current-change="currentChange"-->
-<!-- @size-change="sizeChange"-->
-<!-- >-->
-<!-- </el-pagination>-->
-<!-- </div>-->
-<!-- </template>-->
-<!-- </TableCard>-->
- <Add ref="mandateModal" @refresh="getTableData"></Add>
+ <div class="flex_column">
+ <div>
+ <div v-if="isDepartment" style="display: flex;justify-content: space-between;margin-bottom: 10px">
+ <el-button size="small" type="primary" @click="getTableData">鍒锋柊</el-button>
+ <el-button size="small" type="primary" icon="el-icon-plus" @click="openDialog">鏂板</el-button>
+ </div>
+ <lims-table :tableData="tableData" :column="columnData"
+ @pagination="page" :height="'calc(100vh - 18em)'"
+ :page="pagination" :tableLoading="loading"></lims-table>
</div>
+ <Add ref="mandateModal" @refresh="getTableData"></Add>
+ </div>
</template>
<script>
-// import Add from "./Add.vue"
+import Add from "../components/mandateAdd.vue"
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+ deletePersonPostAuthorizationRecord, exportPersonPostAuthorizationRecord,
+ PersonPostAuthorizationRecordPage
+} from "@/api/cnas/personal/personPostAuthorizationRecord";
+import {delCustomById} from "@/api/system/customer";
export default {
- components: {
- // Add
- },
+ components: {
+ limsTable,
+ Add
+ },
props: {
departId: {
type: Number,
@@ -54,223 +38,141 @@
default: false
}
},
- data() {
- return {
- // departId: 0,
- columnData: [
- {
- label: '搴忓彿',
- prop: 'id'
- }, {
- label: '璇佷功缂栧彿',
- prop: 'certificateNumber'
- }, {
- label: '琚换鑱屼汉鍛�',
- prop: 'userName'
- }, {
- label: '浠昏亴宀椾綅',
- prop: 'post'
- }, {
- label: '鐞嗚鑰冭瘯鎴愮哗',
- prop: 'num1'
- },{
- label: '鎿嶄綔鎶�鑳借�冭瘯鎴愮哗',
- prop: 'num2'
- },{
- label: '鎿嶄綔鏃堕棿',
- prop: 'updateTime'
- }, {
- label: '澶囨敞',
- prop: 'remarks',
- width: 300
- }, {
- label: '鎿嶄綔',
- dataType: 'action',
- width: 160,
- fixed: 'right',
- operation: [
- {
- name: '缂栬緫',
- type: 'text',
- clickFun: (row) => {
- this.openDialog(row, true)
- }
- }, {
- name: '涓嬭浇',
- type: 'text',
- clickFun: (row) => {
- this.handleDown(row)
- }
- }, {
- name: '鍒犻櫎',
- type: 'text',
- color: '#f56c6c',
- clickFun: (row) => {
- this.deleteNotify(row.id)
- }
- }
- ]
- },
- ],
- tableData: [],
- pagination: {
- current: 1,
- pageSize: 20,
- total: 0
- },
- loading: false
- }
- },
- mounted() {
- this.getTableData()
- console.log(this.departId)
- },
- methods: {
- openDialog(row, type=false) {
- this.$refs.mandateModal.openDialog(row, type)
- },
- /**
- * @desc 鏌ヨ琛ㄦ牸鏁版嵁
- */
- async getTableData() {
- this.loading = true
- const params = this.isDepartment ? {
- departLimsId: this.departId,
- current: this.pagination.current,
- size: this.pagination.pageSize
- } : {
- userId: this.departId,
- current: this.pagination.current,
- size: this.pagination.pageSize
- }
- const { code, data } = await this.$axios({
- method: 'get',
- url: getPersonPostAuthorizationRecordPage,
- params: params
- })
- if(code == 200) {
- this.pagination.total = data.total
- this.tableData = data.records
- this.loading = false
- }
- },
- /**
- * @desc 褰撳墠椤垫敼鍙�
- */
- currentChange(current) {
- this.pagination.current = current
- this.getTableData()
- },
- /**
- * @desc 姣忛〉涓暟鏀瑰彉
- */
- sizeChange(pageSize) {
- this.pagination.pageSize = pageSize
- this.getTableData()
- },
- /**
- * @desc 鍒犻櫎浠昏亴璁板綍
- */
- deleteNotify(id) {
- this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- this.delMandate(id)
- })
- },
- /**
- * @desc api鍒犻櫎
- */
- async delMandate(id) {
- const formData = new FormData()
- formData.append('id', id)
- const { code, data } = await this.$axios({
- method: 'delete',
- url: deletePersonPostAuthorizationRecord,
- data: formData,
- noQs: true
- })
- if(code == 200) {
- this.$message({ message: '鍒犻櫎鎴愬姛', type: 'success' })
- this.getTableData()
- } else {
- this.$message({ message: '鍒犻櫎澶辫触', type: 'error' })
- }
- },
- /**
- * @desc 鑾峰彇璁惧id
- */
- getDepart(id) {
- this.departId = id
- this.getTableData()
- },
- handleDown(row){
- this.$axios.post(this.$api.personPostAuthorizationRecord.exportPersonPostAuthorizationRecord,{id:row.id},{responseType: "blob"}).then(res => {
- if(res.code == 201){
- this.$message.error(res.message)
- return
- }
- const blob = new Blob([res],{ type: 'application/octet-stream' });
- //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
- let reader = new FileReader();
- reader.readAsText(blob, 'utf-8');
- reader.onload = () => {
- try {
- let result = JSON.parse(reader.result);
- if (result.message) {
- this.$message.error(result.message);
- } else {
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.href = url;
- link.download = '浠昏亴鎺堟潈-'+row.certificateNumber+'-'+row.post + '.docx';
- link.click();
- this.$message.success('瀵煎嚭鎴愬姛')
- }
- } catch (err) {
- console.log(err);
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.href = url;
- link.download = '浠昏亴鎺堟潈-'+row.certificateNumber+'-'+row.post + '.docx';
- link.click();
- this.$message.success('瀵煎嚭鎴愬姛')
+ data() {
+ return {
+ columnData: [
+ {
+ label: '搴忓彿',
+ prop: 'id'
+ }, {
+ label: '璇佷功缂栧彿',
+ prop: 'certificateNumber'
+ }, {
+ label: '琚换鑱屼汉鍛�',
+ prop: 'userName'
+ }, {
+ label: '浠昏亴宀椾綅',
+ prop: 'post'
+ }, {
+ label: '鐞嗚鑰冭瘯鎴愮哗',
+ prop: 'num1',
+ width: 120
+ },{
+ label: '鎿嶄綔鎶�鑳借�冭瘯鎴愮哗',
+ prop: 'num2',
+ width: 150
+ },{
+ label: '鎿嶄綔鏃堕棿',
+ prop: 'updateTime'
+ }, {
+ label: '澶囨敞',
+ prop: 'remarks',
+ width: 300
+ }, {
+ label: '鎿嶄綔',
+ dataType: 'action',
+ width: 160,
+ fixed: 'right',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openDialog(row, true)
+ }
+ }, {
+ name: '涓嬭浇',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ }, {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.deleteNotify(row.id)
}
}
- })
- }
+ ]
+ },
+ ],
+ tableData: [],
+ pagination: {
+ current: 1,
+ size: 20,
+ total: 0
+ },
+ loading: false
+ }
+ },
+ mounted() {
+ this.getTableData()
+ },
+ methods: {
+ openDialog(row, type=false) {
+ this.$refs.mandateModal.openDialog(row, type)
},
-// watch: {
-// departId: {
-// handler(newId, oldId) {
-// if (newId) {
-// this.getTableData();
-// }
-// }
-// }
-// }
+ /**
+ * @desc 鏌ヨ琛ㄦ牸鏁版嵁
+ */
+ async getTableData() {
+ const params = this.isDepartment ? {
+ departLimsId: this.departId,
+ current: this.pagination.current,
+ size: this.pagination.pageSize
+ } : {
+ userId: this.departId,
+ current: this.pagination.current,
+ size: this.pagination.pageSize
+ }
+ this.loading = true
+ PersonPostAuthorizationRecordPage(params).then(res => {
+ this.loading = false
+ this.tableData = res.data.records
+ this.pagination.total = res.data.total
+ }).catch(err => {
+ this.loading = false
+ })
+ },
+ page (page) {
+ this.pagination.size = page.limit
+ this.getTableData()
+ },
+ /**
+ * @desc 鍒犻櫎浠昏亴璁板綍
+ */
+ deleteNotify(id) {
+ this.$confirm('鏄惁鍒犻櫎褰撳墠鏁版嵁?', "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }).then(() => {
+ deletePersonPostAuthorizationRecord({id: id}).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getTableData()
+ }).catch(e => {
+ this.$message.error('鍒犻櫎澶辫触')
+ })
+ }).catch(() => {})
+ },
+ handleDown(row){
+ exportPersonPostAuthorizationRecord({id:row.id}).then(res => {
+ const blob = new Blob([res],{ type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '浠昏亴鎺堟潈-'+row.certificateNumber+'-'+row.post + '.docx')
+ })
+ }
+ },
+ watch: {
+ departId: {
+ handler(newId, oldId) {
+ if (newId) {
+ this.getTableData();
+ }
+ }
+ }
+ }
}
</script>
<style scoped>
-.flex_column {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
-}
-.w100 {
- width: 100%;
-}
-.pagination {
- display: flex;
- justify-content: space-between
-}
-.items_center {
- display: flex;
- align-items: center;
-}
-.justify_between {
- justify-content: space-between
-}
</style>
--
Gitblit v1.9.3